我一直在研究这件事。

varray.c:

   static GLint vertices[] = {25, 25,
                       100, 325,
                       175, 25,
                       175, 325,
                       250, 25,
                       325, 325};
   glEnableClientState (GL_VERTEX_ARRAY);
   glVertexPointer (2, GL_INT, 0, vertices);


这有6个顶点元素。
现在如果我画

glDrawArrays (GL_TRIANGLES, 0, 6);


它正在按预期工作。

现在,如果我给类似

glDrawArrays (GL_TRIANGLES, 0, 126);


我要求glDrawArrays绘制126个元素。哪些不存在于内存中。
OpenGL如何处理这种情况?


它会进行一些数组计算,并且知道它有6个元素吗?在这种情况下,它将忽略剩余的120个?
还是会继续吸引垃圾?

最佳答案

我会说对glDrawArrays()的第二次调用会遇到未定义的行为,因为该函数将尝试读取vertices的边界之外的内容。


  它是否进行一些数组计算,并且知道它有6个元素?


它不能,因为vertices通过向下传递到glVertexPointer()会衰减到C指针。从C指针不可能获得有关它指向多少已分配内存的任何信息。

不幸的是,应用程序没有崩溃。

07-27 13:19