Rework the blit shader

This commit is contained in:
Patrick Walton 2020-06-23 12:48:35 -07:00
parent 661da5e12b
commit 79326025af
8 changed files with 22 additions and 19 deletions

View File

@ -26,6 +26,6 @@ out vec4 oFragColor;
void main(){ void main(){
vec4 color = texture(uSrc, vTexCoord); vec4 color = texture(uSrc, vTexCoord);
oFragColor = vec4(color . rgb * color . a, color . a); oFragColor = color;
} }

View File

@ -18,16 +18,17 @@ precision highp float;
uniform vec4 uDestRect;
uniform vec2 uFramebufferSize;
in ivec2 aPosition; in ivec2 aPosition;
out vec2 vTexCoord; out vec2 vTexCoord;
void main(){ void main(){
vec2 position = mix(uDestRect . xy, uDestRect . zw, vec2(aPosition))/ uFramebufferSize;
vec2 texCoord = vec2(aPosition); vec2 texCoord = vec2(aPosition);
vTexCoord = texCoord; 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);
} }

View File

@ -26,6 +26,6 @@ out vec4 oFragColor;
void main(){ void main(){
vec4 color = texture(uSrc, vTexCoord); vec4 color = texture(uSrc, vTexCoord);
oFragColor = vec4(color . rgb * color . a, color . a); oFragColor = color;
} }

View File

@ -18,16 +18,17 @@ precision highp float;
uniform vec4 uDestRect;
uniform vec2 uFramebufferSize;
in ivec2 aPosition; in ivec2 aPosition;
out vec2 vTexCoord; out vec2 vTexCoord;
void main(){ void main(){
vec2 position = mix(uDestRect . xy, uDestRect . zw, vec2(aPosition))/ uFramebufferSize;
vec2 texCoord = vec2(aPosition); vec2 texCoord = vec2(aPosition);
vTexCoord = texCoord; 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);
} }

View File

@ -18,7 +18,7 @@ fragment main0_out main0(main0_in in [[stage_in]], texture2d<float> uSrc [[textu
{ {
main0_out out = {}; main0_out out = {};
float4 color = uSrc.sample(uSrcSmplr, in.vTexCoord); float4 color = uSrc.sample(uSrcSmplr, in.vTexCoord);
out.oFragColor = float4(color.xyz * color.w, color.w); out.oFragColor = color;
return out; return out;
} }

View File

@ -15,13 +15,13 @@ struct main0_in
int2 aPosition [[attribute(0)]]; 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 = {}; main0_out out = {};
float2 position = mix(uDestRect.xy, uDestRect.zw, float2(in.aPosition)) / uFramebufferSize;
float2 texCoord = float2(in.aPosition); float2 texCoord = float2(in.aPosition);
texCoord.y = 1.0 - texCoord.y;
out.vTexCoord = texCoord; 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; return out;
} }

View File

@ -24,5 +24,5 @@ out vec4 oFragColor;
void main() { void main() {
vec4 color = texture(uSrc, vTexCoord); vec4 color = texture(uSrc, vTexCoord);
oFragColor = vec4(color.rgb * color.a, color.a); oFragColor = color;
} }

View File

@ -16,15 +16,16 @@ precision highp float;
precision highp sampler2D; precision highp sampler2D;
#endif #endif
uniform vec4 uDestRect;
uniform vec2 uFramebufferSize;
in ivec2 aPosition; in ivec2 aPosition;
out vec2 vTexCoord; out vec2 vTexCoord;
void main() { void main() {
vec2 position = mix(uDestRect.xy, uDestRect.zw, vec2(aPosition)) / uFramebufferSize;
vec2 texCoord = vec2(aPosition); vec2 texCoord = vec2(aPosition);
#ifdef PF_ORIGIN_UPPER_LEFT
texCoord.y = 1.0 - texCoord.y;
#endif
vTexCoord = texCoord; 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);
} }