void Renderer::set_material(const Material *m)
{
- state->material = m;
- changed |= MATERIAL_SHDATA;
+ if(m)
+ add_shader_data(m->get_shader_data());
}
void Renderer::set_lighting(const Lighting *l)
{
- state->lighting = l;
- changed |= LIGHTING_SHDATA;
+ if(l)
+ add_shader_data(l->get_shader_data());
}
void Renderer::set_clipping(const Clipping *c)
throw stack_underflow("Renderer::pop_state");
const Camera *old_camera = state->camera;
- const Lighting *old_lighting = state->lighting;
const Clipping *old_clipping = state->clipping;
state_stack.pop_back();
state = &state_stack.back();
bool camera_changed = (state->camera!=old_camera);
if(camera_changed)
changed |= CAMERA_SHDATA;
- if(state->lighting!=old_lighting)
- changed |= LIGHTING_SHDATA;
if(state->clipping!=old_clipping)
changed |= CLIPPING_SHDATA;
}
changed &= ~CAMERA_SHDATA;
}
- if(state->material && ((changed&MATERIAL_SHDATA) || shprog_changed))
- {
- state->material->get_shader_data().apply();
- changed &= ~MATERIAL_SHDATA;
- }
-
- if(state->lighting && ((changed&LIGHTING_SHDATA) || shprog_changed))
- {
- state->lighting->get_shader_data().apply();
- changed &= ~LIGHTING_SHDATA;
- }
-
if(state->clipping && ((changed&CLIPPING_SHDATA) || shprog_changed))
{
state->clipping->get_shader_data().apply();
camera(0),
texture_count(0),
lowest_effect_texunit(TexUnit::get_n_units()),
- material(0),
- lighting(0),
clipping(0),
shprog(0),
shdata_count(0),