- bool shprog_changed = (state.shprog!=pipeline_state.get_shader_program());
- pipeline_state.set_shader_program(state.shprog);
+ PipelineState &ps = get_pipeline_state();
+ bool pipeline_changed = (&ps!=last_pipeline);
+ last_pipeline = &ps;
+
+ bool shprog_changed = (state.shprog!=ps.get_shader_program());
+ ps.set_shader_program(state.shprog);
+
+ bool shdata_changed = changed&SHADER_DATA;
+ for(auto i=shdata_stack.begin(); (!shdata_changed && i!=shdata_stack.end()); ++i)
+ shdata_changed = (i->shdata->get_generation()!=i->generation);
+ bool extra_shdata = (shdata_stack.size()>state.shdata_count);
+
+ if(changed&CAMERA)
+ {
+ shdata_changed = true;
+ changed &= ~CAMERA;
+ }