Create holder inner class for pushing context state.
Fix bug with rsForEach corrupting parent context state.
Remove workaround from rsBalls.

Change-Id: I43a948536e70d44645d1c2ef7b97e1c5906f6943
diff --git a/rsScriptC.cpp b/rsScriptC.cpp
index 072cc16..ec7780e 100644
--- a/rsScriptC.cpp
+++ b/rsScriptC.cpp
@@ -104,16 +104,16 @@
 
 void ScriptC::setupGLState(Context *rsc) {
     if (mEnviroment.mFragmentStore.get()) {
-        rsc->setFragmentStore(mEnviroment.mFragmentStore.get());
+        rsc->setProgramStore(mEnviroment.mFragmentStore.get());
     }
     if (mEnviroment.mFragment.get()) {
-        rsc->setFragment(mEnviroment.mFragment.get());
+        rsc->setProgramFragment(mEnviroment.mFragment.get());
     }
     if (mEnviroment.mVertex.get()) {
-        rsc->setVertex(mEnviroment.mVertex.get());
+        rsc->setProgramVertex(mEnviroment.mVertex.get());
     }
     if (mEnviroment.mRaster.get()) {
-        rsc->setRaster(mEnviroment.mRaster.get());
+        rsc->setProgramRaster(mEnviroment.mRaster.get());
     }
 }
 
@@ -232,6 +232,7 @@
                          const RsScriptCall *sc) {
     MTLaunchStruct mtls;
     memset(&mtls, 0, sizeof(mtls));
+    Context::PushState ps(rsc);
 
     if (ain) {
         mtls.dimX = ain->getType()->getDimX();