我在顶点着色器中有一个着色存储块,如下所示:
layout(std430,binding=0) buffer buf {mat3 rotX, rotY, rotZ; } b;我用恒等矩阵初始化这3个矩阵,如下所示:
float mats[]={ 1,0,0,0,1,0,0,0,1,
1,0,0,0,1,0,0,0,1,
1,0,0,0,1,0,0,0,1 };
GLuint ssbos;
glGenBuffers(1,&ssbos);
glBindBufferBase(GL_SHADER_STORAGE_BUFFER,0,ssbos);
glBufferData(GL_SHADER_STORAGE_BUFFER,sizeof(mats),mats,GL_DYNAMIC_DRAW);但它似乎不起作用(我使用的是Opengl 4.3核心配置文件)。我做错了什么吗?
发布于 2017-11-10 16:49:13
glBindBufferBase(GL_SHADER_STORAGE_BUFFER,0,ssbos);glBufferData(GL_SHADER_STORAGE_BUFFER,sizeof(mats),mats,GL_DYNAMIC_DRAW);
glBindBufferBase绑定缓冲区的整个范围。但是它不是一个神奇的“绑定,不管缓冲区发生了什么存储”函数。它绑定当前存在的缓冲区的整个范围。
而且,由于没有为该缓冲区对象分配任何存储空间,其当前状态为空:大小为0。这就是你要绑定的:一个0字节的内存范围。
当然,在下一条语句中,您给出了缓冲区内存。但这并没有改变当你绑定它的时候它没有记忆的事实。
因此,在绑定范围之前,需要为缓冲区创建存储。
而且,在缓冲区支持的接口块中。和你真的不应该像这样传递轴向旋转矩阵。
https://stackoverflow.com/questions/47227016
复制相似问题