テクスチャを使用して、データが計算される計算シェーダーとそれが使用されるフラグメント シェーダーの間で渡されるデータを格納しようとしています。
テクスチャを作成し、次を使用して空の値で塗りつぶします。
GLuint texID;
glGenTextures(1, &texID);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 256, 256, 0, GL_RGBA, GL_FLOAT, NULL);
次に、以下を使用して計算シェーダーで使用できるようにします。
glBindImageTexture(0, texID, 0, GL_FALSE, 0, GL_WRITE_ONLY, GL_RGBA32F);
この関数の仕様は次のとおりです。正しい引数を使用していることを確認できます: https://www.opengl.org/sdk/docs/man/html/glBindImageTexture.xhtml
次に、計算シェーダー内で、次を使用してテクスチャを取得します。
layout(rgba32f) coherent uniform image2D Texture;
次に、テクスチャの値の 1 つをテストとして設定します。
imageStore(Texture, ivec2(0,0), vec4(0.1, 0.2, 0.3, 1.0));
その vec4 をテクスチャの位置 (0,0) に配置する必要があります。
次に、フラグメント シェーダーが属するプログラムのユニフォームとしてテクスチャを追加します。
GLint uniformID = glGetUniformLocation(programID, "Texture");
glUniform1i(uniformID, 0);
次に、フラグメント シェーダーでテクスチャを取得します。
uniform sampler2D Texture;
そして、テクスチャの位置 (0,0) の値として何かの色を設定しようとします。
color = texture2D(Texture, ivec(0,0));
ただし、結果として、黒(0.0、0.0、0.0、1.0)になります。計算シェーダーで設定した内容に関係なく、常にこれを取得します。
私はおそらく本当に明白な何かを見逃しているので、私が欠けているものを示すコードのビットは素晴らしいでしょう