WIP: Graphics Overhaul #2
@ -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) {
|
||||
|
||||
@ -51,16 +51,19 @@ class VAOError : public Error<VAOError> {
|
||||
|
||||
template <bool Immutable=false>
|
||||
class VertexBuffer : public ArrayBuffer<false>{
|
||||
using Base = ArrayBuffer<Immutable>;
|
||||
using Base = ArrayBuffer<false>;
|
||||
|
||||
public:
|
||||
template<typename... Args>
|
||||
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); }
|
||||
|
||||
@ -141,7 +141,7 @@ std::vector<std::shared_ptr<VertexBuffer<false>>> VertexGroup::buffers() {
|
||||
}
|
||||
|
||||
size_t VertexGroup::buffers(std::vector<VertexBuffer<false>>&& bufs_) {
|
||||
_vertex_data = {};
|
||||
_vertex_data.clear();
|
||||
for (auto& buf : bufs_) {
|
||||
_vertex_data.emplace_back(
|
||||
std::make_shared<VertexBuffer<false>>(std::move(buf))
|
||||
@ -166,13 +166,16 @@ VertexBuffer<false>&& VertexGroup::dropBuffer(size_t idx) {
|
||||
THROW(BufferError(BufferError::Codes::INVALID_BUFFER));
|
||||
}
|
||||
std::vector<VertexBuffer<false>> tmp;
|
||||
std::shared_ptr<VertexBuffer<false>> ret_ptr;
|
||||
size_t i = 0;
|
||||
for (auto buf : _vertex_data) {
|
||||
if (i == idx) {
|
||||
ret_ptr = std::make_shared<VertexBuffer<false>>(std::move(tmp[idx]));
|
||||
} else {
|
||||
tmp.emplace_back(std::move(*buf));
|
||||
}
|
||||
_vertex_data.clear();
|
||||
std::shared_ptr<VertexBuffer<false>> ret_ptr =
|
||||
std::make_shared<VertexBuffer<false>>(std::move(tmp[idx]));
|
||||
tmp.erase(tmp.begin()+idx);
|
||||
i++;
|
||||
}
|
||||
buffers(std::move(tmp));
|
||||
return std::move(*ret_ptr);
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user