我编写了一个简单的 GL 片段着色器,它对图像执行 RGB 伽玛调整:
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;
}
纹理绘制了大部分屏幕,我想到这是在屏幕上应用每个输出像素的调整,而不是纹理上的每个输入像素。虽然这并没有改变它的外观,但这个纹理与屏幕相比是很小的。
为了提高效率,如何让着色器处理纹理像素而不是屏幕像素?如果有帮助,我无论如何都会在每一帧上更改/重新加载这个纹理的数据,所以我不介意纹理是否被永久改变。