feat(renderer): port the generic renderer, renderer thread and state
Ports renderer/{generic,cell,row,link,State,Overlay,image,Thread}.zig:
- generic.rs builds GPU cell buffers from terminal RenderState each
frame: backgrounds, shaped text runs with glyph atlases and nerd font
constraints, all cursor styles, decorations via sprites, selection and
search colors, min-contrast, bold/faint/blink handling, preedit,
padding extension, background image, custom shader uniforms, link
hover underlines, scrollbar and health reporting.
- The renderer thread updates CPU-side state only and asks the host to
redraw; the app runtime calls draw_frame from the GLArea render signal
(the GL context lives on the GTK thread, as in Ghostty).
- ghostty_renderer::state::{State, SharedState} is the canonical shared
renderer state (termio's interim copy will switch to it).
Deviations: overlay uses a direct RGBA rasterizer instead of z2d; bg
images decode with png/jpeg-decoder instead of wuffs; zero-length link
matches advance by one char (Zig would loop forever).
Kitty image rendering is implemented in image::State but not yet called
from generic::update_kitty (raced with the terminal-side wiring).
Test Plan:
- cargo test -p ghostty-renderer (69 unit + 9 headless EGL tests that
render a Terminal through the full pipeline and check pixels)
This commit is contained in:
1 parent
687752c650
commit
871c301713
16 files changed
+7491
-128
No files matched your search
@@ -3,14 +3,17 @@ use std::sync::Arc;
|
||||
|
||||
use ghostty_font::SharedGrid;
|
||||
|
||||
use crate::generic::Host;
|
||||
use crate::size::Size;
|
||||
|
||||
/// Options for constructing a renderer.
|
||||
///
|
||||
/// `config` is the derived renderer configuration (`Renderer.DerivedConfig`).
|
||||
// TODO(integration): upstream also carries `surface_mailbox`, `rt_surface`
|
||||
// and `thread` (apprt / Thread.zig types). They are added when the generic
|
||||
// renderer and the apprt exist; the GL loader closure replaces `rt_surface`.
|
||||
///
|
||||
/// Zig also carries `rt_surface` (used by the graphics API to prepare the
|
||||
/// GL context) and `thread`; in Rust the apprt prepares the GL context
|
||||
/// itself (`OpenGL::prepare_context`) before constructing the renderer, and
|
||||
/// the thread is wired up by [`crate::thread::Thread`].
|
||||
pub struct Options<C> {
|
||||
/// The derived configuration for this renderer implementation.
|
||||
pub config: C,
|
||||
@@ -20,4 +23,7 @@ pub struct Options<C> {
|
||||
|
||||
/// The size of everything.
|
||||
pub size: Size,
|
||||
|
||||
/// The surface mailbox / apprt callbacks (Zig: `surface_mailbox`).
|
||||
pub host: Arc<dyn Host>,
|
||||
}
|
||||
Reference in new issue
Block a user