像glColorPointer这样的OpenGL API如何知道作为指针传递的数组的大小?

god*_*024 2 c c++ opengl opengl-es

这是来自opengl.org的glColorPointer的定义:

void glColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid*pointer); 参数

size指定每种颜色的组件数.必须为3或4.初始值为4.

type指定数组中每个颜色组件的数据类型.接受符号常量GL_BYTE,GL_UNSIGNED_BYTE,GL_SHORT,GL_UNSIGNED_SHORT,GL_INT,GL_UNSIGNED_INT,GL_FLOAT和GL_DOUBLE.初始值为GL_FLOAT.

stride指定连续颜色之间的字节偏移量.如果stride为0,则颜色被理解为紧密排列在阵列中.初始值为0.

pointer指定指向数组中第一个颜色元素的第一个组件的指针.初始值为0.

简单来说,我们可以说sizetype参数指定一个颜色单元的字节数,stride指定连续颜色单元之间的字节偏移.

但是,这个功能如何知道单位总数?众所周知,如果一个数组作为指向函数的指针传递,则不可能通过在函数内使用sizeof()来获取数组的大小.那么当指针参数只是一个GLvoid*指针时,glColorPointer如何知道数组的大小?

Fik*_*tik 8

因为函数本身不访问数组.它只是将给定的参数保存在OpenGL内部状态机中.只有在调用glDrawArrays或时才能访问数组中的数据glDrawElements.只有这样才能从您给出的位置读取每个绘制顶点的颜色glColorPointer.

glDrawArrays另一方面,确实包含指定顶点数的count参数.毋庸置疑,您的颜色数组中必须有足够的数据来提供每个绘制的顶点.

这同样适用于任何其他gl*指针函数,如glNormalPointerglTexCoordPointer