Path SDL3 GPU amb PostFX passthrough; Screen amb init/shutdown explicit (v0.4.0)

This commit is contained in:
JailDesigner committed 2026-04-18 22:50:04 +02:00
1 parent 0348acb0eb
commit 6c8ef9ff44
18 files changed
+14213 -38

No files matched your search

+8 -11
View File
@@ -22,13 +22,6 @@ Director::Director() {
std::fprintf(stderr, "SDL_Init failed: %s\n", SDL_GetError());
}
// Registrem SDL_Quit ABANS de tocar cap singleton: així el handler atexit
// s'executa DESPRÉS dels destructors estàtics de Screen i Cache (atexit
// registrat abans de la construcció d'un objecte estàtic corre després
// del seu destructor). Sense açò, Screen::~Screen cridaria SDL_Destroy*
// amb SDL ja apagat → caos de destrucció clàssic.
std::atexit(+[] { SDL_Quit(); });
// Prepara la carpeta de sistema (~/.config/jailgames/aee_2026/) i carrega
// les opcions; si no existeix config.yaml el crea amb els defaults.
createSystemFolder();
@@ -37,9 +30,8 @@ Director::Director() {
std::cerr << "Director: no s'ha pogut carregar ni desar config.yaml a " << system_folder_ << '\n';
}
// Forcem la construcció dels singletons en l'ordre desitjat: primer
// Screen (necessari per a renderitzar), després Cache. La destrucció
// estàtica anirà LIFO: Cache primer, Screen últim.
// Screen es configura ara (subsystem + finestra + GPU/renderer); la seua
// destrucció la fa aquest Director (veure ~Director). Res de static dtor.
Screen::get().configure(Options::buildScreenConfig());
(void)Resource::Cache::get();
@@ -48,8 +40,13 @@ Director::Director() {
}
Director::~Director() {
// Ordre imprescindible: primer l'escena (pot tenir recursos), després
// Screen (GPU device, finestra, subsystem de vídeo), i finalment SDL_Quit.
// Fer-ho així -- NO via atexit -- evita crashes a vkDestroyInstance quan
// el runtime desfà les llibreries abans que corren els destructors estàtics.
current_scene_.reset();
// SDL_Quit corre via atexit; els singletons via destrucció estàtica.
Screen::get().shutdown();
SDL_Quit();
}
void Director::createSystemFolder() {