OpenGL ES 2.0在iPhone模拟器中显示良好,但在iPhone上不显示

时间:2011-06-16 10:26:12

标签: iphone opengl-es

我正在将iPhone应用程序从OpenGL ES 1.1转换为ES 2.0。应用程序绘制到EAGLView,因为它是由Apple提供的标准OpenGL ES应用程序模板中定义的。

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();

1 个答案:

答案 0 :(得分:6)

看起来OpenGL 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。