gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 06:53:50 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com