#version 330
uniform vec2 u_viewport;
uniform vec2 u_offset;
uniform vec2 u_scale;
layout(location = 0) in vec2 position;
layout(location = 1) in float point_size;
layout(location = 2) in int color;
vec2 from_pixel_pos(vec2 position, vec2 viewport) {
return mix(vec2(-1.0, 1.0), vec2(1.0, -1.0), position / viewport);
}
vec4 int_to_color(int c) {
return vec4(
float((c >> 24) & 0xff),
float((c >> 16) & 0xff),
float((c >> 8) & 0xff),
float((c >> 0) & 0xff)
) / 255.0;
}
out vec4 v_color;
void main() {
gl_Position = vec4(from_pixel_pos(u_offset + position * u_scale, u_viewport), 0.0, 1.0);
gl_PointSize = point_size;
v_color = int_to_color(color);
}