Files
MapLibreParticleLab/src/mbgl/gl/vertex_array.hpp
2019-03-06 16:12:51 +01:00

72 lines
1.4 KiB
C++

#pragma once
#include <mbgl/gl/object.hpp>
#include <mbgl/gl/attribute.hpp>
#include <mbgl/gl/state.hpp>
#include <mbgl/gl/value.hpp>
#include <array>
#include <memory>
namespace mbgl {
namespace gfx {
class IndexBuffer;
} // namespace gfx
namespace gl {
class Context;
class VertexArrayState {
public:
VertexArrayState(UniqueVertexArray vertexArray_)
: vertexArray(std::move(vertexArray_)) {
}
void setDirty() {
indexBuffer.setDirty();
for (auto& binding : bindings) {
binding.setDirty();
}
}
UniqueVertexArray vertexArray;
State<value::BindElementBuffer> indexBuffer;
using AttributeState = State<value::VertexAttribute, Context&, AttributeLocation>;
std::vector<AttributeState> bindings;
};
class VertexArrayStateDeleter {
public:
VertexArrayStateDeleter(bool destroy_)
: destroy(destroy_) {}
void operator()(VertexArrayState* ptr) const {
if (destroy) {
delete ptr;
}
}
private:
bool destroy;
};
using UniqueVertexArrayState = std::unique_ptr<VertexArrayState, VertexArrayStateDeleter>;
class VertexArray {
public:
VertexArray(UniqueVertexArrayState state_)
: state(std::move(state_)) {
}
void bind(Context&, const gfx::IndexBuffer&, const AttributeBindingArray&);
private:
UniqueVertexArrayState state;
};
} // namespace gl
} // namespace mbgl