attribute vec2 a_position; attribute float a_size; attribute float a_angle; attribute vec4 a_color; uniform mat3 u_matrix; uniform float u_sqrtZoomRatio; uniform float u_correctionRatio; varying vec4 v_color; varying vec2 v_diffVector; varying float v_radius; varying float v_border; const float bias = 255.0 / 254.0; const float marginRatio = 1.05; void main() { float size = a_size * u_correctionRatio * u_sqrtZoomRatio * 4.0; vec2 diffVector = size * vec2(cos(a_angle), sin(a_angle)); vec2 position = a_position + diffVector * marginRatio; gl_Position = vec4( (u_matrix * vec3(position, 1)).xy, 0, 1 ); v_border = u_correctionRatio * u_sqrtZoomRatio * u_sqrtZoomRatio; v_diffVector = diffVector; v_radius = size / 2.0 / marginRatio; v_color = a_color; v_color.a *= bias; }