Android 如何转换*.vert&;*。在C中从碎片到字符?

Android 如何转换*.vert&;*。在C中从碎片到字符?,android,c,opengl-es,android-ndk,Android,C,Opengl Es,Android Ndk,我正在用NDK编写一个OpenGL示例 main.c中的我的着色器代码: 我曾尝试进行转换(我还更改了main.c中创建着色器的方式),但失败: 我想通过在main.c中读取外部着色器文件来使用它们 如何转换它?您可以像加载任何其他文件一样进行转换: char * get_file_contents(char const* file_name) { FILE * file = fopen("vert.glsl", "r"); fseek(file, 0, SEEK_END);

我正在用NDK编写一个OpenGL示例

main.c中的我的着色器代码:

我曾尝试进行转换(我还更改了main.c中创建着色器的方式),但失败:

我想通过在main.c中读取外部着色器文件来使用它们


如何转换它?

您可以像加载任何其他文件一样进行转换:

char * get_file_contents(char const* file_name) {
    FILE * file = fopen("vert.glsl", "r");
    fseek(file, 0, SEEK_END);
    size_t size = ftell(file);
    rewind(file);
    char * str = malloc(size);
    fread(str, 1, size, file);
    fclose(file);
    return str;
}

int main() {
    /*...*/
    char const* vShaderStr = get_file_contents("vert.glsl");
    char const* fShaderStr = get_file_contents("frag.glsl");
    userData->programObject = esLoadProgram ( vShaderStr, fShaderStr );
    free(vShaderStr);
    free(fShaderStr);
    /*...*/
}

我只在C++中编程,所以我不会尝试添加错误处理到这个代码。不过,这应该足够让您开始了。

您可以像加载任何其他文件一样:

char * get_file_contents(char const* file_name) {
    FILE * file = fopen("vert.glsl", "r");
    fseek(file, 0, SEEK_END);
    size_t size = ftell(file);
    rewind(file);
    char * str = malloc(size);
    fread(str, 1, size, file);
    fclose(file);
    return str;
}

int main() {
    /*...*/
    char const* vShaderStr = get_file_contents("vert.glsl");
    char const* fShaderStr = get_file_contents("frag.glsl");
    userData->programObject = esLoadProgram ( vShaderStr, fShaderStr );
    free(vShaderStr);
    free(fShaderStr);
    /*...*/
}

我只在C++中编程,所以我不会尝试添加错误处理到这个代码。不过,这应该足够让您开始了。

请在问题本身中发布一个最小的可复制代码示例。如果您使用的是Android,那么您使用的是opengl es,而不是opengl,您应该相应地标记您的问题。只需使用标准库从文件中读取数据并将其存储在字符串中即可。这与OpenGL无关,只是关于您对C标准库的熟悉程度。请在问题中给出一个最小的可复制代码示例。如果您使用的是Android,那么您使用的是opengl es,而不是opengl,您应该相应地标记您的问题。只需使用标准库从文件中读取数据并将其存储在字符串中即可。这与OpenGL无关,只是关于您对C标准库的熟悉程度。