2017-05-29 85 views
0

我正在用計算着色器實現簡單的光線跟蹤。加載計算着色器時出錯

但我卡在鏈接計算着色器的程序對象。

#version 440 

struct triangle { 
    vec3 points[3]; 
}; 

struct sphere { 
    vec3 pos; 
    float r; 
}; 

struct hitinfo { 
    vec2 lambda; 
    int idx; 
}; 

layout(binding = 0, rgba32f) uniform image2D framebuffer; 
// wrriten by compute shader 

layout (local_size_x = 1, local_size_y = 1) in; 

uniform triangle triangles[2500]; 
uniform sphere spheres[2500]; 

uniform int num_triangles; 
uniform int num_spheres; 

uniform vec3 eye; 
uniform vec3 ray00; 
uniform vec3 ray10; 
uniform vec3 ray01; 
uniform vec3 ray11; 

這是我的計算着色器代碼,我可以得到一個「資源不足」的錯誤。 我知道這個錯誤的原因是三角形的大小,但我需要這個大小。

有沒有辦法將大量的三角形傳遞給着色器?

回答

1

着色器的制服數量非常有限。如果你需要更多的數據,那麼你的制服有什麼特點,你可以使用Uniform Buffer ObjectsShader Storage Buffer Objects來備份制服。

在這種情況下,您將不得不定義GLSL Interface Block並將緩衝區綁定到該制服。這意味着,你只需要一種制服來存儲大量類似的元素。

+0

謝謝。非常有幫助:) –

+0

我可以問你爲什麼着色器可以有非常有限的校服嗎?我認爲我的VRAM足以加載上面的數組 –