我一直在研究这件事。
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指针不可能获得有关它指向多少已分配内存的任何信息。
不幸的是,应用程序没有崩溃。