+ if(changed&MATRIX)
+ {
+ standard_shdata.uniform("world_obj_matrix", state->model_matrix);
+ LinAl::SquareMatrix<float, 3> nm = state->model_matrix.block<3, 3>(0, 0);
+ nm = transpose(invert(nm));
+ standard_shdata.uniform("world_obj_normal_matrix", nm);
+ changed &= ~MATRIX;
+ }
+
+ bool shprog_changed = (state->shprog!=pipeline_state.get_shader_program());
+ pipeline_state.set_shader_program(state->shprog);
+
+ if(state->vertex_setup)
+ {
+ if(const VertexArray *array = state->vertex_setup->get_vertex_array())
+ array->refresh();
+ if(const VertexArray *array = state->vertex_setup->get_instance_array())
+ array->refresh();
+ }
+ pipeline_state.set_vertex_setup(state->vertex_setup);
+
+ pipeline_state.set_front_face(state->front_face);
+ pipeline_state.set_face_cull(state->face_cull);
+ pipeline_state.set_enabled_clip_planes(state->clipping ? (1<<state->clipping->get_n_planes())-1 : 0);