Add named objects and implement support for ProgramFragmentStore and ProgramFragment to be used by name in scripts.
diff --git a/java/Fountain/res/raw/fountain.c b/java/Fountain/res/raw/fountain.c
index 5055c39..afb2fb3 100644
--- a/java/Fountain/res/raw/fountain.c
+++ b/java/Fountain/res/raw/fountain.c
@@ -3,8 +3,8 @@
 #pragma version(1)
 #pragma stateVertex(orthoWindow)
 #pragma stateRaster(flat)
-#pragma stateFragment(color)
-#pragma stateStore(parent)
+#pragma stateFragment(PgmFragBackground)
+#pragma stateFragmentStore(MyBlend)
 
 
 int main(void* con, int ft, int launchID) {
@@ -35,7 +35,7 @@
         }
     }
 
-    contextBindProgramFragment(con, loadI32(con, 0, 7));
+    //contextBindProgramFragment(con, loadI32(con, 0, 7));
     drawRect(con, 0, 256, 0, 512);
     contextBindProgramFragment(con, loadI32(con, 0, 6));
 
diff --git a/java/Fountain/src/com/android/fountain/FountainView.java b/java/Fountain/src/com/android/fountain/FountainView.java
index 3381525..0a6f7c5 100644
--- a/java/Fountain/src/com/android/fountain/FountainView.java
+++ b/java/Fountain/src/com/android/fountain/FountainView.java
@@ -82,6 +82,7 @@
         mRS.programFragmentStoreBlendFunc(RenderScript.BlendSrcFunc.SRC_ALPHA, RenderScript.BlendDstFunc.ONE);
         mRS.programFragmentStoreDepthFunc(RenderScript.DepthFunc.ALWAYS);
         mPFS = mRS.programFragmentStoreCreate();
+        mPFS.setName("MyBlend");
         mRS.contextBindProgramFragmentStore(mPFS);
 
         mRS.samplerBegin();
@@ -92,6 +93,7 @@
 
         mRS.programFragmentBegin(null, null);
         mPF = mRS.programFragmentCreate();
+        mPF.setName("PgmFragParts");
         //mRS.contextBindProgramFragment(mPF);
 
         mRS.programFragmentBegin(null, null);
@@ -100,6 +102,7 @@
         mRS.contextBindProgramFragment(mPF2);
         mPF2.bindTexture(mTexture, 0);
         mPF2.bindSampler(mSampler, 0);
+        mPF2.setName("PgmFragBackground");
 
         mParams[0] = 0;
         mParams[1] = partCount;
diff --git a/java/Fountain/src/com/android/fountain/RenderScript.java b/java/Fountain/src/com/android/fountain/RenderScript.java
index 796fe35..fcfb82d 100644
--- a/java/Fountain/src/com/android/fountain/RenderScript.java
+++ b/java/Fountain/src/com/android/fountain/RenderScript.java
@@ -68,6 +68,8 @@
     native private void nContextBindProgramFragmentStore(int pfs);
     native private void nContextBindProgramFragment(int pf);
 
+    native private void nAssignName(int obj, byte[] name);
+
     native private void nElementBegin();
     native private void nElementAddPredefined(int predef);
     native private void nElementAdd(int kind, int type, int norm, int bits);
@@ -135,6 +137,7 @@
     native private void nProgramFragmentStoreBlendFunc(int src, int dst);
     native private void nProgramFragmentStoreDither(boolean enable);
     native private int  nProgramFragmentStoreCreate();
+    native private void nProgramFragmentStoreDestroy(int pgm);
 
     native private void nProgramFragmentBegin(int in, int out);
     native private void nProgramFragmentBindTexture(int vpf, int slot, int a);
@@ -143,6 +146,7 @@
     native private void nProgramFragmentSetEnvMode(int slot, int env);
     native private void nProgramFragmentSetTexEnable(int slot, boolean enable);
     native private int  nProgramFragmentCreate();
