Threading for renderer, textures, entities, game state

This commit is contained in:
2026-03-11 09:01:10 +01:00
parent 755e14ad62
commit d748ca63a0
12 changed files with 218 additions and 30 deletions

View File

@@ -5,31 +5,52 @@ namespace Game::Renderer {
Renderer::Renderer() : mRenderer(nullptr) {}
Renderer::~Renderer() {
destroy();
}
void Renderer::destroy() {
if (mRenderer) {
SDL_DestroyRenderer(mRenderer);
mRenderer = nullptr;
LOG("Destroyed Renderer");
}
}
bool Renderer::init(SDL_Window* window) {
mRenderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
mRenderer = SDL_CreateRenderer(window, nullptr);
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
if (!SDL_SetRenderDrawColor(mRenderer, 0, 0, 255, 255)) {
ERROR("Failed to set renderer draw color: " << SDL_GetError());
return false;
}
LOG("Renderer created successfully");
return true;
}
void Renderer::clear() {
SDL_RenderClear(mRenderer);
void Renderer::run(std::stop_token stoken) {
while (!stoken.stop_requested()) {
mClear();
// Get gamestate mutex and render the objects here; GameState::getState().objects or something, idk
mPresent();
}
}
void Renderer::present() {
SDL_RenderPresent(mRenderer);
void Renderer::mClear() {
if (!SDL_RenderClear(mRenderer)) {
ERROR("Failed to clear renderer: " << SDL_GetError());
}
}
void Renderer::mPresent() {
if (!SDL_RenderPresent(mRenderer)) {
ERROR("Failed to present renderer: " << SDL_GetError());
}
}
}

33
src/renderer/texture.cpp Normal file
View File

@@ -0,0 +1,33 @@
#include <renderer/texture.hpp>
namespace Game::Renderer {
Texture::Texture(std::string& path, Renderer* renderer, std::string id)
: mTex(nullptr), mId(id) {
SDL_Surface* surf = IMG_Load(path.c_str());
if (!surf) {
ERROR("Failed to load image at " << path);
return;
}
mTex = SDL_CreateTextureFromSurface(renderer->getSDLRenderer(), surf);
SDL_DestroySurface(surf);
}
Texture::Texture(const Texture& other) {
// Copy the references, since copying memory would require re-initing a bunch of things - for now
this->mTex = other.mTex;
}
Texture& Texture::operator=(const Texture& other) {
// Same reasoning
this->mTex = other.mTex;
return *this;
}
Texture::~Texture() {
if (mTex)
SDL_DestroyTexture(mTex);
LOG("Destroyed texture '" << mId << "'")
}
}