novolis-rendering / design.md
Design
Compile-time friendly rendering
dotnetgraphicsrenderingnovolis
Role
novolis-rendering produces CPU framebuffers (Rgba32 pixels). It is not a game engine and does not replace novolis-raylib (GPU host) or novolis-simulation (worlds, clocks, cameras).
Dependency rules
novolis-math (Geometry) → novolis-rendering
novolis-rendering ⊥ novolis-raylib
novolis-rendering ⊥ novolis-simulationApps may reference any combination and own glue:
Simulation.View (ViewPose) → RenderCamera → IRayTracer → ImageBuffer → Raylib/Silk presenterPackages
| Package | Depends on | Owns |
|---|---|---|
Novolis.Rendering.Abstractions | Novolis.Math.Geometry | Buffers, camera, scene DTOs, IRayTracer |
Novolis.Rendering.Raytrace | Abstractions, Math | CpuRayTracer, intersection helpers |
Novolis.Rendering | Facets above | Meta / convenience reference |
Novolis.Rendering.TwoD | Math.Geometry, Math.Topology | 2D scene, sprites, collision, HUD, menus |
Novolis.Rendering.Backends.TwoD.Silk | TwoD, Silk.NET | OpenGL orthographic renderer + game loop |
See [design-two-d.md](./design-two-d.html) for the Mario-style 2D stack.
Roadmap
Full phased plan (materials, compile pipeline, backends, Raylib/Silk presenters):
[roadmap-raytracing.md](./roadmap-raytracing.html)
Presentation (out of scope in core packages)
Optional host packages — no scene/material types:
Novolis.Rendering.Presentation.Raylib—IFramePresenter→ Raylib texture blitNovolis.Silk.Presentation— same contract via Silk.NET
Golden tests for the tracer use PNG hashes over CPU pixels without native Raylib.
Acceleration
CpuRayTracer v1 uses brute-force triangle tests. BVH traversal may move to Math (shared with Physics collision) without changing IRayTracer.
Related
- library-boundaries.md
- novolis-raylib — display path