glMultiDrawElements停止我的代码

时间:2012-01-11 17:01:37

标签: cocoa opengl

我正在尝试使用“红皮书”来学习OpenGL,而我现在正在测试glMultiDrawElements。我已经得到了我的代码来使用glDrawElements和其他“更简单”的方法,但它停止在这里工作,现在我完全陷入困境。我的代码应该绘制一个多维数据集,并且acctuall绘图代码发布在:

GLfloat verticies[] = {-0.5, -0.5, -0.5, 0.5, -0.5, -0.5, 0.5, 0.5, -0.5, -0.5, 0.5, -0.5, -0.5, -0.5, 0.5, 0.5, -0.5, 0.5, 0.5, 0.5, 0.5, -0.5, 0.5, 0.5};
glVertexPointer(3, GL_FLOAT, 0, verticies);
GLubyte front[] = {4, 5, 6, 7};
GLubyte left[] = {0, 3, 7, 4};
GLubyte right[] = {5, 1, 2, 6};
GLubyte back[] = {0, 1, 2, 3};
GLubyte bottom[] = {0, 1, 5, 4};
GLubyte topp[] = {2, 3, 7, 6};
GLvoid *faces[6] = {front, left, right, back, bottom, topp};
glMultiDrawElements(GL_QUADS, 4, GL_UNSIGNED_BYTE, faces, 6);
glFlush();

该程序是基于cocoa的,编译正常,但由于“EXC_BAD_ACCESS”而停止运行。 glMultiDrawElements(..)旁边有一个黄色警告三角形,上面写着“与指针转换不兼容的整数”,但我认为我在“faces”数组中使用了指针(至少它在“红皮书”中看起来如何) 。可以帮我吗?

1 个答案:

答案 0 :(得分:0)

glMultiDrawElements()的第二个参数是指向大小数组的指针,而不是大小的数值。这就是编译器抱怨整数到指针转换的原因(顺便说一句,这是为什么你应该启用编译器标志以便在进行Cocoa开发时将警告转换为错误的原因)。

我相信改变上面的内容来阅读

GLsizei count[] = {4, 4, 4, 4, 4, 4};
glMultiDrawElements(GL_QUADS, count, GL_UNSIGNED_BYTE, faces, 6);

应该有用,但我没有在这里测试过。