17
0
mirror of https://github.com/MaSzyna-EU07/maszyna.git synced 2026-11-09 05:54:43 +01:00
Files
maszyna/pr-reviews/PR-240.md

2.4 KiB
Raw Blame History

Review PR #240 — fix(gl46): editor cursor depth read in the biased depth pass (port of 7078edf)

Autor: @miloszunio · base: feat/gl46-migration · 2 pliki, +86/−27 · Fixes #238 https://github.com/MaSzyna-EU07/maszyna/pull/240

Werdykt: Approve po teście w symulatorze i poprawkach pod Sonar

Podsumowanie

Port poprawki z Vulkana do GL4.6: odczyt głębokości pod kursorem edytora w przebiegu głębi sceny (z glPolygonOffset(-1,-1)) dawał punkt ~1 piksel dalej — przy kącie ślizgowym nawet metry. Teraz:

  • czytany jest blok 3×3 (PBO, a przy MSAA renderbuffer 3×3),
  • bias jest kompensowany (mniejsza różnica sąsiadów na oś, większa z osi + 2^(ilogb(d)-23)),
  • unprojekcja używa widoku/projekcji/kamery z klatki, w której zlecono odczyt; punkt trzymany w world space (dvec3).

Co jest dobrze

  • Poprawna analiza: przy reversed-Z ujemny offset oddala powierzchnię, więc dodanie m + r ją przywraca.
  • Zapamiętanie widoku z klatki żądania usuwa drugi, niezależny błąd (ruch kamery między żądaniem a odczytem).
  • Sprawdzenie wyniku read_data() zamiast sentinela max().

Uwagi

  1. Brak testu w symulatorze („Not run in the simulator yet”). Proszę przed merge sprawdzić scenariusz z opisu (SSR/AO on, perspektywa, kąt ślizgowy) oraz MSAA on/off i gfx_skippipeline — blit 3×3 z bufora MSAA to nowa ścieżka.
  2. Sonar S3608 / S1188. Lambdy depth_at i slope łapią [&] i nie są przekazywane do algorytmu standardowego — Sonar to zgłosi. Proponuję jawne capture ([&depths, this], [&depth_at, pointdepth]) albo funkcje wolne w anonimowym namespace (depth_bias_slope(depths, size, centre)). Zmniejszy to też złożoność Update_Mouse_Position().
  3. Nagłówki (GCC). std::ldexp, std::ilogb → <cmath>, std::array → <array>. Upewnić się, że są dołączone wprost (lista z CLAUDE.md).
  4. m_mouseknown nigdy nie wraca do false (np. po zmianie scenerii / resecie renderera) — Mouse_Position() zwróci wtedy stary punkt z poprzedniego świata. Drobne, ale łatwo zresetować przy Init()/zmianie scenerii.
  5. Komentarz o biasie jest bardzo długi (7 linii jednym ciągiem) — dobrze, że jest, ale czytelniej byłoby rozbić na punkty lub dać odnośnik do commita Vulkana 7078edf.
  6. Opis PR wspomina „Built with -fsyntax-only” — warto poczekać na pełny build CI na gałęzi feat/gl46-migration.