#!amber SHADER vertex vert_shader PASSTHROUGH SHADER fragment frag_setup GLSL #version 430 layout(location = 0) out vec4 result; void main() { result = vec4(floor(gl_FragCoord.x) / 255.0f, floor(gl_FragCoord.y) / 255.0f, 0, 0); } END SHADER fragment frag_shader GLSL #version 430 layout(binding = 0) uniform sampler2D tex; layout(location = 0) out vec4 result; void main() { vec2 base = floor(gl_FragCoord.xy) / 255.0f; uint mask = 0; mask |= textureOffset(tex, base, ivec2(0, -1)).g < base.y ? 1 : 0; mask |= textureOffset(tex, base, ivec2(0, 1)).g > base.y ? 2 : 0; mask |= textureOffset(tex, base, ivec2(-1, 0)).r < base.x ? 4 : 0; mask |= textureOffset(tex, base, ivec2(1, 0)).r > base.x ? 8 : 0; result = vec4(mask/255.0f, 0, 0, 0); } END IMAGE texture FORMAT R8G8B8A8_UNORM DIM_2D WIDTH 256 HEIGHT 256 SAMPLER sampler PIPELINE graphics setup ATTACH vert_shader ATTACH frag_setup BIND BUFFER texture AS color LOCATION 0 FRAMEBUFFER_SIZE 256 256 END RUN setup DRAW_RECT POS 0 0 SIZE 256 256 BUFFER framebuffer FORMAT R8G8B8A8_UNORM PIPELINE graphics pipeline ATTACH vert_shader ATTACH frag_shader BIND BUFFER texture AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0 BIND BUFFER framebuffer AS color LOCATION 0 FRAMEBUFFER_SIZE 256 256 END RUN pipeline DRAW_RECT POS 0 0 SIZE 256 256 EXPECT framebuffer IDX 1 1 SIZE 254 254 EQ_RGBA 15 0 0 0