diff --git a/src/engine/engine.cpp b/src/engine/engine.cpp index 15ea3a8..df6841f 100644 --- a/src/engine/engine.cpp +++ b/src/engine/engine.cpp @@ -18,8 +18,6 @@ void Engine::start_loop() { if(renderer == nullptr) { throw MissingRendererException(); } - auto render_params = RendererParams{this->config.window_title, this->config.window_width, this->config.window_height, this->config.default_font}; - renderer->initialize(render_params); renderer->flush(); auto game_params = GameInitArgs{this->config.target_fps, this->config.window_width, this->config.window_height}; game->initialize(game_params); @@ -86,8 +84,9 @@ void Engine::parse_config(const std::string& config_file_path) { void Engine::setup_renderer(RendererTypes rendering_engine) { std::unique_ptr rendering_engine_ptr; + auto render_params = RendererParams{this->config.window_title, this->config.window_width, this->config.window_height, this->config.default_font}; switch(rendering_engine) { - case SDL_HARDWARE: rendering_engine_ptr = std::make_unique(); break; + case SDL_HARDWARE: rendering_engine_ptr = std::make_unique(render_params); break; default: throw RLEngineException("Invalid renderer specified"); } this->renderer = std::move(rendering_engine_ptr); diff --git a/src/engine/rendering/renderer.hpp b/src/engine/rendering/renderer.hpp index 90d0f4d..c468585 100644 --- a/src/engine/rendering/renderer.hpp +++ b/src/engine/rendering/renderer.hpp @@ -58,13 +58,12 @@ struct RendererParams { class Renderer { public: - virtual void initialize(RendererParams params)=0; virtual void flush() = 0; virtual void draw_point(int x, int y, Color color) = 0; virtual void draw_text(std::optional details, std::string text,int x, int y)=0; virtual void draw_sprite(Sprite sprite, int x, int y)=0; - virtual ~Renderer() = default;; + virtual ~Renderer() = default; }; #endif //RLA_IIPP_RENDERER_HPP diff --git a/src/engine/rendering/sdl/sdlrenderer.cpp b/src/engine/rendering/sdl/sdlrenderer.cpp index 6c64e7b..34d818d 100644 --- a/src/engine/rendering/sdl/sdlrenderer.cpp +++ b/src/engine/rendering/sdl/sdlrenderer.cpp @@ -2,40 +2,9 @@ // Created by m on 12/3/21. // #include +#include #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_Renderer* sdl_renderer = SDL_CreateRenderer(this->window.get(), -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC); - this->renderer = std::shared_ptr(sdl_renderer, SDL_DestroyRenderer); - - this->texture_manager = std::make_unique(this->renderer); - this->font_manager = std::make_unique(); - 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_Renderer* sdl_renderer = SDL_CreateRenderer(this->window.get(), -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC); + this->renderer = std::shared_ptr(sdl_renderer, SDL_DestroyRenderer); + + this->texture_manager = std::make_unique(this->renderer); + this->font_manager = std::make_unique(); + + SDL_RenderClear(this->renderer.get()); + } +} diff --git a/src/engine/rendering/sdl/sdlrenderer.hpp b/src/engine/rendering/sdl/sdlrenderer.hpp index ff351a9..e50cdb0 100644 --- a/src/engine/rendering/sdl/sdlrenderer.hpp +++ b/src/engine/rendering/sdl/sdlrenderer.hpp @@ -18,8 +18,10 @@ struct SDL_WindowDeleter { class SdlRenderer : public Renderer { public: ~SdlRenderer() override; + + SdlRenderer(RendererParams renderer_params); + void draw_text(std::optional details, std::string text, int x, int y) override; - void initialize(RendererParams params) override; void flush() override; void draw_point(int x, int y, Color color) override; diff --git a/src/main.cpp b/src/main.cpp index 38b3091..8eff7d3 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -7,8 +7,6 @@ #include "engine/input/sdlinputprocessor.hpp" int main() { - - std::unique_ptr renderer = std::make_unique(); std::unique_ptr game = std::make_unique(); std::unique_ptr input_processor = std::make_unique(); auto engine = std::make_unique(std::move(game), std::move(input_processor));