我在glDrawElements调用时遇到了EXC_BAD_ACCESS错误。我认为传递给Shape构造函数的数组有问题。这可能是什么问题。
的main.cpp
static const GLfloat cube_vertices[] = {
-1.0, -1.0, 1.0,
1.0, -1.0, 1.0,
-1.0, 1.0, 1.0,
1.0, 1.0, 1.0,
-1.0, -1.0, -1.0,
1.0, -1.0, -1.0,
-1.0, 1.0, -1.0,
1.0, 1.0, -1.0,
};
static const GLushort indices[] = {
0, 1, 2, 3, 7, 1, 5, 4, 7, 6, 2, 4, 0, 1
};
cube = new Shape(shader, cube_vertices, 3 * 8, indices, 14);
Shape.h
const GLushort *indices;
Shape.cpp
Shape::Shape(Shader* cshader, const GLfloat *vertices, int size, const GLushort *cindices, int indSize) : {
indices = cindices;
}
渲染方法
glDrawElements(GL_TRIANGLES, 14, GL_UNSIGNED_SHORT, indices);
正如我在这里所说的那样是问题所在。我究竟做错了什么?感谢。
答案 0 :(得分:2)
如果传递GL_TRIANGLES,则索引缓冲区长度应为3的倍数(即每3个索引值形成一个三角形)。
除此之外,您发布的内容看起来还不错 - 因此我们需要一个更完整的测试用例才能提供帮助。