renderer
This commit is contained in:
@@ -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)
|
||||||
|
|
||||||
|
|||||||
19
include/renderer/renderer.hpp
Normal file
19
include/renderer/renderer.hpp
Normal 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;
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -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
35
src/renderer/renderer.cpp
Normal 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user