diff --git a/src/display/display.cpp b/src/display/display.cpp index a9b21d0..b3baa6d 100644 --- a/src/display/display.cpp +++ b/src/display/display.cpp @@ -23,6 +23,8 @@ bool Display::InitVideoDisplay(std::string title, int x, int y) { return false; } + this->WindowOpen = true; + m_renderer = SDL_CreateRenderer( m_window, -1, SDL_RENDERER_ACCELERATED ); @@ -88,7 +90,11 @@ void Display::Refresh() { } void Display::CloseDisplay() { - + free(Framebuffer); + SDL_DestroyTexture(m_texture); + SDL_DestroyRenderer(m_renderer); + SDL_DestroyWindow(m_window); + SDL_Quit(); } Display::~Display() { diff --git a/src/display/display.hpp b/src/display/display.hpp index f587ad7..a8d8fd3 100644 --- a/src/display/display.hpp +++ b/src/display/display.hpp @@ -13,6 +13,7 @@ public: bool InitVideoDisplay(std::string title, int x, int y); + bool WindowOpen = false; int XRes, YRes; std::string Title; unsigned int Scale = 1; diff --git a/src/inferno.cpp b/src/inferno.cpp index b9bc943..98de93f 100644 --- a/src/inferno.cpp +++ b/src/inferno.cpp @@ -1,5 +1,6 @@ #include "inferno.hpp" +#include #include #include "pixel.hpp" @@ -19,14 +20,17 @@ void InfernoEngine::SetMode(OperationMode mode) { } bool InfernoEngine::InitWindow(int xRes, int yRes) { - if (!m_initialized) { + if (m_initialized) { // warn = return true; } - m_display = new Display(); + if (m_display == nullptr) + m_display = new Display(); - if (!m_display->InitVideoDisplay("Inferno Engine", xRes, yRes)) { + bool status = m_display->InitVideoDisplay("Inferno Engine", xRes, yRes); + + if (!status) { return false; } @@ -38,13 +42,13 @@ bool InfernoEngine::InitWindow(int xRes, int yRes) { void InfernoEngine::Ready() { if (!m_initialized) m_initialized = true; - while (1) { + while (m_display->WindowOpen) { SDL_Event e; while (SDL_PollEvent(&e) == SDL_TRUE) if (e.type == SDL_QUIT) m_display->CloseDisplay(); for (int i = 0; i < 360000; i++) { - m_display->SetPixel(rand() % m_display->XRes, + m_display->SetPixelSafe(rand() % m_display->XRes, rand() % m_display->YRes, rgb888(rand() % 255, rand() % 255, rand() % 255)); } diff --git a/test/main.cpp b/test/main.cpp index 2cb0981..7288962 100644 --- a/test/main.cpp +++ b/test/main.cpp @@ -5,6 +5,7 @@ int main(int argc, char** argv) { InfernoEngine inferno; inferno.SetMode(MODE_PROGRESSIVE_GUI); + bool status = inferno.InitWindow(600, 600); if (!status) { std::cout << "Error initializing window: " << inferno.LastError() << std::endl;