mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-11-09 05:54:43 +01:00
3.9 KiB
3.9 KiB
Review PR #224 — Migrate from float3d to glm (second approach)
Autor: @docentYT · base: master · 22 pliki, +204/−639
https://github.com/MaSzyna-EU07/maszyna/pull/224
Werdykt: Request changes — build VR, opis, kilka miejsc do sprawdzenia
Podsumowanie
Usunięcie utilities/Float3d.{h,cpp} (float3, float4, float4x4) na rzecz glm::vec3/quat/mat4. TSubModel::fMatrix z wskaźnika (w unii z iMatrix) staje się wartością glm::mat4 {1.0f}; o tym, czy macierz jest niejednostkowa, decyduje już tylko flaga 0x8000. Serializacja .e3d przez nowe utilities/serialize.h.
Co sprawdziłem (OK)
- Kolejność elementów macierzy w
.e3d/.t3d:float4x4::operator()(x)[y]=e[4x+y], aglm::make_mat4(e)jest column-major, więcmatrix[x][y]w nowymreadMatrixi w(de)serialize_float32/64daje dokładnie ten sam układ bajtów. ✔ Pliki binarne pozostają zgodne w obie strony. InitialRotateMatrix()jest wierną kopiąfloat4x4::InitialRotate(). ✔- Brak
new/deletedla macierzy — uwagi z poprzedniej rundy (@jakubg1, @Hirek193) zaadresowane. ✔ BinInit:m.size() > iMatrixprzyiMatrix == -1—-1konwertuje się dosize_tmax, więc warunek jest fałszywy i zostaje jednostkowa. Działa, ale patrz pkt 4.
Uwagi blokujące
- Build z OpenVR się nie skompiluje.
vr/openvr_imp.cpp(linie ~253 i ~349 na master) wołaTSubModel::ReplaceMatrix(), które ten PR usuwa, a plikuvr/PR nie zmienia. CI buduje bez VR, więc tego nie złapie. Trzeba podmienić na przypisaniefMatrixi ustawienieiFlags |= 0x8000(patrz pkt 2). - Flaga
0x8000jest teraz jedynym źródłem prawdy. Wcześniej renderer mnożył przez macierz, gdy wskaźnik nie był pusty. Teraz każde miejsce, które przypisujefMatrixz zewnątrz (VR, ewentualne skrypty, przyszły kod), musi też ustawić flagę, inaczej macierz zostanie po cichu zignorowana. Proponuję setterSetMatrix(glm::mat4 const&), który ustawia/kasuje flagę wg== glm::mat4(1.0f), i prywatnefMatrix. - Inne gałęzie i PR-y. Usunięcie
Float3d.hłamie każdy otwarty kod, który używafloat3— np. #261 dodaje noweSetRotate(float3(1, 0, 0), …), afeat/gl46-migration(#216) pewnie też go używa. Proszę ustalić kolejność merge z maintainerami i zostawić komentarz w #261/#216. Sprawdzić teżbetterRenderer/(np.IntelTAA.hma trafieniafloat3; to prawdopodobnie HLSL, ale build zWITH_BETTER_RENDERER=ONtrzeba przepuścić).
Pozostałe uwagi
if (m.size() > iMatrix)— porównaniesize_tzint(GCC-Wsign-compare, Sonar). Lepiejif (iMatrix >= 0 && static_cast<std::size_t>(iMatrix) < m.size()). To też jawnie pokazuje intencję. Przy okazji: indeks poza zakresem w uszkodzonym pliku był wcześniej UB, teraz jest cicho ignorowany — warto zalogowaćBad model.- Zakomentowany kod w
ParentMatrix()z dopiskiem „It will not work, fMatrix is not a pointer anymore” — lepiej usunąć cały martwy blok (Sonar S125). TSubModel *Root … TODO: Fix missing delete— jeśli to znany wyciek, lepiej osobne issue niż TODO w kodzie wprowadzone przy okazji.- Pamięć: każdy
TSubModelma teraz 64 B macierzy zamiast 8 B wskaźnika, a submodele binarne nie współdzielą już tablicyMatrices. Dla dużych scenerii (tysiące instancji modeli) warto zmierzyć zużycie RAM przed/po — opis wymienia to jako „potential downside”, przydałaby się liczba. - Opis PR jest bardzo skąpy jak na zmianę tej skali. Proszę dopisać: co testowano (np. wczytanie kilku scenerii z
.t3di.e3d, konwersjaconvertmodels, porównanie zrzutów ekranu, pantografy — tam jest dużo matematyki macierzowej), oraz że format plików się nie zmienia. - Formatowanie:
fMatrix =glm::mat4();(brak spacji), mieszane wcięcia wDynObj.cpp(spacje vs tabulatory w zmienianych liniach). SafeNormalizewglmHelpers.h— brak nowej linii na końcu pliku.