365被限制了让提款-365提款-28365365体育在线投注

了解何时调用glBindBufferBase函数

了解何时调用glBindBufferBase函数

我有一些需要在着色器中访问的SSBO。假设它是这样的:

layout(std430, binding = 2) readonly buffer MyBuffer

{

int myData[];

};

什么时候调用glBindBufferBase是合适的?

现在我做的事情大致如下

glBindBuffer(GL_SHADER_STORAGE_BUFFER, name)

glBufferData(...)

glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 2, name)

glBindBuffer(GL_SHADER_STORAGE_BUFFER, 0)

我不知道这是否会设置某些全局状态,从而使我绑定和解除绑定的每个着色器的索引都设置为2。

你能告诉我这个想法是否有任何缺陷吗?

Create, Bind SSBO, upload data, unbind for the SSBO

Bind shader

glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 2, name)

Draw arrays

Unbind shader

这是使用它的预期方式吗?我只绑定一次SSBO,上传数据,然后再也不绑定它。这似乎有效,但我不知道它是否“只是有效”,因为我的GPU试图替我聪明地处理,或者我是否违反了规范(我已经查看过规范,但找不到这个问题的答案)。以前我曾经碰到过这样的情况,我做了一些在我的GPU上可以正常工作的事情,但在另一个GPU上却失败了,这让我对自己的做法感到犹豫。

理想情况下,我希望能够通过一个单一的函数调用将我的SSBO替换到某个绑定中,然后进行绘制。我不确定是否可以在绑定着色器之前这样做,或者着色器是否必须被绑定。如果有更好的方法,请给予指导。

简而言之,最终目标是在数据上传后以最小的方式将某个SSBO绑定到某个索引上。