X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Frenderer.cpp;h=3ddb3a6553acd3e1c9ae1593d40dc639e7a07ece;hp=8daa13ce414bbc508a6924064ac282392a7bfb5c;hb=b781d8d1d713e28ec21a66a9d78eb3fc01f327e5;hpb=e9374cde7e471b0150140b37e5bd7cd5a0d720d9 diff --git a/source/renderer.cpp b/source/renderer.cpp index 8daa13ce..3ddb3a65 100644 --- a/source/renderer.cpp +++ b/source/renderer.cpp @@ -92,6 +92,7 @@ unsigned Renderer::allocate_effect_texunit() void Renderer::set_material(const Material *m) { state->material = m; + changed |= MATERIAL_SHDATA; } void Renderer::set_lighting(const Lighting *l) @@ -99,7 +100,10 @@ void Renderer::set_lighting(const Lighting *l) state->lighting = l; state->lighting_matrix = mtx_stack.top(); if(l) + { l->update_shader_data(standard_shdata, mtx_stack.top()); + changed |= STANDARD_SHDATA; + } changed |= LIGHTING; } @@ -305,12 +309,20 @@ void Renderer::apply_state() 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; + changed = (changed&~MODERN_MATRIX)|STANDARD_SHDATA; } - if(state->material) + if(state->material && (changed&MATERIAL_SHDATA)) + { state->material->get_shader_data().apply(); - standard_shdata.apply(); + changed &= ~MATERIAL_SHDATA; + } + + if(changed&STANDARD_SHDATA) + { + standard_shdata.apply(); + changed &= ~STANDARD_SHDATA; + } } if((changed&SHADER_DATA) || shprog_changed)