Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
56 commits
Select commit Hold shift + click to select a range
2127d19
docs(006): add spec, plan, research, contracts, quickstart for v1.4
relmer Jun 3, 2026
f7c5ae6
docs(006): add tasks.md and resolve /speckit.analyze findings
relmer Jun 3, 2026
237d4a7
build(006): T001 add <dxgi1_6.h> to MatrixRainCore PCH
relmer Jun 3, 2026
abdab9b
build(006): T002 reserve new dialog control IDs
relmer Jun 3, 2026
a49cd12
feat(006): T003+T005 IsDeviceLost helper (TDD)
relmer Jun 3, 2026
4057992
feat(006): T004+T006 RebuildCoalescer (TDD)
relmer Jun 3, 2026
a828987
feat(006): T007+T008 Present returns HRESULT; render thread detects d…
relmer Jun 3, 2026
48c6b12
feat(006): T009+T010 WM_DISPLAYCHANGE coalesced rebuild
relmer Jun 3, 2026
6717cfd
docs(006): mark T001-T010 complete in tasks.md
relmer Jun 3, 2026
2a835b2
feat(006): T011+T014 ShouldSpanAllMonitors pure helper (TDD)
relmer Jun 3, 2026
8a2a371
feat(006): T012/T013/T015/T016/T017 m_multiMonitorEnabled field + per…
relmer Jun 3, 2026
c29bc5c
feat(006): T018/T019/T020/T021 wire multimon-enabled into app + dialog
relmer Jun 3, 2026
4cffde5
feat(006): T022/T023/T025/T026/T027 IAdapterProvider + ResolveAdapter…
relmer Jun 3, 2026
9cd698c
feat(006): T028 WindowsAdapterProvider (real DXGI enumeration)
relmer Jun 3, 2026
96478cd
feat(006): T024/T029/T030/T031 + T032/T033/T034 GpuAdapter end-to-end…
relmer Jun 3, 2026
b9de13a
feat(006): T035/T036/T037 GPU adapter dialog wire-up
relmer Jun 3, 2026
08bcf89
feat(006): T038/T039 + T040/T041 FrameLimiter, refresh-gated frame ca…
relmer Jun 3, 2026
3f7729d
feat(006): T042+T045 QualityPresets module (TDD)
relmer Jun 3, 2026
cd33b58
feat(006): T046-T050 parametric bloom + glow-disable + settings persi…
relmer Jun 3, 2026
763fdfe
feat(006): T051+T052 first-run heuristic + controller methods
relmer Jun 3, 2026
b8e1ee6
feat(006): T053/T054/T056/T057 US5 dialog wire-up (quality preset + a…
relmer Jun 3, 2026
ed80f59
feat(006): T055 dynamic dialog resize on advanced toggle
relmer Jun 4, 2026
141f0aa
feat(006): T058 infotip indicators + hover tooltips
relmer Jun 4, 2026
a7b42ff
feat(006): T059 keyboard activation for infotips via TTM_TRACKACTIVATE
relmer Jun 4, 2026
4b8bb8b
test(006): T043+T044 registry + controller tests for US5 settings
relmer Jun 4, 2026
b449181
docs(006): T062+T063 changelog entry + mark spec as Implemented
relmer Jun 4, 2026
0bd29c8
fix(006): live preview of preset/advanced changes (gap discovered pos…
relmer Jun 4, 2026
e452b31
docs(006): mark T010-T060/T062/T063 complete in tasks.md (T061 + T059…
relmer Jun 4, 2026
fd3c21e
docs(006): remove infotip known-issue from CHANGELOG (T059 cosmetic r…
relmer Jun 4, 2026
05e1666
feat(006): T059 use Unicode U+24D8 'ⓘ' (circled i) for infotip indica…
relmer Jun 4, 2026
5af3512
docs(006): mark T059 complete (cosmetic ⓘ glyph resolved via Unicode)
relmer Jun 4, 2026
ade5dfb
docs(006): uncheck T060 (manual UI walkthrough not actually performed)
relmer Jun 4, 2026
ead52d8
fix(006): hide all 12 advanced-block controls, shrink groupbox, widen…
relmer Jun 4, 2026
1fa63c9
fix(006): infotips as owner-drawn ⓘ glyphs, GPU dropdown alignment
relmer Jun 4, 2026
281c530
fix(ui): convert Quality combo to slider, taller sliders for tick vis…
relmer Jun 4, 2026
cd46005
fix(ui): infotips between prompt and slider, darker tick marks via NM…
relmer Jun 4, 2026
ed3c51a
fix(ui): compute tick positions from range+freq, full dialog layout o…
relmer Jun 4, 2026
09e6285
feat(ui): rename to 'Glow ...' prompts, remove advanced disclosure, f…
relmer Jun 4, 2026
3680068
fix(ui): focus rect erase, symmetric margins, working tooltips, drop …
relmer Jun 4, 2026
1b05554
fix(render): GPU load uses wall-clock denominator + 6-frame query pip…
relmer Jun 4, 2026
aa367c3
fix(dialog): skip context rebuild on Cancel when no rebuild-worthy fi…
relmer Jun 5, 2026
43f2d0c
fix(ui): add app manifest with comctl32 v6 dependency to enable theme…
relmer Jun 5, 2026
4155f07
feat(stats): GPU% now uses PDH counters to match Task Manager
relmer Jun 5, 2026
7b181a9
fix(ui): widen dialog 25%, two-column checkboxes, drop custom-drawn t…
relmer Jun 5, 2026
416d6bc
fix(ui): align slider prompt + value labels with the channel, not the…
relmer Jun 5, 2026
046b738
fix(stats): GPU% queries all engine types, not just 3D, to match Task…
relmer Jun 5, 2026
7db493b
fix(stats): GPU% — sum within engine type, MAX across types (matches …
relmer Jun 5, 2026
315d8fa
fix(stats): GPU% — query all engine instances system-wide, filter PID…
relmer Jun 5, 2026
533c617
fix(stats): GPU% — drop PID filter, show TOTAL system load (matches T…
relmer Jun 5, 2026
8347b2b
fix(stats): GPU% filters to own PID — should now match Task Manager's…
relmer Jun 5, 2026
edbdeb1
fix(tooltips): perf-impact on own line, drop perf-impact from Glow si…
relmer Jun 5, 2026
8f59e8d
fix(006): address PR review findings
relmer Jun 6, 2026
cf89bf6
style(006): use commented-out Error: label per project convention
relmer Jun 6, 2026
27bcd3f
fix(006): address remaining PR #5 inline review findings
relmer Jun 6, 2026
21583e6
docs(006): add v1.4 row to README What's New table
relmer Jun 6, 2026
2ee7c96
docs(006): reword v1.4 README row to frame as a perf-optimization rel…
relmer Jun 6, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion .github/copilot-instructions.md
Original file line number Diff line number Diff line change
Expand Up @@ -1064,5 +1064,8 @@ git diff # Bad - will paginate

<!-- SPECKIT START -->
For additional context about technologies to be used, project structure,
shell commands, and other important information, read the current plan
shell commands, and other important information, read the current plan at
`specs/006-multimon-gpu-efficiency/plan.md` and its supporting research,
data model, contracts (`specs/006-multimon-gpu-efficiency/contracts/`),
and quickstart documents.
<!-- SPECKIT END -->
1 change: 1 addition & 0 deletions .specify/feature.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"feature_directory":"specs/006-multimon-gpu-efficiency"}
22 changes: 22 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,28 @@ All notable changes to MatrixRain are documented in this file.

## [Unreleased]

### Added

- **User Story 1 (P1) — Runtime topology and device-loss recovery.** MatrixRain now responds to monitors being added or removed while running (WM_DISPLAYCHANGE, coalesced across windows) and to the active GPU becoming unavailable (driver reset, sleep/resume, eGPU unplugged - detected via Present HRESULT). The render context is rebuilt automatically; this fixes the previously-reported "GPU stuck at ~90% after undocking a Surface Book 3" defect where the ghost monitor's render thread continued processing forever.
- **User Story 2 (P1) — Optional multi-monitor spanning.** New "Render on all monitors" checkbox in the configuration dialog (default on). Toggling it live applies within 1 second; Cancel reverts.
- **User Story 3 (P2) — GPU adapter selection.** New "GPU" dropdown in the configuration dialog listing each real adapter name (with "(default)" appended to the system default). Software/WARP adapters are excluded. Selection persists by description string; if the saved adapter is missing at startup, the application silently falls back to the system default. Live device-switch takes effect within 1 second.
- **User Story 4 (P2) — Frame cap on high-refresh monitors.** Per-monitor `FrameLimiter` engages only when the monitor's native refresh exceeds 60 Hz, capping that monitor's rendering to 60 FPS. At ≤60 Hz the existing vsync path is preserved with no measurable per-frame overhead. Substantially reduces GPU work on 144Hz / 165Hz laptop displays.
- **User Story 5 (P3) — Graphics quality preset spectrum.** New "Quality" slider (Low / Medium / High / Custom) in a "Graphics quality" group box. Three discrete tuning sliders are always visible — Glow passes (1-4), Glow resolution (Eighth / Quarter / Half / Full), Glow smoothness (Low / Medium / High). Each quality-related control has an "ⓘ" infotip; hovering or tabbing-then-pressing-Space/Enter reveals a tooltip with a description and standardized GPU-performance-impact phrase. Glow Intensity at 0% now disables the entire bloom pipeline (true off, not just darker). First-run heuristic picks a starting preset based on detected GPU class and total monitor pixel count (discrete → High; integrated + modest load → Medium; integrated + heavy load → Low). Custom-drift behaviour: any direct edit of an advanced control auto-flips the preset to Custom and saves the resulting values for restoration when the user later re-selects Custom.

### Changed

- Bloom pipeline is now runtime-parametric: blur passes (1-4), bloom buffer resolution (full/half/quarter/eighth), and blur kernel taps (5 / 9 / 13) are all selectable per-frame from the quality preset / advanced sliders. Three blur shader variants are compiled at startup so the tap-count switch is free at draw time.
- Default settings on a fresh install now pick a quality preset matched to detected hardware rather than always using the maximum.
- Reset button in the configuration dialog now restores every v1.4 setting (multi-monitor, GPU, quality preset, glow passes / resolution / smoothness) in addition to the v1.3 controls it previously covered.

### Removed

- The backtick (`) debug hotkey that toggled the per-character fade-timer overlay. (The "Show fade timers" dialog checkbox is unchanged.)

### Known Issues

- None known for v1.4 functionality.

## [1.3.1984] - 2026-06-03

### Added
Expand Down
Loading
Loading