OpenGL代码编译报错:gl_FragColor未声明与类型转换问题求助
排查OpenGL着色器编译报错问题
报错信息
- ERROR: 0:4: 'gl_FragColor' : undeclared identifier
- ERROR: 0:4: 'assign' : cannot convert from 'uniform 4-component vector of float' to 'float'
问题根源
主程序调用buildProgram方法时,错误地将片段着色器代码重复传入了顶点着色器参数位置:
原代码中两个参数都读取了R.raw.triangle_fragment_shader,导致OpenGL把片段着色器代码当作顶点着色器去编译。
- 顶点着色器的GLSL环境中不存在
gl_FragColor这个内置变量(该变量是片段着色器专属输出变量),因此触发第一个"未声明标识符"错误。 - 编译器会将未声明的
gl_FragColor默认视为float类型变量,而vColor是vec4类型,类型不匹配导致第二个"无法转换"错误。
解决方法
修改主程序中buildProgram的调用参数,第一个参数传入顶点着色器资源,第二个传入片段着色器资源:
mProgram = ShaderHelper.buildProgram( TextResourceReader.readTextFileFromResource( context, R.raw.triangle_vertex_shader // 替换为顶点着色器资源 ), TextResourceReader.readTextFileFromResource( context, R.raw.triangle_fragment_shader ) ) // Add program to OpenGL ES environment GLES20.glUseProgram(mProgram)
修改后,顶点着色器和片段着色器代码会被正确分配到对应的编译流程中,两个错误都会被修复。
内容的提问来源于stack exchange,提问作者Maximillian
相关产品推荐
相关产品推荐

