Opengl es 在OpenGLES2.0应用程序中使用脱机编译的着色器

Opengl es 在OpenGLES2.0应用程序中使用脱机编译的着色器,opengl-es,shader,gpu,mali,Opengl Es,Shader,Gpu,Mali,我使用的是马里400 GPU。 我想使用马里离线着色器编译器来编译顶点着色器和片段着色器 我已经使用ARM马里离线编译器编译了我的顶点着色器和片段着色器,步骤如下 malisc.exe--vertex-c Mali-400-r r1p1-d Mali-400_r5p0-01rel0 vertex_shader.glsl-o vshader.out malisc.exe--fragment-c Mali-400-r r1p1-d Mali-400_r5p0-01rel0 Fragm_shader.

我使用的是马里400 GPU。 我想使用马里离线着色器编译器来编译顶点着色器和片段着色器

我已经使用ARM马里离线编译器编译了我的顶点着色器和片段着色器,步骤如下

malisc.exe--vertex-c Mali-400-r r1p1-d Mali-400_r5p0-01rel0 vertex_shader.glsl-o vshader.out malisc.exe--fragment-c Mali-400-r r1p1-d Mali-400_r5p0-01rel0 Fragm_shader.glsl-o fragment.out

我使用下面的代码, 我的应用程序已成功编译,但应用程序未在我的目标上运行。 将着色器二进制文件内容复制到静态数组中,并使用glShaderBinary对其进行签名

我的代码片段:

char VertexShaderArray[] = {<initialized using shader binary data>};
char fragShaderArray[] = {<initialized using shader binary data>};

GLuint v, f, program;
v = glCreateShader(GL_VERTEX_SHADER);
f = glCreateShader(GL_FRAGMENT_SHADER);

glShaderBinary(1, &v, MALI_PROGRAM_BINARY_ARM, (void*)&VertexShaderArray, sizeof(char)*sizeof(VertexShaderArray));
glShaderBinary(1, &f, MALI_PROGRAM_BINARY_ARM, (void*)&fragShaderArray, sizeof(char)*sizeof(fragShaderArray));

program = glCreateProgram();
glAttachShader(program, v);
glAttachShader(program, f);

glLinkProgram(program);
glUseProgram(program);
charVertexShaderArray[]={};
char fragShaderArray[]={};
GLuint v,f,program;
v=glCreateShader(GLU顶点着色器);
f=glCreateShader(GL_片段_着色器);
glShaderBinary(1,&v,MALI_程序_二进制_ARM,(void*)和VertexShaderArray,sizeof(char)*sizeof(VertexShaderArray));
glShaderBinary(1,&f,MALI_程序_二进制_ARM,(void*)和fragShaderArray,sizeof(char)*sizeof(fragShaderArray));
program=glCreateProgram();
格拉塔沙德(方案五);
格拉塔沙德(项目,f);
glLinkProgram(program);
glUseProgram(程序);
运行此应用程序时,我收到一条有关目标的消息:

信息:L0101链接之前必须编译所有附加的着色器


是否有人可以发布在OpenGLES2.0应用程序中使用离线编译着色器的示例代码。

您可以获取着色器信息日志吗?这可能会透露一些情况。否则,ARM似乎只会说“只有在着色器的统一或变化变量不兼容时链接才会失败”,这似乎并不直接适用。你能抓取着色器信息日志吗?这可能会透露一些情况。否则,ARM似乎只是说“只有在着色器的统一或变化变量不兼容时链接才会失败”,这似乎并不直接适用。