improve memory cleanup
still bad tho. we leak a-lot. idrc it's a testing repo.
This commit is contained in:
parent
6d6bac8ca1
commit
0f9f72af4e
@ -13,11 +13,13 @@ public:
|
|||||||
void setPosition(glm::vec3 p);
|
void setPosition(glm::vec3 p);
|
||||||
void setScale(glm::vec3 s);
|
void setScale(glm::vec3 s);
|
||||||
void setRotation(glm::quat r);
|
void setRotation(glm::quat r);
|
||||||
void setOwned(bool o);
|
void setOwnedBuffers(bool o);
|
||||||
|
void setOwnedShader(bool o);
|
||||||
Shader *getShader();
|
Shader *getShader();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool buffersOwned;
|
bool buffersOwned;
|
||||||
|
bool shaderOwned;
|
||||||
int count;
|
int count;
|
||||||
unsigned int VAO;
|
unsigned int VAO;
|
||||||
Shader *shader;
|
Shader *shader;
|
||||||
|
|||||||
@ -47,10 +47,13 @@ int main(void) {
|
|||||||
Shader *cubeShader = new Shader("./shaders/lighting/Vert.glsl",
|
Shader *cubeShader = new Shader("./shaders/lighting/Vert.glsl",
|
||||||
"./shaders/lighting/Frag.glsl");
|
"./shaders/lighting/Frag.glsl");
|
||||||
Mesh *cube = new Mesh(cubeShader, VAO, 36);
|
Mesh *cube = new Mesh(cubeShader, VAO, 36);
|
||||||
|
cube->setOwnedShader(true);
|
||||||
|
|
||||||
Shader *lightShader = new Shader("./shaders/lighting/Vert.glsl",
|
Shader *lightShader = new Shader("./shaders/lighting/Vert.glsl",
|
||||||
"./shaders/lighting/LightFrag.glsl");
|
"./shaders/lighting/LightFrag.glsl");
|
||||||
Mesh *light = new Mesh(lightShader, VAO, 36);
|
Mesh *light = new Mesh(lightShader, VAO, 36);
|
||||||
|
light->setOwnedShader(true);
|
||||||
|
|
||||||
glm::vec3 lightPos = glm::vec3(1, 2.0f, 1);
|
glm::vec3 lightPos = glm::vec3(1, 2.0f, 1);
|
||||||
light->setPosition(lightPos);
|
light->setPosition(lightPos);
|
||||||
light->setScale(glm::vec3(.3));
|
light->setScale(glm::vec3(.3));
|
||||||
@ -87,6 +90,9 @@ int main(void) {
|
|||||||
processInput(window);
|
processInput(window);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
delete cam;
|
||||||
|
delete cube;
|
||||||
|
delete light;
|
||||||
glfwTerminate();
|
glfwTerminate();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
17
src/mesh.cpp
17
src/mesh.cpp
@ -3,11 +3,18 @@
|
|||||||
#include <mesh.hpp>
|
#include <mesh.hpp>
|
||||||
|
|
||||||
Mesh::Mesh(Shader *s, unsigned int VAO, int count)
|
Mesh::Mesh(Shader *s, unsigned int VAO, int count)
|
||||||
: buffersOwned(false), count(count), VAO(VAO), shader(s),
|
: buffersOwned(false), shaderOwned(false), count(count), VAO(VAO),
|
||||||
position(glm::vec3(0)), scale(glm::vec3(1)),
|
shader(s), position(glm::vec3(0)), scale(glm::vec3(1)),
|
||||||
rotation(glm::quat(1.0f, 0.0f, 0.0f, 0.0f)) {}
|
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) {
|
void Mesh::draw(Camera *c) {
|
||||||
glm::mat4 model = glm::mat4(1);
|
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::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; }
|
Shader *Mesh::getShader() { return shader; }
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user