gpt4 book ai didi

java - JOGL 中的 SSBO 遇到问题

转载 作者:行者123 更新时间:2023-12-01 21:40:30 24 4
gpt4 key购买 nike

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

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);

在着色器中我有:

layout(binding = 1) buffer shader_data {
vec4 sph;
};

当我运行此命令时,sph 中填充有 0-s。我尝试从缓冲区读取数据:

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的实际大小:

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

最佳答案

在填充数据后只需翻转缓冲区就可以了。

关于java - JOGL 中的 SSBO 遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58790533/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com