diff --git a/headers/mesh.hpp b/headers/mesh.hpp index 59f9474..bbe3b80 100644 --- a/headers/mesh.hpp +++ b/headers/mesh.hpp @@ -13,11 +13,13 @@ public: void setPosition(glm::vec3 p); void setScale(glm::vec3 s); void setRotation(glm::quat r); - void setOwned(bool o); + void setOwnedBuffers(bool o); + void setOwnedShader(bool o); Shader *getShader(); private: bool buffersOwned; + bool shaderOwned; int count; unsigned int VAO; Shader *shader; diff --git a/src/main.cpp b/src/main.cpp index ad3aba7..2960d54 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -47,10 +47,13 @@ int main(void) { Shader *cubeShader = new Shader("./shaders/lighting/Vert.glsl", "./shaders/lighting/Frag.glsl"); Mesh *cube = new Mesh(cubeShader, VAO, 36); + cube->setOwnedShader(true); Shader *lightShader = new Shader("./shaders/lighting/Vert.glsl", "./shaders/lighting/LightFrag.glsl"); Mesh *light = new Mesh(lightShader, VAO, 36); + light->setOwnedShader(true); + glm::vec3 lightPos = glm::vec3(1, 2.0f, 1); light->setPosition(lightPos); light->setScale(glm::vec3(.3)); @@ -87,6 +90,9 @@ int main(void) { processInput(window); } + delete cam; + delete cube; + delete light; glfwTerminate(); return 0; } diff --git a/src/mesh.cpp b/src/mesh.cpp index a0da980..3aeba9d 100644 --- a/src/mesh.cpp +++ b/src/mesh.cpp @@ -3,11 +3,18 @@ #include Mesh::Mesh(Shader *s, unsigned int VAO, int count) - : buffersOwned(false), count(count), VAO(VAO), shader(s), - position(glm::vec3(0)), scale(glm::vec3(1)), + : buffersOwned(false), shaderOwned(false), count(count), VAO(VAO), + shader(s), position(glm::vec3(0)), scale(glm::vec3(1)), rotation(glm::quat(1.0f, 0.0f, 0.0f, 0.0f)) {} -Mesh::~Mesh() {} +Mesh::~Mesh() { + if (shaderOwned) + delete shader; + if (buffersOwned){ + glDeleteVertexArrays(1, &VAO); + // TODO vbo, ibo + } +} void Mesh::draw(Camera *c) { glm::mat4 model = glm::mat4(1); @@ -28,6 +35,8 @@ void Mesh::setScale(glm::vec3 s) { scale = s; } void Mesh::setRotation(glm::quat r) { rotation = r; } -void Mesh::setOwned(bool o) { buffersOwned = o; } +void Mesh::setOwnedBuffers(bool o) { buffersOwned = o; } + +void Mesh::setOwnedShader(bool o) { shaderOwned = o; } Shader *Mesh::getShader() { return shader; }