C glVertexArrays,出界。无效索引
这是我正在研究的有趣的事情 varray.c:C glVertexArrays,出界。无效索引,c,opengl,C,Opengl,这是我正在研究的有趣的事情 varray.c: static GLint vertices[] = {25, 25, 100, 325, 175, 25, 175, 325, 250, 25, 325, 325}; glEnableClientState (
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);
我已经要求GLDrawArray绘制126个元素。记忆中不存在的。
OpenGL如何处理这样的情况
- 它是否进行了一些数组计算,并且知道它有6个元素?在这种情况下,它忽略了剩余的120
- 还是会继续画垃圾
glDrawArrays()
的第二次调用遇到了未定义的行为,因为函数将尝试读取超出顶点的边界
它是否进行了一些数组计算,并且知道它有6个元素
它不能,因为顶点
通过向下传递到glvertexpinter()
而衰减为C指针。从一个C指针上,不可能得出它指向多少已分配内存的任何信息
真倒霉,应用程序没有崩溃。谢谢您的回复。它不会崩溃,但它只是给出了一个完美的结果。那么,有什么方法可以捕捉程序员的错误吗?@user2983543:使用Valgrind()之类的内存检查器运行程序,看看上面是怎么说的。我在第一个数组之后立即定义了另一个数组(并显示为int memory。但它不显示垃圾,因此显然它会通过程序内存进行循环。@user2983543:“未定义的行为”不一定意味着程序必须崩溃,但或多或少一切都可能发生。标题提到了glvertexarray
,而手头的问题涉及glDrawArrays
。