Основано на информации в Вопросы о glDrawRangeElements () и заданы следующие элементы:
struct MyVertex
{
GLfloat x, y, z; //Vertex
};
const GLushort pindices[] = { 0, 1, 2, 3, 5, 4 };
struct MyVertex pvertex[6];
//VERTEX 0
pvertex[0].x = 0.0;
pvertex[0].y = 0.0;
pvertex[0].z = 0.0;
//VERTEX 1
pvertex[1].x = 1.0;
pvertex[1].y = 0.0;
pvertex[1].z = 0.0;
//VERTEX 2
pvertex[2].x = 0.0;
pvertex[2].y = 1.0;
pvertex[2].z = 0.0;
//VERTEX 3
pvertex[3].x = 0.0;
pvertex[3].y = 0.0;
pvertex[3].z = 0.0;
//VERTEX 4
pvertex[4].x = 1.0;
pvertex[4].y = 0.0;
pvertex[4].z = 0.0;
//VERTEX 5
pvertex[5].x = 0.0;
pvertex[5].y = -1.0;
pvertex[5].z = 0.0;
и следующая инициализация:
glGenBuffers(1, &VertexVBOID);
glBindBuffer(GL_ARRAY_BUFFER, VertexVBOID);
glBufferData(GL_ARRAY_BUFFER, sizeof(struct MyVertex)*3, &pvertex[0].x, GL_STATIC_DRAW);
glVertexPointer(3, GL_FLOAT, sizeof(struct MyVertex), BUFFER_OFFSET(0));
glGenBuffers(1, &IndexVBOID);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, IndexVBOID);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(GLushort)*3, pindices, GL_STATIC_DRAW);
glEnableClientState(GL_VERTEX_ARRAY);
следующие звонки:
glDrawRangeElements(GL_TRIANGLES, 0, 2, 3, GL_UNSIGNED_SHORT, (const GLvoid*) pindices);
glDrawRangeElements(GL_TRIANGLES, 3, 5, 3, GL_UNSIGNED_SHORT, (const GLvoid*) pindices+3);
должен нарисовать два треугольника. Тем не менее, я получаю EXE_BAD_ACCESS. Если я использую pindices [0] в glDrawRangeElements; Я получаю треугольник, определенный первыми тремя индексами. Использование pindices [3] во втором вызове glDrawRangeElements не приводит к рисованию чего-либо, и я не получаю никаких ошибок OpenGl. Ни разу второй вызов glDrawRangeElements не рисует перевернутый треугольник, определенный тремя последними вершинами. Я чувствую, что упускаю что-то фундаментальное в отношении использования указателей здесь, но я пока не смог понять это. Мысли?