0
我對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");
}
其中name = 「TriangleBuffer」 和指數= 9
我知道如何訪問我在應用程序中創建的ssbo。我不知道如何將TriangeBuffer數據分配/傳輸到我的ssbo中。
對於它的價值,在做這件事之前還需要一個記憶障礙。在您嘗試無內存地讀回內存之前,計算着色器不保證運行完成。 –
謝謝你們的回答。這解決了我的問題。 – alpacacapla