使用着色器更改纹理颜色

时间:2020-05-22 00:41:35

标签: opengl glsl shader

我正在尝试在GLSL上下文中更改纹理颜色-不能在OpenGL管道开始之前这样做

我尝试了以下方法:

顶点着色器

attribute highp vec2 a_TexCoord;
uniform highp mat3 u_TextureMatrix;
varying highp vec2 v_TexCoord;
highp vec4 calculatePosition();
void main()
{
    gl_Position = calculatePosition();
    v_TexCoord = (u_TextureMatrix * vec3(a_TexCoord,1.0)).xy;
}
attribute highp vec2 a_Vertex;
uniform highp mat3 u_TransformMatrix;
uniform highp mat3 u_ProjectionMatrix;
highp vec4 calculatePosition() {
    return vec4(u_ProjectionMatrix * u_TransformMatrix * vec3(a_Vertex.xy, 1.0), 1.0);
}

片段着色器

uniform lowp float u_Opacity;
lowp vec4 calculatePixel();
void main()
{
    gl_FragColor = calculatePixel();
    gl_FragColor.a *= u_Opacity;
}
varying mediump vec2 v_TexCoord;
uniform lowp vec4 u_Color;
uniform sampler2D u_Tex0;
lowp vec4 calculatePixel() {
    vec4 tex = texture2D(u_Tex0, v_TexCoord);
    tex.xyz -= (100.0 / 255.0);
    if (tex.x < 0.0) { tex.x += 1.0; }
    if (tex.y < 0.0) { tex.y += 1.0; }
    if (tex.z < 0.0) { tex.z += 1.0; }
    return tex * u_Color;
}

在应用插值GL_LINEAR_MIPMAP_LINEAR)的情况下,此代码 EXCEPT 有效,当事情开始看起来真的很糟糕时,因为过滤发生在Fragment之前着色器,因此在可靠的情况下不必更改颜色 PRIOR

我正在开发一款游戏,该游戏必须支持真正的旧硬件(早在2008年),这就是为什么我使用真正过时的GLSL代码(兼容120版)的原因。

是否可以在栅格化开始之前在管道中的任何地方更改纹理颜色?

0 个答案:

没有答案