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; 12a3b84d41efbbc5ab1e050a33d66dca4d1c44c9e3commit-bot@chromium.orgimport android.util.Log; 13dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com 14dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.comimport javax.microedition.khronos.egl.EGLConfig; 15dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.comimport javax.microedition.khronos.opengles.GL10; 16a3b84d41efbbc5ab1e050a33d66dca4d1c44c9e3commit-bot@chromium.orgimport javax.microedition.khronos.opengles.GL11; 17dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com 18dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.compublic class SkiaSampleRenderer implements GLSurfaceView.Renderer { 19dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com 20dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com private final SkiaSampleView mSampleView; 21dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com private Handler mHandler = new Handler(); 22a3b84d41efbbc5ab1e050a33d66dca4d1c44c9e3commit-bot@chromium.org private int mMSAASampleCount; 23dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com 24dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com SkiaSampleRenderer(SkiaSampleView view) { 25dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com mSampleView = view; 26dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com } 27dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com 28dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com @Override 29dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com public void onDrawFrame(GL10 gl) { 30dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com draw(); 31dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com } 32dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com 33dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com @Override 34dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com public void onSurfaceChanged(GL10 gl, int width, int height) { 35dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com updateSize(width, height); 36dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com } 37dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com 38dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com @Override 39dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com public void onSurfaceCreated(GL10 gl, EGLConfig config) { 40a3b84d41efbbc5ab1e050a33d66dca4d1c44c9e3commit-bot@chromium.org if (gl instanceof GL11) { 41a3b84d41efbbc5ab1e050a33d66dca4d1c44c9e3commit-bot@chromium.org int value[] = new int[1]; 42a3b84d41efbbc5ab1e050a33d66dca4d1c44c9e3commit-bot@chromium.org ((GL11) gl).glGetIntegerv(GL11.GL_SAMPLES, value, 0); 43a3b84d41efbbc5ab1e050a33d66dca4d1c44c9e3commit-bot@chromium.org if (value[0] == 1) { 44a3b84d41efbbc5ab1e050a33d66dca4d1c44c9e3commit-bot@chromium.org mMSAASampleCount = 0; 45a3b84d41efbbc5ab1e050a33d66dca4d1c44c9e3commit-bot@chromium.org } else { 46a3b84d41efbbc5ab1e050a33d66dca4d1c44c9e3commit-bot@chromium.org mMSAASampleCount = value[0]; 47a3b84d41efbbc5ab1e050a33d66dca4d1c44c9e3commit-bot@chromium.org } 48a3b84d41efbbc5ab1e050a33d66dca4d1c44c9e3commit-bot@chromium.org } 49a3b84d41efbbc5ab1e050a33d66dca4d1c44c9e3commit-bot@chromium.org 50dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com gl.glClearStencil(0); 51dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com gl.glClear(GL10.GL_STENCIL_BUFFER_BIT); 52a3b84d41efbbc5ab1e050a33d66dca4d1c44c9e3commit-bot@chromium.org init((SkiaSampleActivity)mSampleView.getContext(), mMSAASampleCount); 53a3b84d41efbbc5ab1e050a33d66dca4d1c44c9e3commit-bot@chromium.org } 54a3b84d41efbbc5ab1e050a33d66dca4d1c44c9e3commit-bot@chromium.org 55a3b84d41efbbc5ab1e050a33d66dca4d1c44c9e3commit-bot@chromium.org // Called by JNI and the view. 56a3b84d41efbbc5ab1e050a33d66dca4d1c44c9e3commit-bot@chromium.org synchronized public int getMSAASampleCount() { 57a3b84d41efbbc5ab1e050a33d66dca4d1c44c9e3commit-bot@chromium.org return mMSAASampleCount; 58dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com } 59dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com 60dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com // Called by JNI 61dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com private void startTimer(int ms) { 62dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com // After the delay, queue an event to the Renderer's thread 63dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com // to handle the event on the timer queue 64dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com mHandler.postDelayed(new Runnable() { 65dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com @Override 66dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com public void run() { 67dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com mSampleView.queueEvent(new Runnable() { 68dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com @Override 69dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com public void run() { 70dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com serviceQueueTimer(); 71dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com } 72dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com }); 73dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com } 74dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com }, ms); 75dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com } 76dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com 77dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com // Called by JNI 78dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com private void queueSkEvent() { 79dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com mSampleView.queueEvent(new Runnable() { 80dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com @Override 81dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com public void run() { 82dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com processSkEvent(); 83dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com } 84dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com }); 85dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com } 86dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com 87dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com // Called by JNI 88dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com private void requestRender() { 89dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com mSampleView.requestRender(); 90dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com } 91dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com 92a3b84d41efbbc5ab1e050a33d66dca4d1c44c9e3commit-bot@chromium.org native void init(SkiaSampleActivity activity, int msaaSampleCount); 93dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com native void term(); 94dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com native void draw(); 95dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com native void updateSize(int w, int h); 96dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com native void handleClick(int owner, float x, float y, int state); 97dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com native void showOverview(); 98dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com native void nextSample(); 99dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com native void previousSample(); 100dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com native void goToSample(int position); 101dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com native void toggleRenderingMode(); 102dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com native void toggleSlideshow(); 103dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com native void toggleFPS(); 104dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com native void toggleTiling(); 105dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com native void toggleBBox(); 106dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com native void processSkEvent(); 107dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com native void serviceQueueTimer(); 108dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com native void saveToPDF(); 109dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com native void postInval(); 110dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com}