glVertexArrays,超出范围。索引无效

时间:2014-02-16 10:54:47

标签: c opengl

这是我正在研究的有趣内容。

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);

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

glDrawArrays (GL_TRIANGLES, 0, 6);

它按预期工作。

现在,如果我给出类似

的内容
glDrawArrays (GL_TRIANGLES, 0, 126);

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

  • 它是否进行了一些数组计算,并且知道它有6个元素?在那种情况下,它会忽略剩余的120?
  • 还是会继续绘制垃圾?

1 个答案:

答案 0 :(得分:0)

我会说对glDrawArrays()的2 nd 调用会遇到未定义的行为,因为该函数会尝试超出vertices的边界。

  

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

它不能,因为vertices通过传递给glVertexPointer()而衰减到C指针。从C指针开始,无法绘制有关它指向的已分配内存量的任何信息。

运气不好,应用程序不会崩溃。