+    native private void nProgramFragmentDestroy(int pgm);
 
 
     private int     mDev;
@@ -166,6 +170,26 @@
         }
 
         int mID;
+        String mName;
+
+        public void setName(String s) throws IllegalStateException, IllegalArgumentException
+        {
+            if(s.length() < 1) {
+                throw new IllegalArgumentException("setName does not accept a zero length string.");
+            }
+            if(mName != null) {
+                throw new IllegalArgumentException("setName object already has a name.");
+            }
+
+            try {
+                byte[] bytes = s.getBytes("UTF-8");
+                nAssignName(mID, bytes);
+                mName = s;
+            } catch (java.io.UnsupportedEncodingException e) {
+                throw new RuntimeException(e);
+            }
+        }
+
         protected void finalize() throws Throwable
         {
             if (mID != 0) {
@@ -661,7 +685,7 @@
         }
 
         public void destroy() {
-            nScriptDestroy(mID);
+            nProgramFragmentStoreDestroy(mID);
             mID = 0;
         }
     }
@@ -712,7 +736,7 @@
         }
 
         public void destroy() {
-            nScriptDestroy(mID);
+            nProgramFragmentDestroy(mID);
             mID = 0;
         }
 
diff --git a/jni/RenderScript_jni.cpp b/jni/RenderScript_jni.cpp
index 677ce0c..2dadf07 100644
--- a/jni/RenderScript_jni.cpp
+++ b/jni/RenderScript_jni.cpp
@@ -62,6 +62,21 @@
 
 // ---------------------------------------------------------------------------
 
+static void
+nAssignName(JNIEnv *_env, jobject _this, jint obj, jbyteArray str)
+{
+    RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
+    LOG_API("nAssignName, con(%p), obj(%p)", con, obj);
+
+    jint len = _env->GetArrayLength(str);
+    jbyte * cptr = (jbyte *) _env->GetPrimitiveArrayCritical(str, 0);
+    rsAssignName((void *)obj, (const char *)cptr);
+    _env->ReleasePrimitiveArrayCritical(str, cptr, JNI_ABORT);
+}
+
+
+// ---------------------------------------------------------------------------
+
 static jint
 nDeviceCreate(JNIEnv *_env, jobject _this)
 {
@@ -662,9 +677,18 @@
 {
     RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
     LOG_API("nProgramFragmentStoreCreate, con(%p)", con);
+
     return (jint)rsProgramFragmentStoreCreate();
 }
 
+static void
+nProgramFragmentStoreDestroy(JNIEnv *_env, jobject _this, jint pgm)
+{
+    RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
+    LOG_API("nProgramFragmentStoreDestroy, con(%p), pgm(%i)", con, pgm);
+    rsProgramFragmentStoreDestroy((RsProgramFragmentStore)pgm);
+}
+
 // ---------------------------------------------------------------------------
 
 static void
@@ -723,6 +747,14 @@
     return (jint)rsProgramFragmentCreate();
 }
 
+static void
+nProgramFragmentDestroy(JNIEnv *_env, jobject _this, jint pgm)
+{
+    RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
+    LOG_API("nProgramFragmentDestroy, con(%p), pgm(%i)", con, pgm);
+    rsProgramFragmentDestroy((RsProgramFragment)pgm);
+}
+
 
 // ---------------------------------------------------------------------------
 
@@ -796,6 +828,7 @@
 {"nDeviceDestroy",                 "(I)V",                                 (void*)nDeviceDestroy },
 {"nContextCreate",                 "(ILandroid/view/Surface;I)I",          (void*)nContextCreate },
 {"nContextDestroy",                "(I)V",                                 (void*)nContextDestroy },
+{"nAssignName",                    "(I[B)V",                               (void*)nAssignName },
 
 {"nElementBegin",                  "()V",                                  (void*)nElementBegin },
 {"nElementAddPredefined",          "(I)V",                                 (void*)nElementAddPredefined },
