refactor(render): TextBackend owns its atlas, and staged glyphs carry a rotation basis
This commit is contained in:
1 parent
90e17a0a11
commit
e074f57ddf
23 files changed
+1073
-227
No files matched your search
@@ -30,16 +30,24 @@ extern const char* const kLineFS;
|
||||
|
||||
/// GLSL source of the instanced text pipeline.
|
||||
///
|
||||
/// One glyph cell per instance: `a_pos` at location 0 is the quad's top-left
|
||||
/// corner in Rect pixels and `a_uv` at location 1 is the glyph's atlas texel
|
||||
/// origin, both with a vertex attribute divisor of 1. The quad grows by
|
||||
/// `u_px_range` pixels per cell and the fragment shader samples the
|
||||
/// One glyph cell per instance, every attribute with a vertex attribute divisor
|
||||
/// of 1: `a_pos` at location 0 is the cell's top-left corner in Rect pixels,
|
||||
/// `a_uv` at location 1 is the glyph rect's normalised top-left in the atlas and
|
||||
/// `a_axis` at location 2 is the cell's local +x axis, a unit vector in pixels.
|
||||
///
|
||||
/// The vertex shader builds the cell from that basis and its perpendicular --
|
||||
/// the cell's own +v direction -- so `a_axis` of `(0, -1)` draws a run that
|
||||
/// advances up the screen, and it maps `a_uv` over the cell with the same
|
||||
/// handedness, so a glyph's top row stays its top row however the cell is
|
||||
/// turned. The fragment shader converts back to texels and samples the
|
||||
/// single-channel `GL_R8` atlas at the nearest texel centre, so `GL_NEAREST`
|
||||
/// never lands on a cell boundary. `u_color` tints the straight alpha.
|
||||
///
|
||||
/// Uniforms: `u_viewport` (vec2, pixels), `u_px_range` (vec2, pixels per glyph
|
||||
/// cell), `u_tex_size` (vec2, atlas texels), `u_atlas` (sampler2D, unit 0),
|
||||
/// `u_color` (vec4).
|
||||
/// Uniforms: `u_viewport` (vec2, pixels), `u_px_range` (vec2, the glyph cell's
|
||||
/// size on screen in pixels), `u_glyph_uv` (vec2, the glyph cell's size in
|
||||
/// normalised atlas coordinates -- one size for the whole draw, since every
|
||||
/// glyph of a frame comes from one atlas), `u_tex_size` (vec2, atlas size in
|
||||
/// texels), `u_atlas` (sampler2D, unit 0), `u_color` (vec4).
|
||||
extern const char* const kTextVS;
|
||||
extern const char* const kTextFS;
|
||||
|
||||
|
||||
Reference in new issue
Block a user