- pipeline_state.set_depth_test(state->depth_test);
- pipeline_state.set_stencil_test(state->stencil_test);
- pipeline_state.set_blend(state->blend);
+ if(state.vertex_setup)
+ {
+ if(const VertexArray *array = state.vertex_setup->get_vertex_array())
+ array->refresh(frame_index);
+ if(const VertexArray *array = state.vertex_setup->get_instance_array())
+ array->refresh(frame_index);
+ }
+ pipeline_state.set_vertex_setup(state.vertex_setup);
+
+ pipeline_state.set_front_face(state.front_face);
+ pipeline_state.set_face_cull(state.face_cull);
+
+ if(state.texture_count<texture_stack.size())
+ flush_textures();
+
+ for(const BoundTexture &t: texture_stack)
+ if(t.texture && t.replaced<0)
+ {
+ if(t.binding<0 || shprog_changed)
+ t.binding = state.shprog->get_uniform_binding(t.tag);
+ if(t.binding>=0)
+ pipeline_state.set_texture(t.binding, t.texture, t.level, t.sampler);
+ }
+
+ static const DepthTest default_depth_test;
+ pipeline_state.set_depth_test(state.depth_test ? *state.depth_test : default_depth_test);
+ static const StencilTest default_stencil_test;
+ pipeline_state.set_stencil_test(state.stencil_test ? *state.stencil_test : default_stencil_test);
+ static const Blend default_blend;
+ pipeline_state.set_blend(state.blend ? *state.blend : default_blend);