Я прочитал Красную книгу (7-е издание), и во время тестирования glMultiDrawElements у меня ничего не появилось на экране, и в консоли отладки произошла ошибка «Нарушение доступа». Я использую MVS2010, и вот основные части кода, которые я компилирую:
// C4UB_V2F interwined format, vertex are CCW ordered
static const GLfloat vertex[] = {
// First triangle
0xff0000ff, 0.25f, 1.0f, // nevermind on that incorrect integer colors
0x00ff00ff, 0.0f, 0.0f,
0x0000ffff, 0.5f, 0.0f,
// Second one
0xff0000ff, 0.75f, 0.0f,
0x00ff00ff, 0.5f, 1.0f,
0x0000ffff, 1.0f, 1.0f
};
void init() {
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glShadeModel(GL_SMOOTH);
glInterleavedArrays(GL_C4UB_V2F, 0, vertex);
}
static const GLubyte order[] = { 0, 1, 2, 3, 4, 5 };
static GLubyte oneIndices[] = {0, 1, 2};
static GLubyte twoIndices[] = {3, 4, 5};
static GLsizei count[] = {3, 3};
static GLvoid * indices[2] = {oneIndices, twoIndices};
void render() {
glClear(GL_COLOR_BUFFER_BIT);
// This one works perfectly:
//glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_BYTE, order);
// And this one generates access violation error
// in the book there's no indices casting, but MVS2010 is too lazy to cast it itself
glMultiDrawElements(GL_TRIANGLES, count, GL_UNSIGNED_BYTE, (const GLvoid **)indices, 2);
// This command never executes 'cause of acces violation error occuring
glFlush();
}
Мне кажется, что я что-то упустил во время чтения индексов , но я не могу точно понять, что именно. Есть идеи?