首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在JOGL中使用SSBO有问题

在JOGL中使用SSBO有问题
EN

Stack Overflow用户
提问于 2019-11-11 00:14:35
回答 1查看 104关注 0票数 0

我一直在尝试初始化一个SSBO并将其传递给一个计算着色器。

代码语言:javascript
复制
int ssbo = glGenBuffers();

FloatBuffer buff = BufferUtils.createFloatBuffer(4);
buff.put(0.1f);
buff.put(0.4f);
buff.put(1.5f);
buff.put(0.2f);

glBindBuffer(GL_SHADER_STORAGE_BUFFER, ssbo);
glBufferData(GL_SHADER_STORAGE_BUFFER, buff, GL_DYNAMIC_READ);
glBindBuffer(GL_SHADER_STORAGE_BUFFER, 0);

int block_index = glGetProgramResourceIndex(programID, GL_SHADER_STORAGE_BLOCK, "shader_data");
System.out.println(block_index);

int ssbo_binding_point_index = 1;
glShaderStorageBlockBinding(programID, block_index, ssbo_binding_point_index);


int binding_point_index = 1;
glBindBufferBase(GL_SHADER_STORAGE_BUFFER, binding_point_index, ssbo);

在着色器中,我有:

代码语言:javascript
复制
layout(binding = 1) buffer shader_data {
    vec4 sph;
};

当我运行这段代码时,sph被0-s填充。我尝试从缓冲区读取数据:

代码语言:javascript
复制
FloatBuffer a = BufferUtils.createFloatBuffer(4);
glGetBufferSubData(GL_SHADER_STORAGE_BUFFER, 0, a);
System.out.println(glGetError());

//and then print a...

这会得到错误1281,也就是0+ a.size() > ssbo的大小。然后我检查了SSBO的实际大小:

代码语言:javascript
复制
IntBuffer b = BufferUtils.createIntBuffer(1);
glGetBufferParameteriv(GL_SHADER_STORAGE_BUFFER, GL_BUFFER_SIZE, b);
System.out.println("buffer size: " + b.get(0));

这给了我0。我用过this文章。我对OpenGL非常陌生,所以我的代码中可能有一个非常明显的错误,这就是为什么我在这里包含了这么多错误。

谢谢你的建议!

编辑: LWJGL版本为3.2.1 build 12

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-19 03:18:33

只需在填充数据后翻转缓冲区即可。

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

https://stackoverflow.com/questions/58790533

复制
相关文章

相似问题

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