Skip to main content

Module gpu_canvas

Module gpu_canvas 

Source
Expand description

Backend GPU directo del trait crate::Canvas — Fase 4 del SDD 02_ruway/llimphi/SDD.md §“GPU directo wgpu”.

Implementación drop-in del trait que delega cada primitivo a un llimphi_raster::GpuBatch. El painter de pineal no se entera: sigue escribiendo canvas.fill_rect(...), canvas.stroke_line(...), etc. La app que monta la visualización elige el backend al enchufar el paint_with (SceneCanvas, vello, ~100 K primitivas) o gpu_paint_with (GpuSceneCanvas, GPU directo, 1–10 M primitivas).

Trade-offs respecto a SceneCanvas:

  • Texto: el SDD prohíbe expresamente texto en este backend (“Texto siempre por vello+parley”). draw_text queda como no-op silencioso — el caller debe pintar labels en un View::paint_with (vello) hermano o en App::view_overlay.
  • Anchura de stroke: GpuBatch tiene una sola line_width por flush. Visualizaciones que mezclen grosores van a ver “la última gana”. Workaround: emitir cada grosor en su propio flush, o simplemente componer todo con el grosor más común. Para los painters densos típicos (starfield, particles, scatter) no aplica — ahí las strokes son todas del mismo grosor.
  • Clip: push_clip/pop_clip son no-op, igual que en SceneCanvas (el View contenedor recorta vía taffy + clip(true)).
  • Per-vertex color en strips: ventaja sobre vello — el GPU sí soporta color por vértice nativo, así que fill_triangle_strip preserva el color real de cada vértice (no el promedio del triángulo). Beneficia phosphor trail, ribbons Sankey, fan radar.

Structs§

GpuSceneCanvas
Adapter que pinta primitivos de Canvas sobre un GpuBatch. El batch lo construye y flushea la app dentro del gpu_paint_with; GpuSceneCanvas vive sólo durante las calls del painter.