Skip to main content

SDF_GLYPH_VERT

Constant SDF_GLYPH_VERT 

Source
pub const SDF_GLYPH_VERT: &str = "// sdf_glyph.vert \u{2014} instanced SDF glyph vertex shader\r\n//\r\n// Same instance layout as glyph.vert but outputs additional data\r\n// for SDF-specific fragment processing (threshold, smoothing, effects).\r\n\r\n#version 330 core\r\n\r\n// Per-vertex (quad)\r\nlayout(location = 0) in vec2 v_pos;       // [-0.5, 0.5] unit quad\r\nlayout(location = 1) in vec2 v_uv;        // [0, 1] UV\r\n\r\n// Per-instance (base \u{2014} same layout as standard glyph)\r\nlayout(location = 2)  in vec3  i_position;\r\nlayout(location = 3)  in vec2  i_scale;\r\nlayout(location = 4)  in float i_rotation;\r\nlayout(location = 5)  in vec4  i_color;\r\nlayout(location = 6)  in float i_emission;\r\nlayout(location = 7)  in vec3  i_glow_color;\r\nlayout(location = 8)  in float i_glow_radius;\r\nlayout(location = 9)  in vec2  i_uv_offset;\r\nlayout(location = 10) in vec2  i_uv_size;\r\n\r\nuniform mat4  u_view_proj;\r\nuniform float u_time;\r\nuniform vec2  u_screen_size;\r\n\r\nout vec2  f_uv;\r\nout vec4  f_color;\r\nout float f_emission;\r\nout vec3  f_glow_color;\r\nout float f_glow_radius;\r\nout vec2  f_screen_pos;    // screen-space position for effects\r\nout float f_scale_factor;  // screen-space scale for smoothing calc\r\n\r\nvoid main() {\r\n    float c = cos(i_rotation);\r\n    float s = sin(i_rotation);\r\n    vec2 rotated = vec2(\r\n        v_pos.x * c - v_pos.y * s,\r\n        v_pos.x * s + v_pos.y * c\r\n    ) * i_scale;\r\n\r\n    vec4 world_pos = vec4(i_position + vec3(rotated, 0.0), 1.0);\r\n    gl_Position = u_view_proj * world_pos;\r\n    gl_Position.y = -gl_Position.y;  // FBO Y inversion\r\n\r\n    f_uv          = i_uv_offset + v_uv * i_uv_size;\r\n    f_color       = i_color;\r\n    f_emission    = i_emission;\r\n    f_glow_color  = i_glow_color;\r\n    f_glow_radius = i_glow_radius;\r\n\r\n    // Compute screen-space position and scale for adaptive smoothing.\r\n    f_screen_pos   = (gl_Position.xy / gl_Position.w) * 0.5 + 0.5;\r\n    f_screen_pos  *= u_screen_size;\r\n    f_scale_factor = length(i_scale) * length(vec2(u_view_proj[0][0], u_view_proj[1][1]));\r\n}\r\n";