diff --git a/src/engine/controller/controller.hh b/src/engine/controller/controller.hh index 7a5bbda..85979ac 100644 --- a/src/engine/controller/controller.hh +++ b/src/engine/controller/controller.hh @@ -17,6 +17,7 @@ class Controller { virtual bool IsButtonPressed(Button button) { return 0; }; virtual float GetLeftJoystickXAxis() { return 0.0; }; virtual float GetLeftJoystickYAxis() { return 0.0; }; + virtual ~Controller() {}; protected: virtual int GetButtonMask(Button button) { return 0; } diff --git a/src/engine/engine.cc b/src/engine/engine.cc index d50161e..8fea3d3 100644 --- a/src/engine/engine.cc +++ b/src/engine/engine.cc @@ -34,6 +34,10 @@ bool Engine::ShouldWindowClose() { return engine->ShouldWindowClose(); } +Engine::~Engine() { + delete engine; +} + void Engine::initScreen() { glClearColor(0.0f, 0.0f, 0.0f, 0.0f); glViewport(0, 0, 640, 480); diff --git a/src/engine/engine.hh b/src/engine/engine.hh index bad26ac..61f99ae 100644 --- a/src/engine/engine.hh +++ b/src/engine/engine.hh @@ -39,6 +39,8 @@ class Engine { void initializeController(); void initializeEngine(); void initializeGameLoop(); + void cleanupEngine(); + virtual ~Engine(); struct Vector3 { static Vector3 zero(); float x; diff --git a/src/engine/linuxEngine.cc b/src/engine/linuxEngine.cc index 280f07f..d59d98a 100644 --- a/src/engine/linuxEngine.cc +++ b/src/engine/linuxEngine.cc @@ -1,3 +1,4 @@ +#include #ifdef __linux__ #include "linuxEngine.hh" @@ -45,4 +46,11 @@ void LinuxEngine::SwapBuffers() { bool LinuxEngine::ShouldWindowClose() { return glfwWindowShouldClose(this->window); } + +LinuxEngine::~LinuxEngine() { + delete controller; + glfwDestroyWindow(window); + glfwTerminate(); + window = nullptr; +} #endif diff --git a/src/engine/linuxEngine.hh b/src/engine/linuxEngine.hh index 80c6334..c012515 100644 --- a/src/engine/linuxEngine.hh +++ b/src/engine/linuxEngine.hh @@ -1,7 +1,6 @@ #ifndef LINUX_ENGINE_HH #define LINUX_ENGINE_HH #include "nativeEngine.hh" -#include #include class LinuxEngine : public NativeEngine { @@ -9,6 +8,7 @@ class LinuxEngine : public NativeEngine { void initializeEngine() override; void SwapBuffers() override; bool ShouldWindowClose() override; + ~LinuxEngine() override; GLFWwindow* window = nullptr; }; #endif diff --git a/src/engine/nativeEngine.hh b/src/engine/nativeEngine.hh index 8c114d3..7ceb789 100644 --- a/src/engine/nativeEngine.hh +++ b/src/engine/nativeEngine.hh @@ -7,6 +7,7 @@ class NativeEngine { virtual void initializeEngine(){}; virtual void SwapBuffers(){}; virtual bool ShouldWindowClose(){return false;}; + virtual ~NativeEngine() {}; Controller* controller = nullptr; }; #endif diff --git a/src/hello.cc b/src/hello.cc index dfb3b44..5d9ce81 100644 --- a/src/hello.cc +++ b/src/hello.cc @@ -34,4 +34,5 @@ int main(int argc, char *argv[]) { Hello* engine = new Hello; engine->initializeEngine(); engine->initializeGameLoop(); + delete engine; }