X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fbackends%2Fopengl%2Fpipelinestate_backend.cpp;h=cda3439cbb6750b0a66ba8eaa0374371c019f859;hb=f82ef71;hp=738de3ac5fea34250f29659a09752e2208d497e7;hpb=271760e6099bf5f4ad90894697dab911c236a0a3;p=libs%2Fgl.git diff --git a/source/backends/opengl/pipelinestate_backend.cpp b/source/backends/opengl/pipelinestate_backend.cpp index 738de3ac..cda3439c 100644 --- a/source/backends/opengl/pipelinestate_backend.cpp +++ b/source/backends/opengl/pipelinestate_backend.cpp @@ -30,6 +30,7 @@ const OpenGLPipelineState *OpenGLPipelineState::last_applied = 0; vector OpenGLPipelineState::bound_tex_targets; vector OpenGLPipelineState::bound_uniform_blocks; unsigned OpenGLPipelineState::restart_index = 0; +unsigned OpenGLPipelineState::n_clip_distances = 0; OpenGLPipelineState::OpenGLPipelineState() { @@ -88,8 +89,23 @@ void OpenGLPipelineState::apply(unsigned mask) const } if(mask&PipelineState::SHPROG) + { glUseProgram(self->shprog ? self->shprog->id : 0); + unsigned ncd = (self->shprog ? self->shprog->get_n_clip_distances() : 0); + if(ncd!=n_clip_distances) + { + for(unsigned i=0; (ivertex_setup; @@ -123,18 +139,6 @@ void OpenGLPipelineState::apply(unsigned mask) const glDisable(GL_CULL_FACE); } - if(mask&PipelineState::CLIP_PLANES) - { - unsigned max_clip_planes = DeviceInfo::get_global().limits.max_clip_planes; - for(unsigned i=0; ienabled_clip_planes>>i)&1) - glEnable(GL_CLIP_PLANE0+i); - else - glDisable(GL_CLIP_PLANE0+i); - } - } - if(mask&PipelineState::TEXTURES) { for(const PipelineState::BoundTexture &t: self->textures) @@ -243,11 +247,9 @@ void OpenGLPipelineState::clear() glUseProgram(0); glBindVertexArray(0); - unsigned max_clip_planes = DeviceInfo::get_global().limits.max_clip_planes; - unsigned enabled_clip_planes = static_cast(last_applied)->enabled_clip_planes; - for(unsigned i=0; i>i)&1) - glDisable(GL_CLIP_PLANE0+i); + for(unsigned i=0; i