【发布时间】:2015-01-03 10:34:30
【问题描述】:
是否可以在 OpenGL 中增加缓冲区?
假设我想使用实例化渲染。每次在世界上产生一个新对象时,我都必须使用实例数据更新缓冲区。
在这种情况下,我有一个 3 个浮点数的缓冲区
std::vector<GLfloat> offsets = {0.0f,0.5f,1.0f};
auto offset_buffer = buffer::makeBuffer(BufferDraw::STATIC_DRAW, offsets);
如果我想要 4 个元素怎么办?我必须用更大的尺寸调用 glBufferData 吗?但是旧数据会发生什么,它会被复制吗?还是我必须完全删除缓冲区并创建一个新缓冲区?
【问题讨论】:
-
有一个扩展可以做到这一点,否则你需要分配新的缓冲区并复制数据并填写新的。否则旧数据会丢失
-
我可以直接从 OpenGL 复制数据,还是必须再次将数据从我的 ram 发送到 vram?
-
@ratchetfreak:那是哪个扩展名?我唯一想到的是
GL_ARB_sparse_buffer。您可以保留比您需要的更大的缓冲区,然后在填充缓冲区时提交内存页面,但扩展所需的最小页面大小为 64 KiB,浮点数仅为 4 个字节;)
标签: opengl