我正在将一个数组传递给一个函数,然后尝试将glGenBuffers与传递给该函数的数组一起使用。我无法找到一种让glGenBuffers与我传递的数组一起工作的方法。我很好地掌握了指针的基础知识,但这超出了我的范围。
在别处生成(和删除)缓冲区。如果我修复它,我可以渲染所有东西,但这使它更灵活。目前的问题是“& renderArray [0]”。如果我将它(所有内容都移到函数中)以便它在主绘图代码中,它就可以工作。我也有一些非常相似的东西,它也使用一个常数阵列。
这基本上是渲染代码的工作原理。它有点复杂,(颜色使用相同的阵列想法,也没有用)但基本思路如下:
void drawFoo(const GLfloat *renderArray, GLuint verticeBuffer) {
glBindBuffer(GL_ARRAY_BUFFER, verticeBuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(renderArray)*sizeof(GLfloat), &renderArray[0], GL_STATIC_DRAW);
glVertexPointer(2, GL_FLOAT, 0, 0);
glEnableClientState(GL_VERTEX_BUFFER);
glDrawArrays(GL_TRIANGLE_FAN, 0, 45);
glDisableClientState(GL_VERTEX_BUFFEr);
}
提前感谢您的帮助
答案 0 :(得分:2)
如果将数组作为指针传递,则会丢失其关联的类型信息:
GLfloat array[N];
GLfloat* pointer = array;
sizeof(array ); // => sizeof(GLfloat) * N
sizeof(pointer); // => sizeof(GLfloat*);
sizeof
是一个编译时运算符,它为您提供其操作数的类型的大小,在您的情况下为GLfloat*
。
您需要将数组的大小作为附加参数传递:
void drawFoo(const GLfloat* renderArray, size_t nFloats, GLuint verticeBuffer) {
// ...
glBufferData(GL_ARRAY_BUFFER, nFloats * sizeof(GLFloat),
renderArray, GL_STATIC_DRAW);
另请注意,&array[0]
语法是多余的,renderArray
已经是指针。即使使用数组,也不需要这样的表达式,因为数组可以隐式地衰减到指向其第一个元素的指针。