Implement default programs and implement defaults and parents for imports.
diff --git a/rsContext.cpp b/rsContext.cpp
index c466f46..7248ecc 100644
--- a/rsContext.cpp
+++ b/rsContext.cpp
@@ -119,6 +119,14 @@
      rsc->mServerReturns.init(128);
 
      rsc->initEGL();
+
+     rsc->mStateVertex.init(rsc, rsc->mWidth, rsc->mHeight);
+     rsc->setVertex(NULL);
+     rsc->mStateFragment.init(rsc, rsc->mWidth, rsc->mHeight);
+     rsc->setFragment(NULL);
+     rsc->mStateFragmentStore.init(rsc, rsc->mWidth, rsc->mHeight);
+     rsc->setFragmentStore(NULL);
+
      rsc->mRunning = true;
      bool mDraw = true;
      while (!rsc->mExit) {
@@ -212,20 +220,32 @@
 
 void Context::setFragmentStore(ProgramFragmentStore *pfs)
 {
-    mFragmentStore.set(pfs);
-    pfs->setupGL();
+    if (pfs == NULL) {
+        mFragmentStore.set(mStateFragmentStore.mDefault);
+    } else {
+        mFragmentStore.set(pfs);
+    }
+    mFragmentStore->setupGL();
 }
 
 void Context::setFragment(ProgramFragment *pf)
 {
-    mFragment.set(pf);
-    pf->setupGL();
+    if (pf == NULL) {
+        mFragment.set(mStateFragment.mDefault);
+    } else {
+        mFragment.set(pf);
+    }
+    mFragment->setupGL();
 }
 
 void Context::setVertex(ProgramVertex *pv)
 {
-    mVertex.set(pv);
-    pv->setupGL();
+    if (pv == NULL) {
+        mVertex.set(mStateVertex.mDefault);
+    } else {
+        mVertex.set(pv);
+    }
+    mVertex->setupGL();
 }
 
 void Context::assignName(ObjectBase *obj, const char *name, uint32_t len)