LifePlay-Revival/Docs/Migration/etat/VQ/VQ2/VQ2-IMPL-H.md
edujiro5972 0f1a61c9fe VQ : qualite video (sous-systeme LPVideoQuality, onglet Reglages, DefaultScalability), lots VQ0 a VQ5 et correctifs (CHG-237 a 242)
LifePlay.uproject : SupportedTargetPlatforms Win64 sur LPAnimCore, origine non revendiquee, range ici.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 01:40:47 +02:00

3.3 KiB

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).