私は4つのglm::vec3
オブジェクトを含むstd::vector
にとてもShader Storage Blockからのみゴミを取得しますか?
GLuint index = glGetProgramResourceIndex(myprogram, GL_SHADER_STORAGE_BLOCK, name);
glShaderStorageBlockBinding(myprogram, index, mybindingpoint);
glBindBuffer(GL_SHADER_STORAGE_BUFFER, mybuffer)
glBindBufferRange(GL_SHADER_STORAGE_BUFFER, mybindingpoint, mybuffer, 0, 48);
glBufferSubData(GL_SHADER_STORAGE_BUFFER, 0, 48, &mydata);
mydata
ポイントのようshader storage block
からshader storage buffer
を拘束されています。
48 bytes
をバッファ範囲としてバインドしたので、lights[]
は、48/(4*3) = 4 vec3s
を保持すると予想しています。私std::vector
のインデックス1
で
layout(std430) buffer light {
vec3 lights[];
};
要素は、データx=1.0, y=1.0, z=1.0
を保持しています。
しかし、私は黄色(x=1.0, y=1.0, z=0.0
)ピクセルを参照してください
gl_FragColor = vec4(lights[1], 1.0);
を行うことで出力を表示します。これは私がバッファにロードしたものではありません。
誰かが私が間違っていることを教えてもらえますか?私はちょうど
layout(std430) buffer light {
float lights[];
};
出力
gl_FragColor = vec4(lights[3],lights[4],lights[5],1.0);
にシェーダ記憶ブロックをchangend、それが(白画素)動作
EDIT
。
誰かがこれを説明することができれば、それでも素晴らしいでしょう。
mydataの正確な定義を表示してください – deniss