aboutsummaryrefslogtreecommitdiffstats
path: root/src/org/cyanogenmod/wallpapers/photophase/transitions/CubeTransition.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/org/cyanogenmod/wallpapers/photophase/transitions/CubeTransition.java')
-rw-r--r--src/org/cyanogenmod/wallpapers/photophase/transitions/CubeTransition.java112
1 files changed, 59 insertions, 53 deletions
diff --git a/src/org/cyanogenmod/wallpapers/photophase/transitions/CubeTransition.java b/src/org/cyanogenmod/wallpapers/photophase/transitions/CubeTransition.java
index d603a72..bfe300b 100644
--- a/src/org/cyanogenmod/wallpapers/photophase/transitions/CubeTransition.java
+++ b/src/org/cyanogenmod/wallpapers/photophase/transitions/CubeTransition.java
@@ -67,6 +67,10 @@ public class CubeTransition extends Transition {
private boolean mRunning;
private long mTime;
+ private FloatBuffer mPositionBuffer;
+ private float[] mTranslationMatrix;
+ private float[] mVertex;
+
private float mAmount;
/**
@@ -79,6 +83,7 @@ public class CubeTransition extends Transition {
super(ctx, tm, VERTEX_SHADER, FRAGMENT_SHADER);
// Initialized
+ mTranslationMatrix = new float[16];
reset();
}
@@ -114,6 +119,17 @@ public class CubeTransition extends Transition {
super.select(target);
mAmount = getAmount();
+ // Create the interal buffer
+ float[] vertex = target.getFrameVertex();
+ if (mPositionBuffer == null) {
+ ByteBuffer bb = ByteBuffer.allocateDirect(vertex.length * 4); // (# of coordinate values * 4 bytes per float)
+ bb.order(ByteOrder.nativeOrder());
+ mPositionBuffer = bb.asFloatBuffer();
+ }
+ if (mVertex == null) {
+ mVertex = new float[vertex.length];
+ }
+
// Random mode
List<WINDOW_MODES> modes =
new ArrayList<CubeTransition.WINDOW_MODES>(
@@ -215,33 +231,31 @@ public class CubeTransition extends Transition {
GLESUtil.glesCheckError("glEnableVertexAttribArray");
// Position
- float[] vertex = cloneVertex();
+ setInternalVertex();
float interpolation = delta > 0.5f
? 1 - delta
: delta;
- float w = Math.abs(vertex[6] - vertex[4]);
+ float w = Math.abs(mVertex[6] - mVertex[4]);
switch (mMode) {
case RIGHT_TO_LEFT:
- vertex[1] -= interpolation * mAmount;
- vertex[5] += interpolation * mAmount;
- vertex[4] += w * delta;
- vertex[0] = vertex[4];
+ mVertex[1] -= interpolation * mAmount;
+ mVertex[5] += interpolation * mAmount;
+ mVertex[4] += w * delta;
+ mVertex[0] = mVertex[4];
break;
case LEFT_TO_RIGHT:
- vertex[3] -= interpolation * mAmount;
- vertex[7] += interpolation * mAmount;
- vertex[6] -= w * delta;
- vertex[2] = vertex[6];
+ mVertex[3] -= interpolation * mAmount;
+ mVertex[7] += interpolation * mAmount;
+ mVertex[6] -= w * delta;
+ mVertex[2] = mVertex[6];
break;
default:
break;
}
- ByteBuffer bb = ByteBuffer.allocateDirect(vertex.length * 4); // (# of coordinate values * 4 bytes per float)
- bb.order(ByteOrder.nativeOrder());
- FloatBuffer positionBuffer = bb.asFloatBuffer();
- positionBuffer.put(vertex);
- positionBuffer.position(0);
- GLES20.glVertexAttribPointer(mPositionHandlers[0], 2, GLES20.GL_FLOAT, false, 0, positionBuffer);
+ mPositionBuffer.position(0);
+ mPositionBuffer.put(mVertex);
+ mPositionBuffer.position(0);
+ GLES20.glVertexAttribPointer(mPositionHandlers[0], 2, GLES20.GL_FLOAT, false, 0, mPositionBuffer);
GLESUtil.glesCheckError("glVertexAttribPointer");
GLES20.glEnableVertexAttribArray(mPositionHandlers[0]);
GLESUtil.glesCheckError("glEnableVertexAttribArray");
@@ -254,12 +268,12 @@ public class CubeTransition extends Transition {
case RIGHT_TO_LEFT:
angle = delta * 90;
rotateY = -1.0f;
- translateX = vertex[2] * -1;
+ translateX = mVertex[2] * -1;
break;
case LEFT_TO_RIGHT:
angle = delta * -90;
rotateY = -1.0f;
- translateX = vertex[0] * -1;
+ translateX = mVertex[0] * -1;
break;
default:
@@ -267,12 +281,11 @@ public class CubeTransition extends Transition {
}
// Apply the projection and view transformation
- float[] translationMatrix = new float[16];
Matrix.setIdentityM(matrix, 0);
- Matrix.translateM(translationMatrix, 0, matrix, 0, -translateX, 0.0f, 0.0f);
- Matrix.rotateM(translationMatrix, 0, translationMatrix, 0, angle, 0.0f, rotateY, 0.0f);
- Matrix.translateM(translationMatrix, 0, translationMatrix, 0, translateX, 0.0f, 0.0f);
- GLES20.glUniformMatrix4fv(mMVPMatrixHandlers[0], 1, false, translationMatrix, 0);
+ Matrix.translateM(mTranslationMatrix, 0, matrix, 0, -translateX, 0.0f, 0.0f);
+ Matrix.rotateM(mTranslationMatrix, 0, mTranslationMatrix, 0, angle, 0.0f, rotateY, 0.0f);
+ Matrix.translateM(mTranslationMatrix, 0, mTranslationMatrix, 0, translateX, 0.0f, 0.0f);
+ GLES20.glUniformMatrix4fv(mMVPMatrixHandlers[0], 1, false, mTranslationMatrix, 0);
GLESUtil.glesCheckError("glUniformMatrix4fv");
// Draw
@@ -322,33 +335,31 @@ public class CubeTransition extends Transition {
GLESUtil.glesCheckError("glEnableVertexAttribArray");
// Position
- float[] vertex = cloneVertex();
+ setInternalVertex();
float interpolation = delta > 0.5f
? 1 - delta
: delta;
- float w = Math.abs(vertex[6] - vertex[4]);
+ float w = Math.abs(mVertex[6] - mVertex[4]);
switch (mMode) {
case LEFT_TO_RIGHT:
- vertex[1] -= interpolation * mAmount;
- vertex[5] += interpolation * mAmount;
- vertex[4] += w * (1 - delta);
- vertex[0] = vertex[4];
+ mVertex[1] -= interpolation * mAmount;
+ mVertex[5] += interpolation * mAmount;
+ mVertex[4] += w * (1 - delta);
+ mVertex[0] = mVertex[4];
break;
case RIGHT_TO_LEFT:
- vertex[3] -= interpolation * mAmount;
- vertex[7] += interpolation * mAmount;
- vertex[6] -= w * (1 - delta);
- vertex[2] = vertex[6];
+ mVertex[3] -= interpolation * mAmount;
+ mVertex[7] += interpolation * mAmount;
+ mVertex[6] -= w * (1 - delta);
+ mVertex[2] = mVertex[6];
break;
default:
break;
}
- ByteBuffer bb = ByteBuffer.allocateDirect(vertex.length * 4); // (# of coordinate values * 4 bytes per float)
- bb.order(ByteOrder.nativeOrder());
- FloatBuffer positionBuffer = bb.asFloatBuffer();
- positionBuffer.put(vertex);
- positionBuffer.position(0);
- GLES20.glVertexAttribPointer(mPositionHandlers[1], 2, GLES20.GL_FLOAT, false, 0, positionBuffer);
+ mPositionBuffer.position(0);
+ mPositionBuffer.put(mVertex);
+ mPositionBuffer.position(0);
+ GLES20.glVertexAttribPointer(mPositionHandlers[1], 2, GLES20.GL_FLOAT, false, 0, mPositionBuffer);
GLESUtil.glesCheckError("glVertexAttribPointer");
GLES20.glEnableVertexAttribArray(mPositionHandlers[1]);
GLESUtil.glesCheckError("glEnableVertexAttribArray");
@@ -361,12 +372,12 @@ public class CubeTransition extends Transition {
case LEFT_TO_RIGHT:
angle = 90 - (delta * 90);
rotateY = -1.0f;
- translateX = vertex[2] * -1;
+ translateX = mVertex[2] * -1;
break;
case RIGHT_TO_LEFT:
angle = -90 + (delta * 90);
rotateY = -1.0f;
- translateX = vertex[0] * -1;
+ translateX = mVertex[0] * -1;
break;
default:
@@ -374,12 +385,11 @@ public class CubeTransition extends Transition {
}
// Apply the projection and view transformation
- float[] translationMatrix = new float[16];
Matrix.setIdentityM(matrix, 0);
- Matrix.translateM(translationMatrix, 0, matrix, 0, -translateX, 0.0f, 0.0f);
- Matrix.rotateM(translationMatrix, 0, translationMatrix, 0, angle, 0.0f, rotateY, 0.0f);
- Matrix.translateM(translationMatrix, 0, translationMatrix, 0, translateX, 0.0f, 0.0f);
- GLES20.glUniformMatrix4fv(mMVPMatrixHandlers[1], 1, false, translationMatrix, 0);
+ Matrix.translateM(mTranslationMatrix, 0, matrix, 0, -translateX, 0.0f, 0.0f);
+ Matrix.rotateM(mTranslationMatrix, 0, mTranslationMatrix, 0, angle, 0.0f, rotateY, 0.0f);
+ Matrix.translateM(mTranslationMatrix, 0, mTranslationMatrix, 0, translateX, 0.0f, 0.0f);
+ GLES20.glUniformMatrix4fv(mMVPMatrixHandlers[1], 1, false, mTranslationMatrix, 0);
GLESUtil.glesCheckError("glUniformMatrix4fv");
// Draw
@@ -451,15 +461,11 @@ public class CubeTransition extends Transition {
}
/**
- * Method that copy the vertex array
- *
- * @return The copy of the vertex
+ * Method that prepares the internal vertex array
*/
- private float[] cloneVertex() {
+ private void setInternalVertex() {
float[] originalVertex = mTarget.getFrameVertex();
- float[] vertex = new float[originalVertex.length];
- System.arraycopy(originalVertex, 0, vertex, 0, originalVertex.length);
- return vertex;
+ System.arraycopy(originalVertex, 0, mVertex, 0, originalVertex.length);
}
/**