diff options
Diffstat (limited to 'platform_tools/android/apps/canvasproof/src/main/java/org/skia/canvasproof/GaneshPictureRenderer.java')
-rw-r--r-- | platform_tools/android/apps/canvasproof/src/main/java/org/skia/canvasproof/GaneshPictureRenderer.java | 120 |
1 files changed, 120 insertions, 0 deletions
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 0000000000..01c6dc3f25 --- /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); +} |