X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Frenderer.cpp;h=c558757f885654e0646f6392d9866b4bf52b205e;hb=6db6b7e49848e6bbc14f3ec8113ee5a941e4af07;hp=2d262e73bef495501afa333f6e5601a93468a9ac;hpb=5df9e64424dd157da1410b4498f53a4ac21e6aee;p=libs%2Fgl.git diff --git a/source/renderer.cpp b/source/renderer.cpp index 2d262e73..c558757f 100644 --- a/source/renderer.cpp +++ b/source/renderer.cpp @@ -26,8 +26,7 @@ Renderer::Renderer(const Camera *c): matrices_loaded(false), shdata_applied(0), camera(0), - state_stack(1), - element_buffer(0) + state_stack(1) { state_stack.reserve(16); shdata_stack.reserve(32); @@ -62,6 +61,16 @@ void Renderer::begin(const Camera *c) } } +void Renderer::set_matrix(const Matrix &matrix) +{ + mtx_stack.load(matrix); +} + +void Renderer::transform(const Matrix &matrix) +{ + mtx_stack *= matrix; +} + void Renderer::set_texture(const Texture *t) { state->texture = t; @@ -112,11 +121,6 @@ void Renderer::set_mesh(const Mesh *m) state->mesh = m; } -void Renderer::set_element_buffer(const Buffer *b) -{ - element_buffer = b; -} - void Renderer::set_winding_test(const WindingTest *w) { state->winding_test = w; @@ -203,10 +207,10 @@ void Renderer::draw(const Batch &batch) apply_state(); bool legacy_bindings = (!state->shprog || state->shprog->uses_legacy_variables()); - if(legacy_bindings) + if(state->mesh && legacy_bindings) { - if(element_buffer) - element_buffer->bind_to(ELEMENT_ARRAY_BUFFER); + if(const Buffer *ibuf = state->mesh->get_index_buffer()) + ibuf->bind_to(ELEMENT_ARRAY_BUFFER); else Buffer::unbind_from(ELEMENT_ARRAY_BUFFER); } @@ -263,10 +267,7 @@ void Renderer::apply_state() { const Matrix &m = mtx_stack.top(); standard_shdata.uniform("eye_obj_matrix", mtx_stack.top()); - LinAl::SquareMatrix nm; - for(unsigned i=0; i<3; ++i) - for(unsigned j=0; j<3; ++j) - nm(i, j) = m(i, j); + LinAl::SquareMatrix nm = m.block<3, 3>(0, 0); nm = transpose(invert(nm)); standard_shdata.uniform_matrix3("eye_obj_normal_matrix", &nm(0, 0)); changed &= ~MODERN_MATRIX;