|
@@ -9,6 +9,7 @@
|
|
|
#include "game/graphics/renderer.hpp"
|
|
#include "game/graphics/renderer.hpp"
|
|
|
#include <vector>
|
|
#include <vector>
|
|
|
|
|
|
|
|
|
|
+#include "game/graphics/object.hpp"
|
|
|
#include "game/graphics/vertex.h"
|
|
#include "game/graphics/vertex.h"
|
|
|
#include "matrix/matrix.hpp"
|
|
#include "matrix/matrix.hpp"
|
|
|
#include "renderer_impl.hpp"
|
|
#include "renderer_impl.hpp"
|
|
@@ -26,6 +27,12 @@ renderer_impl * get_renderer_impl(driver d) {
|
|
|
|
|
|
|
|
direct_renderer::direct_renderer(driver d) : pimpl(::get_renderer_impl(d)) {}
|
|
direct_renderer::direct_renderer(driver d) : pimpl(::get_renderer_impl(d)) {}
|
|
|
|
|
|
|
|
|
|
+void direct_renderer::draw(object const & obj) {
|
|
|
|
|
+ std::vector<vertex> verts;
|
|
|
|
|
+ vertices(verts, obj);
|
|
|
|
|
+ draw(obj.material, math::matr4(), verts);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
void direct_renderer::draw(flyweight<material> material, math::matr4 const &,
|
|
void direct_renderer::draw(flyweight<material> material, math::matr4 const &,
|
|
|
std::vector<vertex> const & verts) {
|
|
std::vector<vertex> const & verts) {
|
|
|
pimpl->draw(material, {}, verts);
|
|
pimpl->draw(material, {}, verts);
|
|
@@ -37,11 +44,20 @@ void direct_renderer::flush() { pimpl->flush(); }
|
|
|
batch_renderer::batch_renderer(renderer * impl, std::size_t batch_size)
|
|
batch_renderer::batch_renderer(renderer * impl, std::size_t batch_size)
|
|
|
: impl_(impl), batches_(), batch_size_(batch_size), elements_(0) {}
|
|
: impl_(impl), batches_(), batch_size_(batch_size), elements_(0) {}
|
|
|
|
|
|
|
|
|
|
+void batch_renderer::draw(object const & obj) {
|
|
|
|
|
+ std::vector<vertex> & batch_verts = batches_[obj.material];
|
|
|
|
|
+ auto old_size = batch_verts.size();
|
|
|
|
|
+ vertices(batch_verts, obj);
|
|
|
|
|
+ elements_ += batch_verts.size() - old_size;
|
|
|
|
|
+ check();
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
// TODO (sjaffe): object-to-world matrix...
|
|
// TODO (sjaffe): object-to-world matrix...
|
|
|
void batch_renderer::draw(flyweight<material> material, math::matr4 const &,
|
|
void batch_renderer::draw(flyweight<material> material, math::matr4 const &,
|
|
|
std::vector<vertex> const & verts) {
|
|
std::vector<vertex> const & verts) {
|
|
|
auto & batch_verts = batches_[material];
|
|
auto & batch_verts = batches_[material];
|
|
|
batch_verts.insert(batch_verts.end(), verts.begin(), verts.end());
|
|
batch_verts.insert(batch_verts.end(), verts.begin(), verts.end());
|
|
|
|
|
+ elements_ += verts.size();
|
|
|
check();
|
|
check();
|
|
|
}
|
|
}
|
|
|
|
|
|