commit 338babe8d78930051722f69cedcb79cfb728eab0
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Fri Oct 22 02:59:54 2021 +0200

    Major change: separate the notion of a TwistyObject and its Node. Now,
    
    1) the Node stays when we change objects (this makes transitions faster)
    2) it's possible to just create an Object without adding it to the Screen (now app needs to explicitly create the Node and add it to its Screen itself)

diff --git a/src/main/java/org/distorted/main/RubikActivity.java b/src/main/java/org/distorted/main/RubikActivity.java
index 9e5d234f..f53192db 100644
--- a/src/main/java/org/distorted/main/RubikActivity.java
+++ b/src/main/java/org/distorted/main/RubikActivity.java
@@ -42,7 +42,6 @@ import androidx.appcompat.app.AppCompatActivity;
 import com.google.firebase.analytics.FirebaseAnalytics;
 
 import org.distorted.library.main.DistortedLibrary;
-import org.distorted.library.main.DistortedScreen;
 
 import org.distorted.objectlib.main.ObjectControl;
 import org.distorted.objectlib.main.TwistyObject;
@@ -416,15 +415,6 @@ public class RubikActivity extends AppCompatActivity
       return view.getObjectControl();
       }
 
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-    public DistortedScreen getScreen()
-      {
-      RubikSurfaceView view = findViewById(R.id.rubikSurfaceView);
-      RubikRenderer renderer = view.getRenderer();
-      return renderer.getScreen();
-      }
-
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
     public int getScreenWidthInPixels()
diff --git a/src/main/java/org/distorted/main/RubikObjectLibInterface.java b/src/main/java/org/distorted/main/RubikObjectLibInterface.java
index 360424ac..69b1b4d0 100644
--- a/src/main/java/org/distorted/main/RubikObjectLibInterface.java
+++ b/src/main/java/org/distorted/main/RubikObjectLibInterface.java
@@ -31,7 +31,6 @@ import com.google.android.play.core.tasks.OnFailureListener;
 import com.google.android.play.core.tasks.Task;
 import com.google.firebase.analytics.FirebaseAnalytics;
 
-import org.distorted.library.main.DistortedFramebuffer;
 import org.distorted.objectlib.helpers.ObjectLibInterface;
 import org.distorted.objectlib.main.ObjectType;
 
@@ -322,12 +321,4 @@ public class RubikObjectLibInterface implements ObjectLibInterface
     {
     return SolverMain.cubitIsLocked(type,cubit);
     }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  public DistortedFramebuffer getFramebuffer()
-    {
-    RubikActivity act = mAct.get();
-    return act.getScreen();
-    }
 }
diff --git a/src/main/java/org/distorted/main/RubikSurfaceView.java b/src/main/java/org/distorted/main/RubikSurfaceView.java
index c6838da9..a00a59cd 100644
--- a/src/main/java/org/distorted/main/RubikSurfaceView.java
+++ b/src/main/java/org/distorted/main/RubikSurfaceView.java
@@ -30,6 +30,7 @@ import android.view.MotionEvent;
 
 import com.google.firebase.crashlytics.FirebaseCrashlytics;
 
+import org.distorted.library.main.DistortedNode;
 import org.distorted.objectlib.main.ObjectControl;
 
 import org.distorted.screens.ScreenList;
@@ -41,6 +42,7 @@ public class RubikSurfaceView extends GLSurfaceView
     private ObjectControl mObjectController;
     private RubikRenderer mRenderer;
     private int mScreenWidth, mScreenHeight;
+    private boolean mCreated;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -50,6 +52,14 @@ public class RubikSurfaceView extends GLSurfaceView
       mScreenHeight= height;
       mObjectController.setScreenSize(width,height);
 
