}
}
-void PipelineState::set_uniforms(const DefaultUniformBlock *block)
-{
- set_uniform_block_(-1, block);
-}
-
-void PipelineState::set_uniform_block(unsigned binding, const BufferBackedUniformBlock *block)
-{
- set_uniform_block_(binding, block);
-}
-
-void PipelineState::set_uniform_block_(int binding, const UniformBlock *block)
+void PipelineState::set_uniform_block(int binding, const UniformBlock *block)
{
auto i = lower_bound_member(uniform_blocks, binding, &BoundUniformBlock::binding);
if(i==uniform_blocks.end() || i->binding!=binding)
bound_tex_targets[t.binding] = t.texture->target;
glBindSampler(t.binding, t.sampler->id);
+ t.sampler->refresh();
}
t.changed = false;
{
if(u.binding>=0)
{
- const BufferBackedUniformBlock *block = static_cast<const BufferBackedUniformBlock *>(u.block);
- glBindBufferRange(GL_UNIFORM_BUFFER, u.binding, block->get_buffer()->id, block->get_offset(), block->get_data_size());
+ 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
- static_cast<const DefaultUniformBlock *>(u.block)->apply();
+ else if(shprog)
+ {
+ const char *data = static_cast<const char *>(u.block->get_data_pointer());
+ for(const Program::UniformCall &call: shprog->uniform_calls)
+ call.func(call.location, call.size, data+call.location*16);
+ }
}
u.changed = false;