@@ -858,6 +891,7 @@
 {"nProgramFragmentStoreBlendFunc", "(II)V",                                (void*)nProgramFragmentStoreBlendFunc },
 {"nProgramFragmentStoreDither",    "(Z)V",                                 (void*)nProgramFragmentStoreDither },
 {"nProgramFragmentStoreCreate",    "()I",                                  (void*)nProgramFragmentStoreCreate },
+{"nProgramFragmentStoreDestroy",   "(I)V",                                 (void*)nProgramFragmentStoreDestroy },
 
 {"nProgramFragmentBegin",          "(II)V",                                (void*)nProgramFragmentBegin },
 {"nProgramFragmentBindTexture",    "(III)V",                               (void*)nProgramFragmentBindTexture },
@@ -866,6 +900,7 @@
 {"nProgramFragmentSetEnvMode",     "(II)V",                                (void*)nProgramFragmentSetEnvMode },
 {"nProgramFragmentSetTexEnable",   "(IZ)V",                                (void*)nProgramFragmentSetTexEnable },
 {"nProgramFragmentCreate",         "()I",                                  (void*)nProgramFragmentCreate },
+{"nProgramFragmentDestroy",        "(I)V",                                 (void*)nProgramFragmentDestroy },
 
 {"nContextBindRootScript",         "(I)V",                                 (void*)nContextBindRootScript },
 {"nContextBindProgramFragmentStore","(I)V",                                (void*)nContextBindProgramFragmentStore },
diff --git a/rs.spec b/rs.spec
index 4ffdfce..b7eaed1 100644
--- a/rs.spec
+++ b/rs.spec
@@ -16,6 +16,10 @@
 	param RsProgramVertex pgm
 	}
 
+AssignName {
+	param void *obj
+	param const char *name
+	}
 
 ElementBegin {
 }
@@ -332,6 +336,9 @@
 	ret RsProgramFragmentStore
 	}
 
+ProgramFragmentStoreDestroy {
+	param RsProgramFragmentStore pfs
+	}
 
 
 ProgramFragmentBegin {
@@ -370,6 +377,9 @@
 	ret RsProgramFragment
 	}
 
+ProgramFragmentDestroy {
+	param RsProgramFragment pf
+	}
 
 
 ProgramVertexBegin {
diff --git a/rsContext.cpp b/rsContext.cpp
index 82d6499..ffd03d5 100644
--- a/rsContext.cpp
+++ b/rsContext.cpp
@@ -57,14 +57,17 @@
      eglQuerySurface(mDisplay, mSurface, EGL_HEIGHT, &mHeight);
 }
 
-bool Context::runScript(Script *s)
+bool Context::runScript(Script *s, uint32_t launchID)
 {
     ObjectBaseRef<ProgramFragment> frag(mFragment);
     ObjectBaseRef<ProgramVertex> vtx(mVertex);
     ObjectBaseRef<ProgramFragmentStore> store(mFragmentStore);
 
+    bool ret = s->run(this, launchID);
 
-
+    mFragment.set(frag);
+    mVertex.set(vtx);
+    mFragmentStore.set(store);
     return true;
 
 }
@@ -107,7 +110,7 @@
     glClear(GL_COLOR_BUFFER_BIT);
     glClear(GL_DEPTH_BUFFER_BIT);
 
-    return mRootScript->run(this, 0);
+    return runScript(mRootScript.get(), 0);
 }
 
 void Context::setupCheck()
@@ -243,6 +246,33 @@
     pv->setupGL();
 }
 
+void Context::assignName(ObjectBase *obj, const char *name)
+{
+    rsAssert(!obj->getName());
+    obj->setName(name);
+    mNames.add(obj);
+}
+
+void Context::removeName(ObjectBase *obj)
+{
+    for(size_t ct=0; ct < mNames.size(); ct++) {
+        if (obj == mNames[ct]) {
+            mNames.removeAt(ct);
+            return;
+        }
+    }
+}
+
+ObjectBase * Context::lookupName(const char *name) const
+{
+    for(size_t ct=0; ct < mNames.size(); ct++) {
+        if (!strcmp(name, mNames[ct]->getName())) {
+            return mNames[ct];
+        }
+    }
+    return NULL;
+}
+
 ///////////////////////////////////////////////////////////////////////////////////////////
 //
 
