2017-08-02 5 views
0

私はOpenGL with NDKの例を書いています。Cで* .vert&* .fragをcharに変換するにはどうすればよいですか?

main.cで私のシェーダコード:

const char vShaderStr[] = 
     "#version 300 es        \n" 
     "uniform mat4 u_mvpMatrix;     \n" 
     "layout(location = 0) in vec4 a_position; \n" 
     "layout(location = 1) in vec4 a_color;  \n" 
     "out vec4 v_color;       \n" 
     "void main()         \n" 
     "{           \n" 
     " v_color = a_color;      \n" 
     " gl_Position = u_mvpMatrix * a_position; \n" 
     "}           \n"; 

const char fShaderStr[] = 
     "#version 300 es        \n" 
     "precision mediump float;      \n" 
     "in vec4 v_color;        \n" 
     "layout(location = 0) out vec4 outColor;  \n" 
     "void main()         \n" 
     "{            \n" 
     " outColor = v_color;       \n" 
     "}            \n"; 

userData->programObject = esLoadProgram (vShaderStr, fShaderStr); 

私は(私もmain.cの中にシェーダを作成する方法を変更)に変換するために、このsnippetを試みたが、失敗していた:

を私はEXTERNを使いたいですシェーダファイルをmain.cに読み込んでください。

どうすれば変換できますか?

+0

最小限の再現可能なコード例を質問自体に投稿してください。 Androidを使用している場合、OpenGLではなくOpenGL-esを使用していますので、それに応じて質問にタグを付ける必要があります。 – BDL

+0

標準ライブラリを使用してファイルからデータを読み取り、文字列に格納するだけです。それはOpenGLとは関係がありません.C標準ライブラリにどの程度馴染んでいるのでしょうか。 – Downvoter

答えて

0

は、あなたはそれをあなたが他のファイルをロードしていたものと同じ方法で行いたい: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); 
    /*...*/ 
} 

私だけのプログラムをので、私は、このコードにエラー処理を追加しようとするつもりはありません。しかし、これはあなたが始めるのに十分であるはずです。

関連する問題