【问题标题】:Why does glBindBuffer has a unsigned int as its second parameter?为什么 glBindBuffer 有一个 unsigned int 作为它的第二个参数?
【发布时间】: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 内存中的单个缓冲区。
  • 参见glGenBuffersbuffers 指定一个数组,其中存储了生成的缓冲区对象名称。
  • @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 都不会分配任何内存。

标签: c++ opengl


【解决方案1】:

glGenBuffers 为缓冲区选择一堆 ID 号,然后将 ID 号存储到您的变量中。 glBindBuffers 根据其 ID 号选择其中一个缓冲区。你看不到任何缓冲区的地址。

【讨论】:

  • 所以它是一个无符号整数(我可以知道它只有 4 个字节),其中存储了缓冲区的特定 ID?并且绑定后分配这个缓冲区的具体内存?
  • @DeLoris:当你调用glBufferData时分配缓冲区的内存。
  • @BDL 谢谢。现在更有意义了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-31
  • 1970-01-01
  • 2021-08-07
  • 2011-01-31
  • 1970-01-01
相关资源
最近更新 更多