OpenGL ES 2.0在iPhone模拟器中显示正常,但在iPhone上不显示
问题描述:
我将iPhone应用程序从OpenGL ES 1.1转换为ES 2.0。应用程序将绘制到EAGLView,因为它是在Apple提供的标准OpenGL ES应用程序模板中定义的。OpenGL ES 2.0在iPhone模拟器中显示正常,但在iPhone上不显示
ES 1.1代码在模拟器和iPhone上都正常工作。新的ES 2.0代码在模拟器上工作正常,但在iPhone 3GS上,我得到的构件(例如其他应用程序的缩放视图片段),据我所知,表明我的程序对帧缓冲区感到困惑。我觉得这很奇怪,因为与ES 1.1相比,我没有对帧缓冲区处理逻辑进行任何更改。
包括我,做绘图代码的一部分下方,虽然我没有看到这一点,因为它在模拟器上正常工作:
GLfloat data[600000];
// initialize data
glClearColor(0.f, 0.f, 0.f, 0.f);
glClear(GL_COLOR_BUFFER_BIT);
glUseProgram(program);
glUniformMatrix4fv(uniforms[UNIFORM_PROJECTION_MATRIX], 1, GL_FALSE, projection_matrix);
glUniformMatrix4fv(uniforms[UNIFORM_MODELVIEW_MATRIX], 1, GL_FALSE, modelview_matrix);
glVertexAttribPointer(ATTRIBUTE_POSITION, 3, GL_FLOAT, GL_FALSE, 0, data);
glEnableVertexAttribArray(ATTRIBUTE_POSITION);
glDrawArrays(GL_POINTS, 0, 200000);
glFlush();
答
它看起来像有在OpenGL的一个bug ES 2实施。暗示是,当我将glDrawArrays(GL_POINTS, 0, 200000);
更改为glDrawArrays(GL_LINES, 0, 200000);
时,设备上没有显示问题。使用GL_POINTS
的解决方案(找到here)将在顶点着色器中设置gl_PointSize = 1.0;
。
编辑:它可能不是一个错误,请参阅here:
gl_PointSize的值(或gl_out []阵列的gl_PointSize构件,在该曲面细分控制着色器的情况下)是未定义如果相应的着色器可执行文件未写入gl_PointSize,则在顶点,细分控制和镶嵌评估着色阶段之后。
哇,你是救命恩人!如果可以的话,我会给你两次投票:D – eodabash 2012-08-01 17:57:23