50 lines
1.5 KiB
Markdown
50 lines
1.5 KiB
Markdown
# ADR 0001: Incremental Component Boundaries
|
|
|
|
Status: accepted
|
|
Date: 2026-05-31
|
|
|
|
## Context
|
|
|
|
PanoPainter currently has a flat `src/` layout with broad dependencies through
|
|
`pch.h`, global singletons such as `App::I` and `Canvas::I`, OpenGL types in
|
|
high-level painting/document headers, and duplicated platform source lists.
|
|
The modernization work must retain existing behavior across Windows desktop
|
|
and AppX, macOS, iOS, Android standard, Quest, Focus/Wave, Linux, and WebGL.
|
|
|
|
## Decision
|
|
|
|
Modernization will proceed incrementally. OpenGL remains the production
|
|
renderer while component boundaries and tests are introduced. Vulkan, Metal,
|
|
and WebGPU-related work must stay out of the production path until OpenGL
|
|
parity tests exist.
|
|
|
|
The target dependency direction is:
|
|
|
|
```text
|
|
pp_foundation
|
|
-> pp_assets
|
|
-> pp_paint
|
|
-> pp_document
|
|
-> pp_renderer_api
|
|
-> pp_renderer_gl
|
|
-> pp_paint_renderer
|
|
-> pp_ui_core
|
|
-> pp_panopainter_ui
|
|
-> pp_platform_*
|
|
-> panopainter_app
|
|
```
|
|
|
|
Pure component headers must not include platform SDK headers or graphics API
|
|
headers. Temporary shims are allowed only when recorded in
|
|
`docs/modernization/debt.md`.
|
|
|
|
## Consequences
|
|
|
|
- The first implementation steps are documentation, inventory, CMake skeleton,
|
|
diagnostics, and tests, not a renderer rewrite.
|
|
- Existing project files remain until the shared CMake targets are validated.
|
|
- Refactors should prefer additive compatibility layers before moving behavior.
|
|
- Every extracted component must gain its own tests before the next component
|
|
boundary is extracted.
|
|
|