- if(shdata_stack.size()>state->shdata_count)
- shdata_stack.erase(shdata_stack.begin()+state->shdata_count, shdata_stack.end());
+ State &state = get_state();
+
+ if(tex)
+ if(ResourceManager *res_mgr = tex->get_manager())
+ res_mgr->resource_used(*tex);
+
+ if(texture_stack.size()>state.texture_count)
+ {
+ BoundTexture &bt = texture_stack[state.texture_count];
+ if(bt.tag==tag && bt.texture==tex && bt.sampler==samp)
+ {
+ ++state.texture_count;
+ return;
+ }
+ else
+ flush_textures();
+ }
+
+ for(auto i=texture_stack.end(); i!=texture_stack.begin(); )
+ if((--i)->tag==tag)
+ {
+ i->replaced = texture_stack.size();
+ break;
+ }
+
+ texture_stack.push_back(BoundTexture());
+ BoundTexture &bound_tex = texture_stack.back();
+ bound_tex.tag = tag;
+ bound_tex.texture = tex;
+ bound_tex.sampler = samp;
+ state.texture_count = texture_stack.size();