#version 300 es precision mediump float; layout(location = 0) in vec4 a_rect; layout(location = 1) in vec4 a_uv_rect; layout(location = 2) in vec3 a_fg; layout(location = 3) in vec3 a_bg; out vec2 v_uv; out vec3 v_fg; out vec3 v_bg; void main() { vec2 pos; vec2 uv; int corner = gl_VertexID % 6; if (corner == 0) { pos = vec2(a_rect.x, a_rect.y); uv = vec2(a_uv_rect.x, a_uv_rect.y); } else if (corner == 1) { pos = vec2(a_rect.z, a_rect.y); uv = vec2(a_uv_rect.z, a_uv_rect.y); } else if (corner == 2) { pos = vec2(a_rect.z, a_rect.w); uv = vec2(a_uv_rect.z, a_uv_rect.w); } else if (corner == 3) { pos = vec2(a_rect.x, a_rect.y); uv = vec2(a_uv_rect.x, a_uv_rect.y); } else if (corner == 4) { pos = vec2(a_rect.z, a_rect.w); uv = vec2(a_uv_rect.z, a_uv_rect.w); } else { pos = vec2(a_rect.x, a_rect.w); uv = vec2(a_uv_rect.x, a_uv_rect.w); } v_uv = uv; v_fg = a_fg; v_bg = a_bg; gl_Position = vec4(pos, 0.0, 1.0); }