feat(main): activa SDL_MAIN_USE_CALLBACKS
main.cpp queda amb les 4 callbacks de SDL3: AppInit construeix el Director, AppEvent enruta cada event a handleEvent(), AppIterate crida iterate(), AppQuit reabsorbeix la propietat amb unique_ptr. El Director::run() i el bucle while interns desapareixen; el bootstrap de SDLManager/Audio/Context/DebugOverlay/Notifier viu ara al final del constructor. SDL_Quit() ja no es crida explícitament — SDL ho fa després de SDL_AppQuit.
This commit is contained in:
+29
-5
@@ -1,12 +1,36 @@
|
||||
// main.cpp - Punt d'entrada de l'aplicació
|
||||
// main.cpp - Punt d'entrada amb SDL_MAIN_USE_CALLBACKS
|
||||
// © 2026 JailDesigner
|
||||
//
|
||||
// El Director és EL programa: posseeix la configuració, els subsistemes i
|
||||
// el bucle. main.cpp només construeix el Director i delega.
|
||||
// l'estat. Aquestes 4 callbacks són la fontaneria mínima que SDL3 demana
|
||||
// per arrencar, processar events, iterar i tancar.
|
||||
|
||||
#define SDL_MAIN_USE_CALLBACKS 1
|
||||
|
||||
#include <SDL3/SDL.h>
|
||||
#include <SDL3/SDL_main.h>
|
||||
|
||||
#include <memory>
|
||||
|
||||
#include "core/system/director.hpp"
|
||||
|
||||
auto main(int argc, char* argv[]) -> int {
|
||||
Director director(argc, argv);
|
||||
return director.run();
|
||||
auto SDL_AppInit(void** appstate, int argc, char* argv[]) -> SDL_AppResult {
|
||||
auto director = std::make_unique<Director>(argc, argv);
|
||||
*appstate = director.release();
|
||||
return SDL_APP_CONTINUE;
|
||||
}
|
||||
|
||||
auto SDL_AppEvent(void* appstate, SDL_Event* event) -> SDL_AppResult {
|
||||
auto* director = static_cast<Director*>(appstate);
|
||||
return director->handleEvent(*event);
|
||||
}
|
||||
|
||||
auto SDL_AppIterate(void* appstate) -> SDL_AppResult {
|
||||
auto* director = static_cast<Director*>(appstate);
|
||||
return director->iterate();
|
||||
}
|
||||
|
||||
void SDL_AppQuit(void* appstate, SDL_AppResult /*result*/) {
|
||||
// Reabsorbim la propietat: el destructor del Director allibera tot.
|
||||
std::unique_ptr<Director> director(static_cast<Director*>(appstate));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user