@@ -286,6 +316,11 @@
     rsc->setVertex(pv);
 }
 
+void rsi_AssignName(Context *rsc, void * obj, const char *name)
+{
+    ObjectBase *ob = static_cast<ObjectBase *>(obj);
+    rsc->assignName(ob, name);
+}
 
 
 }
diff --git a/rsContext.h b/rsContext.h
index 929c0f9..184740f 100644
--- a/rsContext.h
+++ b/rsContext.h
@@ -42,7 +42,6 @@
 namespace android {
 namespace renderscript {
 
-
 class Context 
 {
 public:
@@ -77,6 +76,10 @@
 
     void setupCheck();
 
+    void assignName(ObjectBase *obj, const char *name);
+    void removeName(ObjectBase *obj);
+    ObjectBase * lookupName(const char *name) const;
+
 protected:
     Device *mDev;
 
@@ -112,7 +115,7 @@
 
     void initEGL();
 
-    bool runScript(Script *s);
+    bool runScript(Script *s, uint32_t launchID);
     bool runRootScript();
 
     static void * threadProc(void *);
@@ -120,6 +123,8 @@
     // todo: put in TLS
     static Context *gCon;
     Surface *mWndSurface;
+
+    Vector<ObjectBase *> mNames;
 };
 
 
diff --git a/rsObjectBase.cpp b/rsObjectBase.cpp
index f9cb9c8..8660818 100644
--- a/rsObjectBase.cpp
+++ b/rsObjectBase.cpp
@@ -23,6 +23,7 @@
 ObjectBase::ObjectBase()
 {
     mRefCount = 0;
+    mName = NULL;
 }
 
 ObjectBase::~ObjectBase()
@@ -46,3 +47,12 @@
     }
 }
 
+void ObjectBase::setName(const char *name)
+{
+    delete mName;
+    mName = NULL;
+    if (name) {
+        mName = new char[strlen(name) +1];
+        strcpy(mName, name);
+    }
+}
diff --git a/rsObjectBase.h b/rsObjectBase.h
index ca7acda..4c52e9c 100644
--- a/rsObjectBase.h
+++ b/rsObjectBase.h
@@ -33,7 +33,13 @@
     void incRef() const;
     void decRef() const;
 
+    const char * getName() const {
+        return mName;
+    }
+    void setName(const char *);
+
 private:
+    char * mName;
     mutable int32_t mRefCount;
 
 
@@ -49,12 +55,16 @@
 
     ObjectBaseRef(const ObjectBaseRef &ref) {
         mRef = ref.get();
-        mRef->incRef();
+        if (mRef) {
+            mRef->incRef();
+        }
     }
 
     ObjectBaseRef(T *ref) {
         mRef = ref;
-        ref->incRef();
+        if (mRef) {
+            ref->incRef();
+        }
     }
 
     ~ObjectBaseRef() {
@@ -65,10 +75,16 @@
         if (mRef != ref) {
             clear();
             mRef = ref;
-            ref->incRef();
+            if (mRef) {
+                ref->incRef();
+            }
         }
     }
 
+    void set(const ObjectBaseRef &ref) {
+        set(ref.mRef);
+    }
+
     void clear() {
         if (mRef) {
             mRef->decRef();
diff --git a/rsProgramFragment.cpp b/rsProgramFragment.cpp
index 3d316ea..316e791 100644
--- a/rsProgramFragment.cpp
+++ b/rsProgramFragment.cpp
@@ -212,6 +212,14 @@
     return pf;
 }
 
+void rsi_ProgramFragmentDestroy(Context *rsc, RsProgramFragment vpf)
+{
+    ProgramFragment *pf = (ProgramFragment *)vpf;
+    if (pf->getName()) {
+        rsc->removeName(pf);
+    }
+    pf->decRef();
+}
 
 
 }
