summaryrefslogtreecommitdiffstats
path: root/libs/rs/rsFont.cpp
diff options
context:
space:
mode:
authorJason Sams <rjsams@android.com>2010-11-17 15:29:32 -0800
committerJason Sams <rjsams@android.com>2010-11-17 15:29:32 -0800
commita17af04e62a3f40f729e7ebb8bd868d192e18405 (patch)
tree1cbd4b4e3fcb86d318b2825758fcf89733adf3e0 /libs/rs/rsFont.cpp
parent81c4cea9ec4b08f8c06fdef86d51069adb739eb7 (diff)
downloadframeworks_base-a17af04e62a3f40f729e7ebb8bd868d192e18405.zip
frameworks_base-a17af04e62a3f40f729e7ebb8bd868d192e18405.tar.gz
frameworks_base-a17af04e62a3f40f729e7ebb8bd868d192e18405.tar.bz2
Create holder inner class for pushing context state.
Fix bug with rsForEach corrupting parent context state. Remove workaround from rsBalls. Change-Id: I43a948536e70d44645d1c2ef7b97e1c5906f6943
Diffstat (limited to 'libs/rs/rsFont.cpp')
-rw-r--r--libs/rs/rsFont.cpp26
1 files changed, 5 insertions, 21 deletions
diff --git a/libs/rs/rsFont.cpp b/libs/rs/rsFont.cpp
index 96e350d..e4d77b2 100644
--- a/libs/rs/rsFont.cpp
+++ b/libs/rs/rsFont.cpp
@@ -613,18 +613,12 @@ void FontState::checkInit() {
}
void FontState::issueDrawCommand() {
+ Context::PushState ps(mRSC);
- ObjectBaseRef<const ProgramVertex> tmpV(mRSC->getVertex());
- mRSC->setVertex(mRSC->getDefaultProgramVertex());
-
- ObjectBaseRef<const ProgramRaster> tmpR(mRSC->getRaster());
- mRSC->setRaster(mRSC->getDefaultProgramRaster());
-
- ObjectBaseRef<const ProgramFragment> tmpF(mRSC->getFragment());
- mRSC->setFragment(mFontShaderF.get());
-
- ObjectBaseRef<const ProgramStore> tmpPS(mRSC->getFragmentStore());
- mRSC->setFragmentStore(mFontProgramStore.get());
+ mRSC->setProgramVertex(mRSC->getDefaultProgramVertex());
+ mRSC->setProgramRaster(mRSC->getDefaultProgramRaster());
+ mRSC->setProgramFragment(mFontShaderF.get());
+ mRSC->setProgramStore(mFontProgramStore.get());
if (mConstantsDirty) {
mFontShaderFConstant->data(mRSC, &mConstants, sizeof(mConstants));
@@ -632,10 +626,6 @@ void FontState::issueDrawCommand() {
}
if (!mRSC->setupCheck()) {
- mRSC->setVertex((ProgramVertex *)tmpV.get());
- mRSC->setRaster((ProgramRaster *)tmpR.get());
- mRSC->setFragment((ProgramFragment *)tmpF.get());
- mRSC->setFragmentStore((ProgramStore *)tmpPS.get());
return;
}
@@ -651,12 +641,6 @@ void FontState::issueDrawCommand() {
mIndexBuffer->uploadCheck(mRSC);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, mIndexBuffer->getBufferObjectID());
glDrawElements(GL_TRIANGLES, mCurrentQuadIndex * 6, GL_UNSIGNED_SHORT, (uint16_t *)(0));
-
- // Reset the state
- mRSC->setVertex((ProgramVertex *)tmpV.get());
- mRSC->setRaster((ProgramRaster *)tmpR.get());
- mRSC->setFragment((ProgramFragment *)tmpF.get());
- mRSC->setFragmentStore((ProgramStore *)tmpPS.get());
}
void FontState::appendMeshQuad(float x1, float y1, float z1,