Это мои typdefs / global variable:
static GLuint GL15_vbo[2];
typedef struct {
fvec3 pos;
fvec3 col;
fvec2 uv;
} MyVertex;
typedef struct {
GLuint a;
GLuint b;
GLuint c;
} TriFace;
Это мой код инициализации:
glGenBuffers(2, (GLuint *)&GL15_vbo);
glBindBuffer(GL_ARRAY_BUFFER, GL15_vbo[0]);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, GL15_vbo[1]);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(faces), faces, GL_STATIC_DRAW);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
Это мой код рендеринга:
glVertexPointer(3, GL_FLOAT, sizeof(MyVertex), (const void *)(offsetof(MyVertex, pos)));
glColorPointer(3, GL_FLOAT, sizeof(MyVertex), (const void *)(offsetof(MyVertex, col)));
glTexCoordPointer(3, GL_FLOAT, sizeof(MyVertex), (const void *)(offsetof(MyVertex, uv)));
glBindBuffer(GL_ARRAY_BUFFER, GL15_vbo[0]);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, GL15_vbo[1]);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
for (int iface = 0; iface < 12; iface++) {
glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_INT, (const void *)(iface * sizeof(TriFace)));
}
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_COLOR_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
Можете ли вы сказать мне, что не так с моим кодом?Я получаю нарушение прав доступа в glDrawElements.Он хорошо работает с простыми вершинными массивами (поэтому массивы данных хорошо инициализируются).Спасибо.