summaryrefslogtreecommitdiffstats
path: root/libs/rs/rsProgramVertex.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/rsProgramVertex.cpp
parent9d1a3149f35b716caeda89dad53c0d8c45c6ca4b (diff)
downloadframeworks_base-9bee51c42eb8c3daffe7d6fa483edbb1689b94d2.zip
frameworks_base-9bee51c42eb8c3daffe7d6fa483edbb1689b94d2.tar.gz
frameworks_base-9bee51c42eb8c3daffe7d6fa483edbb1689b94d2.tar.bz2
Remove useless slot from ProgramVertex. Optimize GL state setup.
Diffstat (limited to 'libs/rs/rsProgramVertex.cpp')
-rw-r--r--libs/rs/rsProgramVertex.cpp43
1 files changed, 19 insertions, 24 deletions
diff --git a/libs/rs/rsProgramVertex.cpp b/libs/rs/rsProgramVertex.cpp
index 792135d..c66e488 100644
--- a/libs/rs/rsProgramVertex.cpp
+++ b/libs/rs/rsProgramVertex.cpp
@@ -44,9 +44,14 @@ static void logMatrix(const char *txt, const float *f)
LOGV("%6.2f, %6.2f, %6.2f, %6.2f", f[3], f[7], f[11], f[15]);
}
-void ProgramVertex::setupGL()
+void ProgramVertex::setupGL(ProgramVertexState *state)
{
- const float *f = static_cast<const float *>(mConstants[0]->getPtr());
+ if ((state->mLast.get() == this) && !mDirty) {
+ return;
+ }
+ state->mLast.set(this);
+
+ const float *f = static_cast<const float *>(mConstants->getPtr());
glMatrixMode(GL_TEXTURE);
if (mTextureMatrixEnable) {
@@ -72,7 +77,7 @@ void ProgramVertex::setupGL()
} else {
glDisable(GL_LIGHTING);
}
-
+
if (!f) {
LOGE("Must bind constants to vertex program");
}
@@ -81,16 +86,8 @@ void ProgramVertex::setupGL()
glLoadMatrixf(&f[RS_PROGRAM_VERTEX_PROJECTION_OFFSET]);
glMatrixMode(GL_MODELVIEW);
glLoadMatrixf(&f[RS_PROGRAM_VERTEX_MODELVIEW_OFFSET]);
-}
-
-void ProgramVertex::setConstantType(uint32_t slot, const Type *t)
-{
- mConstantTypes[slot].set(t);
-}
-void ProgramVertex::bindAllocation(uint32_t slot, Allocation *a)
-{
- mConstants[slot].set(a);
+ mDirty = false;
}
void ProgramVertex::addLight(const Light *l)
@@ -103,20 +100,23 @@ void ProgramVertex::addLight(const Light *l)
void ProgramVertex::setProjectionMatrix(const rsc_Matrix *m) const
{
- float *f = static_cast<float *>(mConstants[0]->getPtr());
+ float *f = static_cast<float *>(mConstants->getPtr());
memcpy(&f[RS_PROGRAM_VERTEX_PROJECTION_OFFSET], m, sizeof(rsc_Matrix));
+ mDirty = true;
}
void ProgramVertex::setModelviewMatrix(const rsc_Matrix *m) const
{
- float *f = static_cast<float *>(mConstants[0]->getPtr());
+ float *f = static_cast<float *>(mConstants->getPtr());
memcpy(&f[RS_PROGRAM_VERTEX_MODELVIEW_OFFSET], m, sizeof(rsc_Matrix));
+ mDirty = true;
}
void ProgramVertex::setTextureMatrix(const rsc_Matrix *m) const
{
- float *f = static_cast<float *>(mConstants[0]->getPtr());
+ float *f = static_cast<float *>(mConstants->getPtr());
memcpy(&f[RS_PROGRAM_VERTEX_TEXTURE_OFFSET], m, sizeof(rsc_Matrix));
+ mDirty = true;
}
@@ -139,8 +139,8 @@ void ProgramVertexState::init(Context *rsc, int32_t w, int32_t h)
mDefaultAlloc.set(alloc);
mDefault.set(pv);
- pv->bindAllocation(0, alloc);
-
+ pv->bindAllocation(alloc);
+
Matrix m;
m.loadOrtho(0,w, h,0, -1,1);
alloc->subData(RS_PROGRAM_VERTEX_PROJECTION_OFFSET, 16, &m.m[0]);
@@ -167,15 +167,10 @@ RsProgramVertex rsi_ProgramVertexCreate(Context *rsc)
return pv;
}
-void rsi_ProgramVertexBindAllocation(Context *rsc, RsProgramVertex vpgm, uint32_t slot, RsAllocation constants)
+void rsi_ProgramVertexBindAllocation(Context *rsc, RsProgramVertex vpgm, RsAllocation constants)
{
ProgramVertex *pv = static_cast<ProgramVertex *>(vpgm);
- pv->bindAllocation(slot, static_cast<Allocation *>(constants));
-}
-
-void rsi_ProgramVertexSetType(Context *rsc, uint32_t slot, RsType constants)
-{
- rsc->mStateVertex.mPV->setConstantType(slot, static_cast<const Type *>(constants));
+ pv->bindAllocation(static_cast<Allocation *>(constants));
}
void rsi_ProgramVertexSetTextureMatrixEnable(Context *rsc, bool enable)