画像に対してRGBガンマ調整を実行する単純なGLフラグメントシェーダーを作成しました。
uniform sampler2D tex;
uniform vec3 gamma;
void main()
{
vec3 texel = texture2D(tex, gl_TexCoord[0].st).rgb;
texel = pow(texel, gamma);
gl_FragColor.rgb = texel;
}
テクスチャは画面の大部分をペイントしますが、これはテクスチャの入力ピクセルごとではなく、画面上の出力ピクセルごとに調整を適用していることに気付きました。見た目は変わりませんが、画面に比べると質感が小さいです。
効率を上げるために、シェーダーに画面ピクセルではなくテクスチャピクセルを処理させるにはどうすればよいですか?それが役に立ったら、とにかくすべてのフレームでこのテクスチャのデータを変更/再ロードしているので、テクスチャが永続的に変更されてもかまいません。