// sdl_manager.cpp - Implementació del gestor SDL3 // © 2025 Port a C++20 amb SDL3 #include "sdl_manager.hpp" #include SDLManager::SDLManager(int amplada, int alcada, const char* titol) : finestra_(nullptr), renderer_(nullptr), inicialitzat_(false) { // Inicialitzar SDL3 if (!SDL_Init(SDL_INIT_VIDEO)) { std::cerr << "Error inicialitzant SDL3: " << SDL_GetError() << std::endl; return; } // Crear finestra finestra_ = SDL_CreateWindow( titol, amplada, alcada, SDL_WINDOW_RESIZABLE ); if (!finestra_) { std::cerr << "Error creant finestra: " << SDL_GetError() << std::endl; SDL_Quit(); return; } // Crear renderer amb acceleració i vsync // En SDL3, els flags són diferents o s'especifiquen diferent renderer_ = SDL_CreateRenderer(finestra_, nullptr); if (!renderer_) { std::cerr << "Error creant renderer: " << SDL_GetError() << std::endl; SDL_DestroyWindow(finestra_); SDL_Quit(); return; } inicialitzat_ = true; std::cout << "SDL3 inicialitzat correctament" << std::endl; } SDLManager::~SDLManager() { if (renderer_) { SDL_DestroyRenderer(renderer_); renderer_ = nullptr; } if (finestra_) { SDL_DestroyWindow(finestra_); finestra_ = nullptr; } SDL_Quit(); std::cout << "SDL3 netejat correctament" << std::endl; } void SDLManager::neteja(uint8_t r, uint8_t g, uint8_t b) { if (!renderer_) return; SDL_SetRenderDrawColor(renderer_, r, g, b, 255); SDL_RenderClear(renderer_); } void SDLManager::presenta() { if (!renderer_) return; SDL_RenderPresent(renderer_); } bool SDLManager::processar_events() { if (!inicialitzat_) return false; SDL_Event event; while (SDL_PollEvent(&event)) { switch (event.type) { case SDL_EVENT_QUIT: return false; case SDL_EVENT_KEY_DOWN: // En SDL3, la tecla està en event.key.key en lloc de event.key.keysym.sym if (event.key.key == SDLK_ESCAPE) { return false; } break; } } return true; }