4

glGenBuffers我可以使用函数生成多少个缓冲区?我可以尝试生成 8192(或更多)缓冲区吗?

我只渲染一个缓冲区,但我需要存储许多缓冲区。

int i = 0;
glGetIntegerv(GL_MAX_DRAW_BUFFERS, &i);

返回8。这是缓冲区的最大计数,即同时渲染。

我对吗?

4

2 回答 2

5

该值与片段着色器可以写入的缓冲区GL_MAX_DRAW_BUFFERS无关(参见 参考资料)。glGenBuffersglDrawBuffers

标准中对缓冲区的数量没有限制,您可以创建任意数量的缓冲区。但是,您受到内存的限制,因此如果您计划存储大量数据,则类似的调用glBufferData可能会失败GL_OUT_OF_MEMORY

于 2012-05-09T08:54:02.923 回答
2

我可以使用 glGenBuffers 函数生成多少个缓冲区?

glGenBuffers 不分配任何存储,它只获取缓冲区的名称/ID。对此的限制纯粹是特定于实现的,但理论上仅受可用内存和管理结构大小的限制。更多的限制因素是您分配的缓冲存储量。

问题当然是:为什么需要这么多缓冲区?为什么你是像素缓冲对象或颜色缓冲附件?纹理不是更适合您的数据的存储对象吗?

返回 8。这是缓冲区的最大计数,同时渲染。

是的,这是多目标渲染中目标缓冲区的最大计数。

于 2012-05-09T08:53:20.667 回答