commit ae755eda074b47e117920f5e5703aa2a611eb875
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Fri Oct 16 23:26:32 2020 +0100

    Make the texture multi-row: avoid the maximum texture size.

diff --git a/src/main/java/org/distorted/objects/FactoryCubit.java b/src/main/java/org/distorted/objects/FactoryCubit.java
index 6036b3a4..903df2a4 100644
--- a/src/main/java/org/distorted/objects/FactoryCubit.java
+++ b/src/main/java/org/distorted/objects/FactoryCubit.java
@@ -289,7 +289,7 @@ class FactoryCubit
     {
     MeshBase[] meshes = new MeshPolygon[8];
 
-    float E = SQ3/2;
+    float E = 0.75f;
     float F = 0.5f;
     float[] vertices = { -F,-E/3, +F,-E/3, 0.0f,2*E/3};
     float[] bands = computeBands(0.05f,35,F,0.8f,6);
@@ -320,7 +320,7 @@ class FactoryCubit
     {
     MeshBase[] meshes = new MeshBase[4];
 
-    float E = SQ3/2;
+    float E = 0.75f;
     float F = 0.5f;
     float[] vertices = { -F,-E/3, +F,-E/3, 0.0f,2*E/3};
     float[] bands = computeBands(0.05f,35,F,0.8f,6);
@@ -478,7 +478,7 @@ class FactoryCubit
     meshes[2] = meshes[0].copy(true);
     meshes[2].setEffectAssociation(0,4,0);
 
-    float F = SQ2/2;
+    float F = 0.5f;
     float X = 0.5f;
     float G = 0.72f;
     float[] vertices1 = { -E,+F, -E+X,0, -E,-F, -E*G,-F, +E*G,-F, +E,-F, +E-X,0, +E,+F, +E*G,+F, -E*G,+F };
@@ -616,20 +616,22 @@ class FactoryCubit
     Static3D cent0 = new Static3D(0,0,0);
     Static3D cent1 = new Static3D(0,SQ2/2,0);
     Static3D flipY = new Static3D( 1,-1, 1);
+    Static3D scale = new Static3D( 1, 2*SQ3/3, 1);
 
-    VertexEffect[] effect = new VertexEffect[6];
+    VertexEffect[] effect = new VertexEffect[7];
 
-    effect[0] = new VertexEffectMove(move1);
-    effect[1] = new VertexEffectRotate(alpha , axisX, cent1);
-    effect[2] = new VertexEffectRotate(angle1, axisY, cent0);
-    effect[3] = new VertexEffectRotate(angle2, axisY, cent0);
-    effect[4] = new VertexEffectRotate(angle3, axisY, cent0);
-    effect[5] = new VertexEffectScale(flipY);
+    effect[0] = new VertexEffectScale(scale);
+    effect[1] = new VertexEffectMove(move1);
+    effect[2] = new VertexEffectRotate(alpha , axisX, cent1);
+    effect[3] = new VertexEffectRotate(angle1, axisY, cent0);
+    effect[4] = new VertexEffectRotate(angle2, axisY, cent0);
+    effect[5] = new VertexEffectRotate(angle3, axisY, cent0);
+    effect[6] = new VertexEffectScale(flipY);
 
-    effect[2].setMeshAssociation ( 34,-1); // apply to meshes 1 & 5
-    effect[3].setMeshAssociation ( 68,-1); // apply to meshes 2 & 6
-    effect[4].setMeshAssociation (136,-1); // apply to meshes 3 & 7
-    effect[5].setMeshAssociation (240,-1); // apply to meshes 4,5,6,7
+    effect[3].setMeshAssociation ( 34,-1); // apply to meshes 1 & 5
+    effect[4].setMeshAssociation ( 68,-1); // apply to meshes 2 & 6
+    effect[5].setMeshAssociation (136,-1); // apply to meshes 3 & 7
+    effect[6].setMeshAssociation (240,-1); // apply to meshes 4,5,6,7
 
     return effect;
     }
@@ -639,34 +641,30 @@ class FactoryCubit
   VertexEffect[] createVertexEffectsTetra()
     {
     Static3D flipZ = new Static3D( 1, 1,-1);
-
     Static1D alpha = new Static1D((float)(-(180/Math.PI)*Math.asin(SQ3/3)));
     Static1D angle1= new Static1D( 90);
     Static1D angle2= new Static1D(180);
     Static3D move1 = new Static3D(0,SQ2/4-SQ3/6,0);
-
     Static3D axisX = new Static3D(1,0,0);
     Static3D axisY = new Static3D(0,1,0);
     Static3D axisZ = new Static3D(0,0,1);
-
     Static3D cent0 = new Static3D(0,0,0);
     Static3D cent1 = new Static3D(0,SQ2/4,0);
+    Static3D scale = new Static3D( 1, 2*SQ3/3, 1);
 
-    VertexEffect[] effect = new VertexEffect[6];
+    VertexEffect[] effect = new VertexEffect[7];
 
-    effect[0] = new VertexEffectRotate(angle2, axisZ, cent0);
-    effect[1] = new VertexEffectMove(move1);
-    effect[2] = new VertexEffectRotate(alpha , axisX, cent1);
-    effect[3] = new VertexEffectScale(flipZ);
-    effect[4] = new VertexEffectRotate(angle1, axisY, cent0);
-    effect[5] = new VertexEffectRotate(angle2, axisZ, cent0);
-
-    effect[0].setMeshAssociation(15,-1); // meshes 0,1,2,3
-    effect[1].setMeshAssociation(15,-1); // meshes 0,1,2,3
-    effect[2].setMeshAssociation(15,-1); // meshes 0,1,2,3
-    effect[3].setMeshAssociation(10,-1); // meshes 1 & 3
-    effect[4].setMeshAssociation(12,-1); // meshes 2 & 3
+    effect[0] = new VertexEffectScale(scale);
+    effect[1] = new VertexEffectRotate(angle2, axisZ, cent0);
+    effect[2] = new VertexEffectMove(move1);
+    effect[3] = new VertexEffectRotate(alpha , axisX, cent1);
+    effect[4] = new VertexEffectScale(flipZ);
+    effect[5] = new VertexEffectRotate(angle1, axisY, cent0);
+    effect[6] = new VertexEffectRotate(angle2, axisZ, cent0);
+
+    effect[4].setMeshAssociation(10,-1); // meshes 1 & 3
     effect[5].setMeshAssociation(12,-1); // meshes 2 & 3
+    effect[6].setMeshAssociation(12,-1); // meshes 2 & 3
 
     return effect;
     }
@@ -874,22 +872,25 @@ class FactoryCubit
     Static1D angle90 = new Static1D(90);
     Static1D angle270= new Static1D(270);
     Static1D angle45 = new Static1D(-45);
+    Static3D scale   = new Static3D(1.0f, SQ2, 1.0f);
 
-    VertexEffect[] effect = new VertexEffect[6];
+    VertexEffect[] effect = new VertexEffect[7];
 
     effect[0] = new VertexEffectMove(new Static3D(0,0,+0.5f));
     effect[1] = new VertexEffectRotate( angle270, axisX, center );
     effect[2] = new VertexEffectRotate( angle90 , axisY, center );
-    effect[3] = new VertexEffectRotate( angle45 , axisX, center );
-    effect[4] = new VertexEffectRotate( angle90 , axisY, center );
-    effect[5] = new VertexEffectRotate( angle270, axisZ, center );
+    effect[3] = new VertexEffectScale(scale);
+    effect[4] = new VertexEffectRotate( angle45 , axisX, center );
+    effect[5] = new VertexEffectRotate( angle90 , axisY, center );
+    effect[6] = new VertexEffectRotate( angle270, axisZ, center );
 
     effect[0].setMeshAssociation( 7,-1);  // 0,1,2
     effect[1].setMeshAssociation( 2,-1);  // 1
     effect[2].setMeshAssociation( 4,-1);  // 2
-    effect[3].setMeshAssociation(56,-1);  // 3
-    effect[4].setMeshAssociation(16,-1);  // 4
-    effect[5].setMeshAssociation(32,-1);  // 5
+    effect[3].setMeshAssociation(56,-1);  // 3,4,5
+    effect[4].setMeshAssociation(56,-1);  // 3,4,5
+    effect[5].setMeshAssociation(16,-1);  // 4
+    effect[6].setMeshAssociation(32,-1);  // 5
 
     return effect;
     }
