Acaba la migració dels std::cout/cerr a Log::*:
- core/locale, core/ui/ui_config, core/rendering/{screen,text,gif,
surface, sprite/animated_sprite, sdl3gpu/*}.
- game/{options, debug_config, editor/editor_config, levels/level_manager,
map/{map,tilemap,paint_layer}, entities/entity_manager_loadlevel}.
Severitats coherents: warns per a configs absents amb fallback,
errors per a YAML malformat o E/S fallida, infos per a estats.
Resultat:
- 0 occurrences de std::cout/std::cerr a source/.
- Cap #include <iostream> orfà (eliminat de surface.cpp).
- Output funcional idèntic al històric; AEE_LOG filtra (ex.
`AEE_LOG=warn` només mostra warnings, `AEE_LOG=*:warn,Tag:info`
combina globals i overrides).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Els defaults del shader CRT-Pi es duplicaven entre CrtPiParams
(shader_backend.hpp) i CrtPiUniforms (crtpi_pipeline.hpp). Ara
CrtPiUniforms es value-initializa a zeros i CrtPiPipeline::init(),
un cop el pipeline està creat, aplica setParams(CrtPiParams{}) per
a fixar els defaults canònics abans del primer render. Així queda
una sola font de veritat (els defaults del struct CrtPiParams al
interface ShaderBackend).
Build + smoke 5s xvfb OK (exit 124).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
crtpi_frag.msl tenia la línia
float filter_width = (768.0f / u.texture_height) / 3.0f;
amb dues constants soltes (768 i 3) sense explicar. Ara es declaren
al mateix shader com CRT_REFERENCE_HEIGHT i SUBPIXEL_DIV amb un
comentari explicant que 768 és l'alçada CRT de referència on es va
tarar el filtre i 3 el nombre de subpíxels (R/G/B) del multisample.
Build + smoke 5s xvfb OK (exit 124).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Screen ja no inclou sdl3gpu/sdl3gpu_shader.hpp ni instancia la classe
concreta. S'afegeix la fàbrica Rendering::makeDefaultShaderBackend()
declarada a shader_backend.hpp i implementada a sdl3gpu_shader.cpp
(únic fitxer que encara coneix la classe concreta).
Per a que Screen no necessite static_cast, releaseWindow() passa a ser
mètode virtual pur de la interfície ShaderBackend (abans només existia
a SDL3GPUShader). SDL3GPUShader::releaseWindow marca override.
Build + smoke 5s xvfb OK (exit 124).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Els dos pipelines GPU (PostFX i CrtPi) tenien:
- Raw strings MSL incrustades al .cpp amb NOLINTBEGIN(readability-
identifier-naming) envoltant ~150 línies cadascun.
- Funcions createShaderMSL / createShaderSPIRV duplicades byte a byte
en cada .cpp (DUP-04), amb un comentari admetent-ho.
- El vertex shader postfx_vs escrit dues voltes, idèntic (DUP-05).
S'introdueixen:
- source/core/rendering/sdl3gpu/shader_factory.hpp amb els dos helpers
inline, per a reutilitzar des de qualsevol pipeline.
- source/core/rendering/sdl3gpu/msl/ amb un header per shader
(postfx_vert compartit, postfx_frag, crtpi_frag); cada constant es
diu kCamelCase i cau per defecte sota el project naming, així que
els blocs NOLINT desapareixen (PATCH-07).
- Suppresió a cppcheck per a sdl3gpu/msl/* (és MSL, no C++).
Els .cpp es redueixen ~190 línies cada un i queden només amb la
lògica del pipeline.
Build + smoke test de 5s sota xvfb OK (exit 124).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>