android_view_GLES20Canvas.cpp revision f6a11b8a9e25ff9861bbba19251bea84d8a5daf2
1/* 2 * Copyright (C) 2010 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17#include "jni.h" 18#include <nativehelper/JNIHelp.h> 19#include <android_runtime/AndroidRuntime.h> 20 21#include <SkMatrix.h> 22#include <SkXfermode.h> 23 24#include <OpenGLRenderer.h> 25 26namespace android { 27 28// ---------------------------------------------------------------------------- 29// Constructors 30// ---------------------------------------------------------------------------- 31 32static OpenGLRenderer* android_view_GLES20Renderer_createRenderer(JNIEnv* env, jobject canvas) { 33 return new OpenGLRenderer; 34} 35 36static void android_view_GLES20Renderer_destroyRenderer(JNIEnv* env, jobject canvas, 37 OpenGLRenderer* renderer) { 38 delete renderer; 39} 40 41// ---------------------------------------------------------------------------- 42// Setup 43// ---------------------------------------------------------------------------- 44 45static void android_view_GLES20Renderer_setViewport(JNIEnv* env, jobject canvas, 46 OpenGLRenderer* renderer, jint width, jint height) { 47 renderer->setViewport(width, height); 48} 49 50static void android_view_GLES20Renderer_prepare(JNIEnv* env, jobject canvas, 51 OpenGLRenderer* renderer) { 52 renderer->prepare(); 53} 54 55// ---------------------------------------------------------------------------- 56// State 57// ---------------------------------------------------------------------------- 58 59static jint android_view_GLES20Renderer_save(JNIEnv* env, jobject canvas, OpenGLRenderer* renderer, 60 jint flags) { 61 return renderer->save(flags); 62} 63 64static jint android_view_GLES20Renderer_getSaveCount(JNIEnv* env, jobject canvas, 65 OpenGLRenderer* renderer) { 66 return renderer->getSaveCount(); 67} 68 69static void android_view_GLES20Renderer_restore(JNIEnv* env, jobject canvas, 70 OpenGLRenderer* renderer) { 71 renderer->restore(); 72} 73 74static void android_view_GLES20Renderer_restoreToCount(JNIEnv* env, jobject canvas, 75 OpenGLRenderer* renderer, jint saveCount) { 76 renderer->restoreToCount(saveCount); 77} 78 79// ---------------------------------------------------------------------------- 80// Clipping 81// ---------------------------------------------------------------------------- 82 83static bool android_view_GLES20Renderer_clipRectF(JNIEnv* env, jobject canvas, 84 OpenGLRenderer* renderer, jfloat left, jfloat top, jfloat right, jfloat bottom) { 85 return renderer->clipRect(left, top, right, bottom); 86} 87 88static bool android_view_GLES20Renderer_clipRect(JNIEnv* env, jobject canvas, 89 OpenGLRenderer* renderer, jint left, jint top, jint right, jint bottom) { 90 return renderer->clipRect(float(left), float(top), float(right), float(bottom)); 91} 92 93// ---------------------------------------------------------------------------- 94// Transforms 95// ---------------------------------------------------------------------------- 96 97static void android_view_GLES20Renderer_translate(JNIEnv* env, jobject canvas, 98 OpenGLRenderer* renderer, jfloat dx, jfloat dy) { 99 renderer->translate(dx, dy); 100} 101 102static void android_view_GLES20Renderer_rotate(JNIEnv* env, jobject canvas, 103 OpenGLRenderer* renderer, jfloat degrees) { 104 renderer->rotate(degrees); 105} 106 107static void android_view_GLES20Renderer_scale(JNIEnv* env, jobject canvas, 108 OpenGLRenderer* renderer, jfloat sx, jfloat sy) { 109 renderer->scale(sx, sy); 110} 111 112static void android_view_GLES20Renderer_setMatrix(JNIEnv* env, jobject canvas, 113 OpenGLRenderer* renderer, SkMatrix* matrix) { 114 renderer->setMatrix(matrix); 115} 116 117static void android_view_GLES20Renderer_getMatrix(JNIEnv* env, jobject canvas, 118 OpenGLRenderer* renderer, SkMatrix* matrix) { 119 renderer->getMatrix(matrix); 120} 121 122static void android_view_GLES20Renderer_concatMatrix(JNIEnv* env, jobject canvas, 123 OpenGLRenderer* renderer, SkMatrix* matrix) { 124 renderer->concatMatrix(matrix); 125} 126 127// ---------------------------------------------------------------------------- 128// Drawing 129// ---------------------------------------------------------------------------- 130 131static void android_view_GLES20Renderer_drawColor(JNIEnv* env, jobject canvas, 132 OpenGLRenderer* renderer, jint color, jint mode) { 133 renderer->drawColor(color, (SkXfermode::Mode) mode); 134} 135 136// ---------------------------------------------------------------------------- 137// JNI Glue 138// ---------------------------------------------------------------------------- 139 140const char* const kClassPathName = "android/view/GLES20Canvas"; 141 142static JNINativeMethod gMethods[] = { 143 { "nCreateRenderer", "()I", (void*) android_view_GLES20Renderer_createRenderer }, 144 { "nDestroyRenderer", "(I)V", (void*) android_view_GLES20Renderer_destroyRenderer }, 145 { "nSetViewport", "(III)V", (void*) android_view_GLES20Renderer_setViewport }, 146 { "nPrepare", "(I)V", (void*) android_view_GLES20Renderer_prepare }, 147 148 { "nSave", "(II)I", (void*) android_view_GLES20Renderer_save }, 149 { "nRestore", "(I)V", (void*) android_view_GLES20Renderer_restore }, 150 { "nRestoreToCount", "(II)V", (void*) android_view_GLES20Renderer_restoreToCount }, 151 { "nGetSaveCount", "(I)I", (void*) android_view_GLES20Renderer_getSaveCount }, 152 153 { "nClipRect", "(IFFFF)Z", (void*) android_view_GLES20Renderer_clipRectF }, 154 { "nClipRect", "(IIIII)Z", (void*) android_view_GLES20Renderer_clipRect }, 155 156 { "nTranslate", "(IFF)V", (void*) android_view_GLES20Renderer_translate }, 157 { "nRotate", "(IF)V", (void*) android_view_GLES20Renderer_rotate }, 158 { "nScale", "(IFF)V", (void*) android_view_GLES20Renderer_scale }, 159 160 { "nSetMatrix", "(II)V", (void*) android_view_GLES20Renderer_setMatrix }, 161 { "nGetMatrix", "(II)V", (void*) android_view_GLES20Renderer_getMatrix }, 162 { "nConcatMatrix", "(II)V", (void*) android_view_GLES20Renderer_concatMatrix }, 163 164 { "nDrawColor", "(III)V", (void*) android_view_GLES20Renderer_drawColor }, 165}; 166 167int register_android_view_GLES20Canvas(JNIEnv* env) { 168 return AndroidRuntime::registerNativeMethods(env, kClassPathName, gMethods, NELEM(gMethods)); 169} 170 171}; 172