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,则在顶点,细分控制和镶嵌评估着色阶段之后。

+0

哇,你是救命恩人!如果可以的话,我会给你两次投票:D – eodabash 2012-08-01 17:57:23