commit c8d7046399f5a23af4eaca917b53a3d270252370
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Fri May 18 14:58:19 2018 +0100

    correct oitRenddr again; correct coming to paused state (we could crash)

diff --git a/src/main/java/org/distorted/library/main/DistortedObject.java b/src/main/java/org/distorted/library/main/DistortedObject.java
index cf1d82b..e147544 100644
--- a/src/main/java/org/distorted/library/main/DistortedObject.java
+++ b/src/main/java/org/distorted/library/main/DistortedObject.java
@@ -119,11 +119,18 @@ abstract class DistortedObject
     DistortedObject object;
     int num = mDoneList.size();
 
-    for(int i=0; i<num; i++)
+    try
+      {
+      for (int i = 0; i < num; i++)
+        {
+        object = mDoneList.removeFirst();
+        mToDoMap.put(object.mID, object.new Job(object, JOB_CREATE));
+        object.recreate();
+        }
+      }
+    catch( Exception ex )
       {
-      object = mDoneList.removeFirst();
-      mToDoMap.put(object.mID, object.new Job(object,JOB_CREATE) );
-      object.recreate();
+      // something else removed an object in the meantime; ignore
       }
 
     mToDo = true;
diff --git a/src/main/java/org/distorted/library/main/DistortedOutputSurface.java b/src/main/java/org/distorted/library/main/DistortedOutputSurface.java
index aef67dd..7ad8c58 100644
--- a/src/main/java/org/distorted/library/main/DistortedOutputSurface.java
+++ b/src/main/java/org/distorted/library/main/DistortedOutputSurface.java
@@ -347,6 +347,12 @@ public abstract class DistortedOutputSurface extends DistortedSurface implements
 
   private int oitRender(long currTime, DistortedOutputSurface buffer)
     {
+    if( buffer==this )
+      {
+      android.util.Log.e("surface", "feedback loop in oitRender!");
+      return 0;
+      }
+
     GLES31.glViewport(0, 0, mWidth, mHeight);
     setAsOutput(currTime);
     GLES31.glActiveTexture(GLES31.GL_TEXTURE0);
@@ -354,35 +360,14 @@ public abstract class DistortedOutputSurface extends DistortedSurface implements
     GLES31.glActiveTexture(GLES31.GL_TEXTURE1);
     GLES31.glBindTexture(GLES31.GL_TEXTURE_2D, buffer.mDepthStencilH[0]);
 
-    DistortedRenderState.enableStencil();
-
-    // we have to unbind DEPTH buffer lest we create a feedback loop
-
-    if( mDepthStencil==BOTH_DEPTH_STENCIL )
-      {
-      GLES31.glFramebufferTexture2D(GLES31.GL_FRAMEBUFFER, GLES31.GL_DEPTH_STENCIL_ATTACHMENT, GLES31.GL_TEXTURE_2D, 0, 0);
-      }
-    else if( mDepthStencil==DEPTH_NO_STENCIL )
-      {
-      GLES31.glFramebufferTexture2D(GLES31.GL_FRAMEBUFFER, GLES31.GL_DEPTH_ATTACHMENT        , GLES31.GL_TEXTURE_2D, 0, 0);
-      }
+    GLES31.glDisable(GLES31.GL_STENCIL_TEST);
+    GLES31.glStencilMask(0x00);
 
     DistortedEffects.oitRender(this, buffer.getWidthCorrection(), buffer.getHeightCorrection() );
 
-    if( mDepthStencil==BOTH_DEPTH_STENCIL )
-      {
-      GLES31.glFramebufferTexture2D(GLES31.GL_FRAMEBUFFER, GLES31.GL_DEPTH_STENCIL_ATTACHMENT, GLES31.GL_TEXTURE_2D, mDepthStencilH[0], 0);
-      }
-    else if( mDepthStencil==DEPTH_NO_STENCIL )
-      {
-      GLES31.glFramebufferTexture2D(GLES31.GL_FRAMEBUFFER, GLES31.GL_DEPTH_ATTACHMENT        , GLES31.GL_TEXTURE_2D, mDepthStencilH[0], 0);
-      }
-
     GLES31.glActiveTexture(GLES31.GL_TEXTURE1);
     GLES31.glBindTexture(GLES31.GL_TEXTURE_2D, 0);
 
-    DistortedRenderState.restoreStencil();
-
     return 1;
     }
 
