This commit is contained in:
2026-03-10 22:06:38 +01:00
parent aaa753859d
commit 72f9bd4579
5 changed files with 79 additions and 1 deletions

View File

@@ -14,6 +14,11 @@ FetchContent_Declare(
GIT_TAG release-2.30.3 GIT_TAG release-2.30.3
) )
# Work around PipeWire API mismatch on some Linux distributions.
# Disable PipeWire backend in SDL; PulseAudio/ALSA backends remain available.
set(SDL_PIPEWIRE OFF CACHE BOOL "Disable SDL PipeWire backend" FORCE)
set(SDL_PIPEWIRE_SHARED OFF CACHE BOOL "Disable dynamic PipeWire loading in SDL" FORCE)
# Make SDL available # Make SDL available
FetchContent_MakeAvailable(SDL2) FetchContent_MakeAvailable(SDL2)

View File

@@ -0,0 +1,19 @@
#pragma once
#include <SDL2/SDL.h>
#include <iostream>
namespace Game::Renderer {
class Renderer {
public:
Renderer();
~Renderer();
bool init(SDL_Window* window);
void clear();
void present();
private:
SDL_Renderer* mRenderer;
};
}

View File

@@ -5,6 +5,7 @@
#include <iostream> #include <iostream>
#include <utils.hpp> #include <utils.hpp>
#include <renderer/renderer.hpp>
namespace Game::Window { namespace Game::Window {
class Window { class Window {
@@ -18,6 +19,7 @@ namespace Game::Window {
private: private:
SDL_Window *mWindow; SDL_Window *mWindow;
Renderer::Renderer mRenderer;
bool mRunning; bool mRunning;
}; };
} }

35
src/renderer/renderer.cpp Normal file
View File

@@ -0,0 +1,35 @@
#include <renderer/renderer.hpp>
#include <utils.hpp>
namespace Game::Renderer {
Renderer::Renderer() : mRenderer(nullptr) {}
Renderer::~Renderer() {
if (mRenderer) {
SDL_DestroyRenderer(mRenderer);
}
}
bool Renderer::init(SDL_Window* window) {
mRenderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
if (!mRenderer) {
std::string errorMsg = "Failed to create renderer: " + std::string(SDL_GetError());
ERROR(errorMsg.c_str());
return false;
}
SDL_SetRenderDrawColor(mRenderer, 0, 0, 255, 255); // Temp
LOG("Renderer created successfully");
return true;
}
void Renderer::clear() {
SDL_RenderClear(mRenderer);
}
void Renderer::present() {
SDL_RenderPresent(mRenderer);
}
}

View File

@@ -1,13 +1,14 @@
#include <window/window.hpp> #include <window/window.hpp>
namespace Game::Window { namespace Game::Window {
Window::Window() : mWindow(nullptr), mRunning(false) {} Window::Window() : mWindow(nullptr), mRunning(false), mRenderer() {}
Window::~Window() { Window::~Window() {
if (mWindow) { if (mWindow) {
SDL_DestroyWindow(mWindow); SDL_DestroyWindow(mWindow);
mWindow = nullptr; mWindow = nullptr;
mRunning = false; mRunning = false;
LOG("Window destroyed successfully");
SDL_Quit(); SDL_Quit();
} }
} }
@@ -16,6 +17,16 @@ namespace Game::Window {
if (SDL_Init(SDL_INIT_VIDEO) < 0) { return false; } if (SDL_Init(SDL_INIT_VIDEO) < 0) { return false; }
mWindow = SDL_CreateWindow(title.c_str(), SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, width, height, SDL_WINDOW_SHOWN); mWindow = SDL_CreateWindow(title.c_str(), SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, width, height, SDL_WINDOW_SHOWN);
if (!mWindow) { if (!mWindow) {
ERROR("Failed to create window: " << SDL_GetError());
SDL_Quit();
return false;
}
LOG("Window created successfully");
if (!mRenderer.init(mWindow)) {
SDL_DestroyWindow(mWindow);
mWindow = nullptr;
SDL_Quit(); SDL_Quit();
return false; return false;
} }
@@ -32,7 +43,13 @@ namespace Game::Window {
if (event.type == SDL_QUIT) { if (event.type == SDL_QUIT) {
mRunning = false; mRunning = false;
} }
// Handle other events (e.g., keyboard, mouse) here
} }
mRenderer.clear();
// Render game objects here
mRenderer.present();
} }
} }
} }