我有一个非常奇怪的问题,我的问题在android 2.3.3 - 我尝试编译基本片段着色器,但编译器给出了一个0作为compileStatus。Android 2.3 - 不能编译openGL 2.0 ES片段着色器
这里是我的着色器编译的代码片段:
if (fragmentShaderHandle != 0) {
// Pass in the shader source.
GLES20.glShaderSource(fragmentShaderHandle, fragmentShader);
// Compile the shader.
GLES20.glCompileShader(fragmentShaderHandle);
// Get the compilation status.
final int[] compileStatus = new int[1];
GLES20.glGetShaderiv(fragmentShaderHandle, GLES20.GL_COMPILE_STATUS, compileStatus, 0);
// If the compilation failed, delete the shader.
if (compileStatus[0] == 0) {
ErrorLog = GLES20.glGetShaderInfoLog(fragmentShaderHandle);
GLES20.glDeleteShader(fragmentShaderHandle);
fragmentShaderHandle = 0;
}
}
if (fragmentShaderHandle == 0) {
throw new RuntimeException("Error creating fragment shader. Error: " + ErrorLog);
}
最奇怪的是,glGetShaderInfoLog给一个空字符串作为一个错误 - 我没有得到任何信息,其他则“错误创建片段着色器。”这是我的错误信息。如果我跳过那一行,那么由于片段着色器不存在,程序绑定会给出错误。 (最简单的着色器:void main {gl_FragmentColor = vec4(1.0f,1.0f,1.0f,1.0f)}}这给出了相同的着色器(如果有错误),但是即使是最简单的着色器也不运行错误没有任何错误信息)。
但是:这段代码会在android 4.0上运行(我的朋友尝试过它,并且它在模拟器中工作)。我问了一些与android 2.3的其他朋友 - 但每个人都没有错误消息得到相同的错误。
电话支持OpenGL 2.0 ES - 如果我不加载着色器,只需清除屏幕,它工作得很好。
任何人有什么想法,我应该从哪里开始寻找?没有错误信息,很难找到我弄乱的地方:|
谢谢!
编辑:
1)它成功地编译vertexShader,而且,如果我不加载任何着色器,我可以明确使用GLES20.glClear(...)命令在屏幕上,它成功地运行在任何测试设备上。
2)I增加了一个检查,以查看与openGL的2.0兼容的装置 - 每个被测试设备,所述一切正常:
boolean supportsEs2 = configurationInfo.reqGlEsVersion >= 0x20000;
3)I尝试了INT glError = GLES20.glGetError() ; - 它返回一个零,就像没有错误(因为我没有得到任何错误信息) - 我的着色器仍然无法编译:(
你怎么知道你的设备支持OpenGL ES 2.0作为在的Android 2.3是可选的。每次调用后检查fragmentShaderHandler的值。 – 2014-09-25 21:30:12
哎呀没有看到外部fragementShaderHandler有条件。 – 2014-09-25 21:42:26
你试过调用'glGetError()'吗?我想知道是否有什么东西可以搞砸,甚至不会尝试编译着色器。例如,由于某种原因,“fragmentShaderHandle”无效。 – 2014-09-26 03:08:23