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

cef*_*tat 2 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();
Run Code Online (Sandbox Code Playgroud)

cef*_*tat 6

看起来OpenGL ES 2实现中存在一个错误.提示是,当我改变glDrawArrays(GL_POINTS, 0, 200000);glDrawArrays(GL_LINES, 0, 200000);在该设备上没有显示的问题.使用的解决方案(在此处找到)GL_POINTSgl_PointSize = 1.0;在顶点着色器中设置.

编辑:这可能不是一个错误,请看这里:

如果相应的着色器可执行文件未写入gl_PointSize,则在顶点,曲面细分控件和曲面细分评估着色阶段之后,未定义 gl_PointSize(或曲面细分控件着色器的gl_out []数组的gl_PointSize成员的值).