Path SDL3 GPU amb PostFX passthrough; Screen amb init/shutdown explicit (v0.4.0)
This commit is contained in:
1 parent
0348acb0eb
commit
6c8ef9ff44
18 files changed
+14213
-38
No files matched your search
@@ -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() {
|
||||
|
||||
Reference in new issue
Block a user