| Index: platform_tools/android/apps/canvasproof/src/main/java/org/skia/canvasproof/GaneshPictureRenderer.java
|
| diff --git a/platform_tools/android/apps/canvasproof/src/main/java/org/skia/canvasproof/GaneshPictureRenderer.java b/platform_tools/android/apps/canvasproof/src/main/java/org/skia/canvasproof/GaneshPictureRenderer.java
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..01c6dc3f25b151dd64a5d3adb50be3e719b156bd
|
| --- /dev/null
|
| +++ b/platform_tools/android/apps/canvasproof/src/main/java/org/skia/canvasproof/GaneshPictureRenderer.java
|
| @@ -0,0 +1,120 @@
|
| +/*
|
| + * Copyright 2015 Google Inc.
|
| + *
|
| + * Use of this source code is governed by a BSD-style license that can be
|
| + * found in the LICENSE file.
|
| + */
|
| +
|
| +// AJAR=$ANDROID_SDK_ROOT/platforms/android-19/android.jar
|
| +// SRC=platform_tools/android/apps/canvasproof/src/main
|
| +// javac -classpath $AJAR $SRC/java/org/skia/canvasproof/GaneshPictureRenderer.java
|
| +// javah -classpath $AJAR:$SRC/java -d $SRC/jni org.skia.canvasproof.GaneshPictureRenderer
|
| +
|
| +package org.skia.canvasproof;
|
| +
|
| +import android.app.Activity;
|
| +import android.graphics.Rect;
|
| +import android.opengl.GLSurfaceView;
|
| +import android.util.Log;
|
| +import javax.microedition.khronos.egl.EGLConfig;
|
| +import javax.microedition.khronos.opengles.GL10;
|
| +
|
| +public class GaneshPictureRenderer implements GLSurfaceView.Renderer {
|
| + private static final String TAG = "GaneshPictureRenderer";
|
| + private long picturePtr;
|
| + private long contextPtr;
|
| + private float scale;
|
| + private int width;
|
| + private int height;
|
| + private GLSurfaceView view;
|
| +
|
| + GaneshPictureRenderer() {
|
| + try {
|
| + System.loadLibrary("skia_android");
|
| + System.loadLibrary("canvasproof");
|
| + } catch (java.lang.Error e) {
|
| + Log.e(TAG, "System.loadLibrary error", e);
|
| + return;
|
| + }
|
| + this.scale = 1;
|
| + }
|
| + public GLSurfaceView makeView(Activity activity) {
|
| + this.view = new GLSurfaceView(activity);
|
| + this.view.setEGLConfigChooser(8, 8, 8, 8, 0, 8);
|
| + this.view.setEGLContextClientVersion(2);
|
| + this.view.setRenderer(this);
|
| + this.view.setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
|
| + return this.view;
|
| + }
|
| + static public Rect cullRect(long picturePtr) {
|
| + Rect rect = new Rect();
|
| + try {
|
| + GaneshPictureRenderer.GetCullRect(rect, picturePtr);
|
| + } catch (UnsatisfiedLinkError e) {
|
| + Log.e(TAG, "GetCullRect failed", e);
|
| + }
|
| + return rect;
|
| + }
|
| + public void setPicture(long picturePtr) {
|
| + this.picturePtr = picturePtr;
|
| + this.view.requestRender();
|
| + }
|
| + public void setScale(float s) { this.scale = s; }
|
| +
|
| + public void releaseResources() {
|
| + if (this.contextPtr != 0) {
|
| + try {
|
| + GaneshPictureRenderer.CleanUp(this.contextPtr);
|
| + } catch (UnsatisfiedLinkError e) {
|
| + Log.e(TAG, "CleanUp failed", e);
|
| + }
|
| + }
|
| + this.contextPtr = 0;
|
| + }
|
| +
|
| + private void createContext() {
|
| + try {
|
| + this.contextPtr = GaneshPictureRenderer.Ctor();
|
| + } catch (UnsatisfiedLinkError e) {
|
| + Log.e(TAG, "Ctor failed", e);
|
| + }
|
| + }
|
| +
|
| + @Override
|
| + public void onSurfaceCreated(GL10 gl, EGLConfig c) {
|
| + this.releaseResources();
|
| + this.createContext();
|
| + }
|
| + @Override
|
| + public void onDrawFrame(GL10 gl) {
|
| + if (this.contextPtr == 0) {
|
| + this.createContext();
|
| + }
|
| + if (this.width > 0 && this.height > 0 &&
|
| + this.contextPtr != 0 && this.picturePtr != 0) {
|
| + try {
|
| + GaneshPictureRenderer.DrawThisFrame(
|
| + this.width, this.height, this.scale,
|
| + this.contextPtr, this.picturePtr);
|
| + } catch (UnsatisfiedLinkError e) {
|
| + Log.e(TAG, "DrawThisFrame failed", e);
|
| + }
|
| + }
|
| + }
|
| + @Override
|
| + public void onSurfaceChanged(GL10 gl, int w, int h) {
|
| + this.width = w;
|
| + this.height = h;
|
| + }
|
| + @Override
|
| + public void finalize() throws Throwable {
|
| + super.finalize();
|
| + this.releaseResources();
|
| + }
|
| +
|
| + // Make the native functions static to simplify JNI interaction.
|
| + private static native void DrawThisFrame(int w, int h, float s, long pr, long pc);
|
| + private static native long Ctor();
|
| + private static native void CleanUp(long p);
|
| + private static native void GetCullRect(Rect r, long picture);
|
| +}
|
|
|