[0, someint]
の値をRGB値にマッピングするためにtonemapフラグメントシェーダを作成しようとしていますが、GLintを使用しようとするとレンダリングされるテクスチャはすべて0です。ここでGL_R32I TexImage2Dが正しくアップロードされない
は、関連するテクスチャの作成とバインディングコードです:
std::array<GLint , 25 > pixels;
int i=0;
float di = 255.0f/25;
std::generate(pixels.begin(), pixels.end(), [&]{return di * i++;});
glTexImage2D(GL_TEXTURE_2D, 0, GL_R32I, 5,5 ,0,
GL_RED_INTEGER, GL_INT, pixels.data());
とのフラグメントシェーダ:基本的な2つの三角形のUVに適用される
#version 330
in vec2 Texcoord;
out vec4 outColor;
uniform isampler2D tex;
void main()
{
ivec4 val = texture(tex, Texcoord);
float ret = 0;
if(val.r == 0)
{
ret = 1;
}
outColor = vec4(ret,0,0, 1.0);
}
が[0,1]
から期待される結果をテクスチャう1つの赤色のコーナーと残りの黒色ですが、正方形全体が赤色で、テクスチャ全体が0であることを示します。
glTexImage2D(GL_TEXTURE_2D, 0, GL_RED, 5, 5 ,0, GL_RED, GL_FLOAT, pixels.data());
とsampler2D
で実験を試みると、シェイダーは期待通りに動作しますが、私の値は[0,1]
に固定されています。列挙型は一致していませんか? glGetError
はエラーを返しませんが、それ以外の方法で黙って失敗する可能性がありますか?
UbuntuでGLFWとOpenGL 3.3を使用していますが、そのバージョンでGL_R32I
がサポートされているかどうかは不明ですか?
Ah!それはフィルタリングモードでした。 'GL_LINEAR'から 'GL_NEAREST'に設定しました。 'GL_INT'値のように補間することはできません。意味があります。 –