diff --git a/rsProgramFragment.h b/rsProgramFragment.h
index cc08aea..ed9c49b 100644
--- a/rsProgramFragment.h
+++ b/rsProgramFragment.h
@@ -85,7 +85,7 @@
 
     ObjectBaseRef<Type> mTextureTypes[ProgramFragment::MAX_TEXTURE];
 
-
+    Vector<ProgramFragment *> mPrograms;
 };
 
 
diff --git a/rsProgramFragmentStore.cpp b/rsProgramFragmentStore.cpp
index 7f5d5f4..a1855a6 100644
--- a/rsProgramFragmentStore.cpp
+++ b/rsProgramFragmentStore.cpp
@@ -202,7 +202,6 @@
 }
 
 
-
 namespace android {
 namespace renderscript {
 
@@ -238,7 +237,6 @@
     ProgramFragmentStore *pfs = rsc->mStateFragmentStore.mPFS;
     pfs->incRef();
     rsc->mStateFragmentStore.mPFS = 0;
-
     return pfs;
 }
 
@@ -247,6 +245,17 @@
     rsc->mStateFragmentStore.mPFS->setDitherEnable(enable);
 }
 
+void rsi_ProgramFragmentStoreDestroy(Context *rsc, RsProgramFragmentStore vpfs)
+{
+    ProgramFragmentStore *pfs = (ProgramFragmentStore *)vpfs;
+    if (pfs->getName()) {
+        rsc->removeName(pfs);
+    }
+    pfs->decRef();
+}
+
+
+
 
 }
 }
diff --git a/rsProgramFragmentStore.h b/rsProgramFragmentStore.h
index bbd0f38..d862775 100644
--- a/rsProgramFragmentStore.h
+++ b/rsProgramFragmentStore.h
@@ -76,8 +76,6 @@
     ~ProgramFragmentStoreState();
 
     ProgramFragmentStore *mPFS;
-
-
 };
 
 
diff --git a/rsProgramVertex.cpp b/rsProgramVertex.cpp
index 8e2b82d..a80e2f7 100644
--- a/rsProgramVertex.cpp
+++ b/rsProgramVertex.cpp
@@ -97,7 +97,6 @@
     ProgramVertex *pv = rsc->mStateVertex.mPV;
     pv->incRef();
     rsc->mStateVertex.mPV = 0;
-
     return pv;
 }
 
diff --git a/rsScript.h b/rsScript.h
index 25a21c1..d32f116 100644
--- a/rsScript.h
+++ b/rsScript.h
@@ -19,11 +19,15 @@
 
 #include "rsAllocation.h"
 
