92 lines
2.2 KiB
C++
92 lines
2.2 KiB
C++
// sdl_manager.cpp - Implementació del gestor SDL3
|
|
// © 2025 Port a C++20 amb SDL3
|
|
|
|
#include "sdl_manager.hpp"
|
|
#include <iostream>
|
|
|
|
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;
|
|
}
|