X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fmodel.cpp;h=032fc150a9e449c12bc68d62c98609280fee09a8;hb=482114e156e91729f2529ea6bb1fe98dacdee97f;hp=bbfc97f4fcfb121f8646feec9d59680213958189;hpb=32a385382b73072438c99b533686a4bb9ba4742c;p=blank.git diff --git a/src/model.cpp b/src/model.cpp index bbfc97f..032fc15 100644 --- a/src/model.cpp +++ b/src/model.cpp @@ -3,17 +3,35 @@ namespace blank { -Model::Model( - std::vector &&vtx, - std::vector &&col, - std::vector &&norm -) -: vertices(vtx) -, colors(col) -, normals(norm) -, handle{} { +Model::Model() +: vertices() +, colors() +, normals() +, handle{} +, dirty(false) { glGenBuffers(ATTRIB_COUNT, handle); +} + +Model::~Model() { + glDeleteBuffers(ATTRIB_COUNT, handle); +} + + +void Model::Clear() { + vertices.clear(); + colors.clear(); + normals.clear(); + Invalidate(); +} +void Model::Reserve(int s) { + vertices.reserve(s); + colors.reserve(s); + normals.reserve(s); +} + + +void Model::Update() { glBindBuffer(GL_ARRAY_BUFFER, handle[ATTRIB_VERTEX]); glBufferData(GL_ARRAY_BUFFER, vertices.size() * sizeof(glm::vec3), vertices.data(), GL_STATIC_DRAW); @@ -22,14 +40,16 @@ Model::Model( glBindBuffer(GL_ARRAY_BUFFER, handle[ATTRIB_NORMAL]); glBufferData(GL_ARRAY_BUFFER, normals.size() * sizeof(glm::vec3), normals.data(), GL_STATIC_DRAW); -} -Model::~Model() { - glDeleteBuffers(ATTRIB_COUNT, handle); + dirty = false; } void Model::Draw() { + if (dirty) { + Update(); + } + glEnableVertexAttribArray(ATTRIB_VERTEX); glBindBuffer(GL_ARRAY_BUFFER, handle[ATTRIB_VERTEX]); glVertexAttribPointer(