void Renderer::set_material(const Material *m)
{
state->material = m;
+ changed |= MATERIAL_SHDATA;
}
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 |= LIGHTING;
+ changed |= STANDARD_SHDATA;
+ }
+ changed |= LEGACY_LIGHTING;
}
void Renderer::set_clipping(const Clipping *c)
state->clipping_matrix = mtx_stack.top();
if(c)
c->update_shader_data(standard_shdata, mtx_stack.top());
- changed |= CLIPPING;
+ changed |= LEGACY_CLIPPING;
}
void Renderer::set_shader_program(const Program *p, const ProgramData *d)
{
if(state->lighting)
state->lighting->update_shader_data(standard_shdata, state->lighting_matrix);
- changed |= LIGHTING;
+ changed |= LEGACY_LIGHTING;
}
if(state->clipping!=old_clipping)
{
if(state->clipping)
state->clipping->update_shader_data(standard_shdata, state->clipping_matrix);
- changed |= CLIPPING;
+ changed |= LEGACY_CLIPPING;
}
}
else
Material::unbind();
- if(changed&LIGHTING)
+ if(changed&LEGACY_LIGHTING)
{
if(state->lighting)
{
MatrixStack::modelview() = state->lighting_matrix;
state->lighting->bind();
- changed = (changed&~LIGHTING)|LEGACY_MATRIX;
+ changed = (changed&~LEGACY_LIGHTING)|LEGACY_MATRIX;
}
else
Lighting::unbind();
{
if(legacy_bindings)
{
- if(changed&CLIPPING)
+ if(changed&LEGACY_CLIPPING)
{
MatrixStack::modelview() = state->clipping_matrix;
state->clipping->bind(true);
- changed = (changed&~CLIPPING)|LEGACY_MATRIX;
+ changed = (changed&~LEGACY_CLIPPING)|LEGACY_MATRIX;
}
}
else
LinAl::SquareMatrix<float, 3> 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)