diff --git a/glsl/chrome-shp.frag b/glsl/chrome-shp.frag index a6bc742dfe..dbabad7184 100644 --- a/glsl/chrome-shp.frag +++ b/glsl/chrome-shp.frag @@ -1,6 +1,8 @@ -uniform sampler2D DiffuseTexture; +uniform sampler2D DiffuseTexture, Palette; void main() { - gl_FragColor = texture2D(DiffuseTexture,gl_TexCoord[0].st); + vec4 x = texture2D(DiffuseTexture, gl_TexCoord[0].st); + vec2 p = vec2( dot(x, gl_TexCoord[1]), gl_TexCoord[0].p ); + gl_FragColor = texture2D(Palette,p); } \ No newline at end of file diff --git a/glsl/chrome-shp.vert b/glsl/chrome-shp.vert index 1f9d59bd96..8541b53f1e 100644 --- a/glsl/chrome-shp.vert +++ b/glsl/chrome-shp.vert @@ -1,8 +1,17 @@ -uniform vec2 Scroll; -uniform vec2 r1; -uniform vec2 r2; // matrix elements +uniform vec2 r1,r2; // matrix elements + +vec4 DecodeChannelMask( float x ) +{ + if (x > 0.0) + return (x > 0.5) ? vec4(1,0,0,0) : vec4(0,1,0,0); + else + return (x < -0.5) ? vec4(0,0,0,1) : vec4(0,0,1,0); +} void main() { - gl_Position = ftransform(); + vec2 p = gl_Vertex.xy*r1 + r2; + gl_Position = vec4(p.x,p.y,0,1); + gl_TexCoord[0] = gl_MultiTexCoord0; + gl_TexCoord[1] = DecodeChannelMask(gl_MultiTexCoord0.w); } diff --git a/glsl/world-shp.frag b/glsl/world-shp.frag index 2d8adfb7c3..dbabad7184 100644 --- a/glsl/world-shp.frag +++ b/glsl/world-shp.frag @@ -2,9 +2,7 @@ uniform sampler2D DiffuseTexture, Palette; void main() { - //float4 x = tex2D(DiffuseTexture, f.Tex0.xy); - //float2 p = float2( dot(x, f.ChannelMask), f.Tex0.z ); - //return tex2D(Palette, p); - //st - gl_FragColor = texture2D(Palette,gl_TexCoord[0].xy); + vec4 x = texture2D(DiffuseTexture, gl_TexCoord[0].st); + vec2 p = vec2( dot(x, gl_TexCoord[1]), gl_TexCoord[0].p ); + gl_FragColor = texture2D(Palette,p); } \ No newline at end of file diff --git a/glsl/world-shp.vert b/glsl/world-shp.vert index 3c5a3739d4..cde9c3325d 100644 --- a/glsl/world-shp.vert +++ b/glsl/world-shp.vert @@ -1,9 +1,18 @@ uniform vec2 Scroll; uniform vec2 r1,r2; // matrix elements +vec4 DecodeChannelMask( float x ) +{ + if (x > 0.0) + return (x > 0.5) ? vec4(1,0,0,0) : vec4(0,1,0,0); + else + return (x < -0.5) ? vec4(0,0,0,1) : vec4(0,0,1,0); +} + void main() { vec2 p = (gl_Vertex.xy - Scroll.xy)*r1 + r2; gl_Position = vec4(p.x,p.y,0,1); - gl_TexCoord[0] = gl_MultiTexCoord0; + gl_TexCoord[0] = gl_MultiTexCoord0; + gl_TexCoord[1] = DecodeChannelMask(gl_MultiTexCoord0.w); }