feat(render): style, GLSL line/text pipelines, staging batches, bitmap font
This commit is contained in:
1 parent
9a086b7d69
commit
7cbc1c9955
22 files changed
+1535
No files matched your search
@@ -0,0 +1,41 @@
|
||||
#pragma once
|
||||
|
||||
namespace plot::render {
|
||||
|
||||
/// GLSL source of the instanced antialiased line pipeline.
|
||||
///
|
||||
/// The vertex shader takes one segment per instance (`a_p0` at location 0,
|
||||
/// `a_p1` at location 1, both with a vertex attribute divisor of 1), expands it
|
||||
/// in pixel space along its normal by `u_width * 0.5 + 1.0` pixels of AA fringe,
|
||||
/// and emits a four-vertex `GL_TRIANGLE_STRIP` quad whose corners come from
|
||||
/// `gl_VertexID` (0 and 1 are the two sides of `a_p0`, 2 and 3 of `a_p1`). It
|
||||
/// outputs `v_dist`, the signed distance from the segment axis in pixels, and
|
||||
/// `v_along`, the distance travelled from `a_p0` in pixels.
|
||||
///
|
||||
/// Uniforms: `u_scale` (vec2, data space to pixels), `u_offset` (vec2, pixels),
|
||||
/// `u_viewport` (vec2, pixels), `u_width` (float, pixels), `u_color` (vec4).
|
||||
/// `plot::Rect` is top-left origin while GL is bottom-left, so the y axis is
|
||||
/// flipped exactly once, here.
|
||||
///
|
||||
/// The fragment shader discards outside the fringe and ramps alpha over the last
|
||||
/// pixel of the half width with `smoothstep`, which is what keeps a 1px trace
|
||||
/// from aliasing into dashes.
|
||||
extern const char* const kLineVS;
|
||||
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
|
||||
/// 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).
|
||||
extern const char* const kTextVS;
|
||||
extern const char* const kTextFS;
|
||||
|
||||
} // namespace plot::render
|
||||
Reference in new issue
Block a user