【发布时间】:2021-11-15 18:23:44
【问题描述】:
据我所知,我需要首先通过调用 glGenBuffers 生成一个缓冲区的名称,它将一些 RAM 分配给开发人员手动命名的特定对象(数组)。这就是为什么我需要以'glGenBuffers(int,实际地址)'的形式编写代码。因此,如果我想为某些 RAM 提供特定用途,我需要调用 glBindBuffer,将目标“使用”归因于第一个参数,将 RAM 归因于第二个参数。 那就是问题所在 。为什么我应该将一个 int 值赋予第二个参数? 不是像 &xxx 这样的特定地址吗? 就像我在 glGenBuffers 中所做的一样:确认应该存储缓冲区数据的区域。 glBindBuffer 是否会自动在其主体中定位特定地址,但不需要开发者输入指针?
【问题讨论】:
-
我不确定你是否正确理解
glGenBuffers的参数。第二个参数是一个指向 uint 数组的指针,生成的缓冲区 id 将写入该数组。这是您还必须传递给glBindBuffer的ID。这个函数都不会为你分配内存。 -
我认为您误解了这些功能的工作原理。假设您要创建并绑定一个缓冲区,然后您首先创建缓冲区
GLuint buffer; glGenBuffers(1, &buffer);然后您需要将此缓冲区绑定到目标:glBindBuffer(some_target, buffer);buffer变量是一个 标识符 ,其值标识 OpenGL 内存中的单个缓冲区。 -
参见
glGenBuffers:buffers 指定一个数组,其中存储了生成的缓冲区对象名称。 -
@BDL 我想通了一点。当我将第一个参数设置为 1 时,肯定是我决定了 RAM 的分配,但我发现如果我将它设置为 2,那么程序会自动为下一个索引分配下一个地址。 glGB(2,&x) = &x for 1 and &x+1 for 2(如果之前没有其他glGBs)
-
@DeLoris:指针与缓冲区中的数据无关。您指向的内存大小必须为
number_of_buffers * sizeof(unsigned int)。也不能保证您将获得连续的号码返回。 OpenGL 可以免费为您提供它喜欢的任何 id,只要它们尚未使用。这可能是一种语言问题,但“分配”在 C++ 中意味着非常具体的东西:为您的应用程序保留 RAM 内存。 glGenBuffers 和 glBindBuffers 都不会分配任何内存。