+      if( !mCreated )
+        {
+        mCreated = true;
+        mObjectController.createNode(width,height);
+        DistortedNode objectNode = mObjectController.getNode();
+        mRenderer.getScreen().attach(objectNode);
+        }
+
       try
         {
         RubikActivity act = (RubikActivity)getContext();
@@ -90,6 +100,8 @@ public class RubikSurfaceView extends GLSurfaceView
       {
       super(context,attrs);
 
+      mCreated = false;
+
       if(!isInEditMode())
         {
         RubikActivity act = (RubikActivity)context;
diff --git a/src/main/java/org/distorted/tutorials/TutorialActivity.java b/src/main/java/org/distorted/tutorials/TutorialActivity.java
index bbc8f1cc..19362a54 100644
--- a/src/main/java/org/distorted/tutorials/TutorialActivity.java
+++ b/src/main/java/org/distorted/tutorials/TutorialActivity.java
@@ -255,15 +255,6 @@ public class TutorialActivity extends AppCompatActivity
       return view.getObjectControl();
       }
 
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-    public DistortedScreen getScreen()
-      {
-      TutorialSurfaceView view = findViewById(R.id.tutorialSurfaceView);
-      TutorialRenderer renderer = view.getRenderer();
-      return renderer.getScreen();
-      }
-
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
     public static int getDrawableSize()
diff --git a/src/main/java/org/distorted/tutorials/TutorialObjectLibInterface.java b/src/main/java/org/distorted/tutorials/TutorialObjectLibInterface.java
index 5ea320dd..e4cd877f 100644
--- a/src/main/java/org/distorted/tutorials/TutorialObjectLibInterface.java
+++ b/src/main/java/org/distorted/tutorials/TutorialObjectLibInterface.java
@@ -19,8 +19,6 @@
 
 package org.distorted.tutorials;
 
-import org.distorted.library.main.DistortedFramebuffer;
-
 import org.distorted.objectlib.helpers.ObjectLibInterface;
 import org.distorted.objectlib.main.ObjectType;
 
@@ -63,12 +61,4 @@ public class TutorialObjectLibInterface implements ObjectLibInterface
      TutorialScreen state = act.getState();
      state.reddenLock(act);
      }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  public DistortedFramebuffer getFramebuffer()
-    {
-    TutorialActivity act = mAct.get();
-    return act.getScreen();
-    }
 }
diff --git a/src/main/java/org/distorted/tutorials/TutorialSurfaceView.java b/src/main/java/org/distorted/tutorials/TutorialSurfaceView.java
index 45a43c22..884e05b7 100644
--- a/src/main/java/org/distorted/tutorials/TutorialSurfaceView.java
+++ b/src/main/java/org/distorted/tutorials/TutorialSurfaceView.java
@@ -29,6 +29,7 @@ import android.view.MotionEvent;
 
 import com.google.firebase.crashlytics.FirebaseCrashlytics;
 
+import org.distorted.library.main.DistortedNode;
 import org.distorted.objectlib.main.ObjectControl;
 
 import static org.distorted.objectlib.main.ObjectControl.MODE_ROTATE;
@@ -40,6 +41,7 @@ public class TutorialSurfaceView extends GLSurfaceView
     private ObjectControl mObjectController;
     private TutorialRenderer mRenderer;
     private int mScreenWidth, mScreenHeight;
+    private boolean mCreated;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -49,6 +51,14 @@ public class TutorialSurfaceView extends GLSurfaceView
       mScreenHeight= height;
       mObjectController.setScreenSize(width,height);
       mObjectController.setMove( (int)(-0.5f*width*TutorialActivity.BAR_RATIO), 0);
+
+      if( !mCreated )
+        {
+        mCreated = true;
+        mObjectController.createNode(width,height);
+        DistortedNode objectNode = mObjectController.getNode();
+        mRenderer.getScreen().attach(objectNode);
+        }
       }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -58,13 +68,6 @@ public class TutorialSurfaceView extends GLSurfaceView
       return mScreenHeight>mScreenWidth;
       }
 
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-    TutorialRenderer getRenderer()
-      {
-      return mRenderer;
-      }
-
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
     ObjectControl getObjectControl()
@@ -80,6 +83,8 @@ public class TutorialSurfaceView extends GLSurfaceView
       {
       super(context,attrs);
 
+      mCreated = false;
+
       if(!isInEditMode())
         {
         TutorialActivity act = (TutorialActivity)context;
