glDrawElements не работает на iPhone, но glDrawArrays работает - PullRequest
2 голосов
/ 12 февраля 2011

Я попытался преобразовать свое приложение 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 ]

2 голосов
/ 12 февраля 2011

GL_UNSIGNED_INT, так как тип массива индексов glDrawElements не разрешен на iPhone. Я должен использовать GL_UNSIGNED_BYTE или GL_UNSIGNED_SHORT

0 голосов
/ 12 февраля 2011

На форуме разработчиков Apple я хочу сказать, что GL_UNSGNED_INT можно использовать на iPhone, используя OES_element_index_uint ectension

...