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

标签 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);
}

提前感谢您的帮助

最佳答案

如果将数组作为指针传递,则会丢失其关联的类型信息:

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/

相关文章:

C编程,将一个 block 填充到最接近的32位

ios - 添加多个 ImageView 帧时对象的数量只有一个

android - 我如何在 Android 平台上使用 OpenGL ES 绘制一些 unicode 字符,例如中文

OpenGL 相当于 OpenGL ES 2.0 的扩展 GL_EXT_shader_framebuffer_fetch

c - 使用 strncpy 从我上次停下的地方继续

C二叉搜索树前序遍历递归

ios - 在 iOS 中使用 NSURLSession 对 .ts 文件发出 POST 请求

objective-c - Cocoa:NSMutableString 使用 stringValue 发出警告

c - 为什么 FreeImage 加载 BGR 格式的图像?

c++ - 浮点与浮点文字比较的奇怪输出