24 lines
873 B
Metal
24 lines
873 B
Metal
#include <metal_stdlib>
|
|
|
|
using namespace metal;
|
|
|
|
struct VertexOut {
|
|
float4 position_image [[position]];
|
|
float2 position_background;
|
|
float2 uv;
|
|
};
|
|
|
|
fragment float4 fragment_main(VertexOut vert [[stage_in]],
|
|
texture2d<float, access::sample> image,
|
|
constant float4 &background_color,
|
|
sampler image_sampler) {
|
|
float2 frac = vert.position_background - floor(vert.position_background);
|
|
float checkerboard = ((frac.x > .5f) == (frac.y > .5f)) ? .4f : .5f;
|
|
|
|
float4 background = (1.f - background_color.a) * float4(float3(checkerboard), 1.f) +
|
|
background_color.a * float4(background_color.rgb, 1.f);
|
|
|
|
float4 value = image.sample(image_sampler, vert.uv);
|
|
return (1.f - value.a) * background + value.a * float4(value.rgb, 1.f);
|
|
}
|