2017-05-29 19 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 ObjectsまたはShader Storage Buffer Objectsのいずれかを使用してユニフォームをバックアップできます。

この場合、GLSL Interface Blockを定義し、バッファをその均一にバインドする必要があります。つまり、多数の類似した要素を格納するためには、単一のユニフォームしか必要ありません。

+0

ありがとうございました。非常に役に立ちます:) –

+0

シェイダーが非常に限定されたユニフォームを持つことができる理由を尋ねることはできますか?私は私のVRAMは上記の配列を読み込むのに十分だと思います –

関連する問題