Select Git revision
FixedArray.cpp
-
BATON Theau authoredBATON Theau authored
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
VertexArrayGroup.cpp 1.55 KiB
#include "VertexArrayGroup.hpp"
#include <engine/graphics/utility/array_generator.hpp>
namespace megu {
VertexArrayGroup::VertexArrayGroup()
: _vbo(this->_vao, Quads::Layout(), Quads::Vertices(), megu::EditMode::STATIC) {
Source vert("assets/shaders/Grid-Instanced.vert", Source::Categorie::VERTEX);
this->_program.attach(vert);
Source frag("assets/shaders/Grid-Instanced.frag", Source::Categorie::FRAGMENT);
this->_program.attach(frag);
this->_program.link();
vert.release();
frag.release();
}
void VertexArrayGroup::add(const Texture & texture, const VerticesArray & grid) {
this->_objects[texture].push_back(grid);
}
void VertexArrayGroup::draw(const Window &, const Camera & camera, const TextureArray &) const {
this->_vao.bind();
this->_program.use();
this->_program.setUniform("uProj", camera.projection());
this->_program.setUniform("uView", camera.view());
for(const auto & [texture, grids] : this->_objects) {
texture.get().bind(0);
for(const auto & grid : grids) {
this->_program.setUniform("uModel", grid.get().transformation().model());
this->_program.setUniform("uSampler", 0);
this->_program.setUniform("uData", static_cast<const void *>(grid.get().vertices().data()), grid.get().size());
glDrawArraysInstanced(Quads::Primitive(), 0, static_cast<GLsizei>(this->_vbo.size()), static_cast<GLsizei>(grid.get().size()));
}
}
}
}