SkiaSampleRenderer.java revision dcdd57faf02fb4fd23bb8265392b9c22e068907e
1dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com/*
2dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com * Copyright 2012 Google Inc.
3dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com *
4dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com * Use of this source code is governed by a BSD-style license that can be
5dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com * found in the LICENSE file.
6dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com */
7dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com
8dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.compackage com.skia;
9dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com
10dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.comimport android.opengl.GLSurfaceView;
11dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.comimport android.os.Handler;
12dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com
13dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.comimport javax.microedition.khronos.egl.EGLConfig;
14dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.comimport javax.microedition.khronos.opengles.GL10;
15dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com
16dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.compublic class SkiaSampleRenderer implements GLSurfaceView.Renderer {
17dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com
18dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com    private final SkiaSampleView mSampleView;
19dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com    private Handler mHandler = new Handler();
20dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com
21dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com    SkiaSampleRenderer(SkiaSampleView view) {
22dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com        mSampleView = view;
23dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com    }
24dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com
25dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com    @Override
26dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com    public void onDrawFrame(GL10 gl) {
27dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com        draw();
28dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com    }
29dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com
30dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com    @Override
31dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com    public void onSurfaceChanged(GL10 gl, int width, int height) {
32dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com        updateSize(width, height);
33dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com    }
34dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com
35dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com    @Override
36dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com    public void onSurfaceCreated(GL10 gl, EGLConfig config) {
37dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com        gl.glClearStencil(0);
38dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com        gl.glClear(GL10.GL_STENCIL_BUFFER_BIT);
39dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com        init((SkiaSampleActivity)mSampleView.getContext());
40dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com    }
41dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com
42dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com    // Called by JNI
43dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com    private void startTimer(int ms) {
44dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com        // After the delay, queue an event to the Renderer's thread
45dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com        // to handle the event on the timer queue
46dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com        mHandler.postDelayed(new Runnable() {
47dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com            @Override
48dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com            public void run() {
49dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com                mSampleView.queueEvent(new Runnable() {
50dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com                    @Override
51dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com                    public void run() {
52dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com                        serviceQueueTimer();
53dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com                    }
54dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com                });
55dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com            }
56dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com        }, ms);
57dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com    }
58dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com
59dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com    // Called by JNI
60dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com    private void queueSkEvent() {
61dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com        mSampleView.queueEvent(new Runnable() {
62dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com            @Override
63dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com            public void run() {
64dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com                processSkEvent();
65dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com            }
66dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com        });
67dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com    }
68dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com
69dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com    // Called by JNI
70dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com    private void requestRender() {
71dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com        mSampleView.requestRender();
72dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com    }
73dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com
74dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com    native void init(SkiaSampleActivity activity);
75dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com    native void term();
76dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com    native void draw();
77dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com    native void updateSize(int w, int h);
78dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com    native void handleClick(int owner, float x, float y, int state);
79dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com    native void showOverview();
80dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com    native void nextSample();
81dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com    native void previousSample();
82dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com    native void goToSample(int position);
83dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com    native void toggleRenderingMode();
84dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com    native void toggleSlideshow();
85dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com    native void toggleFPS();
86dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com    native void toggleTiling();
87dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com    native void toggleBBox();
88dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com    native void processSkEvent();
89dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com    native void serviceQueueTimer();
90dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com    native void saveToPDF();
91dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com    native void postInval();
92dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com}