【问题标题】:OpenGL ES 2.0 displays fine in iPhone Simulator but not on iPhoneOpenGL ES 2.0 在 iPhone Simulator 中显示正常,但在 iPhone 上不显示
【发布时间】:2011-06-16 10:26:12
【问题描述】:

我正在将 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();

【问题讨论】:

    标签: iphone opengl-es


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多