]> git.tdb.fi Git - libs/gl.git/blobdiff - source/render/renderer.cpp
Check if any shader data has changed when applying Renderer state
[libs/gl.git] / source / render / renderer.cpp
index 8e8e215f4237fe48444b3a98e257c1d331413e7d..2485a9e26dedfb866c1ff22c513e8f8e9670cf7b 100644 (file)
@@ -391,14 +391,20 @@ void Renderer::apply_state()
                changed &= ~STANDARD_SHDATA;
        }
 
+       bool shdata_changed = changed&SHADER_DATA;
+       for(vector<BoundProgramData>::const_iterator i=shdata_stack.begin(); (!shdata_changed && i!=shdata_stack.end()); ++i)
+               shdata_changed = (i->shdata->get_generation()!=i->generation);
        bool extra_shdata = (shdata_stack.size()>state->shdata_count);
 
-       if((changed&SHADER_DATA) || shprog_changed || extra_shdata)
+       if(shdata_changed || shprog_changed || extra_shdata)
        {
                if(extra_shdata)
                        shdata_stack.erase(shdata_stack.begin()+state->shdata_count, shdata_stack.end());
                for(vector<BoundProgramData>::const_iterator i=shdata_stack.begin(); i!=shdata_stack.end(); ++i)
+               {
                        i->shdata->apply();
+                       i->generation = i->shdata->get_generation();
+               }
                changed &= ~SHADER_DATA;
        }