Remove useless slot from ProgramVertex. Optimize GL state setup.
diff --git a/libs/rs/rsProgramFragment.cpp b/libs/rs/rsProgramFragment.cpp
index 628f93e..ea507dc 100644
--- a/libs/rs/rsProgramFragment.cpp
+++ b/libs/rs/rsProgramFragment.cpp
@@ -39,8 +39,13 @@
{
}
-void ProgramFragment::setupGL()
+void ProgramFragment::setupGL(ProgramFragmentState *state)
{
+ if ((state->mLast.get() == this) && !mDirty) {
+ return;
+ }
+ state->mLast.set(this);
+
for (uint32_t ct=0; ct < MAX_TEXTURE; ct++) {
glActiveTexture(GL_TEXTURE0 + ct);
if (!(mTextureEnableMask & (1 << ct)) || !mTextures[ct].get()) {
@@ -90,8 +95,8 @@
}
}
-
glActiveTexture(GL_TEXTURE0);
+ mDirty = false;
}
@@ -104,6 +109,7 @@
//LOGE("bindtex %i %p", slot, a);
mTextures[slot].set(a);
+ mDirty = true;
}
void ProgramFragment::bindSampler(uint32_t slot, Sampler *s)
@@ -114,6 +120,7 @@
}
mSamplers[slot].set(s);
+ mDirty = true;
}
void ProgramFragment::setType(uint32_t slot, const Element *e, uint32_t dim)
@@ -190,7 +197,7 @@
ProgramFragment *pf = static_cast<ProgramFragment *>(vpf);
pf->bindTexture(slot, static_cast<Allocation *>(a));
if (pf == rsc->getFragment()) {
- pf->setupGL();
+ //pf->setupGL();
}
}
@@ -200,7 +207,7 @@
pf->bindSampler(slot, static_cast<Sampler *>(s));
if (pf == rsc->getFragment()) {
- pf->setupGL();
+ //pf->setupGL();
}
}