Binding GLSL:绑定着色器存储缓冲区对象
我正在绑定一个着色器存储缓冲区对象(SSBO)并在片段着色器中使用。绑定很好,缓冲块是规范要求的vec4(4B)块的倍数。但是,以下代码具有意外行为。变量“datapoint”具有正确的“a”值,但“b、c、d”值是垃圾 我使用的是Nvidia Quadro K5000,驱动程序版本为340.52Binding GLSL:绑定着色器存储缓冲区对象,binding,glsl,Binding,Glsl,我正在绑定一个着色器存储缓冲区对象(SSBO)并在片段着色器中使用。绑定很好,缓冲块是规范要求的vec4(4B)块的倍数。但是,以下代码具有意外行为。变量“datapoint”具有正确的“a”值,但“b、c、d”值是垃圾 我使用的是Nvidia Quadro K5000,驱动程序版本为340.52 struct data { int a; float b; float c; float d; }; // the same location '0' is used
struct data
{
int a;
float b;
float c;
float d;
};
// the same location '0' is used on the host
layout(std430, binding = 0) buffer MyBuffer
{
data mydata[];
}
data datapoint;
void main()
{
...
datapoint = mydata[some_index]; // some_index is withing range
...
}
您可以尝试向缓冲区添加一个限定符,例如只读或一致,并查看是否有帮助。据我所知,您必须为MyBuffer命名,并通过name.mydata[]访问它。问题似乎在于=运算符。可以通过“mydata[some_index].c”访问数据。但是,将其复制到结构的另一个实例只会复制结构的第一个元素。问题可能是NVidia的GLSL编译器造成的。