#ifdef GL_ES precision mediump float; #endif uniform vec2 u_resolution; uniform vec2 u_mouse; uniform float u_time; vec3 WHITE = vec3(1.); vec3 RED = vec3(1.,0.,0.); vec3 BLACK = vec3(0.); vec3 YELLOW = vec3(1.,1.,0); vec3 BLUE = vec3(0.,0.,1.); // hacky but worky vec3 rect(float thickness, vec2 offset, vec2 size, vec3 border_color, vec3 bg_color) { vec2 pos = gl_FragCoord.xy; if (pos.x < offset.x || pos.y < offset.y || pos.x>size.x+thickness+offset.x || pos.y>size.y+thickness+offset.y) return WHITE; bool in_left = pos.x >= offset.x && pos.x <= offset.x+thickness; bool in_right = pos.x >= offset.x+size.x && pos.x <= offset.x+thickness+size.x; bool in_bottom = pos.y >= offset.y && pos.y <= offset.y+thickness; bool in_top = pos.y >= offset.y+size.y && pos.y <= offset.y+thickness+size.y; if (in_left || in_right || in_bottom || in_top) return border_color; return bg_color; } vec3 piet_rect(vec2 offset, vec2 size, vec3 bg_color) { return rect(5., offset, vec2(size), BLACK, bg_color); } void main() { vec3 rect1 = piet_rect(vec2(10., 210.), vec2(200.), RED); vec3 rect2 = piet_rect(vec2(10.), vec2(200.), WHITE); vec3 rect3 = piet_rect(vec2(-90., -5), vec2(100., 200.), BLUE); vec3 rect4 = piet_rect(vec2(-10., 210), vec2(20., 20.), WHITE); vec3 rect5 = piet_rect(vec2(210, -5.), vec2(50., 300), YELLOW); gl_FragColor = vec4(rect1*rect2*rect3*rect4*rect5,1.0); }