From d5fd8e5828846a89f826fae931775eb87b88b39b Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Mon, 28 Sep 2015 18:58:36 +0100 Subject: [PATCH] Use varyings for masks instead of overloading gl_TexCoord. --- glsl/shp.frag | 7 +++++-- glsl/shp.vert | 7 +++++-- glsl/vxl.frag | 10 +++++++--- glsl/vxl.vert | 12 ++++++++---- 4 files changed, 25 insertions(+), 11 deletions(-) diff --git a/glsl/shp.frag b/glsl/shp.frag index 45a3ebe467..c5671026e1 100644 --- a/glsl/shp.frag +++ b/glsl/shp.frag @@ -1,8 +1,11 @@ uniform sampler2D DiffuseTexture, Palette; +varying vec4 TexCoord; +varying vec4 ChannelMask; + void main() { - vec4 x = texture2D(DiffuseTexture, gl_TexCoord[0].st); - vec2 p = vec2(dot(x, gl_TexCoord[1]), gl_TexCoord[0].p); + vec4 x = texture2D(DiffuseTexture, TexCoord.st); + vec2 p = vec2(dot(x, ChannelMask), TexCoord.p); gl_FragColor = texture2D(Palette, p); } diff --git a/glsl/shp.vert b/glsl/shp.vert index cde9c3325d..551294ffe1 100644 --- a/glsl/shp.vert +++ b/glsl/shp.vert @@ -1,6 +1,9 @@ uniform vec2 Scroll; uniform vec2 r1,r2; // matrix elements +varying vec4 TexCoord; +varying vec4 ChannelMask; + vec4 DecodeChannelMask( float x ) { if (x > 0.0) @@ -13,6 +16,6 @@ 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[1] = DecodeChannelMask(gl_MultiTexCoord0.w); + TexCoord = gl_MultiTexCoord0; + ChannelMask = DecodeChannelMask(gl_MultiTexCoord0.w); } diff --git a/glsl/vxl.frag b/glsl/vxl.frag index 492ae02fe2..c29828ea69 100644 --- a/glsl/vxl.frag +++ b/glsl/vxl.frag @@ -4,14 +4,18 @@ uniform vec2 PaletteRows; uniform vec4 LightDirection; uniform vec3 AmbientLight, DiffuseLight; +varying vec4 TexCoord; +varying vec4 ChannelMask; +varying vec4 NormalsMask; + void main() { - vec4 x = texture2D(DiffuseTexture, gl_TexCoord[0].st); - vec4 color = texture2D(Palette, vec2(dot(x, gl_TexCoord[1]), PaletteRows.x)); + vec4 x = texture2D(DiffuseTexture, TexCoord.st); + vec4 color = texture2D(Palette, vec2(dot(x, ChannelMask), PaletteRows.x)); if (color.a < 0.01) discard; - vec4 normal = (2.0 * texture2D(Palette, vec2(dot(x, gl_TexCoord[2]), PaletteRows.y)) - 1.0); + vec4 normal = (2.0 * texture2D(Palette, vec2(dot(x, NormalsMask), PaletteRows.y)) - 1.0); vec3 intensity = AmbientLight + DiffuseLight * max(dot(normal, LightDirection), 0.0); gl_FragColor = vec4(intensity * color.rgb, color.a); } diff --git a/glsl/vxl.vert b/glsl/vxl.vert index 8eb665dddb..e349fd4a2a 100644 --- a/glsl/vxl.vert +++ b/glsl/vxl.vert @@ -1,7 +1,11 @@ uniform mat4 View; uniform mat4 TransformMatrix; -vec4 DecodeChannelMask(float x) +varying vec4 TexCoord; +varying vec4 ChannelMask; +varying vec4 NormalsMask; + +vec4 DecodeMask(float x) { if (x > 0.0) return (x > 0.5) ? vec4(1,0,0,0) : vec4(0,1,0,0); @@ -12,7 +16,7 @@ vec4 DecodeChannelMask(float x) void main() { gl_Position = View*TransformMatrix*gl_Vertex; - gl_TexCoord[0] = gl_MultiTexCoord0; - gl_TexCoord[1] = DecodeChannelMask(gl_MultiTexCoord0.z); - gl_TexCoord[2] = DecodeChannelMask(gl_MultiTexCoord0.w); + TexCoord = gl_MultiTexCoord0; + ChannelMask = DecodeMask(gl_MultiTexCoord0.z); + NormalsMask = DecodeMask(gl_MultiTexCoord0.w); }