Beging GL2 user shaders.  Switch master to using GL2 by default.
diff --git a/libs/rs/rsProgramFragment.cpp b/libs/rs/rsProgramFragment.cpp
index daefc2c..b239ce8 100644
--- a/libs/rs/rsProgramFragment.cpp
+++ b/libs/rs/rsProgramFragment.cpp
@@ -175,19 +175,27 @@
     //mShader.append("  gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0);\n");
     mShader.append("  vec4 col = varColor;\n");
 
+    if (mTextureEnableMask) {
+        if (mPointSpriteEnable) {
+            mShader.append("  vec2 tex0 = gl_PointCoord;\n");
+        } else {
+            mShader.append("  vec2 tex0 = varTex0.xy;\n");
+        }
+    }
+
     mask = mTextureEnableMask;
     texNum = 0;
     while (mask) {
         if (mask & 1) {
             switch(mEnvModes[texNum]) {
             case RS_TEX_ENV_MODE_REPLACE:
-                mShader.append("  col = texture2D(uni_Tex0, varTex0.xy);\n");
+                mShader.append("  col = texture2D(uni_Tex0, tex0);\n");
                 break;
             case RS_TEX_ENV_MODE_MODULATE:
-                mShader.append("  col *= texture2D(uni_Tex0, varTex0.xy);\n");
+                mShader.append("  col *= texture2D(uni_Tex0, tex0);\n");
                 break;
             case RS_TEX_ENV_MODE_DECAL:
-                mShader.append("  col = texture2D(uni_Tex0, varTex0.xy);\n");
+                mShader.append("  col = texture2D(uni_Tex0, tex0);\n");
                 break;
             }
 
@@ -338,6 +346,11 @@
     rsc->mStateFragment.mPF->setTexEnable(slot, enable);
 }
 
+void rsi_ProgramFragmentSetShader(Context *rsc, const char *txt, uint32_t len)
+{
+    rsc->mStateFragment.mPF->setShader(txt, len);
+}
+
 RsProgramFragment rsi_ProgramFragmentCreate(Context *rsc)
 {
     ProgramFragment *pf = rsc->mStateFragment.mPF;