improve memory cleanup

still bad tho. we leak a-lot. idrc it's a testing repo.
This commit is contained in:
k 2025-05-27 22:38:56 -04:00
parent 6d6bac8ca1
commit 0f9f72af4e
3 changed files with 22 additions and 5 deletions

View File

@ -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;

View File

@ -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;
}

View File

@ -3,11 +3,18 @@
#include <mesh.hpp>
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; }