blob: 1ca172d28398e46bbf9db42d990fac01b37b2c91 [file] [log] [blame]
Romain Guye4d01122010-06-16 18:44:05 -07001/*
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
Romain Guyf6a11b82010-06-23 17:47:49 -070021#include <SkMatrix.h>
Romain Guy85bf02f2010-06-22 13:11:24 -070022#include <SkXfermode.h>
Romain Guye4d01122010-06-16 18:44:05 -070023
Romain Guy85bf02f2010-06-22 13:11:24 -070024#include <OpenGLRenderer.h>
25
Romain Guye4d01122010-06-16 18:44:05 -070026namespace android {
27
28// ----------------------------------------------------------------------------
29// Constructors
30// ----------------------------------------------------------------------------
31
Romain Guy85bf02f2010-06-22 13:11:24 -070032static OpenGLRenderer* android_view_GLES20Renderer_createRenderer(JNIEnv* env, jobject canvas) {
33 return new OpenGLRenderer;
Romain Guye4d01122010-06-16 18:44:05 -070034}
35
Romain Guyf6a11b82010-06-23 17:47:49 -070036static void android_view_GLES20Renderer_destroyRenderer(JNIEnv* env, jobject canvas,
37 OpenGLRenderer* renderer) {
38 delete renderer;
Romain Guye4d01122010-06-16 18:44:05 -070039}
40
41// ----------------------------------------------------------------------------
42// Setup
43// ----------------------------------------------------------------------------
44
Romain Guyf6a11b82010-06-23 17:47:49 -070045static void android_view_GLES20Renderer_setViewport(JNIEnv* env, jobject canvas,
46 OpenGLRenderer* renderer, jint width, jint height) {
47 renderer->setViewport(width, height);
Romain Guye4d01122010-06-16 18:44:05 -070048}
49
Romain Guyf6a11b82010-06-23 17:47:49 -070050static void android_view_GLES20Renderer_prepare(JNIEnv* env, jobject canvas,
51 OpenGLRenderer* renderer) {
52 renderer->prepare();
Romain Guye4d01122010-06-16 18:44:05 -070053}
54
55// ----------------------------------------------------------------------------
Romain Guybb9524b2010-06-22 18:56:38 -070056// State
57// ----------------------------------------------------------------------------
58
Romain Guyf6a11b82010-06-23 17:47:49 -070059static jint android_view_GLES20Renderer_save(JNIEnv* env, jobject canvas, OpenGLRenderer* renderer,
Romain Guybb9524b2010-06-22 18:56:38 -070060 jint flags) {
Romain Guyf6a11b82010-06-23 17:47:49 -070061 return renderer->save(flags);
Romain Guybb9524b2010-06-22 18:56:38 -070062}
63
Romain Guyf6a11b82010-06-23 17:47:49 -070064static jint android_view_GLES20Renderer_getSaveCount(JNIEnv* env, jobject canvas,
65 OpenGLRenderer* renderer) {
66 return renderer->getSaveCount();
Romain Guybb9524b2010-06-22 18:56:38 -070067}
68
Romain Guyf6a11b82010-06-23 17:47:49 -070069static void android_view_GLES20Renderer_restore(JNIEnv* env, jobject canvas,
70 OpenGLRenderer* renderer) {
71 renderer->restore();
Romain Guybb9524b2010-06-22 18:56:38 -070072}
73
Romain Guyf6a11b82010-06-23 17:47:49 -070074static void android_view_GLES20Renderer_restoreToCount(JNIEnv* env, jobject canvas,
75 OpenGLRenderer* renderer, jint saveCount) {
76 renderer->restoreToCount(saveCount);
Romain Guybb9524b2010-06-22 18:56:38 -070077}
78
79// ----------------------------------------------------------------------------
80// Clipping
81// ----------------------------------------------------------------------------
82
Romain Guyf6a11b82010-06-23 17:47:49 -070083static 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);
Romain Guybb9524b2010-06-22 18:56:38 -070086}
87
Romain Guyf6a11b82010-06-23 17:47:49 -070088static 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}
Romain Guybb9524b2010-06-22 18:56:38 -070092
Romain Guyf6a11b82010-06-23 17:47:49 -070093// ----------------------------------------------------------------------------
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);
Romain Guybb9524b2010-06-22 18:56:38 -0700125}
126
127// ----------------------------------------------------------------------------
128// Drawing
Romain Guy85bf02f2010-06-22 13:11:24 -0700129// ----------------------------------------------------------------------------
130
Romain Guyf6a11b82010-06-23 17:47:49 -0700131static void android_view_GLES20Renderer_drawColor(JNIEnv* env, jobject canvas,
132 OpenGLRenderer* renderer, jint color, jint mode) {
133 renderer->drawColor(color, (SkXfermode::Mode) mode);
Romain Guy85bf02f2010-06-22 13:11:24 -0700134}
135
136// ----------------------------------------------------------------------------
Romain Guye4d01122010-06-16 18:44:05 -0700137// JNI Glue
138// ----------------------------------------------------------------------------
139
140const char* const kClassPathName = "android/view/GLES20Canvas";
141
142static JNINativeMethod gMethods[] = {
Romain Guybb9524b2010-06-22 18:56:38 -0700143 { "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 },
Romain Guy85bf02f2010-06-22 13:11:24 -0700147
Romain Guybb9524b2010-06-22 18:56:38 -0700148 { "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
Romain Guyf6a11b82010-06-23 17:47:49 -0700156 { "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
Romain Guybb9524b2010-06-22 18:56:38 -0700164 { "nDrawColor", "(III)V", (void*) android_view_GLES20Renderer_drawColor },
Romain Guye4d01122010-06-16 18:44:05 -0700165};
166
167int register_android_view_GLES20Canvas(JNIEnv* env) {
168 return AndroidRuntime::registerNativeMethods(env, kClassPathName, gMethods, NELEM(gMethods));
169}
170
171};