Ваш код не имеет смысла.
{
for (surfnum=0;surfnum<surftotal;surfnum++){
for (i=0;i<triNum[surfnum];i++){
GLfloat *Vertices[] = { triArray[surfnum][i].normpt1, triArray[surfnum][i].normpt2,triArray[surfnum][i].normpt3};
glGenBuffers(1, &ui32Vbo);
glBindBuffer(GL_ARRAY_BUFFER, ui32Vbo);
unsigned int uiSize = 3 * (sizeof(GLfloat) * 1);
glBufferData(GL_ARRAY_BUFFER, uiSize,*Vertices, GL_STATIC_DRAW);
}
}
}
Вы действительно создаете буферный объект для каждого треугольника?Ну, вы даже этого не делаете, потому что у вас есть только буферный объект для каждого набора из 3-х чисел, который даже не является полным треугольником .Я могу только предположить, что это позиция вершины.Вы продолжаете вызывать glGenBuffers
в середине этого цикла, чтобы он должным образом генерировал другой буферный объект.Создание слишком большого количества объектов буфера может быть причиной того, что вы используете программные резервы.
Кроме того, normpt1
не содержит нормаль, а не позицию?
И еще:
for(int i = 0; i < 80000; ++i)
{
glClear(GL_COLOR_BUFFER_BIT);
int i32Location = glGetUniformLocation(uiProgramObject, "projmatrix");
glUniformMatrix4fv( i32Location, 1, GL_FALSE, pfIdentity);
glEnableVertexAttribArray(VERTEX_ARRAY);
glVertexAttribPointer(VERTEX_ARRAY, 3, GL_FLOAT, GL_FALSE, 0, 0);
glDrawArrays(GL_TRIANGLES, 0,i);
eglSwapBuffers(eglDisplay, eglSurface);
}
Во-первых, вы не сделали glBindBuffer вашего буферного объекта.Да, я знаю, что до сих пор это связано, но всегда хорошо быть откровенным об этих вещах.
Самое главное, что это такое: glDrawArrays(GL_TRIANGLES, 0,i);
?Разве i
не является индексом массива?Третий параметр должен быть числом вершин для рисования.И GL_TRIANGLES потерпит неудачу, если только это значение не делится на 3.
Но это не имеет значения, так как в объекте буфера, который вы создали в последний раз, достаточно места только для 1 вершины.Так что невозможно отрисовать.