epfl-archive/cs440-acg/ext/nanogui/resources/imageview_fragment.metal
2022-04-07 18:46:57 +02:00

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);
}