summaryrefslogtreecommitdiff
path: root/libs/rs/rsProgramFragment.cpp
diff options
context:
space:
mode:
authorJason Sams <rjsams@android.com>2009-08-05 13:57:03 -0700
committerJason Sams <rjsams@android.com>2009-08-05 13:57:03 -0700
commit9bee51c42eb8c3daffe7d6fa483edbb1689b94d2 (patch)
treeed0f12b149a98299f205173a5563c42599426fe3 /libs/rs/rsProgramFragment.cpp
parent9d1a3149f35b716caeda89dad53c0d8c45c6ca4b (diff)
Remove useless slot from ProgramVertex. Optimize GL state setup.
Diffstat (limited to 'libs/rs/rsProgramFragment.cpp')
-rw-r--r--libs/rs/rsProgramFragment.cpp15
1 files changed, 11 insertions, 4 deletions
diff --git a/libs/rs/rsProgramFragment.cpp b/libs/rs/rsProgramFragment.cpp
index 628f93ec8d6d..ea507dc2fa42 100644
--- a/libs/rs/rsProgramFragment.cpp
+++ b/libs/rs/rsProgramFragment.cpp
@@ -39,8 +39,13 @@ ProgramFragment::~ProgramFragment()
{
}
-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 @@ void ProgramFragment::setupGL()
}
}
-
glActiveTexture(GL_TEXTURE0);
+ mDirty = false;
}
@@ -104,6 +109,7 @@ void ProgramFragment::bindTexture(uint32_t slot, Allocation *a)
//LOGE("bindtex %i %p", slot, a);
mTextures[slot].set(a);
+ mDirty = true;
}
void ProgramFragment::bindSampler(uint32_t slot, Sampler *s)
@@ -114,6 +120,7 @@ void ProgramFragment::bindSampler(uint32_t slot, Sampler *s)
}
mSamplers[slot].set(s);
+ mDirty = true;
}
void ProgramFragment::setType(uint32_t slot, const Element *e, uint32_t dim)
@@ -190,7 +197,7 @@ void rsi_ProgramFragmentBindTexture(Context *rsc, RsProgramFragment vpf, uint32_
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 @@ void rsi_ProgramFragmentBindSampler(Context *rsc, RsProgramFragment vpf, uint32_
pf->bindSampler(slot, static_cast<Sampler *>(s));
if (pf == rsc->getFragment()) {
- pf->setupGL();
+ //pf->setupGL();
}
}