]> git.tdb.fi Git - libs/gl.git/blobdiff - source/renderer.cpp
Better tracking of Renderer matrix changes
[libs/gl.git] / source / renderer.cpp
index 71a7dedff1ea09e094fd2b2c9b31ae3246dfadb9..bfd446e9f42ccc30aa47306d26f6d535fe1b4ea9 100644 (file)
@@ -23,6 +23,7 @@ namespace Msp {
 namespace GL {
 
 Renderer::Renderer(const Camera *c):
+       mtx_stack(*this),
        mtx_changed(false),
        camera(c),
        state_stack(1),
@@ -36,10 +37,10 @@ Renderer::Renderer(const Camera *c):
        {
                MatrixStack::projection().push();
                camera->apply();
-               mtx_stack = camera->get_matrix();
+               mtx_stack.load(camera->get_matrix());
        }
        else
-               mtx_stack = MatrixStack::modelview().top();
+               mtx_stack.load(MatrixStack::modelview().top());
 }
 
 Renderer::~Renderer()
@@ -55,12 +56,6 @@ Renderer::~Renderer()
        Buffer::unbind_from(ELEMENT_ARRAY_BUFFER);
 }
 
-MatrixStack &Renderer::matrix_stack()
-{
-       mtx_changed = true;
-       return mtx_stack;
-}
-
 void Renderer::set_texture(const Texture *t)
 {
        state->texture = t;
@@ -121,6 +116,7 @@ void Renderer::pop_state()
        state_stack.pop_back();
        state = &state_stack.back();
        mtx_stack.pop();
+       mtx_changed = true;
 }
 
 void Renderer::escape()
@@ -192,5 +188,15 @@ Renderer::State::State():
        shprog(0)
 { }
 
+
+Renderer::MtxStack::MtxStack(Renderer &r):
+       renderer(r)
+{ }
+
+void Renderer::MtxStack::update()
+{
+       renderer.mtx_changed = true;
+}
+
 } // namespace GL
 } // namespace Msp