57 lines
3.3 KiB
Markdown
57 lines
3.3 KiB
Markdown
|
|
# VQ2-IMPL-H — Implémentation `ULPVideoQualitySubsystem`
|
||
|
|
|
||
|
|
**Fiches :** VQ2-T2 (+ VQ2-T3 `CategoryOf`)
|
||
|
|
**Rôle :** A-IMPL-H
|
||
|
|
**Date :** 07 octobre 2026
|
||
|
|
**Spec :** `VQ2-SPEC.md`
|
||
|
|
|
||
|
|
## Modèle
|
||
|
|
|
||
|
|
| | Modèle |
|
||
|
|
|---|---|
|
||
|
|
| Prévu | `claude-fable-5-1-thinking-high` (bloqué par policy) |
|
||
|
|
| Attendu (consigne) | `claude-sonnet-5-5-high` (M2+, repli M3) |
|
||
|
|
| **Réel** | `claude-sonnet-5-5-high` (Claude Sonnet 5.5) |
|
||
|
|
|
||
|
|
## Fichiers
|
||
|
|
|
||
|
|
| Fichier | Action |
|
||
|
|
|---|---|
|
||
|
|
| `Source/LifePlay/LPVideoQualitySubsystem.h` | Nouveau : `FLPVideoLevels`, `ULPVideoQualitySubsystem` |
|
||
|
|
| `Source/LifePlay/LPVideoQualitySubsystem.cpp` | Nouveau : SetLevels, RefreshWidgets, Load, Save, EnsureControls, Tick, ApplyToScalability |
|
||
|
|
| `Source/LifePlay/LPSettingsSubsystem.cpp` | `CategoryOf` + `ApplyRows` (T3) |
|
||
|
|
|
||
|
|
`LifePlay.Build.cs` et `LPColorGradeSubsystem.*` inchangés.
|
||
|
|
|
||
|
|
## Réalisé
|
||
|
|
|
||
|
|
- Widgets `LPVideoOverall`, `LPVideoShadows`, `LPVideoTextures`, `LPVideoEffects`, `LPVideoAA`, `LPVideoRecommended`, insérés via `InsertChildAt` avant le premier `LPColor*` (repli `AddChild` + réordonnancement des `LPColor*`).
|
||
|
|
- `ApplyToScalability()` : `Scalability::GetQualityLevels()` puis écriture de 4 champs seulement (`ShadowQuality`, `TextureQuality`, `EffectsQuality`, `AntiAliasingQuality`), `SetQualityLevels(Q, true)`, relecture et repli `sg.*` en `ECVF_SetByConsole` (R1).
|
||
|
|
- Persistance `Saved/Config/Windows/LPVideoQuality.ini` (`Version=1`, `Overall`, `Shadows`, `Textures`, `Effects`, `AA`) ; `Overall` recalculé par `Normalize()` au `Load()`.
|
||
|
|
- Recommended : stub = niveau 2 (High), log `Video : Recommended = stub (High) ; VRAM prevue en VQ3`.
|
||
|
|
- `EnsureControls()` met aussi `ShadowQuality`, `PostProcessQuality`, `PostProcessAAQuality` en `Collapsed`.
|
||
|
|
- T3 `LPSettingsSubsystem.cpp` :
|
||
|
|
- `CategoryOf` : `LPVideo*` → `TabVideo` ; `ShadowQuality`, `PostProcessQuality`, `PostProcessAAQuality` → `TabHidden` (-2) ; `BackButton` → `TabAlways` (-1).
|
||
|
|
- `ApplyRows` : `bShow = Category == TabAlways || (Category != TabHidden && ActiveTab != TabKeyboard && Category == ActiveTab)` ; -1 toujours visible, -2 toujours replié.
|
||
|
|
- Grep : `CategoryOf` n'a qu'un seul appelant (`ApplyRows`).
|
||
|
|
|
||
|
|
## Écarts / choix par rapport à la spec
|
||
|
|
|
||
|
|
- **Drapeau `bConfigured`** : sans INI et sans action du joueur, `ApplyToScalability()` ne fait rien (état moteur préservé, §6.2 « aucun changement »). Les niveaux affichés sont alors relus depuis Scalability à chaque injection du menu. Dès qu'un INI existe ou que `SetLevels` est appelé, les déclencheurs a/b/c réappliquent les niveaux.
|
||
|
|
- Pas de `Save()` à l'initialisation.
|
||
|
|
- `AddRow` : signature adaptée (`ERow`, widget de ligne en sortie) car l'insertion se fait après création des 6 lignes.
|
||
|
|
- Pas de delegate `OnControlsInjected` (Q2) : `ULPSettingsSubsystem::Tick` rappelle `ApplyRows()` quand `GetChildrenCount()` change (à confirmer en VQ2-VAL).
|
||
|
|
|
||
|
|
## Build
|
||
|
|
|
||
|
|
Commande :
|
||
|
|
|
||
|
|
```
|
||
|
|
D:\Game\Launcher\Engine\UE_5.5\Engine\Build\Build.bat -> Engine\Build\BatchFiles\Build.bat
|
||
|
|
LifePlayEditor Win64 Development -Project="D:\Game\LifePlay-master 5.5\LifePlay.uproject"
|
||
|
|
```
|
||
|
|
|
||
|
|
Résultat : **compile OK** (UHT sans erreur, `UnrealEditor-LifePlay.dll` relié, exit code 0, aucun warning/erreur sur les fichiers VQ2).
|
||
|
|
|
||
|
|
Non testé en exécution (VQ2-VAL).
|