diff --git a/resources/MANIFEST b/resources/MANIFEST index 91a0f954..20226525 100644 --- a/resources/MANIFEST +++ b/resources/MANIFEST @@ -19,6 +19,8 @@ shaders/gl3/stencil.fs.glsl shaders/gl3/stencil.vs.glsl shaders/gl3/tile.fs.glsl shaders/gl3/tile.vs.glsl +shaders/gl3/tile_clip.fs.glsl +shaders/gl3/tile_clip.vs.glsl shaders/gl3/tile_copy.fs.glsl shaders/gl3/tile_copy.vs.glsl shaders/metal/blit.fs.metal diff --git a/resources/shaders/gl3/tile_clip.fs.glsl b/resources/shaders/gl3/tile_clip.fs.glsl new file mode 100644 index 00000000..56ae412c --- /dev/null +++ b/resources/shaders/gl3/tile_clip.fs.glsl @@ -0,0 +1,29 @@ +#version {{version}} +// Automatically generated from files in pathfinder/shaders/. Do not edit! + + + + + + + + + + + + +precision highp float; +precision highp sampler2D; + +uniform sampler2D uSrc; + +in vec2 vTexCoord; +in float vBackdrop; + +out vec4 oFragColor; + +void main(){ + float alpha = clamp(abs(texture(uSrc, vTexCoord). r + vBackdrop), 0.0, 1.0); + oFragColor = vec4(alpha, 0.0, 0.0, 1.0); +} + diff --git a/resources/shaders/gl3/tile_clip.vs.glsl b/resources/shaders/gl3/tile_clip.vs.glsl new file mode 100644 index 00000000..5867c3e5 --- /dev/null +++ b/resources/shaders/gl3/tile_clip.vs.glsl @@ -0,0 +1,33 @@ +#version {{version}} +// Automatically generated from files in pathfinder/shaders/. Do not edit! + + + + + + + + + + + + +precision highp float; +precision highp sampler2D; + +in ivec2 aTileOffset; +in ivec2 aDestTileOrigin; +in ivec2 aSrcTileOrigin; +in int aSrcBackdrop; + +out vec2 vTexCoord; +out float vBackdrop; + +void main(){ + vec2 destPosition = vec2(aDestTileOrigin + aTileOffset)/ vec2(256.0); + vec2 srcPosition = vec2(aSrcTileOrigin + aTileOffset)/ vec2(256.0); + vTexCoord = srcPosition; + vBackdrop = float(aSrcBackdrop); + gl_Position = vec4(mix(vec2(- 1.0), vec2(1.0), destPosition), 0.0, 1.0); +} + diff --git a/resources/shaders/metal/tile_clip.fs.metal b/resources/shaders/metal/tile_clip.fs.metal new file mode 100644 index 00000000..a77450f0 --- /dev/null +++ b/resources/shaders/metal/tile_clip.fs.metal @@ -0,0 +1,31 @@ +// Automatically generated from files in pathfinder/shaders/. Do not edit! +#include +#include + +using namespace metal; + +struct spvDescriptorSetBuffer0 +{ + texture2d uSrc [[id(0)]]; + sampler uSrcSmplr [[id(1)]]; +}; + +struct main0_out +{ + float4 oFragColor [[color(0)]]; +}; + +struct main0_in +{ + float2 vTexCoord [[user(locn0)]]; + float vBackdrop [[user(locn1)]]; +}; + +fragment main0_out main0(main0_in in [[stage_in]], constant spvDescriptorSetBuffer0& spvDescriptorSet0 [[buffer(0)]]) +{ + main0_out out = {}; + float alpha = fast::clamp(abs(spvDescriptorSet0.uSrc.sample(spvDescriptorSet0.uSrcSmplr, in.vTexCoord).x + in.vBackdrop), 0.0, 1.0); + out.oFragColor = float4(alpha, 0.0, 0.0, 1.0); + return out; +} + diff --git a/resources/shaders/metal/tile_clip.vs.metal b/resources/shaders/metal/tile_clip.vs.metal new file mode 100644 index 00000000..3e3a6baf --- /dev/null +++ b/resources/shaders/metal/tile_clip.vs.metal @@ -0,0 +1,32 @@ +// Automatically generated from files in pathfinder/shaders/. Do not edit! +#include +#include + +using namespace metal; + +struct main0_out +{ + float2 vTexCoord [[user(locn0)]]; + float vBackdrop [[user(locn1)]]; + float4 gl_Position [[position]]; +}; + +struct main0_in +{ + int2 aTileOffset [[attribute(0)]]; + int2 aDestTileOrigin [[attribute(1)]]; + int2 aSrcTileOrigin [[attribute(2)]]; + int aSrcBackdrop [[attribute(3)]]; +}; + +vertex main0_out main0(main0_in in [[stage_in]]) +{ + main0_out out = {}; + float2 destPosition = float2(in.aDestTileOrigin + in.aTileOffset) / float2(256.0); + float2 srcPosition = float2(in.aSrcTileOrigin + in.aTileOffset) / float2(256.0); + out.vTexCoord = srcPosition; + out.vBackdrop = float(in.aSrcBackdrop); + out.gl_Position = float4(mix(float2(-1.0), float2(1.0), destPosition), 0.0, 1.0); + return out; +} +