diff --git a/src/main/java/org/distorted/objects/FactorySticker.java b/src/main/java/org/distorted/objects/FactorySticker.java
index a385f70e..148ef1a2 100644
--- a/src/main/java/org/distorted/objects/FactorySticker.java
+++ b/src/main/java/org/distorted/objects/FactorySticker.java
@@ -62,7 +62,7 @@ class FactorySticker
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  private void drawCurrVertex(Canvas canvas, Paint paint, float left, float r, float stroke, float pX, float pY, float cX, float cY, float nX, float nY)
+  private void drawCurrVertex(Canvas canvas, Paint paint, int left, int top, float r, float stroke, float pX, float pY, float cX, float cY, float nX, float nY)
     {
     pX = (0.5f+pX)*TEXTURE_HEIGHT;
     pY = (0.5f-pY)*TEXTURE_HEIGHT;
@@ -71,7 +71,7 @@ class FactorySticker
     nX = (0.5f+nX)*TEXTURE_HEIGHT;
     nY = (0.5f-nY)*TEXTURE_HEIGHT;
 
-    canvas.drawLine(left+pX,pY,left+cX,cY,paint);
+    canvas.drawLine(left+pX,top+pY,left+cX,top+cY,paint);
 
     float aX = pX-cX;
     float aY = pY-cY;
@@ -107,12 +107,12 @@ class FactorySticker
     startAngle *= 180/(Math.PI);
     sweepAngle *= 180/(Math.PI);
 
-    canvas.drawArc( left+rX-R, rY-R, left+rX+R, rY+R, startAngle, sweepAngle, false, paint);
+    canvas.drawArc( left+rX-R, top+rY-R, left+rX+R, top+rY+R, startAngle, sweepAngle, false, paint);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  void drawRoundedPolygon(Canvas canvas, Paint paint, int left, float[] vertices, float stroke, int color, float r)
+  void drawRoundedPolygon(Canvas canvas, Paint paint, int left, int top, float[] vertices, float stroke, int color, float r)
     {
     stroke *= TEXTURE_HEIGHT;
 
@@ -121,7 +121,7 @@ class FactorySticker
     paint.setColor(color);
     paint.setStyle(Paint.Style.FILL);
 
-    canvas.drawRect(left,0,left+TEXTURE_HEIGHT,TEXTURE_HEIGHT,paint);
+    canvas.drawRect(left,top,left+TEXTURE_HEIGHT,top+TEXTURE_HEIGHT,paint);
 
     paint.setColor(COLOR_BLACK);
     paint.setStyle(Paint.Style.STROKE);
@@ -138,7 +138,7 @@ class FactorySticker
 
     for(int vert=0; vert<numVertices; vert++)
       {
-      drawCurrVertex(canvas, paint, left, r, stroke, prevX,prevY,currX,currY,nextX,nextY);
+      drawCurrVertex(canvas, paint, left, top, r, stroke, prevX,prevY,currX,currY,nextX,nextY);
 
       prevX = currX;
       prevY = currY;
diff --git a/src/main/java/org/distorted/objects/TwistyCube.java b/src/main/java/org/distorted/objects/TwistyCube.java
index 2a53ae96..8e5c52f6 100644
--- a/src/main/java/org/distorted/objects/TwistyCube.java
+++ b/src/main/java/org/distorted/objects/TwistyCube.java
@@ -123,7 +123,7 @@ class TwistyCube extends TwistyObject
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  void createFaceTexture(Canvas canvas, Paint paint, int face, int left)
+  void createFaceTexture(Canvas canvas, Paint paint, int face, int left, int top)
     {
     float F =  0.5f;
     float R = 0.10f;
@@ -131,7 +131,7 @@ class TwistyCube extends TwistyObject
     float[] vertices = { -F,-F, +F,-F, +F,+F, -F,+F};
 
     FactorySticker factory = FactorySticker.getInstance();
-    factory.drawRoundedPolygon(canvas, paint, left, vertices, S, FACE_COLORS[face], R);
+    factory.drawRoundedPolygon(canvas, paint, left, top, vertices, S, FACE_COLORS[face], R);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objects/TwistyDiamond.java b/src/main/java/org/distorted/objects/TwistyDiamond.java
index 8f6e632d..cb120b17 100644
--- a/src/main/java/org/distorted/objects/TwistyDiamond.java
+++ b/src/main/java/org/distorted/objects/TwistyDiamond.java
@@ -244,16 +244,16 @@ public class TwistyDiamond extends TwistyObject
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  void createFaceTexture(Canvas canvas, Paint paint, int face, int left)
+  void createFaceTexture(Canvas canvas, Paint paint, int face, int left, int top)
     {
-    float E = SQ3/2;
-    float F =  0.5f;
+    float E = 0.75f;
+    float F = 0.50f;
     float R = 0.06f;
     float S = 0.07f;
     float[] vertices = { -F,-E/3, +F,-E/3, 0.0f,2*E/3};
 
     FactorySticker factory = FactorySticker.getInstance();
-    factory.drawRoundedPolygon(canvas, paint, left, vertices, S, FACE_COLORS[face], R);
+    factory.drawRoundedPolygon(canvas, paint, left, top, vertices, S, FACE_COLORS[face], R);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objects/TwistyDino.java b/src/main/java/org/distorted/objects/TwistyDino.java
index 11302b77..ebbfbaf8 100644
--- a/src/main/java/org/distorted/objects/TwistyDino.java
+++ b/src/main/java/org/distorted/objects/TwistyDino.java
@@ -209,7 +209,7 @@ public abstract class TwistyDino extends TwistyObject
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  void createFaceTexture(Canvas canvas, Paint paint, int face, int left)
+  void createFaceTexture(Canvas canvas, Paint paint, int face, int left, int top)
     {
     float F = 0.5f;
     float R = 0.025f;
@@ -217,7 +217,7 @@ public abstract class TwistyDino extends TwistyObject
     float[] vertices = { -F,F/3, 0,-2*F/3, +F,F/3 };
 
     FactorySticker factory = FactorySticker.getInstance();
-    factory.drawRoundedPolygon(canvas, paint, left, vertices, S, FACE_COLORS[face], R);
+    factory.drawRoundedPolygon(canvas, paint, left, top, vertices, S, FACE_COLORS[face], R);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objects/TwistyHelicopter.java b/src/main/java/org/distorted/objects/TwistyHelicopter.java
index 5ca721a5..6bfe9976 100644
--- a/src/main/java/org/distorted/objects/TwistyHelicopter.java
+++ b/src/main/java/org/distorted/objects/TwistyHelicopter.java
@@ -288,7 +288,7 @@ public class TwistyHelicopter extends TwistyObject
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  void createFaceTexture(Canvas canvas, Paint paint, int face, int left)
+  void createFaceTexture(Canvas canvas, Paint paint, int face, int left, int top)
     {
     float R = 0.023f;
     float S = 0.035f;
@@ -296,7 +296,7 @@ public class TwistyHelicopter extends TwistyObject
     float[] vertices = { -E+E/4,E/4, E/4,-E+E/4, E/4,E/4};
 
     FactorySticker factory = FactorySticker.getInstance();
-    factory.drawRoundedPolygon(canvas, paint, left, vertices, S, FACE_COLORS[face], R);
+    factory.drawRoundedPolygon(canvas, paint, left, top, vertices, S, FACE_COLORS[face], R);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objects/TwistyObject.java b/src/main/java/org/distorted/objects/TwistyObject.java
index 492e1de5..43d86da4 100644
--- a/src/main/java/org/distorted/objects/TwistyObject.java
+++ b/src/main/java/org/distorted/objects/TwistyObject.java
@@ -67,6 +67,7 @@ public abstract class TwistyObject extends DistortedNode
   static final int COLOR_BLACK  = 0xff000000;
 
   static final int TEXTURE_HEIGHT = 256;
+  static final int NUM_STICKERS_IN_ROW = 4;
 
   static final float SQ2 = (float)Math.sqrt(2);
   static final float SQ3 = (float)Math.sqrt(3);
@@ -110,6 +111,7 @@ public abstract class TwistyObject extends DistortedNode
   private Static3D mRotationAxis;
   private Static3D mObjectScale;
   private int[] mQuatDebug;
+  private int mNumTexRows, mNumTexCols;
 
   float[] mRowChances;
   Static1D mRotationAngleStatic, mRotationAngleMiddle, mRotationAngleFinal;
@@ -170,6 +172,11 @@ public abstract class TwistyObject extends DistortedNode
     MatrixEffectScale nodeScaleEffect = new MatrixEffectScale(mNodeScale);
     nodeEffects.apply(nodeScaleEffect);
 
+    mNumTexCols = NUM_STICKERS_IN_ROW;
+    mNumTexRows = (NUM_TEXTURES+1)/NUM_STICKERS_IN_ROW;
+
+    if( mNumTexCols*mNumTexRows < NUM_TEXTURES+1 ) mNumTexRows++;
+
     CUBITS = new Cubit[NUM_CUBITS];
     createMeshAndCubits(list,res);
 
@@ -372,14 +379,14 @@ public abstract class TwistyObject extends DistortedNode
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
-// the getFaceColors + final black in a horizontal strip.
+// the getFaceColors + final black in a grid (so that we do not exceed the maximum texture size)
 
   public void createTexture()
     {
     Bitmap bitmap;
 
     Paint paint = new Paint();
-    bitmap = Bitmap.createBitmap( (NUM_TEXTURES+1)*TEXTURE_HEIGHT, TEXTURE_HEIGHT, Bitmap.Config.ARGB_8888);
+    bitmap = Bitmap.createBitmap( mNumTexCols*TEXTURE_HEIGHT, mNumTexRows*TEXTURE_HEIGHT, Bitmap.Config.ARGB_8888);
     Canvas canvas = new Canvas(bitmap);
 
     paint.setAntiAlias(true);
@@ -387,12 +394,17 @@ public abstract class TwistyObject extends DistortedNode
     paint.setStyle(Paint.Style.FILL);
 
     paint.setColor(COLOR_BLACK);
-    canvas.drawRect(0, 0, (NUM_TEXTURES+1)*TEXTURE_HEIGHT, TEXTURE_HEIGHT, paint);
+    canvas.drawRect(0, 0, mNumTexCols*TEXTURE_HEIGHT, mNumTexRows*TEXTURE_HEIGHT, paint);
 
-    for(int i=0; i<NUM_TEXTURES; i++)
-      {
-      createFaceTexture(canvas, paint, i, i*TEXTURE_HEIGHT);
-      }
+    int tex = 0;
+
+    for(int row=0; row<mNumTexRows; row++)
+      for(int col=0; col<mNumTexCols; col++)
+        {
+        if( tex>=NUM_TEXTURES ) break;
+        createFaceTexture(canvas, paint, tex, col*TEXTURE_HEIGHT, row*TEXTURE_HEIGHT);
+        tex++;
+        }
 
     if( !mTexture.setTexture(bitmap) )
       {
@@ -516,8 +528,9 @@ public abstract class TwistyObject extends DistortedNode
 
   public void resetAllTextureMaps()
     {
-    final float ratio = 1.0f/(NUM_TEXTURES+1);
-    int color;
+    final float ratioW = 1.0f/mNumTexCols;
+    final float ratioH = 1.0f/mNumTexRows;
+    int color, row, col;
 
     for(int cubit=0; cubit<NUM_CUBITS; cubit++)
       {
@@ -526,7 +539,9 @@ public abstract class TwistyObject extends DistortedNode
       for(int cubitface=0; cubitface<NUM_CUBIT_FACES; cubitface++)
         {
         color = getFaceColor(cubit,cubitface,mNumLayers);
-        maps[cubitface] = new Static4D( color*ratio, 0.0f, ratio, 1.0f);
+        row = (mNumTexRows-1) - color/mNumTexCols;
+        col = color%mNumTexCols;
+        maps[cubitface] = new Static4D( col*ratioW, row*ratioH, ratioW, ratioH);
         }
 
       mMesh.setTextureMap(maps,NUM_CUBIT_FACES*cubit);
@@ -713,17 +728,17 @@ public abstract class TwistyObject extends DistortedNode
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   abstract float getScreenRatio();
-  abstract Static3D[] getCubitPositions(int size);
+  abstract Static3D[] getCubitPositions(int numLayers);
   abstract Static4D[] getQuats();
   abstract int getNumFaces();
   abstract int getNumStickerTypes();
   abstract int getNumCubitFaces();
   abstract MeshBase createCubitMesh(int cubit);
-  abstract void createFaceTexture(Canvas canvas, Paint paint, int face, int left);
-  abstract int getFaceColor(int cubit, int cubitface, int size);
+  abstract void createFaceTexture(Canvas canvas, Paint paint, int face, int left, int top);
+  abstract int getFaceColor(int cubit, int cubitface, int numLayers);
   abstract float returnMultiplier();
   abstract float[] getRowChances();
-  abstract float[] getCuts(int size);
+  abstract float[] getCuts(int numLayers);
   abstract boolean shouldResetTextureMaps();
 
   public abstract boolean isSolved();
diff --git a/src/main/java/org/distorted/objects/TwistyPyraminx.java b/src/main/java/org/distorted/objects/TwistyPyraminx.java
index 34cc916b..2c1e085c 100644
--- a/src/main/java/org/distorted/objects/TwistyPyraminx.java
+++ b/src/main/java/org/distorted/objects/TwistyPyraminx.java
@@ -237,16 +237,16 @@ public class TwistyPyraminx extends TwistyObject
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  void createFaceTexture(Canvas canvas, Paint paint, int face, int left)
+  void createFaceTexture(Canvas canvas, Paint paint, int face, int left, int top)
     {
-    float E = SQ3/2;
-    float F =  0.5f;
+    float E = 0.75f;
+    float F = 0.50f;
     float R = 0.06f;
     float S = 0.08f;
     float[] vertices = { -F,-E/3, +F,-E/3, 0.0f,2*E/3};
 
     FactorySticker factory = FactorySticker.getInstance();
-    factory.drawRoundedPolygon(canvas, paint, left, vertices, S, FACE_COLORS[face], R);
+    factory.drawRoundedPolygon(canvas, paint, left, top, vertices, S, FACE_COLORS[face], R);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objects/TwistyRedi.java b/src/main/java/org/distorted/objects/TwistyRedi.java
index d967a9b2..dc3aa531 100644
--- a/src/main/java/org/distorted/objects/TwistyRedi.java
+++ b/src/main/java/org/distorted/objects/TwistyRedi.java
@@ -268,7 +268,7 @@ public class TwistyRedi extends TwistyObject
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  void createFaceTexture(Canvas canvas, Paint paint, int face, int left)
+  void createFaceTexture(Canvas canvas, Paint paint, int face, int left, int top)
     {
     int COLORS = FACE_COLORS.length;
     FactorySticker factory = FactorySticker.getInstance();
@@ -280,7 +280,7 @@ public class TwistyRedi extends TwistyObject
       float S = 0.10f;
       float[] vertices = { -F,-F, +F,-F, +F,+F, -F,+F};
 
-      factory.drawRoundedPolygon(canvas, paint, left, vertices, S, FACE_COLORS[face], R);
+      factory.drawRoundedPolygon(canvas, paint, left, top, vertices, S, FACE_COLORS[face], R);
       }
     else
       {
@@ -289,7 +289,7 @@ public class TwistyRedi extends TwistyObject
       float S = 0.05f;
       float[] vertices = { -F,+F, -F,-F, 0, -2*F, +F,-F, +F,+F };
 
-      factory.drawRoundedPolygon(canvas, paint, left, vertices, S, FACE_COLORS[face-COLORS], R);
+      factory.drawRoundedPolygon(canvas, paint, left, top, vertices, S, FACE_COLORS[face-COLORS], R);
       }
     }
 
diff --git a/src/main/java/org/distorted/objects/TwistySkewb.java b/src/main/java/org/distorted/objects/TwistySkewb.java
index 02e6b516..af48b98c 100644
--- a/src/main/java/org/distorted/objects/TwistySkewb.java
+++ b/src/main/java/org/distorted/objects/TwistySkewb.java
@@ -461,35 +461,36 @@ public class TwistySkewb extends TwistyObject
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  void createFaceTexture(Canvas canvas, Paint paint, int face, int left)
+  void createFaceTexture(Canvas canvas, Paint paint, int face, int left, int top)
     {
     int COLORS = FACE_COLORS.length;
-    FactorySticker factory = FactorySticker.getInstance();
+    float R,S;
+    float[] vertices;
 
     if( face<COLORS )
       {
-      float R = 0.023f;
-      float S = 0.035f;
       float E = 0.5f;
-      float[] vertices = { -E+E/4,E/4, E/4,-E+E/4, E/4,E/4};
-      factory.drawRoundedPolygon(canvas, paint, left, vertices, S, FACE_COLORS[face], R);
+      R = 0.023f;
+      S = 0.035f;
+      vertices = new float[] { -E+E/4,E/4, E/4,-E+E/4, E/4,E/4};
       }
     else if( face<2*COLORS )
       {
-      float F = 0.5f;
-      float R = 0.025f;
-      float S = 0.05f;
-      float[] vertices = { -F,F/3, 0,-2*F/3, +F,F/3 };
-      factory.drawRoundedPolygon(canvas, paint, left, vertices, S, FACE_COLORS[face-COLORS], R);
+      float E = 0.5f;
+      R = 0.025f;
+      S = 0.05f;
+      vertices = new float[] { -E,E/3, 0,-2*E/3, +E,E/3 };
       }
     else
       {
-      float R = 0.055f;
-      float S = 0.035f;
       float E = SQ2/4;
-      float[] vertices = { -E,-E, +E,-E, +E,+E, -E,+E };
-      factory.drawRoundedPolygon(canvas, paint, left, vertices, S, FACE_COLORS[face-2*COLORS], R);
+      R = 0.055f;
+      S = 0.035f;
+      vertices = new float[] { -E,-E, +E,-E, +E,+E, -E,+E };
       }
+
+    FactorySticker factory = FactorySticker.getInstance();
+    factory.drawRoundedPolygon(canvas, paint, left, top, vertices, S, FACE_COLORS[face%COLORS], R);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
