我当前正在将数组传递给函数,然后尝试将 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);
}
提前感谢您的帮助
最佳答案
如果将数组作为指针传递,则会丢失其关联的类型信息:
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
已经是一个指针。即使对于数组,也不需要这样的表达式,因为数组可以隐式衰减为指向其第一个元素的指针。
关于c - 将指向数组的指针传递给 glGenBuffers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2746982/