From 79326025afbe4d6dc8d484a2cffc6a3091a0bd25 Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Tue, 23 Jun 2020 12:48:35 -0700 Subject: [PATCH] Rework the blit shader --- resources/shaders/gl3/blit.fs.glsl | 2 +- resources/shaders/gl3/blit.vs.glsl | 9 +++++---- resources/shaders/gl4/blit.fs.glsl | 2 +- resources/shaders/gl4/blit.vs.glsl | 9 +++++---- resources/shaders/metal/blit.fs.metal | 2 +- resources/shaders/metal/blit.vs.metal | 6 +++--- shaders/blit.fs.glsl | 2 +- shaders/blit.vs.glsl | 9 +++++---- 8 files changed, 22 insertions(+), 19 deletions(-) diff --git a/resources/shaders/gl3/blit.fs.glsl b/resources/shaders/gl3/blit.fs.glsl index b32fc956..85092e27 100644 --- a/resources/shaders/gl3/blit.fs.glsl +++ b/resources/shaders/gl3/blit.fs.glsl @@ -26,6 +26,6 @@ out vec4 oFragColor; void main(){ vec4 color = texture(uSrc, vTexCoord); - oFragColor = vec4(color . rgb * color . a, color . a); + oFragColor = color; } diff --git a/resources/shaders/gl3/blit.vs.glsl b/resources/shaders/gl3/blit.vs.glsl index 6c9391d5..98909d95 100644 --- a/resources/shaders/gl3/blit.vs.glsl +++ b/resources/shaders/gl3/blit.vs.glsl @@ -18,16 +18,17 @@ precision highp float; +uniform vec4 uDestRect; +uniform vec2 uFramebufferSize; + in ivec2 aPosition; out vec2 vTexCoord; void main(){ + vec2 position = mix(uDestRect . xy, uDestRect . zw, vec2(aPosition))/ uFramebufferSize; vec2 texCoord = vec2(aPosition); - - - vTexCoord = texCoord; - gl_Position = vec4(mix(vec2(- 1.0), vec2(1.0), vec2(aPosition)), 0.0, 1.0); + gl_Position = vec4(mix(vec2(- 1.0), vec2(1.0), position), 0.0, 1.0); } diff --git a/resources/shaders/gl4/blit.fs.glsl b/resources/shaders/gl4/blit.fs.glsl index b32fc956..85092e27 100644 --- a/resources/shaders/gl4/blit.fs.glsl +++ b/resources/shaders/gl4/blit.fs.glsl @@ -26,6 +26,6 @@ out vec4 oFragColor; void main(){ vec4 color = texture(uSrc, vTexCoord); - oFragColor = vec4(color . rgb * color . a, color . a); + oFragColor = color; } diff --git a/resources/shaders/gl4/blit.vs.glsl b/resources/shaders/gl4/blit.vs.glsl index 6c9391d5..98909d95 100644 --- a/resources/shaders/gl4/blit.vs.glsl +++ b/resources/shaders/gl4/blit.vs.glsl @@ -18,16 +18,17 @@ precision highp float; +uniform vec4 uDestRect; +uniform vec2 uFramebufferSize; + in ivec2 aPosition; out vec2 vTexCoord; void main(){ + vec2 position = mix(uDestRect . xy, uDestRect . zw, vec2(aPosition))/ uFramebufferSize; vec2 texCoord = vec2(aPosition); - - - vTexCoord = texCoord; - gl_Position = vec4(mix(vec2(- 1.0), vec2(1.0), vec2(aPosition)), 0.0, 1.0); + gl_Position = vec4(mix(vec2(- 1.0), vec2(1.0), position), 0.0, 1.0); } diff --git a/resources/shaders/metal/blit.fs.metal b/resources/shaders/metal/blit.fs.metal index cb0ab32a..d7a4afb2 100644 --- a/resources/shaders/metal/blit.fs.metal +++ b/resources/shaders/metal/blit.fs.metal @@ -18,7 +18,7 @@ fragment main0_out main0(main0_in in [[stage_in]], texture2d uSrc [[textu { main0_out out = {}; float4 color = uSrc.sample(uSrcSmplr, in.vTexCoord); - out.oFragColor = float4(color.xyz * color.w, color.w); + out.oFragColor = color; return out; } diff --git a/resources/shaders/metal/blit.vs.metal b/resources/shaders/metal/blit.vs.metal index 701d97f0..35de802e 100644 --- a/resources/shaders/metal/blit.vs.metal +++ b/resources/shaders/metal/blit.vs.metal @@ -15,13 +15,13 @@ struct main0_in int2 aPosition [[attribute(0)]]; }; -vertex main0_out main0(main0_in in [[stage_in]]) +vertex main0_out main0(main0_in in [[stage_in]], constant float4& uDestRect [[buffer(0)]], constant float2& uFramebufferSize [[buffer(1)]]) { main0_out out = {}; + float2 position = mix(uDestRect.xy, uDestRect.zw, float2(in.aPosition)) / uFramebufferSize; float2 texCoord = float2(in.aPosition); - texCoord.y = 1.0 - texCoord.y; out.vTexCoord = texCoord; - out.gl_Position = float4(mix(float2(-1.0), float2(1.0), float2(in.aPosition)), 0.0, 1.0); + out.gl_Position = float4(mix(float2(-1.0), float2(1.0), position), 0.0, 1.0); return out; } diff --git a/shaders/blit.fs.glsl b/shaders/blit.fs.glsl index 8d461ed4..e257ba64 100644 --- a/shaders/blit.fs.glsl +++ b/shaders/blit.fs.glsl @@ -24,5 +24,5 @@ out vec4 oFragColor; void main() { vec4 color = texture(uSrc, vTexCoord); - oFragColor = vec4(color.rgb * color.a, color.a); + oFragColor = color; } diff --git a/shaders/blit.vs.glsl b/shaders/blit.vs.glsl index ca3b0f7c..9077fa8a 100644 --- a/shaders/blit.vs.glsl +++ b/shaders/blit.vs.glsl @@ -16,15 +16,16 @@ precision highp float; precision highp sampler2D; #endif +uniform vec4 uDestRect; +uniform vec2 uFramebufferSize; + in ivec2 aPosition; out vec2 vTexCoord; void main() { + vec2 position = mix(uDestRect.xy, uDestRect.zw, vec2(aPosition)) / uFramebufferSize; vec2 texCoord = vec2(aPosition); -#ifdef PF_ORIGIN_UPPER_LEFT - texCoord.y = 1.0 - texCoord.y; -#endif vTexCoord = texCoord; - gl_Position = vec4(mix(vec2(-1.0), vec2(1.0), vec2(aPosition)), 0.0, 1.0); + gl_Position = vec4(mix(vec2(-1.0), vec2(1.0), position), 0.0, 1.0); }