繁体   English   中英

从计算着色器取回数据

[英]Getting data back from compute shader

我对opengl相当陌生,发现自己处于需要从计算着色器获取数据的情况,但是由于我错过了一些关键知识,因此无法正常工作。 所以我来到这里,以便您可以给我一些提示。

说我有一个像这样的计算着色器:

#version 430 core
struct rmTriangle
{
  vec4 probeCenter;
  vec4 triangles[3];
};

layout(std430, binding=9) buffer TriangleBuffer {
  rmTriangle triangles[];
}trBuffer;

//other uniforms, variables and stuff

void main()
{
  //here I make some computations and assign values to the
  //trBuffer's triangles array
}

现在,我想在应用程序中使用trBuffer的数据。 有人告诉我要制作一个着色器存储缓冲区,所以这就是我所做的:

private int ssbo;
gl.glGenBuffers(1, &ssbo);
gl.glBindBuffer(GL_SHADER_STORAGE_BUFFER, ssbo);
//just allocate enough amount of memory
gl.glBufferData(GL_SHADER_STORAGE_BUFFER, MAX_TRIANGLES * SIZEOF_TRIANGLE, null, GL_DYNAMIC_READ);

然后这样:

int blockIndex = gl.glGetProgramResourceIndex(program,GL_SHADER_STORAGE_BLOCK, name.getBytes(), 0);
if (blockIndex != GL_INVALID_INDEX) {
    gl.glShaderStorageBlockBinding(program, blockIndex, index);
} else {
    System.err.println("Warning: binding " + name + " not found");
}

其中名称=“ TriangleBuffer”,索引= 9

我知道如何访问在应用程序中创建的ssbo。 我不知道如何将TriangeBuffer数据分配/传输到我的ssbo中。

添加glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 9, ssbo);

此外,当我从获取数据SSBO当时的我做glMapBufferRangememcpy ,我需要的东东。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM