将单个常量缓冲区设置为多个位置

时间:2015-09-17 15:16:39

标签: opengl directx

我可以将单个常量缓冲区设置为D3D11和OpenGL中的多个位置吗?这种方法有哪些优点?我真的需要这个吗?你能想到你会使用它的情况吗?

D3D11的梦想示例:

ID3D11Buffer* bufs[3] = { pBuffer1, pBuffer1, pBuffer1 };
dc->PSSetConstantBuffers(0, 3, &bufs[0]);

和OpenGL:

glBindBufferBase(GL_UNIFORM_BUFFER, 0, buffer1);
glBindBufferBase(GL_UNIFORM_BUFFER, 1, buffer1);
glBindBufferBase(GL_UNIFORM_BUFFER, 2, buffer1);

1 个答案:

答案 0 :(得分:1)

是的,OpenGL不禁止对不同的统一块索引使用相同的缓冲区。它也不禁止将相同的纹理绑定到多个纹理图像单元。类似的事情。

对于UBO,这在几种情况下确实有用:

  1. 绑定同一缓冲区的不同区域。或者换句话说,将多种数据存储在同一缓冲区对象的不同区域中。

  2. 如果不同的着色器阶段使用不同的缓冲区绑定点,但客户端代码希望为特定的渲染操作提供相同的数据。

  3. 但是如果你绑定同一个着色器阶段使用的同一个缓冲区的相同区域......你可以用它做真正有用的东西。您将在该阶段只有两个统一的块,它们是相同数据的副本。