This document is intentionally short. It’s a map to the internal modules that implement ChartGPU behavior, plus a few contracts that are easy to break.
- Render orchestration:
createRenderCoordinator.ts - Options resolution:
OptionResolver.ts - Public wrapper:
ChartGPU.ts
- Data store + GPU uploads:
createDataStore.ts - Streaming GPU buffers (double-buffered):
createStreamBuffer.ts - CPU downsampling (LTTB helper):
lttbSample.ts
Interaction code lives under src/interaction/.
- Event normalization:
createEventManager.tspayload.x/y: canvas-local CSS pxpayload.gridX/gridY: plot/grid-local CSS px
- Zoom state + inside gestures:
createZoomState.ts,createInsideZoom.ts - Hit-testing:
findNearestPoint.ts,findPointsAtX.ts,findPieSlice.ts
Contracts worth keeping in mind:
- Visibility: most helpers ignore
series.visible === false. - Index mapping: if you filter series, preserve original indices in results.
- Sorted-x (cartesian): several fast paths assume increasing x.
- Units must match: if a helper expects range-space inputs, your scales must output the same space.
- Text overlay:
createTextOverlay.ts - Legend:
createLegend.ts - Tooltip:
createTooltip.ts- Tooltip content is assigned via
innerHTML(only pass trusted/sanitized strings).
- Tooltip content is assigned via
- DataZoom slider:
createDataZoomSlider.ts
- Factory:
createRenderCoordinator.ts - Decomposed modules:
src/core/renderCoordinator/
The coordinator computes layout/scales, prepares renderers, uploads data, and emits DOM overlays.
Renderer factories live under src/renderers/.
| Feature | Factory | Shader(s) |
|---|---|---|
| Line | createLineRenderer.ts |
line.wgsl |
| Area | createAreaRenderer.ts |
area.wgsl |
| Bar | createBarRenderer.ts |
bar.wgsl |
| Scatter | createScatterRenderer.ts |
scatter.wgsl |
| Scatter density | createScatterDensityRenderer.ts |
scatterDensityBinning.wgsl, scatterDensityColormap.wgsl |
| Pie | createPieRenderer.ts |
pie.wgsl |
| Candlestick | createCandlestickRenderer.ts |
candlestick.wgsl |
| Grid lines | createGridRenderer.ts |
grid.wgsl |
| Axis baseline + ticks | createAxisRenderer.ts |
grid.wgsl (shared) |
| Crosshair | createCrosshairRenderer.ts |
crosshair.wgsl |
| Hover highlight | createHighlightRenderer.ts |
highlight.wgsl |
Notes:
- Grid lines: driven by resolved options (
ResolvedChartGPUOptions.gridLines) and wired inrenderOverlays.ts. - WGSL imports: renderers may import WGSL via Vite
?raw(types inwgsl-raw.d.ts).
queue.writeBuffer(...)offsets/sizes must be 4-byte aligned.- Uniform buffers are typically 16-byte aligned.
- Pipeline target formats must match the render pass attachment format.