glDrawElements不适用于iPhone,但glDrawArrays可以工作

时间:2011-02-11 21:58:31

标签: iphone opengl-es vertex-array

我试图将我的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);

我错过了什么吗?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

在Apple Developers论坛上,我已经提示可以使用 OES_element_index_uint ectension

在iPhone上使用GL_UNSGNED_INT