2

テクスチャを使用して、データが計算される計算シェーダーとそれが使用されるフラグメント シェーダーの間で渡されるデータを格納しようとしています。

テクスチャを作成し、次を使用して空の値で塗りつぶします。

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)になります。計算シェーダーで設定した内容に関係なく、常にこれを取得します。

私はおそらく本当に明白な何かを見逃しているので、私が欠けているものを示すコードのビットは素晴らしいでしょう

4

0 に答える 0