我提出了一个想法,需要将数千个缓冲区(原子计数器和Shader存储器)绑定到一个GLSL程序。我首先检查了这是否对openGL的限制有任何意义,似乎有两个原因:
openGL 4.4提出:
void BindBuffersBase(enum target,uint first,sizei count,const uint * buffers);
在C代码上看起来很容易,但我不清楚如何做我的着色器。绑定索引缓冲区时,我们应该使用:
layout (std430, binding = 0) buffer Objects
{
Object objects[];
};
绑定几个缓冲区时可以。但就我而言:
问题是: 有没有办法让着色器不知道将绑定到它的缓冲区数量?假设它们都包含相同类型的数据。
答案:
感谢Andon M. Coleman快速而明确的答案。
首先,我认为我的硬件支持数以千计的绑定是错误的。新手错误,我采用了定义的值而不是运行时的值。
在我的机器上:
这与我提出的问题相去甚远。
但是,在着色器中定义多个缓冲区是有意义的:
A
{
B b[];
}
layout (std430, binding = 0) buffer A a[32];
必须事先知道最大绑定量,但这些缓冲区将占用从0到31的绑定。
答案 0 :(得分:1)
感谢Andon M. Coleman快速而明确的答案。
首先,我认为我的硬件支持数以千计的绑定是错误的。新手错误,我采用了定义的值而不是运行时的值。
在我的机器上:
这与我提出的问题相去甚远。
但是,在着色器中定义多个缓冲区是有意义的:
A
{
B b[];
}
layout (std430, binding = 0) buffer A a[32];
必须事先知道最大绑定量,但这些缓冲区将占用从0到31的绑定。