0

もう一度私の計算シェーダに問題があります...ポインタを含む構造体を計算シェーダに渡したいと思います。 これは私の構成例である:ここでCompute Shaderの入力構造体へのポインタ

struct couleurStruct { 
    float r; 
    float g; 
    float b; 
    float a; 
    float *x; 
}; 

は私のSSBOの初期化です:

couleurStruct *coul; 
coul = (couleurStruct *)glMapBufferRange(GL_SHADER_STORAGE_BUFFER, 0, 1 * sizeof(couleurStruct), bufMask); 
//coul->x = (float *)glMapBufferRange(GL_SHADER_STORAGE_BUFFER, 0, 1 * sizeof(float), bufMask); 

coul->r = 0.0; 
coul->g = 1.0; 
coul->b = 0.0; 
coul->a = 1.0; 
coul->x[0] = 0.5; 

glUnmapBuffer(GL_SHADER_STORAGE_BUFFER); 

glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 4, structBuffer); 

私は別の初期化の多くを試みたが成功せず...

だから、方法があります必要なメモリをすべて割り当てることができます(ポインタで指し示されている各配列の内側に必要なメモリが分かっているので)、計算シェーダに渡します。または、計算シェーダへのポインタを渡すことは本当に不可能ですか?

ありがとうございました!

答えて

1

OpenGLでのシェーダ(および関連するVulkan/D3D)には、にポインタがありません。できるだけ多くのことは、他のデータ構造にインデックスを提供することです。だから、xを別の配列のインデックスにすることができます。なぜそれがポインタである必要があるのか​​は明確ではありませんが。

+0

もう一度ありがとうございます!だから私は静的配列として私のポインタを変更します...もちろん、上のコードは、私が実際に取り組んでいるものではなく、テストコードです。 – bRiocHe