+
 // ---------------------------------------------------------------------------
 namespace android {
 namespace renderscript {
 
-    
+class ProgramVertex;
+class ProgramFragment;
+class ProgramRaster;
+class ProgramFragmentStore;
 
 class Script : public ObjectBase
 {
@@ -40,37 +44,10 @@
         float mClearDepth;
         uint32_t mClearStencil;
 
-        enum StateVertex {
-            VTX_ORTHO_WINDOW,
-            VTX_ORTHO_NORMALIZED,
-            VTX_PROJECTION,
-            VTX_PARENT
-        };
-        StateVertex mStateVertex;
-
-        enum StateRaster {
-            RASTER_FLAT,
-            RASTER_SMOOTH,
-            RASTER_PARENT
-        };
-        StateRaster mStateRaster;
-
-        enum StateFragment {
-            FRAGMENT_COLOR,
-            FRAGMENT_TEX_REPLACE,
-            FRAGMENT_TEX_MODULATE,
-            FRAGMENT_PARENT
-        };
-        StateFragment mStateFragment;
-
-        enum StateFragmentStore {
-            FRAGMENT_STORE_ALWAYS_REPLACE,
-            FRAGMENT_STORE_ALWAYS_BLEND,
-            FRAGMENT_STORE_DEPTH_LESS_REPLACE,
-            FRAGMENT_STORE_DEPTH_LESS_BLEND,
-            FRAGMENT_STORE_PARENT
-        };
-        StateFragmentStore mStateFragmentStore;
+        ObjectBaseRef<ProgramVertex> mVertex;
+        ObjectBaseRef<ProgramFragment> mFragment;
+        //ObjectBaseRef<ProgramRaster> mRaster;
+        ObjectBaseRef<ProgramFragmentStore> mFragmentStore;
 
     };
     Enviroment_t mEnviroment;
diff --git a/rsScriptC.cpp b/rsScriptC.cpp
index 49d7872..ae58e5f 100644
--- a/rsScriptC.cpp
+++ b/rsScriptC.cpp
@@ -390,6 +390,14 @@
 bool ScriptC::run(Context *rsc, uint32_t launchID)
 {
     Env e = {rsc, this};
+
+    if (mEnviroment.mFragmentStore.get()) {
+        rsc->setFragmentStore(mEnviroment.mFragmentStore.get());
+    }
+    if (mEnviroment.mFragment.get()) {
+        rsc->setFragment(mEnviroment.mFragment.get());
+    }
+
     return mProgram.mScript(&e, &scriptCPtrTable, launchID) != 0;
 }
 
@@ -425,7 +433,7 @@
 
 }
 
-void ScriptCState::runCompiler()
+void ScriptCState::runCompiler(Context *rsc)
 {
     mAccScript = accCreateScript();
 
@@ -442,16 +450,6 @@
         ACCchar * str[pragmaMax];
         accGetPragmas(mAccScript, &pragmaCount, pragmaMax, &str[0]);
 
-        // Start with defaults
-        mEnviroment.mStateVertex = 
-            Script::Enviroment_t::VTX_ORTHO_WINDOW;
-        mEnviroment.mStateRaster = 
-            Script::Enviroment_t::RASTER_FLAT;
-        mEnviroment.mStateFragment = 
-            Script::Enviroment_t::FRAGMENT_COLOR;
-        mEnviroment.mStateFragmentStore = 
-            Script::Enviroment_t::FRAGMENT_STORE_ALWAYS_REPLACE;
-
         for (int ct=0; ct < pragmaCount; ct+=2) {
             LOGE("pragma %i %s %s", ct, str[ct], str[ct+1]);
 
@@ -462,96 +460,34 @@
 
 
             if (!strcmp(str[ct], "stateVertex")) {
-                if (!strcmp(str[ct+1], "orthoWindow")) {
-                    mEnviroment.mStateVertex = 
-                        Script::Enviroment_t::VTX_ORTHO_WINDOW;
-                    continue;
-                }
-                if (!strcmp(str[ct+1], "orthoNormalized")) {
-                    mEnviroment.mStateVertex = 
-                        Script::Enviroment_t::VTX_ORTHO_NORMALIZED;
-                    continue;
-                }
-                if (!strcmp(str[ct+1], "projection")) {
-                    mEnviroment.mStateVertex = 
-                        Script::Enviroment_t::VTX_PROJECTION;
-                    continue;
-                }
-                if (!strcmp(str[ct+1], "parent")) {
-                    mEnviroment.mStateVertex = 
-                        Script::Enviroment_t::VTX_PARENT;
-                    continue;
-                }
                 LOGE("Unreconized value %s passed to stateVertex", str[ct+1]);
             }
 
             if (!strcmp(str[ct], "stateRaster")) {
-                if (!strcmp(str[ct+1], "flat")) {
-                    mEnviroment.mStateRaster = 
-                        Script::Enviroment_t::RASTER_FLAT;
-                    continue;
-                }
-                if (!strcmp(str[ct+1], "smooth")) {
-                    mEnviroment.mStateRaster = 
-                        Script::Enviroment_t::RASTER_SMOOTH;
-                    continue;
-                }
-                if (!strcmp(str[ct+1], "parent")) {
-                    mEnviroment.mStateRaster = 
-                        Script::Enviroment_t::RASTER_PARENT;
-                    continue;
-                }
                 LOGE("Unreconized value %s passed to stateRaster", str[ct+1]);
             }
 
             if (!strcmp(str[ct], "stateFragment")) {
-                if (!strcmp(str[ct+1], "color")) {
-                    mEnviroment.mStateFragment = 
-                        Script::Enviroment_t::FRAGMENT_COLOR;
-                    continue;
-                }
-                if (!strcmp(str[ct+1], "texReplace")) {
-                    mEnviroment.mStateFragment = 
-                        Script::Enviroment_t::FRAGMENT_TEX_REPLACE;
-                    continue;
-                }
-                if (!strcmp(str[ct+1], "texModulate")) {
-                    mEnviroment.mStateFragment = 
-                        Script::Enviroment_t::FRAGMENT_TEX_MODULATE;
-                    continue;
-                }
-                if (!strcmp(str[ct+1], "parent")) {
-                    mEnviroment.mStateFragment = 
-                        Script::Enviroment_t::FRAGMENT_PARENT;
+                ProgramFragment * pf = 
+                    (ProgramFragment *)rsc->lookupName(str[ct+1]);
+                if (pf != NULL) {
+                    mEnviroment.mFragment.set(pf);
                     continue;
                 }
                 LOGE("Unreconized value %s passed to stateFragment", str[ct+1]);
             }
 
             if (!strcmp(str[ct], "stateFragmentStore")) {
-                if (!strcmp(str[ct+1], "alwaysReplace")) {
-                    mEnviroment.mStateFragmentStore = 
-                        Script::Enviroment_t::FRAGMENT_STORE_ALWAYS_REPLACE;
+                ProgramFragmentStore * pfs = 
+                    (ProgramFragmentStore *)rsc->lookupName(str[ct+1]);
+                if (pfs != NULL) {
+                    mEnviroment.mFragmentStore.set(pfs);
                     continue;
                 }
-                if (!strcmp(str[ct+1], "alwaysBlend")) {
-                    mEnviroment.mStateFragmentStore = 
-                        Script::Enviroment_t::FRAGMENT_STORE_ALWAYS_BLEND;
-                    continue;
-                }
-                if (!strcmp(str[ct+1], "depthLessReplace")) {
-                    mEnviroment.mStateFragmentStore = 
-                        Script::Enviroment_t::FRAGMENT_STORE_DEPTH_LESS_REPLACE;
-                    continue;
-                }
-                if (!strcmp(str[ct+1], "depthLessBlend")) {
-                    mEnviroment.mStateFragmentStore = 
-                        Script::Enviroment_t::FRAGMENT_STORE_DEPTH_LESS_BLEND;
-                    continue;
-                }
+
                 if (!strcmp(str[ct+1], "parent")) {
-                    mEnviroment.mStateFragmentStore = 
-                        Script::Enviroment_t::FRAGMENT_STORE_PARENT;
+                    //mEnviroment.mStateFragmentStore = 
+                        //Script::Enviroment_t::FRAGMENT_STORE_PARENT;
                     continue;
                 }
                 LOGE("Unreconized value %s passed to stateFragmentStore", str[ct+1]);
@@ -632,7 +568,7 @@
 {
     ScriptCState *ss = &rsc->mScriptC;
 
-    ss->runCompiler();
+    ss->runCompiler(rsc);
 
     ScriptC *s = new ScriptC();
     s->incRef();
diff --git a/rsScriptC.h b/rsScriptC.h
index d178c86..55a2cc6 100644
--- a/rsScriptC.h
+++ b/rsScriptC.h
@@ -74,7 +74,7 @@
     Vector<const Type *> mConstantBufferTypes;
 
     void clear();
-    void runCompiler();
+    void runCompiler(Context *rsc);
 };