首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在着色存储缓冲区中初始化矩阵?

如何在着色存储缓冲区中初始化矩阵?
EN

Stack Overflow用户
提问于 2017-11-10 16:17:01
回答 1查看 1.4K关注 0票数 1

我在顶点着色器中有一个着色存储块,如下所示:

代码语言:javascript
运行
复制
layout(std430,binding=0) buffer buf {mat3 rotX, rotY, rotZ; } b;

我用恒等矩阵初始化这3个矩阵,如下所示:

代码语言:javascript
运行
复制
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核心配置文件)。我做错了什么吗?

EN

回答 1

Stack Overflow用户

发布于 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字节的内存范围。

当然,在下一条语句中,您给出了缓冲区内存。但这并没有改变当你绑定它的时候它没有记忆的事实。

因此,在绑定范围之前,需要为缓冲区创建存储。

而且,在缓冲区支持的接口块中。和你真的不应该像这样传递轴向旋转矩阵。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47227016

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档