【问题标题】:glDrawElements not working on iPhone but glDrawArrays worksglDrawElements 在 iPhone 上不工作,但 glDrawArrays 工作
【发布时间】:2011-02-11 21:58:30
【问题描述】:

我尝试将我的 OpenGL 应用程序转换为 OpenGL ES。我是这样在 Mac 上绘制元素的:

glUseProgram(m_program);

// Update uniform value.
glUniform4f(uniforms[UNIFORM_COLOR], (GLfloat)color[0], (GLfloat)color[1], (GLfloat)color[2], (GLfloat)color[3]);


// Update attribute values.
glVertexAttribPointer(ATTRIB_VERTEX, 3, GL_FLOAT, 0, 0, data);
glEnableVertexAttribArray(ATTRIB_VERTEX);

// Validate program before drawing. This is a good check, but only really necessary in a debug build.
// DEBUG macro must be defined in your debug configurations if that's not already the case.

glDrawElements(GL_TRIANGLE_STRIP, count, GL_UNSIGNED_INT, indices);

一切正常,但是当我尝试在 iPhone 4(iOS 4.2 和 XCode 3.2.5)上以这种方式绘制时,我什么也看不到。奇怪的是所有的计算都完成了,当我尝试用 glDrawArrays 绘制它时,屏幕上会显示一些东西(但顶点没有按正确的顺序呈现):

glUseProgram(m_program);

// Update uniform value.
glUniform4f(uniforms[UNIFORM_COLOR], (GLfloat)color[0], (GLfloat)color[1], (GLfloat)color[2], (GLfloat)color[3]);


// Update attribute values.
glVertexAttribPointer(ATTRIB_VERTEX, 3, GL_FLOAT, 0, 0, data);
glEnableVertexAttribArray(ATTRIB_VERTEX);

glDrawArrays(GL_TRIANGLE_STRIP, 0, count);

我错过了什么吗?

【问题讨论】:

    标签: iphone opengl-es vertex-array


    【解决方案1】:

    GL_UNSIGNED_INT 作为 glDrawElements 索引数组的类型在 iPhone 上是不允许的。我必须使用 GL_UNSIGNED_BYTE 或 GL_UNSIGNED_SHORT

    【讨论】:

      【解决方案2】:

      在 Apple Developers 论坛上,我暗示 GL_UNSGNED_INT 可以在 iPhone 上使用 OES_element_index_uint ectension

      【讨论】:

      • 不完全是。 OES_element_index_uint 扩展仅在实现实际支持时恢复对 GL_UNSIGNED_INT 的支持,即您必须首先检查 GL_EXTENSIONS 中是否存在字符串。您会发现 iPhone 上实际上并不存在该扩展程序。
      猜你喜欢
      • 1970-01-01
      • 2012-01-22
      • 2016-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多