diff options
author | ziadb <ziadb@google.com> | 2018-07-26 15:01:46 -0400 |
---|---|---|
committer | Ziad Ben Hadj-Alouane <ziadb@google.com> | 2018-07-26 19:29:49 +0000 |
commit | 3ab3b562b11014797747ef9f7b0464cebb1b530b (patch) | |
tree | 830273534a2eb24ba63a124b7f90c8b753517a71 /platform_tools | |
parent | 2863ff22e1c2924748b479be493ba85dad77f22e (diff) |
SkAR Java: changes to DrawManager/FingerPainting
Bug: skia:
Change-Id: I609fa91f89ec0cc011046d2f20716efd9b44d4da
Reviewed-on: https://skia-review.googlesource.com/143643
Reviewed-by: Mike Reed <reed@google.com>
Diffstat (limited to 'platform_tools')
-rw-r--r-- | platform_tools/android/apps/skar_java/src/main/AndroidManifest.xml | 2 | ||||
-rw-r--r-- | platform_tools/android/apps/skar_java/src/main/java/com/google/ar/core/examples/java/helloskar/DrawManager.java | 61 | ||||
-rw-r--r-- | platform_tools/android/apps/skar_java/src/main/java/com/google/ar/core/examples/java/helloskar/HelloCanvasAR.java (renamed from platform_tools/android/apps/skar_java/src/main/java/com/google/ar/core/examples/java/helloskar/HelloSkARActivity.java) | 4 | ||||
-rw-r--r-- | platform_tools/android/apps/skar_java/src/main/java/com/google/skar/SkARFingerPainting.java | 5 | ||||
-rw-r--r-- | platform_tools/android/apps/skar_java/src/main/res/layout/activity_main.xml | 2 |
5 files changed, 36 insertions, 38 deletions
diff --git a/platform_tools/android/apps/skar_java/src/main/AndroidManifest.xml b/platform_tools/android/apps/skar_java/src/main/AndroidManifest.xml index d14aca451e..abfacc5fe3 100644 --- a/platform_tools/android/apps/skar_java/src/main/AndroidManifest.xml +++ b/platform_tools/android/apps/skar_java/src/main/AndroidManifest.xml @@ -33,7 +33,7 @@ tools:ignore="GoogleAppIndexingWarning"> <activity - android:name="com.google.ar.core.examples.java.helloskar.HelloSkARActivity" + android:name="com.google.ar.core.examples.java.helloskar.HelloCanvasAR" android:configChanges="orientation|screenSize" android:exported="true" android:theme="@style/Theme.AppCompat.DayNight.NoActionBar" diff --git a/platform_tools/android/apps/skar_java/src/main/java/com/google/ar/core/examples/java/helloskar/DrawManager.java b/platform_tools/android/apps/skar_java/src/main/java/com/google/ar/core/examples/java/helloskar/DrawManager.java index 19dbb22057..724ab17c02 100644 --- a/platform_tools/android/apps/skar_java/src/main/java/com/google/ar/core/examples/java/helloskar/DrawManager.java +++ b/platform_tools/android/apps/skar_java/src/main/java/com/google/ar/core/examples/java/helloskar/DrawManager.java @@ -1,32 +1,27 @@ package com.google.ar.core.examples.java.helloskar; import android.content.Context; -import android.content.pm.ApplicationInfo; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.BitmapShader; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.ColorFilter; -import android.graphics.LinearGradient; import android.graphics.Paint; import android.graphics.Path; -import android.graphics.PointF; import android.graphics.PorterDuff; import android.graphics.PorterDuffColorFilter; import android.graphics.RectF; import android.graphics.Shader; import android.opengl.Matrix; -import android.os.Build; -import android.util.Log; import com.google.ar.core.Plane; import com.google.ar.core.PointCloud; import com.google.ar.core.Pose; import com.google.ar.core.TrackingState; +import com.google.skar.CanvasMatrixUtil; +import com.google.skar.PaintUtil; import com.google.skar.SkARFingerPainting; -import com.google.skar.SkARMatrix; -import com.google.skar.SkARUtil; import java.io.IOException; import java.nio.FloatBuffer; import java.util.ArrayList; @@ -62,7 +57,7 @@ public class DrawManager { } public void updateLightColorFilter(float[] colorCorr) { - lightFilter = SkARUtil.createLightCorrectionColorFilter(colorCorr); + lightFilter = PaintUtil.createLightCorrectionColorFilter(colorCorr); } // Sample function for drawing a circle @@ -75,7 +70,7 @@ public class DrawManager { p.setARGB(180, 100, 0, 0); canvas.save(); - android.graphics.Matrix m = SkARMatrix.createPerspectiveMatrix(modelMatrices.get(0), + android.graphics.Matrix m = CanvasMatrixUtil.createPerspectiveMatrix(modelMatrices.get(0), viewMatrix, projectionMatrix, viewportWidth, viewportHeight); canvas.setMatrix(m); @@ -93,7 +88,7 @@ public class DrawManager { p.setARGB(180, 100, 0, 100); canvas.save(); - canvas.setMatrix(SkARMatrix.createPerspectiveMatrix(modelMatrices.get(0), + canvas.setMatrix(CanvasMatrixUtil.createPerspectiveMatrix(modelMatrices.get(0), viewMatrix, projectionMatrix, viewportWidth, viewportHeight)); canvas.drawRoundRect(0,0, 0.5f, 0.5f, radius, radius, p); canvas.restore(); @@ -108,7 +103,7 @@ public class DrawManager { p.setColorFilter(lightFilter); p.setARGB(180, 0, 0, 255); canvas.save(); - canvas.setMatrix(SkARMatrix.createPerspectiveMatrix(modelMatrices.get(0), + canvas.setMatrix(CanvasMatrixUtil.createPerspectiveMatrix(modelMatrices.get(0), viewMatrix, projectionMatrix, viewportWidth, viewportHeight)); RectF rect = new RectF(0, 0, 0.2f, 0.2f); canvas.drawRect(rect, p); @@ -127,13 +122,13 @@ public class DrawManager { p.setTextSize(textSize); float[] scaleMatrix = getTextScaleMatrix(textSize); - float[] rotateMatrix = SkARMatrix.createXYtoXZRotationMatrix(); + float[] rotateMatrix = CanvasMatrixUtil.createXYtoXZRotationMatrix(); float[][] matrices = { scaleMatrix, rotateMatrix, modelMatrices.get(0), viewMatrix, projectionMatrix, - SkARMatrix.createViewportMatrix(viewportWidth, viewportHeight)}; + CanvasMatrixUtil.createViewportMatrix(viewportWidth, viewportHeight)}; canvas.save(); - canvas.setMatrix(SkARMatrix.createMatrixFrom4x4(SkARMatrix.multiplyMatrices4x4(matrices))); + canvas.setMatrix(CanvasMatrixUtil.createMatrixFrom4x4(CanvasMatrixUtil.multiplyMatrices4x4(matrices))); canvas.drawText(text, 0, 0, p); canvas.restore(); } @@ -153,7 +148,7 @@ public class DrawManager { Matrix.setIdentityM(in, 0); Matrix.translateM(in, 0, model[12], model[13], model[14]); - float[] initRot = SkARMatrix.createXYtoXZRotationMatrix(); + float[] initRot = CanvasMatrixUtil.createXYtoXZRotationMatrix(); float[] scale = new float[16]; float s = 0.001f; @@ -161,20 +156,24 @@ public class DrawManager { Matrix.scaleM(scale, 0, s, s, s); // Matrix = mvpv - float[][] matrices = {scale, initRot, in, viewMatrix, projectionMatrix, SkARMatrix.createViewportMatrix(viewportWidth, viewportHeight)}; - android.graphics.Matrix mvpv = SkARMatrix.createMatrixFrom4x4(SkARMatrix.multiplyMatrices4x4(matrices)); + float[][] matrices = {scale, initRot, in, viewMatrix, projectionMatrix, CanvasMatrixUtil.createViewportMatrix(viewportWidth, viewportHeight)}; + android.graphics.Matrix mvpv = CanvasMatrixUtil.createMatrixFrom4x4(CanvasMatrixUtil.multiplyMatrices4x4(matrices)); + + // Paint set up + Paint p = new Paint(); + p.setStyle(Paint.Style.STROKE); + p.setStrokeWidth(30f); + p.setAlpha(120); for (Path path : fingerPainting.getPaths()) { if (path.isEmpty()) { continue; } - // Set up paint - Paint p = new Paint(); p.setColor(fingerPainting.getPathColor(path)); - p.setStyle(Paint.Style.STROKE); - p.setStrokeWidth(30f); - p.setAlpha(120); + // Scaling issues appear to happen when drawing a Path and transforming the Canvas + // directly with a matrix on Android versions less than P. Ideally we would + // switch true to be (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) if (true) { // Transform applied through canvas @@ -202,15 +201,15 @@ public class DrawManager { FloatBuffer points = cloud.getPoints(); int numberOfPoints = points.remaining() / 4; - float[][] matrices = {viewMatrix, projectionMatrix, SkARMatrix.createViewportMatrix(viewportWidth, viewportHeight)}; - float[] vpv = SkARMatrix.multiplyMatrices4x4(matrices); + float[][] matrices = {viewMatrix, projectionMatrix, CanvasMatrixUtil.createViewportMatrix(viewportWidth, viewportHeight)}; + float[] vpv = CanvasMatrixUtil.multiplyMatrices4x4(matrices); float[] pointsToDraw = new float[numberOfPoints * 2]; for (int i = 0; i < numberOfPoints; i++) { float[] point = {points.get(i * 4), points.get(i * 4 + 1), points.get(i * 4 + 2), 1}; - PointF p = SkARMatrix.multiplyMatrixVector(vpv, point, true); - pointsToDraw[i * 2] = p.x; - pointsToDraw[i * 2 + 1] = p.y; + float[] result = CanvasMatrixUtil.multiplyMatrixVector(vpv, point, true); + pointsToDraw[i * 2] = result[0]; + pointsToDraw[i * 2 + 1] = result[1]; } Paint p = new Paint(); @@ -221,7 +220,7 @@ public class DrawManager { canvas.save(); float[] id = new float[16]; Matrix.setIdentityM(id, 0); - android.graphics.Matrix identity = SkARMatrix.createMatrixFrom4x4(id); + android.graphics.Matrix identity = CanvasMatrixUtil.createMatrixFrom4x4(id); canvas.setMatrix(identity); canvas.drawPoints(pointsToDraw, p); canvas.restore(); @@ -250,11 +249,11 @@ public class DrawManager { plane.getCenterPose().toMatrix(model, 0); // Initial rotation - float[] initRot = SkARMatrix.createXYtoXZRotationMatrix(); + float[] initRot = CanvasMatrixUtil.createXYtoXZRotationMatrix(); // Matrix = mvpv - float[][] matrices = {initRot, model, viewMatrix, projectionMatrix, SkARMatrix.createViewportMatrix(viewportWidth, viewportHeight)}; - android.graphics.Matrix mvpv = SkARMatrix.createMatrixFrom4x4(SkARMatrix.multiplyMatrices4x4(matrices)); + float[][] matrices = {initRot, model, viewMatrix, projectionMatrix, CanvasMatrixUtil.createViewportMatrix(viewportWidth, viewportHeight)}; + android.graphics.Matrix mvpv = CanvasMatrixUtil.createMatrixFrom4x4(CanvasMatrixUtil.multiplyMatrices4x4(matrices)); drawPlaneAsPath(canvas, mvpv, plane); } diff --git a/platform_tools/android/apps/skar_java/src/main/java/com/google/ar/core/examples/java/helloskar/HelloSkARActivity.java b/platform_tools/android/apps/skar_java/src/main/java/com/google/ar/core/examples/java/helloskar/HelloCanvasAR.java index 7032d13e89..cc4ad93b99 100644 --- a/platform_tools/android/apps/skar_java/src/main/java/com/google/ar/core/examples/java/helloskar/HelloSkARActivity.java +++ b/platform_tools/android/apps/skar_java/src/main/java/com/google/ar/core/examples/java/helloskar/HelloCanvasAR.java @@ -78,12 +78,12 @@ import javax.microedition.khronos.opengles.GL10; * plane to place 2D objects */ -public class HelloSkARActivity extends AppCompatActivity implements GLSurfaceView.Renderer { +public class HelloCanvasAR extends AppCompatActivity implements GLSurfaceView.Renderer { public enum DrawingType { circle, rect, text, animation } - private static final String TAG = HelloSkARActivity.class.getSimpleName(); + private static final String TAG = HelloCanvasAR.class.getSimpleName(); //Simple SurfaceView used to draw 2D objects on top of the GLSurfaceView private ARSurfaceView arSurfaceView; diff --git a/platform_tools/android/apps/skar_java/src/main/java/com/google/skar/SkARFingerPainting.java b/platform_tools/android/apps/skar_java/src/main/java/com/google/skar/SkARFingerPainting.java index e28037dc33..d63295857d 100644 --- a/platform_tools/android/apps/skar_java/src/main/java/com/google/skar/SkARFingerPainting.java +++ b/platform_tools/android/apps/skar_java/src/main/java/com/google/skar/SkARFingerPainting.java @@ -106,9 +106,8 @@ public class SkARFingerPainting { } else if (nbPts >= 3){ // Else, essentially run deCasteljau p.moveTo(points.get(start).x, points.get(start).y); - PointF mid = new PointF((points.get(start).x + points.get(start + 1).x) / 2, - (points.get(start).y + points.get(start + 1).y) / 2); - p.lineTo(mid.x, mid.y); + p.lineTo((points.get(start).x + points.get(start + 1).x) / 2, + (points.get(start).y + points.get(start + 1).y) / 2); for (int i = start + 1; i < finish - 1; i++) { PointF p1 = points.get(i); diff --git a/platform_tools/android/apps/skar_java/src/main/res/layout/activity_main.xml b/platform_tools/android/apps/skar_java/src/main/res/layout/activity_main.xml index 109c40c829..d1737c5f36 100644 --- a/platform_tools/android/apps/skar_java/src/main/res/layout/activity_main.xml +++ b/platform_tools/android/apps/skar_java/src/main/res/layout/activity_main.xml @@ -18,7 +18,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto" - tools:context="com.google.ar.core.examples.java.helloskar.HelloSkARActivity"> + tools:context="com.google.ar.core.examples.java.helloskar.HelloCanvasAR"> <FrameLayout android:layout_width="match_parent" |