diff --git a/engine/NBGraphics/Buffers.hpp b/engine/NBGraphics/Buffers.hpp index 4df38f3..7132a6c 100644 --- a/engine/NBGraphics/Buffers.hpp +++ b/engine/NBGraphics/Buffers.hpp @@ -138,7 +138,7 @@ class Buffer : public OpenGLObject { _usage = usage_; } virtual void data(const ByteVector& data_, GLenum usage_=GL_STATIC_DRAW) { - data(Target, data_.size(), data_.data(), usage_); + data(data_.data(), data_.size(), usage_); } virtual void subdata(void* data_, GLsizeiptr size_, GLintptr offset_=0) { diff --git a/engine/NBGraphics/VertexArray.hpp b/engine/NBGraphics/VertexArray.hpp index 30afe3a..b092e6c 100644 --- a/engine/NBGraphics/VertexArray.hpp +++ b/engine/NBGraphics/VertexArray.hpp @@ -51,16 +51,19 @@ class VAOError : public Error { template class VertexBuffer : public ArrayBuffer{ - using Base = ArrayBuffer; + using Base = ArrayBuffer; public: template - VertexBuffer(const VertexAttributeList& vas, Args... args) + VertexBuffer(const VertexAttributeList& vas={}, Args... args) : attributes(vas) { if (sizeof...(Args)) { data(args...); } } + VertexBuffer(VertexBuffer&& rhs) + : attributes(rhs.attributes), Base(std::move(rhs)){} + using Base::Target; const VertexAttributeList attributes; @@ -104,7 +107,7 @@ class VAO : public OpenGLObject { if(_id) { glBindVertexArray(_id); } else { - THROW(Codes::INVALID_VAO); + THROW(VAOError(Codes::INVALID_VAO)); } } virtual void unbind() const override { glBindVertexArray(0); } diff --git a/engine/NBGraphics/src/VertexArray.cpp b/engine/NBGraphics/src/VertexArray.cpp index 01d3c63..1914cf2 100644 --- a/engine/NBGraphics/src/VertexArray.cpp +++ b/engine/NBGraphics/src/VertexArray.cpp @@ -141,7 +141,7 @@ std::vector>> VertexGroup::buffers() { } size_t VertexGroup::buffers(std::vector>&& bufs_) { - _vertex_data = {}; + _vertex_data.clear(); for (auto& buf : bufs_) { _vertex_data.emplace_back( std::make_shared>(std::move(buf)) @@ -166,13 +166,16 @@ VertexBuffer&& VertexGroup::dropBuffer(size_t idx) { THROW(BufferError(BufferError::Codes::INVALID_BUFFER)); } std::vector> tmp; + std::shared_ptr> ret_ptr; + size_t i = 0; for (auto buf : _vertex_data) { - tmp.emplace_back(std::move(*buf)); + if (i == idx) { + ret_ptr = std::make_shared>(std::move(tmp[idx])); + } else { + tmp.emplace_back(std::move(*buf)); + } + i++; } - _vertex_data.clear(); - std::shared_ptr> ret_ptr = - std::make_shared>(std::move(tmp[idx])); - tmp.erase(tmp.begin()+idx); buffers(std::move(tmp)); return std::move(*ret_ptr); }