我有另一个OpenGL ES驱动程序错误。这次我正在尝试编译以下几行:
precision mediump float;
varying highp vec2 textureCoordinate;
void main() {
highp vec4 color = texture2D(input0, textureCoordinate);
vec3 color3 = color.rgb;
vec2 tc = (2.0 * textureCoordinate) - 1.0;
float d = dot(tc, tc);
vec2 lookup = vec2(d, color3.r);
..
..
}
但我正在接受这条线:
GLES20.glLinkProgram(program);
本机崩溃:“致命信号11(SIGDEV)在0x00000060(代码= 1),线程1231” 我猜这是因为LG nexus 4使用了GPU Adreno,并且在使用太多宏时,它也会因为错误代码14而崩溃 - 使用太多宏。
答案 0 :(得分:2)
编译着色器后,使用glGetShaderiv
获取着色器编译的状态。喜欢:
GLint compiled;
glGetShaderiv(index, GL_COMPILE_STATUS, &compiled); //index is the shader value
然后,如果编译返回为零,则首先获取信息长度,然后输出错误消息,如下所示:
GLint infoLen = 0;
glGetShaderiv(index, GL_INFO_LOG_LENGTH, &infoLen);
if(infoLen > 1)
{
char* infoLog = new char(infoLen);
glGetShaderInfoLog(index, infoLen, NULL, infoLog);
}
最后检查infoLog
以查看着色器编译返回的错误消息。原始帖子中的分段错误消息对解决问题没有任何帮助。
答案 1 :(得分:1)
从我的片段着色器中的短代码摘录中可以看出,您没有指定float
精度。在ES 2.0中,您必须明确指定float
精度。
precision mediump float;
请阅读此in specs,p。 4.5.3默认精度限定符。
着色器可以在某些OpenGL ES驱动程序上没有指定float
精度的情况下工作,并且可能无法在其他OpenGL ES驱动程序上编译。
但是,需要完整的源代码才能找出问题的确切原因。
我建议你开始评论着色器代码的一部分,直到它开始正确编译。通过这种方式,您可以缩小有问题的界限(我相信甚至比等待SO的答案更快)。