mac for explained developer apple objective-c ipad opengl-es objective-c++

objective c - for - ¿Cómo se usan glDrawElements con GL_UNSIGNED_INT para los índices?



metal swift (1)

Stock OpenGL ES no es compatible con GL_UNSIGNED_INT para índices.

Desde la página de manual de GLES glDrawElements :

GL_INVALID_ENUM se genera si el tipo no es GL_UNSIGNED_BYTE o GL_UNSIGNED_SHORT.

Esta restricción se relaja cuando GL_OES_element_index_uint es compatible.

Si no tiene soporte en la plataforma objetivo, su mejor opción es distribuir su malla en múltiples submallas con < 64K índices para cada una.

En cuanto a ipad específicamente, hasta donde yo sé, iOS no es compatible con esta extensión (consulte las extensiones compatibles), pero puede verificar la lista de extensiones en el dispositivo real si quiere asegurarse.

Intento dibujar objetos en 3D que tengan más de 65536 vértices en el iPad, pero no puedo entender lo que estoy haciendo mal. Mi modelo original que usó GL_UNSIGNED_SHORT funcionó bien, pero ahora con GL_UNSIGNED_INT, no puedo hacer que aparezca nada con el comando glDrawElements. Es como si el renderizador estuviera ignorando completamente mi línea glDrawElements. La parte de mi ciclo de representación a la que me refiero es la siguiente:

glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_NORMAL_ARRAY); glVertexPointer(3, GL_FLOAT, sizeof(assemblyObj->vertices[0])*6, &assemblyObj->vertices[0]); glNormalPointer(GL_FLOAT, sizeof(assemblyObj->vertices[0])*6, &assemblyObj->vertices[0]); for (int i = 0; i < assemblyObj->numObjects; i++) { glDrawElements(GL_TRIANGLES, assemblyObj->partList[i].faceArray.size(), GL_UNSIGNED_INT, &assemblyObj->partList[i].faceArray[0]); } glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_NORMAL_ARRAY);

vértices se define como:

vector<float> vertices;

y cada faceArray se define como:

vector<UInt32> faceArray;

¿Alguna sugerencia sobre lo que estoy haciendo mal que impide que mi geometría se dibuje?