summaryrefslogtreecommitdiffstats
path: root/tests/src/com/android/gallery3d/glrenderer/GLCanvasTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'tests/src/com/android/gallery3d/glrenderer/GLCanvasTest.java')
-rw-r--r--tests/src/com/android/gallery3d/glrenderer/GLCanvasTest.java386
1 files changed, 0 insertions, 386 deletions
diff --git a/tests/src/com/android/gallery3d/glrenderer/GLCanvasTest.java b/tests/src/com/android/gallery3d/glrenderer/GLCanvasTest.java
deleted file mode 100644
index 416c11414..000000000
--- a/tests/src/com/android/gallery3d/glrenderer/GLCanvasTest.java
+++ /dev/null
@@ -1,386 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.gallery3d.glrenderer;
-
-import android.test.suitebuilder.annotation.SmallTest;
-import android.util.Log;
-
-import junit.framework.TestCase;
-
-import java.util.Arrays;
-
-import javax.microedition.khronos.opengles.GL10;
-import javax.microedition.khronos.opengles.GL11;
-
-public class GLCanvasTest extends TestCase {
- private static final String TAG = "GLCanvasTest";
-
- private static GLPaint newColorPaint(int color) {
- GLPaint paint = new GLPaint();
- paint.setColor(color);
- return paint;
- }
-
- @SmallTest
- public void testSetSize() {
- GL11 glStub = new GLStub();
- GLCanvas canvas = new GLES11Canvas(glStub);
- canvas.setSize(100, 200);
- canvas.setSize(1000, 100);
- try {
- canvas.setSize(-1, 100);
- fail();
- } catch (Throwable ex) {
- // expected.
- }
- }
-
- @SmallTest
- public void testClearBuffer() {
- new ClearBufferTest().run();
- }
-
- private static class ClearBufferTest extends GLMock {
- void run() {
- GLCanvas canvas = new GLES11Canvas(this);
- assertEquals(0, mGLClearCalled);
- canvas.clearBuffer();
- assertEquals(GL10.GL_COLOR_BUFFER_BIT, mGLClearMask);
- assertEquals(1, mGLClearCalled);
- }
- }
-
- @SmallTest
- public void testSetColor() {
- new SetColorTest().run();
- }
-
- // This test assumes we use pre-multipled alpha blending and should
- // set the blending function and color correctly.
- private static class SetColorTest extends GLMock {
- void run() {
- int[] testColors = new int[] {
- 0, 0xFFFFFFFF, 0xFF000000, 0x00FFFFFF, 0x80FF8001,
- 0x7F010101, 0xFEFEFDFC, 0x017F8081, 0x027F8081, 0x2ADE4C4D
- };
-
- GLCanvas canvas = new GLES11Canvas(this);
- canvas.setSize(400, 300);
- // Test one color to make sure blend function is set.
- assertEquals(0, mGLColorCalled);
- canvas.drawLine(0, 0, 1, 1, newColorPaint(0x7F804020));
- assertEquals(1, mGLColorCalled);
- assertEquals(0x7F402010, mGLColor);
- assertPremultipliedBlending(this);
-
- // Test other colors to make sure premultiplication is right
- for (int c : testColors) {
- float a = (c >>> 24) / 255f;
- float r = ((c >> 16) & 0xff) / 255f;
- float g = ((c >> 8) & 0xff) / 255f;
- float b = (c & 0xff) / 255f;
- int pre = makeColor4f(a * r, a * g, a * b, a);
-
- mGLColorCalled = 0;
- canvas.drawLine(0, 0, 1, 1, newColorPaint(c));
- assertEquals(1, mGLColorCalled);
- assertEquals(pre, mGLColor);
- }
- }
- }
-
- @SmallTest
- public void testSetGetMultiplyAlpha() {
- GL11 glStub = new GLStub();
- GLCanvas canvas = new GLES11Canvas(glStub);
-
- canvas.setAlpha(1f);
- assertEquals(1f, canvas.getAlpha());
-
- canvas.setAlpha(0f);
- assertEquals(0f, canvas.getAlpha());
-
- canvas.setAlpha(0.5f);
- assertEquals(0.5f, canvas.getAlpha());
-
- canvas.multiplyAlpha(0.5f);
- assertEquals(0.25f, canvas.getAlpha());
-
- canvas.multiplyAlpha(0f);
- assertEquals(0f, canvas.getAlpha());
-
- try {
- canvas.setAlpha(-0.01f);
- fail();
- } catch (Throwable ex) {
- // expected.
- }
-
- try {
- canvas.setAlpha(1.01f);
- fail();
- } catch (Throwable ex) {
- // expected.
- }
- }
-
- @SmallTest
- public void testAlpha() {
- new AlphaTest().run();
- }
-
- private static class AlphaTest extends GLMock {
- void run() {
- GLCanvas canvas = new GLES11Canvas(this);
- canvas.setSize(400, 300);
-
- assertEquals(0, mGLColorCalled);
- canvas.setAlpha(0.48f);
- canvas.drawLine(0, 0, 1, 1, newColorPaint(0xFF804020));
- assertPremultipliedBlending(this);
- assertEquals(1, mGLColorCalled);
- assertEquals(0x7A3D1F0F, mGLColor);
- }
- }
-
- @SmallTest
- public void testDrawLine() {
- new DrawLineTest().run();
- }
-
- // This test assumes the drawLine() function use glDrawArrays() with
- // GL_LINE_STRIP mode to draw the line and the input coordinates are used
- // directly.
- private static class DrawLineTest extends GLMock {
- private int mDrawArrayCalled = 0;
- private final int[] mResult = new int[4];
-
- @Override
- public void glDrawArrays(int mode, int first, int count) {
- assertNotNull(mGLVertexPointer);
- assertEquals(GL10.GL_LINE_STRIP, mode);
- assertEquals(2, count);
- mGLVertexPointer.bindByteBuffer();
-
- double[] coord = new double[4];
- mGLVertexPointer.getArrayElement(first, coord);
- mResult[0] = (int) coord[0];
- mResult[1] = (int) coord[1];
- mGLVertexPointer.getArrayElement(first + 1, coord);
- mResult[2] = (int) coord[0];
- mResult[3] = (int) coord[1];
- mDrawArrayCalled++;
- }
-
- void run() {
- GLCanvas canvas = new GLES11Canvas(this);
- canvas.setSize(400, 300);
- canvas.drawLine(2, 7, 1, 8, newColorPaint(0) /* color */);
- assertTrue(mGLVertexArrayEnabled);
- assertEquals(1, mDrawArrayCalled);
-
- Log.v(TAG, "result = " + Arrays.toString(mResult));
- int[] answer = new int[] {2, 7, 1, 8};
- for (int i = 0; i < answer.length; i++) {
- assertEquals(answer[i], mResult[i]);
- }
- }
- }
-
- @SmallTest
- public void testFillRect() {
- new FillRectTest().run();
- }
-
- // This test assumes the drawLine() function use glDrawArrays() with
- // GL_TRIANGLE_STRIP mode to draw the line and the input coordinates
- // are used directly.
- private static class FillRectTest extends GLMock {
- private int mDrawArrayCalled = 0;
- private final int[] mResult = new int[8];
-
- @Override
- public void glDrawArrays(int mode, int first, int count) {
- assertNotNull(mGLVertexPointer);
- assertEquals(GL10.GL_TRIANGLE_STRIP, mode);
- assertEquals(4, count);
- mGLVertexPointer.bindByteBuffer();
-
- double[] coord = new double[4];
- for (int i = 0; i < 4; i++) {
- mGLVertexPointer.getArrayElement(first + i, coord);
- mResult[i * 2 + 0] = (int) coord[0];
- mResult[i * 2 + 1] = (int) coord[1];
- }
-
- mDrawArrayCalled++;
- }
-
- void run() {
- GLCanvas canvas = new GLES11Canvas(this);
- canvas.setSize(400, 300);
- canvas.fillRect(2, 7, 1, 8, 0 /* color */);
- assertTrue(mGLVertexArrayEnabled);
- assertEquals(1, mDrawArrayCalled);
- Log.v(TAG, "result = " + Arrays.toString(mResult));
-
- // These are the four vertics that should be used.
- int[] answer = new int[] {
- 2, 7,
- 3, 7,
- 3, 15,
- 2, 15};
- int count[] = new int[4];
-
- // Count the number of appearances for each vertex.
- for (int i = 0; i < 4; i++) {
- for (int j = 0; j < 4; j++) {
- if (answer[i * 2] == mResult[j * 2] &&
- answer[i * 2 + 1] == mResult[j * 2 + 1]) {
- count[i]++;
- }
- }
- }
-
- // Each vertex should appear exactly once.
- for (int i = 0; i < 4; i++) {
- assertEquals(1, count[i]);
- }
- }
- }
-
- @SmallTest
- public void testTransform() {
- new TransformTest().run();
- }
-
- // This test assumes glLoadMatrixf is used to load the model view matrix,
- // and glOrthof is used to load the projection matrix.
- //
- // The projection matrix is set to an orthogonal projection which is the
- // inverse of viewport transform. So the model view matrix maps input
- // directly to screen coordinates (default no scaling, and the y-axis is
- // reversed).
- //
- // The matrix here are all listed in column major order.
- //
- private static class TransformTest extends GLMock {
- private final float[] mModelViewMatrixUsed = new float[16];
- private final float[] mProjectionMatrixUsed = new float[16];
-
- @Override
- public void glDrawArrays(int mode, int first, int count) {
- copy(mModelViewMatrixUsed, mGLModelViewMatrix);
- copy(mProjectionMatrixUsed, mGLProjectionMatrix);
- }
-
- private void copy(float[] dest, float[] src) {
- System.arraycopy(src, 0, dest, 0, 16);
- }
-
- void run() {
- GLCanvas canvas = new GLES11Canvas(this);
- canvas.setSize(40, 50);
- int color = 0;
-
- // Initial matrix
- canvas.drawLine(0, 0, 1, 1, newColorPaint(color));
- assertMatrixEq(new float[] {
- 1, 0, 0, 0,
- 0, -1, 0, 0,
- 0, 0, 1, 0,
- 0, 50, 0, 1
- }, mModelViewMatrixUsed);
-
- assertMatrixEq(new float[] {
- 2f / 40, 0, 0, 0,
- 0, 2f / 50, 0, 0,
- 0, 0, -1, 0,
- -1, -1, 0, 1
- }, mProjectionMatrixUsed);
-
- // Translation
- canvas.translate(3, 4, 5);
- canvas.drawLine(0, 0, 1, 1, newColorPaint(color));
- assertMatrixEq(new float[] {
- 1, 0, 0, 0,
- 0, -1, 0, 0,
- 0, 0, 1, 0,
- 3, 46, 5, 1
- }, mModelViewMatrixUsed);
- canvas.save();
-
- // Scaling
- canvas.scale(0.7f, 0.6f, 0.5f);
- canvas.drawLine(0, 0, 1, 1, newColorPaint(color));
- assertMatrixEq(new float[] {
- 0.7f, 0, 0, 0,
- 0, -0.6f, 0, 0,
- 0, 0, 0.5f, 0,
- 3, 46, 5, 1
- }, mModelViewMatrixUsed);
-
- // Rotation
- canvas.rotate(90, 0, 0, 1);
- canvas.drawLine(0, 0, 1, 1, newColorPaint(color));
- assertMatrixEq(new float[] {
- 0, -0.6f, 0, 0,
- -0.7f, 0, 0, 0,
- 0, 0, 0.5f, 0,
- 3, 46, 5, 1
- }, mModelViewMatrixUsed);
- canvas.restore();
-
- // After restoring to the point just after translation,
- // do rotation again.
- canvas.rotate(180, 1, 0, 0);
- canvas.drawLine(0, 0, 1, 1, newColorPaint(color));
- assertMatrixEq(new float[] {
- 1, 0, 0, 0,
- 0, 1, 0, 0,
- 0, 0, -1, 0,
- 3, 46, 5, 1
- }, mModelViewMatrixUsed);
- }
- }
-
- private static void assertPremultipliedBlending(GLMock mock) {
- assertTrue(mock.mGLBlendFuncCalled > 0);
- assertTrue(mock.mGLBlendEnabled);
- assertEquals(GL11.GL_ONE, mock.mGLBlendFuncSFactor);
- assertEquals(GL11.GL_ONE_MINUS_SRC_ALPHA, mock.mGLBlendFuncDFactor);
- }
-
- private static void assertMatrixEq(float[] expected, float[] actual) {
- try {
- for (int i = 0; i < 16; i++) {
- assertFloatEq(expected[i], actual[i]);
- }
- } catch (Throwable t) {
- Log.v(TAG, "expected = " + Arrays.toString(expected) +
- ", actual = " + Arrays.toString(actual));
- fail();
- }
- }
-
- public static void assertFloatEq(float expected, float actual) {
- if (Math.abs(actual - expected) > 1e-6) {
- Log.v(TAG, "expected: " + expected + ", actual: " + actual);
- fail();
- }
- }
-}