1#!amber 2 3SHADER vertex vert_shader PASSTHROUGH 4 5SHADER fragment frag_setup GLSL 6#version 430 7 8layout(location = 0) out vec4 result; 9 10void main() { 11 result = vec4(floor(gl_FragCoord.x) / 255.0f, floor(gl_FragCoord.y) / 255.0f, 0, 0); 12} 13END 14 15SHADER fragment frag_shader GLSL 16#version 430 17 18layout(binding = 0) uniform sampler2D tex; 19 20layout(location = 0) out vec4 result; 21 22void main() { 23 vec2 base = floor(gl_FragCoord.xy) / 255.0f; 24 uint mask = 0; 25 mask |= textureOffset(tex, base, ivec2(0, -1)).g < base.y ? 1 : 0; 26 mask |= textureOffset(tex, base, ivec2(0, 1)).g > base.y ? 2 : 0; 27 mask |= textureOffset(tex, base, ivec2(-1, 0)).r < base.x ? 4 : 0; 28 mask |= textureOffset(tex, base, ivec2(1, 0)).r > base.x ? 8 : 0; 29 result = vec4(mask/255.0f, 0, 0, 0); 30} 31END 32 33IMAGE texture FORMAT R8G8B8A8_UNORM DIM_2D WIDTH 256 HEIGHT 256 34SAMPLER sampler 35 36PIPELINE graphics setup 37 ATTACH vert_shader 38 ATTACH frag_setup 39 40 BIND BUFFER texture AS color LOCATION 0 41 FRAMEBUFFER_SIZE 256 256 42END 43 44RUN setup DRAW_RECT POS 0 0 SIZE 256 256 45 46BUFFER framebuffer FORMAT R8G8B8A8_UNORM 47 48PIPELINE graphics pipeline 49 ATTACH vert_shader 50 ATTACH frag_shader 51 52 BIND BUFFER texture AS combined_image_sampler SAMPLER sampler DESCRIPTOR_SET 0 BINDING 0 53 BIND BUFFER framebuffer AS color LOCATION 0 54 FRAMEBUFFER_SIZE 256 256 55END 56 57RUN pipeline DRAW_RECT POS 0 0 SIZE 256 256 58EXPECT framebuffer IDX 1 1 SIZE 254 254 EQ_RGBA 15 0 0 0 59