X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fcore%2Fpipelinestate.cpp;h=feb429a6eb126cc851f600c6e74144c698bcd5d9;hb=11a5d4f2a35dfdcf61e16d4fcfba22e20ea6a3db;hp=210a0703868035dc69572fc56cc50eaf67b9ff08;hpb=c89c1fb972fae2cb2f720cb3ec6cf8238ae8d2e1;p=libs%2Fgl.git diff --git a/source/core/pipelinestate.cpp b/source/core/pipelinestate.cpp index 210a0703..feb429a6 100644 --- a/source/core/pipelinestate.cpp +++ b/source/core/pipelinestate.cpp @@ -2,6 +2,7 @@ #include #include "error.h" #include "pipelinestate.h" +#include "uniformblock.h" using namespace std; @@ -43,11 +44,13 @@ 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) i = uniform_blocks.insert(i, BoundUniformBlock(binding)); - i->used = block; - if(block!=i->block || binding<0) + const Buffer *buffer = (block ? block->get_buffer() : 0); + if(block!=i->block || buffer!=i->buffer || binding<0) { i->block = block; + i->buffer = buffer; i->changed = true; + i->used = block; changes |= UNIFORMS; } } @@ -67,13 +70,13 @@ void PipelineState::set_texture(unsigned binding, const Texture *tex, int level, auto i = lower_bound_member(textures, binding, &BoundTexture::binding); if(i==textures.end() || i->binding!=binding) i = textures.insert(i, BoundTexture(binding)); - i->used = (tex && samp); if(tex!=i->texture || level!=i->level || samp!=i->sampler) { i->texture = tex; i->sampler = samp; i->level = level; i->changed = true; + i->used = (tex && samp); changes |= TEXTURES; } }