# Build Progress Checklist # Museum Vintage Radar Exhibit — C++ / OpenGL # Update this file as each item is completed. # At the start of a new session, read this file to Claude to resume. ## HOW TO USE - Mark completed files with [x] - Note any partial files with [~] and add a comment - If a session ends mid-task, note it under RESUME POINT below --- ## RESUME POINT *(update this when a session ends mid-task)* Last completed: Marine PPI builds and runs cleanly (build_progress.md updated). In-progress: — Next task: Marine A-Scope (scope_ascope + scope_marine_a) or ATC PPI --- ## CONFIGURATION - [x] src/settings.h — all constexpr constants - [x] CMakeLists.txt — builds main radar binary; terrain_preprocess commented out --- ## CORE / INFRASTRUCTURE - [x] src/main.cpp — entry point; GLFW/GLAD init; thread launch - [x] src/shared_render_state.h — Mutex A; state vars Thread 1 reads each frame - [x] src/shared_render_state.cpp - [x] src/target_buffer.h — Mutex B; target data between TrafficCop & Simulator - [x] src/target_buffer.cpp --- ## SCOPE FRAMEWORK - [x] src/scope.h — abstract Scope base; auto-advance timer - [x] src/scope.cpp - [x] src/scope_manager.h — owns scope list; s/S switching; 120s timer - [x] src/scope_manager.cpp --- ## SCOPES — INDIVIDUAL - [x] src/scope_intro.h — Exhibit Introduction (text only) - [x] src/scope_intro.cpp - [ ] src/scope_ascope.h — abstract AScope (A-scope shared behavior) - [ ] src/scope_ascope.cpp - [ ] src/scope_marine_a.h — Marine A-Scope; P1; graticule swap animation - [ ] src/scope_marine_a.cpp - [ ] src/scope_chain_home.h — Chain Home A-Scope; P2; goniometer; PRF; calibrator - [ ] src/scope_chain_home.cpp - [x] src/scope_ppi.h — abstract PPIScope; P7 phosphor; graticule; cursor; held-keys - [x] src/scope_ppi.cpp - [x] src/scope_marine_ppi.h — Marine PPI; 4s sweep; 2/4/6 mi ranges; beam-painted rings - [x] src/scope_marine_ppi.cpp - [ ] src/scope_boat_ppi.h — Boat PPI; moving origin; heading marker; patrol route - [ ] src/scope_boat_ppi.cpp - [ ] src/scope_atc_ppi.h — ATC PPI; 5s sweep; 5/10/15/20 mi ranges - [ ] src/scope_atc_ppi.cpp - [ ] src/scope_par.h — PAR; dual stacked scopes; az + el; 30 Hz - [ ] src/scope_par.cpp --- ## RENDERING SUPPORT - [x] src/phosphor.h — P7 decay/persistence; ping-pong FBO - [x] src/phosphor.cpp - [x] src/graticule.h — incandescent bearing ring; ticks; 15° labels; cursor - [x] src/graticule.cpp - [x] src/left_panel.h — FreeType TextRenderer + LeftPanel description pane - [x] src/left_panel.cpp --- ## TARGET PIPELINE (THREADS 2 & 4) - [x] src/traffic_cop.h — Thread 2; polls Simulator & RPi receivers at 4 Hz - [x] src/traffic_cop.cpp - [x] src/simulator.h — Thread 4; 7 simulated targets; flat-earth projection - [x] src/simulator.cpp - [x] src/rpi_receiver.h — stub; always returns 0 targets - [x] src/rpi_receiver.cpp - [x] src/knob_panel.h — Thread 3; hardware stub; idles until encoders wired - [x] src/knob_panel.cpp --- ## TERRAIN (deferred — not part of Marine PPI phase) - [ ] src/terrain_map.h - [ ] src/terrain_map.cpp - [ ] src/land_clutter.h - [ ] src/land_clutter.cpp - [ ] src/terrain_preprocess.cpp — STANDALONE offline tool; links GDAL only --- ## DATABASE PANEL (deferred) - [ ] src/db_panel.h - [ ] src/db_panel.cpp --- ## DEAR IMGUI (deferred — needed only for --database mode) - [ ] src/imgui/imgui.h - [ ] src/imgui/imgui.cpp - [ ] src/imgui/imgui_impl_glfw.h - [ ] src/imgui/imgui_impl_glfw.cpp - [ ] src/imgui/imgui_impl_opengl3.h - [ ] src/imgui/imgui_impl_opengl3.cpp - [ ] src/imgui/imgui_draw.cpp - [ ] src/imgui/imgui_tables.cpp - [ ] src/imgui/imgui_widgets.cpp --- ## SHADERS - [x] shaders/sweep.vert — fullscreen quad pass-through - [x] shaders/sweep.frag — P7 ping-pong decay + beam + rings + targets - [x] shaders/phosphor.vert — fullscreen quad pass-through - [x] shaders/phosphor.frag — P7 color curve; bloom; scope circle clip - [x] shaders/graticule.vert — screen-pixel → NDC for line geometry - [x] shaders/graticule.frag - [x] shaders/text.vert — glyph quad (xy=screen pos, zw=atlas UV) - [x] shaders/text.frag — samples GL_RED atlas; applies text color - [x] shaders/bloom.vert — stub (bloom post-process; not yet wired in) - [x] shaders/bloom.frag - [ ] shaders/terrain_clutter.vert — deferred with terrain - [ ] shaders/terrain_clutter.frag --- ## DATA FILES - [x] data/patrol_route.json — boat waypoints stub (used by future BoatPPIScope) --- ## COUNTS Total items: 68 Completed: 38 Remaining: 30 (A-scopes, Boat PPI, ATC PPI, PAR, terrain, DB panel, ImGui, 2 shaders)