commit b0568eb56d73c3d1d71ef3f6cab6cbb0c5542bef
Author: Leszek Koltunski <leszek@distoretedandroid.org>
Date:   Fri May 12 14:51:20 2017 +0100

    Progress with Stencil App; should be working now AFAIK but doesn't.

diff --git a/src/main/java/org/distorted/examples/stencil/StencilRenderer.java b/src/main/java/org/distorted/examples/stencil/StencilRenderer.java
index 1e46adb..941ce50 100644
--- a/src/main/java/org/distorted/examples/stencil/StencilRenderer.java
+++ b/src/main/java/org/distorted/examples/stencil/StencilRenderer.java
@@ -21,11 +21,13 @@ package org.distorted.examples.stencil;
 
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
+import android.opengl.GLES30;
 import android.opengl.GLSurfaceView;
 
 import org.distorted.examples.R;
 import org.distorted.library.Distorted;
 import org.distorted.library.DistortedEffects;
+import org.distorted.library.DistortedNode;
 import org.distorted.library.DistortedScreen;
 import org.distorted.library.DistortedTexture;
 import org.distorted.library.EffectNames;
@@ -52,7 +54,7 @@ class StencilRenderer implements GLSurfaceView.Renderer
     private DistortedTexture mCubeTex, mFloorTex;
     private DistortedEffects mCube1Effects, mCube2Effects, mFloorEffects;
     private MeshObject mCubeMesh, mFloorMesh;
-    private int bmpHeight, bmpWidth;
+    private DistortedNode mCube1Node, mCube2Node, mFloorNode;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -72,11 +74,26 @@ class StencilRenderer implements GLSurfaceView.Renderer
 
       mCube2Effects.brightness(new Static1D(0.5f));
 
-      mScreen = new DistortedScreen();
-      mScreen.attach(mCubeTex ,mCube1Effects,mCubeMesh );
-      mScreen.attach(mFloorTex,mFloorEffects,mFloorMesh);
-      mScreen.attach(mCubeTex ,mCube2Effects,mCubeMesh );
+      mCube1Node = new DistortedNode(mCubeTex ,mCube1Effects,mCubeMesh );
+      mCube2Node = new DistortedNode(mCubeTex ,mCube2Effects,mCubeMesh );
+      mFloorNode = new DistortedNode(mFloorTex,mFloorEffects,mFloorMesh);
+
+      mFloorNode.glEnable(GLES30.GL_STENCIL_TEST);                               // Enable Stencil when rendering this Node
+      mFloorNode.glStencilFunc(GLES30.GL_ALWAYS, 1, 0xFF);                       // Set any stencil to 1
+      mFloorNode.glStencilOp(GLES30.GL_KEEP, GLES30.GL_KEEP, GLES30.GL_REPLACE); // replace with 1 when we fail Depth test
+      mFloorNode.glStencilMask(0xFF);                                            // Write to stencil buffer
+      mFloorNode.glDepthMask(false);                                             // Don't write to depth buffer
+      mFloorNode.glClear(GLES30.GL_STENCIL_BUFFER_BIT);                          // Clear stencil buffer (0 by default)
+
+      mCube2Node.glEnable(GLES30.GL_STENCIL_TEST);                               // Enable Stencil when rendering this Node
+      mCube2Node.glStencilFunc(GLES30.GL_EQUAL, 1, 0xFF);                        // Pass test if stencil value is 1
+      mCube2Node.glStencilMask(0x00);                                            // Don't write anything to stencil buffer
+      mCube2Node.glDepthMask(true);                                              // Write to depth buffer
 
+      mScreen = new DistortedScreen();
+      mScreen.attach(mCube1Node);
+      mScreen.attach(mFloorNode);
+      mScreen.attach(mCube2Node);
       mScreen.glClearColor(1.0f,1.0f,1.0f,1.0f);
       }
 
@@ -162,9 +179,6 @@ class StencilRenderer implements GLSurfaceView.Renderer
         catch(IOException e) { }
         }
 
-      bmpHeight = bitmap.getHeight();
-      bmpWidth  = bitmap.getWidth();
-
       mCubeTex.setTexture(bitmap);
       mFloorTex.setColor(0xff000000);  // ARGB
 
