我正在使用 Mali-400 GPU。我想使用 Mali 离线着色器编译器来编译顶点着色器和片段着色器。
我已经使用 ARM Mali 离线编译器编译了我的顶点着色器和片段着色器,步骤如下
malisc.exe --vertex -c Mali-400 -r r1p1 -d Mali-400_r5p0-01rel0 Vertex_shader.glsl -o vsshader.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);
运行此应用程序时,我在目标上收到一条消息:
信息:L0101 必须在链接之前编译所有附加的着色器
有人可以发布在 OpenGLES2.0 应用程序中使用离线编译着色器的示例代码。