将指向数组的指针传递给glGenBuffers

时间:2010-04-30 19:06:36

标签: c objective-c opengl-es

我正在将一个数组传递给一个函数,然后尝试将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);
}

提前感谢您的帮助

1 个答案:

答案 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已经是指针。即使使用数组,也不需要这样的表达式,因为数组可以隐式地衰减到指向其第一个元素的指针。