Renderers no longer have an init function and are expected to be prepared in their constructor (whatever it is)

We can do something similar for input processor (probably a good idea?) or go with the plan for game and use a template, engine can know about the renderers as long as it treats them as generic pointers, but shouldn't know about the game
Game can either be a templated make_unique or we can just enforce a game class naming
Or pass game in at start loop
This commit is contained in:
2022-01-20 08:49:32 -05:00
parent bc6fa836b0
commit a01ff2ec0e
5 changed files with 38 additions and 40 deletions

View File

@@ -2,40 +2,9 @@
// Created by m on 12/3/21.
//
#include <cstdio>
#include <utility>
#include "sdlrenderer.hpp"
void SdlRenderer::initialize(RendererParams params) {
if(SDL_Init(SDL_INIT_VIDEO) < 0) {
printf("SDL vide oinit failed: %s\n", SDL_GetError());
exit(EXIT_FAILURE);
}
auto img_flags = IMG_INIT_PNG;
if(!(IMG_Init(img_flags) & img_flags)) {
printf("Failed to init image loading: %s\n", IMG_GetError());
exit(EXIT_FAILURE);
}
if(TTF_Init() < 0) {
printf("Failed to initialize font loading: %s\n", TTF_GetError());
exit(EXIT_FAILURE);
}
SDL_Window* sdl_window = SDL_CreateWindow(params.title.c_str(), SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, params.width, params.height, SDL_WINDOW_SHOWN);
if(sdl_window == nullptr) {
printf("error making window: %s\n", SDL_GetError());
exit(EXIT_FAILURE);
}
else {
this->window = std::unique_ptr<SDL_Window, SDL_WindowDeleter>(sdl_window);
SDL_Renderer* sdl_renderer = SDL_CreateRenderer(this->window.get(), -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
this->renderer = std::shared_ptr<SDL_Renderer>(sdl_renderer, SDL_DestroyRenderer);
this->texture_manager = std::make_unique<SdlTextureManager>(this->renderer);
this->font_manager = std::make_unique<SdlFontManager>();
this->renderer_params = params;
SDL_RenderClear(this->renderer.get());
}
}
void SdlRenderer::flush() {
SDL_RenderPresent(this->renderer.get());
SDL_SetRenderDrawColor(this->renderer.get(), COLOR_BLACK.r, COLOR_BLACK.g, COLOR_BLACK.b, COLOR_BLACK.a);
@@ -90,3 +59,34 @@ void SdlRenderer::draw_sprite(Sprite sprite, int x, int y) {
auto source = SDL_Rect{src_x, src_y, sprite_sheet->sprite_width, sprite_sheet->sprite_height};
render_texture(x, y, texture, &source);
}
SdlRenderer::SdlRenderer(RendererParams renderer_params) : renderer_params(std::move(renderer_params)) {
if(SDL_Init(SDL_INIT_VIDEO) < 0) {
printf("SDL vide oinit failed: %s\n", SDL_GetError());
exit(EXIT_FAILURE);
}
auto img_flags = IMG_INIT_PNG;
if(!(IMG_Init(img_flags) & img_flags)) {
printf("Failed to init image loading: %s\n", IMG_GetError());
exit(EXIT_FAILURE);
}
if(TTF_Init() < 0) {
printf("Failed to initialize font loading: %s\n", TTF_GetError());
exit(EXIT_FAILURE);
}
SDL_Window* sdl_window = SDL_CreateWindow(renderer_params.title.c_str(), SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, renderer_params.width, renderer_params.height, SDL_WINDOW_SHOWN);
if(sdl_window == nullptr) {
printf("error making window: %s\n", SDL_GetError());
exit(EXIT_FAILURE);
}
else {
this->window = std::unique_ptr<SDL_Window, SDL_WindowDeleter>(sdl_window);
SDL_Renderer* sdl_renderer = SDL_CreateRenderer(this->window.get(), -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
this->renderer = std::shared_ptr<SDL_Renderer>(sdl_renderer, SDL_DestroyRenderer);
this->texture_manager = std::make_unique<SdlTextureManager>(this->renderer);
this->font_manager = std::make_unique<SdlFontManager>();
SDL_RenderClear(this->renderer.get());
}
}