- glFrontFace(self->front_face==CLOCKWISE ? GL_CW : GL_CCW);
-
- if(self->face_cull!=NO_CULL && self->front_face!=NON_MANIFOLD)
- {
- glEnable(GL_CULL_FACE);
- glCullFace(self->face_cull==CULL_FRONT ? GL_FRONT : GL_BACK);
- }
- else
- glDisable(GL_CULL_FACE);
- }
+ for(const PipelineState::BoundUniformBlock &u: self->uniform_blocks)
+ if(u.changed || mask==~0U)
+ {
+ if(u.block)
+ {
+ if(u.binding>=0)
+ {
+ glBindBufferRange(GL_UNIFORM_BUFFER, u.binding, u.block->get_buffer()->id, u.block->get_offset(), u.block->get_data_size());
+ bound_uniform_blocks[u.binding] = 1;
+ }
+ else if(self->shprog)
+ {
+ const char *data = static_cast<const char *>(u.block->get_data_pointer());
+ for(const Program::UniformCall &call: self->shprog->uniform_calls)
+ call.func(call.location, call.size, data+call.location*16);
+ }
+ }