android_view_GLES20Canvas.cpp revision bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4
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 <SkXfermode.h> 22 23#include <OpenGLRenderer.h> 24 25#define UI ((OpenGLRenderer*) renderer) 26 27namespace android { 28 29// ---------------------------------------------------------------------------- 30// Constructors 31// ---------------------------------------------------------------------------- 32 33static OpenGLRenderer* android_view_GLES20Renderer_createRenderer(JNIEnv* env, jobject canvas) { 34 return new OpenGLRenderer; 35} 36 37static void android_view_GLES20Renderer_destroyRenderer(JNIEnv* env, jobject canvas, jint renderer) { 38 delete UI; 39} 40 41// ---------------------------------------------------------------------------- 42// Setup 43// ---------------------------------------------------------------------------- 44 45static void android_view_GLES20Renderer_setViewport(JNIEnv* env, jobject canvas, jint renderer, 46 jint width, jint height) { 47 48 UI->setViewport(width, height); 49} 50 51static void android_view_GLES20Renderer_prepare(JNIEnv* env, jobject canvas, jint renderer) { 52 53 UI->prepare(); 54} 55 56// ---------------------------------------------------------------------------- 57// State 58// ---------------------------------------------------------------------------- 59 60static jint android_view_GLES20Renderer_save(JNIEnv* env, jobject canvas, jint renderer, 61 jint flags) { 62 63 return UI->save(flags); 64} 65 66static jint android_view_GLES20Renderer_getSaveCount(JNIEnv* env, jobject canvas, jint renderer) { 67 return UI->getSaveCount(); 68} 69 70static void android_view_GLES20Renderer_restore(JNIEnv* env, jobject canvas, jint renderer) { 71 UI->restore(); 72} 73 74static void android_view_GLES20Renderer_restoreToCount(JNIEnv* env, jobject canvas, jint renderer, 75 jint saveCount) { 76 77 UI->restoreToCount(saveCount); 78} 79 80// ---------------------------------------------------------------------------- 81// Clipping 82// ---------------------------------------------------------------------------- 83 84static bool android_view_GLES20Renderer_clipRectF(JNIEnv* env, jobject canvas, jint renderer, 85 jfloat left, jfloat top, jfloat right, jfloat bottom) { 86 87 return UI->clipRect(left, top, right, bottom); 88} 89 90static bool android_view_GLES20Renderer_clipRect(JNIEnv* env, jobject canvas, jint renderer, 91 jint left, jint top, jint right, jint bottom) { 92 93 return UI->clipRect(float(left), float(top), float(right), float(bottom)); 94} 95 96// ---------------------------------------------------------------------------- 97// Drawing 98// ---------------------------------------------------------------------------- 99 100static void android_view_GLES20Renderer_drawColor(JNIEnv* env, jobject canvas, jint renderer, 101 jint color, jint mode) { 102 103 UI->drawColor(color, (SkXfermode::Mode) mode); 104} 105 106// ---------------------------------------------------------------------------- 107// JNI Glue 108// ---------------------------------------------------------------------------- 109 110const char* const kClassPathName = "android/view/GLES20Canvas"; 111 112static JNINativeMethod gMethods[] = { 113 { "nCreateRenderer", "()I", (void*) android_view_GLES20Renderer_createRenderer }, 114 { "nDestroyRenderer", "(I)V", (void*) android_view_GLES20Renderer_destroyRenderer }, 115 { "nSetViewport", "(III)V", (void*) android_view_GLES20Renderer_setViewport }, 116 { "nPrepare", "(I)V", (void*) android_view_GLES20Renderer_prepare }, 117 118 { "nSave", "(II)I", (void*) android_view_GLES20Renderer_save }, 119 { "nRestore", "(I)V", (void*) android_view_GLES20Renderer_restore }, 120 { "nRestoreToCount", "(II)V", (void*) android_view_GLES20Renderer_restoreToCount }, 121 { "nGetSaveCount", "(I)I", (void*) android_view_GLES20Renderer_getSaveCount }, 122 123 { "nClipRect", "(IFFFF)Z", (void*) android_view_GLES20Renderer_clipRectF }, 124 { "nClipRect", "(IIIII)Z", (void*) android_view_GLES20Renderer_clipRect }, 125 126 { "nDrawColor", "(III)V", (void*) android_view_GLES20Renderer_drawColor }, 127}; 128 129int register_android_view_GLES20Canvas(JNIEnv* env) { 130 return AndroidRuntime::registerNativeMethods(env, kClassPathName, gMethods, NELEM(gMethods)); 131} 132 133}; 134