blob: 1817a1b0d7ae39943098ee6247507d155d874da3 [file] [log] [blame]
Jason Samsd19f10d2009-05-22 14:03:28 -07001/*
2 * Copyright (C) 2006 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
Jason Samsf29ca502009-06-23 12:22:47 -070017#define LOG_TAG "libRS_jni"
18
Jason Samsd19f10d2009-05-22 14:03:28 -070019#include <stdlib.h>
20#include <stdio.h>
21#include <fcntl.h>
22#include <unistd.h>
23#include <math.h>
Jason Samsd19f10d2009-05-22 14:03:28 -070024#include <utils/misc.h>
Jason Samsd19f10d2009-05-22 14:03:28 -070025
Mathias Agopian000479f2010-02-09 17:46:37 -080026#include <surfaceflinger/Surface.h>
Jason Samsd19f10d2009-05-22 14:03:28 -070027
Jason Samsffe9f482009-06-01 17:45:53 -070028#include <core/SkBitmap.h>
Romain Guy650a3eb2009-08-31 14:06:43 -070029#include <core/SkPixelRef.h>
30#include <core/SkStream.h>
31#include <core/SkTemplates.h>
32#include <images/SkImageDecoder.h>
Jason Samsffe9f482009-06-01 17:45:53 -070033
Romain Guy650a3eb2009-08-31 14:06:43 -070034#include <utils/Asset.h>
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -080035#include <utils/AssetManager.h>
Romain Guy650a3eb2009-08-31 14:06:43 -070036#include <utils/ResourceTypes.h>
Jason Samsf29ca502009-06-23 12:22:47 -070037
Jason Samsd19f10d2009-05-22 14:03:28 -070038#include "jni.h"
39#include "JNIHelp.h"
40#include "android_runtime/AndroidRuntime.h"
Jim Milleree956052010-08-19 18:56:00 -070041#include "android_runtime/android_view_Surface.h"
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -080042#include "android_runtime/android_util_AssetManager.h"
Jason Samsd19f10d2009-05-22 14:03:28 -070043
Jason Samse29d4712009-07-23 15:19:03 -070044#include <RenderScript.h>
45#include <RenderScriptEnv.h>
Jason Samsd19f10d2009-05-22 14:03:28 -070046
47//#define LOG_API LOGE
48#define LOG_API(...)
49
50using namespace android;
51
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -080052class AutoJavaStringToUTF8 {
53public:
54 AutoJavaStringToUTF8(JNIEnv* env, jstring str) : fEnv(env), fJStr(str)
55 {
56 fCStr = env->GetStringUTFChars(str, NULL);
57 fLength = env->GetStringUTFLength(str);
58 }
59 ~AutoJavaStringToUTF8()
60 {
61 fEnv->ReleaseStringUTFChars(fJStr, fCStr);
62 }
63 const char* c_str() const { return fCStr; }
64 jsize length() const { return fLength; }
65
66private:
67 JNIEnv* fEnv;
68 jstring fJStr;
69 const char* fCStr;
70 jsize fLength;
71};
72
Jason Samsd19f10d2009-05-22 14:03:28 -070073// ---------------------------------------------------------------------------
74
75static void doThrow(JNIEnv* env, const char* exc, const char* msg = NULL)
76{
77 jclass npeClazz = env->FindClass(exc);
78 env->ThrowNew(npeClazz, msg);
79}
80
Jason Samsffe9f482009-06-01 17:45:53 -070081static jfieldID gContextId = 0;
82static jfieldID gNativeBitmapID = 0;
Jason Sams43ee06852009-08-12 17:54:11 -070083static jfieldID gTypeNativeCache = 0;
Jason Samsd19f10d2009-05-22 14:03:28 -070084
85static void _nInit(JNIEnv *_env, jclass _this)
86{
Jason Samsd19f10d2009-05-22 14:03:28 -070087 gContextId = _env->GetFieldID(_this, "mContext", "I");
Jason Samsffe9f482009-06-01 17:45:53 -070088
89 jclass bitmapClass = _env->FindClass("android/graphics/Bitmap");
90 gNativeBitmapID = _env->GetFieldID(bitmapClass, "mNativeBitmap", "I");
Jason Samsd19f10d2009-05-22 14:03:28 -070091}
92
Jason Samsd19f10d2009-05-22 14:03:28 -070093// ---------------------------------------------------------------------------
94
Jason Sams3eaa338e2009-06-10 15:04:38 -070095static void
Jason Sams2e1872f2010-08-17 16:25:41 -070096nContextFinish(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams96ed4cf2010-06-15 12:15:57 -070097{
Jason Sams96ed4cf2010-06-15 12:15:57 -070098 LOG_API("nContextFinish, con(%p)", con);
99 rsContextFinish(con);
100}
101
102static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700103nAssignName(JNIEnv *_env, jobject _this, RsContext con, jint obj, jbyteArray str)
Jason Sams3eaa338e2009-06-10 15:04:38 -0700104{
Jason Sams07ae4062009-08-27 20:23:34 -0700105 LOG_API("nAssignName, con(%p), obj(%p)", con, (void *)obj);
Jason Sams3eaa338e2009-06-10 15:04:38 -0700106 jint len = _env->GetArrayLength(str);
107 jbyte * cptr = (jbyte *) _env->GetPrimitiveArrayCritical(str, 0);
Jason Samsbc948de2009-08-17 18:35:48 -0700108 rsAssignName(con, (void *)obj, (const char *)cptr, len);
Jason Sams3eaa338e2009-06-10 15:04:38 -0700109 _env->ReleasePrimitiveArrayCritical(str, cptr, JNI_ABORT);
110}
111
Alex Sakhartchoukfb10c162010-08-04 14:45:48 -0700112static jstring
Jason Sams2e1872f2010-08-17 16:25:41 -0700113nGetName(JNIEnv *_env, jobject _this, RsContext con, jint obj)
Alex Sakhartchoukfb10c162010-08-04 14:45:48 -0700114{
Alex Sakhartchoukfb10c162010-08-04 14:45:48 -0700115 LOG_API("nGetName, con(%p), obj(%p)", con, (void *)obj);
Alex Sakhartchoukfb10c162010-08-04 14:45:48 -0700116 const char *name = NULL;
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700117 rsaGetName(con, (void *)obj, &name);
118 if(name == NULL || strlen(name) == 0) {
119 return NULL;
120 }
Alex Sakhartchoukfb10c162010-08-04 14:45:48 -0700121 return _env->NewStringUTF(name);
122}
123
Jason Sams7ce033d2009-08-18 14:14:24 -0700124static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700125nObjDestroy(JNIEnv *_env, jobject _this, RsContext con, jint obj)
Jason Sams7ce033d2009-08-18 14:14:24 -0700126{
Jason Sams7ce033d2009-08-18 14:14:24 -0700127 LOG_API("nObjDestroy, con(%p) obj(%p)", con, (void *)obj);
Jason Sams9c25aee2010-10-14 17:57:30 -0700128 rsObjDestroy(con, (void *)obj);
Jason Sams7ce033d2009-08-18 14:14:24 -0700129}
130
Jason Sams3eaa338e2009-06-10 15:04:38 -0700131// ---------------------------------------------------------------------------
132
Jason Samsd19f10d2009-05-22 14:03:28 -0700133static jint
134nDeviceCreate(JNIEnv *_env, jobject _this)
135{
136 LOG_API("nDeviceCreate");
137 return (jint)rsDeviceCreate();
138}
139
140static void
141nDeviceDestroy(JNIEnv *_env, jobject _this, jint dev)
142{
143 LOG_API("nDeviceDestroy");
144 return rsDeviceDestroy((RsDevice)dev);
145}
146
Jason Samsebfb4362009-09-23 13:57:02 -0700147static void
148nDeviceSetConfig(JNIEnv *_env, jobject _this, jint dev, jint p, jint value)
149{
150 LOG_API("nDeviceSetConfig dev(%p), param(%i), value(%i)", (void *)dev, p, value);
151 return rsDeviceSetConfig((RsDevice)dev, (RsDeviceParam)p, value);
152}
153
Jason Samsd19f10d2009-05-22 14:03:28 -0700154static jint
Jason Sams704ff642010-02-09 16:05:07 -0800155nContextCreate(JNIEnv *_env, jobject _this, jint dev, jint ver)
Jason Samsd19f10d2009-05-22 14:03:28 -0700156{
157 LOG_API("nContextCreate");
Jason Sams704ff642010-02-09 16:05:07 -0800158 return (jint)rsContextCreate((RsDevice)dev, ver);
159}
160
161static jint
Jason Sams11c8af92010-10-13 15:31:10 -0700162nContextCreateGL(JNIEnv *_env, jobject _this, jint dev, jint ver,
163 int colorMin, int colorPref,
164 int alphaMin, int alphaPref,
165 int depthMin, int depthPref,
166 int stencilMin, int stencilPref,
167 int samplesMin, int samplesPref, float samplesQ)
Jason Sams704ff642010-02-09 16:05:07 -0800168{
Jason Sams11c8af92010-10-13 15:31:10 -0700169 RsSurfaceConfig sc;
170 sc.alphaMin = alphaMin;
171 sc.alphaPref = alphaPref;
172 sc.colorMin = colorMin;
173 sc.colorPref = colorPref;
174 sc.depthMin = depthMin;
175 sc.depthPref = depthPref;
176 sc.samplesMin = samplesMin;
177 sc.samplesPref = samplesPref;
178 sc.samplesQ = samplesQ;
179
Jason Sams704ff642010-02-09 16:05:07 -0800180 LOG_API("nContextCreateGL");
Jason Sams11c8af92010-10-13 15:31:10 -0700181 return (jint)rsContextCreateGL((RsDevice)dev, ver, sc);
Jason Samsd19f10d2009-05-22 14:03:28 -0700182}
183
184static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700185nContextSetPriority(JNIEnv *_env, jobject _this, RsContext con, jint p)
Jason Sams7d787b42009-11-15 12:14:26 -0800186{
Jason Sams7d787b42009-11-15 12:14:26 -0800187 LOG_API("ContextSetPriority, con(%p), priority(%i)", con, p);
188 rsContextSetPriority(con, p);
189}
190
191
192
193static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700194nContextSetSurface(JNIEnv *_env, jobject _this, RsContext con, jint width, jint height, jobject wnd)
Jason Samsefd9b6fb2009-11-03 13:58:36 -0800195{
Jason Sams3bc47d42009-11-12 15:10:25 -0800196 LOG_API("nContextSetSurface, con(%p), width(%i), height(%i), surface(%p)", con, width, height, (Surface *)wnd);
Jason Samsefd9b6fb2009-11-03 13:58:36 -0800197
198 Surface * window = NULL;
199 if (wnd == NULL) {
200
201 } else {
Jim Milleree956052010-08-19 18:56:00 -0700202 window = (Surface*) android_Surface_getNativeWindow(_env, wnd).get();
Jason Samsefd9b6fb2009-11-03 13:58:36 -0800203 }
204
Jason Sams3bc47d42009-11-12 15:10:25 -0800205 rsContextSetSurface(con, width, height, window);
Jason Samsefd9b6fb2009-11-03 13:58:36 -0800206}
207
208static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700209nContextDestroy(JNIEnv *_env, jobject _this, RsContext con)
Jason Samsd19f10d2009-05-22 14:03:28 -0700210{
Jason Sams2e1872f2010-08-17 16:25:41 -0700211 LOG_API("nContextDestroy, con(%p)", con);
212 rsContextDestroy(con);
Jason Samsd19f10d2009-05-22 14:03:28 -0700213}
214
Jason Sams715333b2009-11-17 17:26:46 -0800215static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700216nContextDump(JNIEnv *_env, jobject _this, RsContext con, jint bits)
Jason Sams715333b2009-11-17 17:26:46 -0800217{
Jason Sams715333b2009-11-17 17:26:46 -0800218 LOG_API("nContextDump, con(%p) bits(%i)", (RsContext)con, bits);
219 rsContextDump((RsContext)con, bits);
220}
Jason Samsd19f10d2009-05-22 14:03:28 -0700221
222static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700223nContextPause(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams65e7aa52009-09-24 17:38:20 -0700224{
Jason Sams65e7aa52009-09-24 17:38:20 -0700225 LOG_API("nContextPause, con(%p)", con);
226 rsContextPause(con);
227}
228
229static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700230nContextResume(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams65e7aa52009-09-24 17:38:20 -0700231{
Jason Sams65e7aa52009-09-24 17:38:20 -0700232 LOG_API("nContextResume, con(%p)", con);
233 rsContextResume(con);
234}
235
Jason Sams1c415172010-11-08 17:06:46 -0800236
237static jstring
238nContextGetErrorMessage(JNIEnv *_env, jobject _this, RsContext con)
239{
240 LOG_API("nContextGetErrorMessage, con(%p)", con);
241 char buf[1024];
242
243 size_t receiveLen;
244 uint32_t subID;
245 int id = rsContextGetMessage(con, buf, &receiveLen, &subID, sizeof(buf), true);
246 if (!id && receiveLen) {
247 LOGV("message receive buffer too small. %i", receiveLen);
248 }
249 return _env->NewStringUTF(buf);
250}
251
252static void
253nContextGetUserMessage(JNIEnv *_env, jobject _this, RsContext con, jintArray data)
Jason Sams516c3192009-10-06 13:58:47 -0700254{
Jason Sams516c3192009-10-06 13:58:47 -0700255 jint len = _env->GetArrayLength(data);
256 LOG_API("nContextGetMessage, con(%p), len(%i)", con, len);
257 jint *ptr = _env->GetIntArrayElements(data, NULL);
258 size_t receiveLen;
Jason Sams1c415172010-11-08 17:06:46 -0800259 uint32_t subID;
260 int id = rsContextGetMessage(con, ptr, &receiveLen, &subID, len * 4, true);
Jason Sams516c3192009-10-06 13:58:47 -0700261 if (!id && receiveLen) {
Jason Sams1d45c472010-08-25 14:31:48 -0700262 LOGV("message receive buffer too small. %i", receiveLen);
Jason Sams516c3192009-10-06 13:58:47 -0700263 }
264 _env->ReleaseIntArrayElements(data, ptr, 0);
Jason Sams1c415172010-11-08 17:06:46 -0800265}
266
267static jint
268nContextPeekMessage(JNIEnv *_env, jobject _this, RsContext con, jintArray auxData, jboolean wait)
269{
270 LOG_API("nContextPeekMessage, con(%p)", con);
271 jint *auxDataPtr = _env->GetIntArrayElements(auxData, NULL);
272 size_t receiveLen;
273 uint32_t subID;
274 int id = rsContextPeekMessage(con, &receiveLen, &subID, wait);
275 auxDataPtr[0] = (jint)subID;
276 auxDataPtr[1] = (jint)receiveLen;
277 _env->ReleaseIntArrayElements(auxData, auxDataPtr, 0);
Jason Sams516c3192009-10-06 13:58:47 -0700278 return id;
279}
280
Jason Sams2e1872f2010-08-17 16:25:41 -0700281static void nContextInitToClient(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams516c3192009-10-06 13:58:47 -0700282{
Jason Sams516c3192009-10-06 13:58:47 -0700283 LOG_API("nContextInitToClient, con(%p)", con);
284 rsContextInitToClient(con);
285}
286
Jason Sams2e1872f2010-08-17 16:25:41 -0700287static void nContextDeinitToClient(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams516c3192009-10-06 13:58:47 -0700288{
Jason Sams516c3192009-10-06 13:58:47 -0700289 LOG_API("nContextDeinitToClient, con(%p)", con);
290 rsContextDeinitToClient(con);
291}
292
293
Jason Sams718cd1f2009-12-23 14:35:29 -0800294static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700295nElementCreate(JNIEnv *_env, jobject _this, RsContext con, jint type, jint kind, jboolean norm, jint size)
Jason Samsd19f10d2009-05-22 14:03:28 -0700296{
Jason Sams718cd1f2009-12-23 14:35:29 -0800297 LOG_API("nElementCreate, con(%p), type(%i), kind(%i), norm(%i), size(%i)", con, type, kind, norm, size);
298 return (jint)rsElementCreate(con, (RsDataType)type, (RsDataKind)kind, norm, size);
Jason Samsd19f10d2009-05-22 14:03:28 -0700299}
300
301static jint
Jason Sams70d4e502010-09-02 17:35:23 -0700302nElementCreate2(JNIEnv *_env, jobject _this, RsContext con, jintArray _ids, jobjectArray _names, jintArray _arraySizes)
Jason Samsd19f10d2009-05-22 14:03:28 -0700303{
Jason Sams718cd1f2009-12-23 14:35:29 -0800304 int fieldCount = _env->GetArrayLength(_ids);
Jason Sams704ff642010-02-09 16:05:07 -0800305 LOG_API("nElementCreate2, con(%p)", con);
Jason Sams718cd1f2009-12-23 14:35:29 -0800306
307 jint *ids = _env->GetIntArrayElements(_ids, NULL);
Jason Sams70d4e502010-09-02 17:35:23 -0700308 jint *arraySizes = _env->GetIntArrayElements(_arraySizes, NULL);
Jason Sams718cd1f2009-12-23 14:35:29 -0800309 const char ** nameArray = (const char **)calloc(fieldCount, sizeof(char *));
310 size_t* sizeArray = (size_t*)calloc(fieldCount, sizeof(size_t));
311
312 for (int ct=0; ct < fieldCount; ct++) {
313 jstring s = (jstring)_env->GetObjectArrayElement(_names, ct);
314 nameArray[ct] = _env->GetStringUTFChars(s, NULL);
315 sizeArray[ct] = _env->GetStringUTFLength(s);
316 }
Jason Sams70d4e502010-09-02 17:35:23 -0700317 jint id = (jint)rsElementCreate2(con, fieldCount, (RsElement *)ids, nameArray, sizeArray, (const uint32_t *)arraySizes);
Jason Sams718cd1f2009-12-23 14:35:29 -0800318 for (int ct=0; ct < fieldCount; ct++) {
319 jstring s = (jstring)_env->GetObjectArrayElement(_names, ct);
320 _env->ReleaseStringUTFChars(s, nameArray[ct]);
321 }
322 _env->ReleaseIntArrayElements(_ids, ids, JNI_ABORT);
Jason Sams70d4e502010-09-02 17:35:23 -0700323 _env->ReleaseIntArrayElements(_arraySizes, arraySizes, JNI_ABORT);
Jason Sams718cd1f2009-12-23 14:35:29 -0800324 free(nameArray);
325 free(sizeArray);
326 return (jint)id;
Jason Samsd19f10d2009-05-22 14:03:28 -0700327}
328
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700329static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700330nElementGetNativeData(JNIEnv *_env, jobject _this, RsContext con, jint id, jintArray _elementData)
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700331{
332 int dataSize = _env->GetArrayLength(_elementData);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700333 LOG_API("nElementGetNativeData, con(%p)", con);
334
335 // we will pack mType; mKind; mNormalized; mVectorSize; NumSubElements
336 assert(dataSize == 5);
337
338 uint32_t elementData[5];
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700339 rsaElementGetNativeData(con, (RsElement)id, elementData, dataSize);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700340
341 for(jint i = 0; i < dataSize; i ++) {
342 _env->SetIntArrayRegion(_elementData, i, 1, (const jint*)&elementData[i]);
343 }
344}
345
346
347static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700348nElementGetSubElements(JNIEnv *_env, jobject _this, RsContext con, jint id, jintArray _IDs, jobjectArray _names)
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700349{
350 int dataSize = _env->GetArrayLength(_IDs);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700351 LOG_API("nElementGetSubElements, con(%p)", con);
352
353 uint32_t *ids = (uint32_t *)malloc((uint32_t)dataSize * sizeof(uint32_t));
354 const char **names = (const char **)malloc((uint32_t)dataSize * sizeof(const char *));
355
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700356 rsaElementGetSubElements(con, (RsElement)id, ids, names, (uint32_t)dataSize);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700357
Jason Sams11c8af92010-10-13 15:31:10 -0700358 for(jint i = 0; i < dataSize; i++) {
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700359 _env->SetObjectArrayElement(_names, i, _env->NewStringUTF(names[i]));
360 _env->SetIntArrayRegion(_IDs, i, 1, (const jint*)&ids[i]);
361 }
362
363 free(ids);
364 free(names);
365}
366
Jason Samsd19f10d2009-05-22 14:03:28 -0700367// -----------------------------------
368
Jason Sams3b9c52a2010-10-14 17:48:46 -0700369static int
Jason Samsbf6ef8d72010-12-06 15:59:59 -0800370nTypeCreate(JNIEnv *_env, jobject _this, RsContext con, RsElement eid,
371 jint dimx, jint dimy, jint dimz, jboolean mips, jboolean faces)
Jason Samsd19f10d2009-05-22 14:03:28 -0700372{
Jason Samsbf6ef8d72010-12-06 15:59:59 -0800373 LOG_API("nTypeCreate, con(%p) eid(%p), x(%i), y(%i), z(%i), mips(%i), faces(%i)",
374 con, eid, dimx, dimy, dimz, mips, faces);
Jason Sams3b9c52a2010-10-14 17:48:46 -0700375
Jason Samsbf6ef8d72010-12-06 15:59:59 -0800376 jint id = (jint)rsaTypeCreate(con, (RsElement)eid, dimx, dimy, dimz, mips, faces);
Jason Sams3b9c52a2010-10-14 17:48:46 -0700377 return (jint)id;
Jason Samsd19f10d2009-05-22 14:03:28 -0700378}
379
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700380static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700381nTypeGetNativeData(JNIEnv *_env, jobject _this, RsContext con, jint id, jintArray _typeData)
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700382{
383 // We are packing 6 items: mDimX; mDimY; mDimZ;
384 // mDimLOD; mDimFaces; mElement; into typeData
385 int elementCount = _env->GetArrayLength(_typeData);
386
387 assert(elementCount == 6);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700388 LOG_API("nTypeCreate, con(%p)", con);
389
390 uint32_t typeData[6];
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700391 rsaTypeGetNativeData(con, (RsType)id, typeData, 6);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700392
393 for(jint i = 0; i < elementCount; i ++) {
394 _env->SetIntArrayRegion(_typeData, i, 1, (const jint*)&typeData[i]);
395 }
396}
397
Jason Samsd19f10d2009-05-22 14:03:28 -0700398// -----------------------------------
399
400static jint
Jason Sams5476b452010-12-08 16:14:36 -0800401nAllocationCreateTyped(JNIEnv *_env, jobject _this, RsContext con, jint type, jint mips, jint usage)
Jason Samsd19f10d2009-05-22 14:03:28 -0700402{
Jason Samsd4b23b52010-12-13 15:32:35 -0800403 LOG_API("nAllocationCreateTyped, con(%p), type(%p), mip(%i), usage(%i)", con, (RsElement)type, mips, usage);
404 return (jint) rsaAllocationCreateTyped(con, (RsType)type, (RsAllocationMipmapControl)mips, (uint32_t)usage);
Jason Samsd19f10d2009-05-22 14:03:28 -0700405}
406
Jason Samsd19f10d2009-05-22 14:03:28 -0700407static void
Jason Sams5476b452010-12-08 16:14:36 -0800408nAllocationSyncAll(JNIEnv *_env, jobject _this, RsContext con, jint a, jint bits)
409{
410 LOG_API("nAllocationSyncAll, con(%p), a(%p), bits(0x%08x)", con, (RsAllocation)a, bits);
411 rsAllocationSyncAll(con, (RsAllocation)a, (RsAllocationUsageType)bits);
412}
413
Jason Samsffe9f482009-06-01 17:45:53 -0700414static int
Jason Sams5476b452010-12-08 16:14:36 -0800415nAllocationCreateFromBitmap(JNIEnv *_env, jobject _this, RsContext con, jint type, jint mip, jobject jbitmap, jint usage)
Jason Samsffe9f482009-06-01 17:45:53 -0700416{
Jason Samsffe9f482009-06-01 17:45:53 -0700417 SkBitmap const * nativeBitmap =
418 (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
419 const SkBitmap& bitmap(*nativeBitmap);
Jason Samsffe9f482009-06-01 17:45:53 -0700420
Jason Sams5476b452010-12-08 16:14:36 -0800421 bitmap.lockPixels();
422 const void* ptr = bitmap.getPixels();
Jason Samsd4b23b52010-12-13 15:32:35 -0800423 jint id = (jint)rsaAllocationCreateFromBitmap(con, (RsType)type, (RsAllocationMipmapControl)mip, ptr, usage);
Jason Sams5476b452010-12-08 16:14:36 -0800424 bitmap.unlockPixels();
425 return id;
Jason Samsffe9f482009-06-01 17:45:53 -0700426}
Jason Samsfe08d992009-05-27 14:45:32 -0700427
Alex Sakhartchouk67f2e442010-11-18 15:22:43 -0800428static int
Jason Sams5476b452010-12-08 16:14:36 -0800429nAllocationCubeCreateFromBitmap(JNIEnv *_env, jobject _this, RsContext con, jint type, jint mip, jobject jbitmap, jint usage)
Alex Sakhartchouk67f2e442010-11-18 15:22:43 -0800430{
431 SkBitmap const * nativeBitmap =
432 (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
433 const SkBitmap& bitmap(*nativeBitmap);
Alex Sakhartchouk67f2e442010-11-18 15:22:43 -0800434
Jason Sams5476b452010-12-08 16:14:36 -0800435 bitmap.lockPixels();
436 const void* ptr = bitmap.getPixels();
Jason Samsd4b23b52010-12-13 15:32:35 -0800437 jint id = (jint)rsaAllocationCubeCreateFromBitmap(con, (RsType)type, (RsAllocationMipmapControl)mip, ptr, usage);
Jason Sams5476b452010-12-08 16:14:36 -0800438 bitmap.unlockPixels();
439 return id;
Alex Sakhartchouk67f2e442010-11-18 15:22:43 -0800440}
441
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -0700442static void
Jason Sams4ef66502010-12-10 16:03:15 -0800443nAllocationCopyFromBitmap(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jobject jbitmap)
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -0700444{
445 SkBitmap const * nativeBitmap =
446 (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
447 const SkBitmap& bitmap(*nativeBitmap);
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -0700448
Jason Sams4ef66502010-12-10 16:03:15 -0800449 bitmap.lockPixels();
450 const void* ptr = bitmap.getPixels();
451 rsAllocationCopyFromBitmap(con, (RsAllocation)alloc, ptr, bitmap.getSize());
452 bitmap.unlockPixels();
453}
454
455static void
456nAllocationCopyToBitmap(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jobject jbitmap)
457{
458 SkBitmap const * nativeBitmap =
459 (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
460 const SkBitmap& bitmap(*nativeBitmap);
461
462 bitmap.lockPixels();
463 void* ptr = bitmap.getPixels();
464 rsAllocationCopyToBitmap(con, (RsAllocation)alloc, ptr, bitmap.getSize());
465 bitmap.unlockPixels();
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -0700466}
467
Jason Sams8a647432010-03-01 15:31:04 -0800468static void ReleaseBitmapCallback(void *bmp)
469{
470 SkBitmap const * nativeBitmap = (SkBitmap const *)bmp;
471 nativeBitmap->unlockPixels();
472}
473
Romain Guy650a3eb2009-08-31 14:06:43 -0700474
Jason Samsd19f10d2009-05-22 14:03:28 -0700475static void
Jason Sams49a05d72010-12-29 14:31:29 -0800476nAllocationData1D_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint lod, jint count, jintArray data, int sizeBytes)
Jason Samsd19f10d2009-05-22 14:03:28 -0700477{
Jason Samsd19f10d2009-05-22 14:03:28 -0700478 jint len = _env->GetArrayLength(data);
Jason Sams49a05d72010-12-29 14:31:29 -0800479 LOG_API("nAllocation1DData_i, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, count, len, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700480 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Sams49a05d72010-12-29 14:31:29 -0800481 rsAllocation1DData(con, (RsAllocation)alloc, offset, lod, count, ptr, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700482 _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
483}
484
485static void
Jason Sams49a05d72010-12-29 14:31:29 -0800486nAllocationData1D_s(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint lod, jint count, jshortArray data, int sizeBytes)
Jason Sams768bc022009-09-21 19:41:04 -0700487{
Jason Sams768bc022009-09-21 19:41:04 -0700488 jint len = _env->GetArrayLength(data);
Jason Sams49a05d72010-12-29 14:31:29 -0800489 LOG_API("nAllocation1DData_s, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, count, len, sizeBytes);
Jason Sams768bc022009-09-21 19:41:04 -0700490 jshort *ptr = _env->GetShortArrayElements(data, NULL);
Jason Sams49a05d72010-12-29 14:31:29 -0800491 rsAllocation1DData(con, (RsAllocation)alloc, offset, lod, count, ptr, sizeBytes);
Jason Sams768bc022009-09-21 19:41:04 -0700492 _env->ReleaseShortArrayElements(data, ptr, JNI_ABORT);
493}
494
495static void
Jason Sams49a05d72010-12-29 14:31:29 -0800496nAllocationData1D_b(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint lod, jint count, jbyteArray data, int sizeBytes)
Jason Sams768bc022009-09-21 19:41:04 -0700497{
Jason Sams768bc022009-09-21 19:41:04 -0700498 jint len = _env->GetArrayLength(data);
Jason Sams49a05d72010-12-29 14:31:29 -0800499 LOG_API("nAllocation1DData_b, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, count, len, sizeBytes);
Jason Sams768bc022009-09-21 19:41:04 -0700500 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
Jason Sams49a05d72010-12-29 14:31:29 -0800501 rsAllocation1DData(con, (RsAllocation)alloc, offset, lod, count, ptr, sizeBytes);
Jason Sams768bc022009-09-21 19:41:04 -0700502 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
503}
504
505static void
Jason Sams49a05d72010-12-29 14:31:29 -0800506nAllocationData1D_f(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint lod, jint count, jfloatArray data, int sizeBytes)
Jason Samsd19f10d2009-05-22 14:03:28 -0700507{
Jason Samsd19f10d2009-05-22 14:03:28 -0700508 jint len = _env->GetArrayLength(data);
Jason Sams49a05d72010-12-29 14:31:29 -0800509 LOG_API("nAllocation1DData_f, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, count, len, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700510 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Sams49a05d72010-12-29 14:31:29 -0800511 rsAllocation1DData(con, (RsAllocation)alloc, offset, lod, count, ptr, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700512 _env->ReleaseFloatArrayElements(data, ptr, JNI_ABORT);
513}
514
515static void
Jason Sams49a05d72010-12-29 14:31:29 -0800516// native void rsnAllocationElementData1D(int con, int id, int xoff, int compIdx, byte[] d, int sizeBytes);
517nAllocationElementData1D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint lod, jint compIdx, jbyteArray data, int sizeBytes)
Jason Sams49bdaf02010-08-31 13:50:42 -0700518{
519 jint len = _env->GetArrayLength(data);
Jason Sams49a05d72010-12-29 14:31:29 -0800520 LOG_API("nAllocationElementData1D, con(%p), alloc(%p), offset(%i), comp(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, compIdx, len, sizeBytes);
Jason Sams49bdaf02010-08-31 13:50:42 -0700521 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
Jason Sams49a05d72010-12-29 14:31:29 -0800522 rsAllocation1DElementData(con, (RsAllocation)alloc, offset, lod, ptr, compIdx, sizeBytes);
Jason Sams49bdaf02010-08-31 13:50:42 -0700523 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
524}
525
526static void
Jason Sams49a05d72010-12-29 14:31:29 -0800527nAllocationData2D_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint lod, jint face,
528 jint w, jint h, jintArray data, int sizeBytes)
Jason Samsd19f10d2009-05-22 14:03:28 -0700529{
Jason Samsd19f10d2009-05-22 14:03:28 -0700530 jint len = _env->GetArrayLength(data);
Jason Sams49a05d72010-12-29 14:31:29 -0800531 LOG_API("nAllocation2DData_i, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)", con, (RsAllocation)alloc, xoff, yoff, w, h, len);
Jason Samsd19f10d2009-05-22 14:03:28 -0700532 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Sams49a05d72010-12-29 14:31:29 -0800533 rsAllocation2DData(con, (RsAllocation)alloc, xoff, yoff, lod, (RsAllocationCubemapFace)face, w, h, ptr, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700534 _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
535}
536
537static void
Jason Sams49a05d72010-12-29 14:31:29 -0800538nAllocationData2D_f(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint lod, jint face,
539 jint w, jint h, jfloatArray data, int sizeBytes)
Jason Samsd19f10d2009-05-22 14:03:28 -0700540{
Jason Samsd19f10d2009-05-22 14:03:28 -0700541 jint len = _env->GetArrayLength(data);
Jason Sams49a05d72010-12-29 14:31:29 -0800542 LOG_API("nAllocation2DData_i, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)", con, (RsAllocation)alloc, xoff, yoff, w, h, len);
Jason Samsd19f10d2009-05-22 14:03:28 -0700543 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Sams49a05d72010-12-29 14:31:29 -0800544 rsAllocation2DData(con, (RsAllocation)alloc, xoff, yoff, lod, (RsAllocationCubemapFace)face, w, h, ptr, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700545 _env->ReleaseFloatArrayElements(data, ptr, JNI_ABORT);
546}
547
Jason Sams40a29e82009-08-10 14:55:26 -0700548static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700549nAllocationRead_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jintArray data)
Jason Sams40a29e82009-08-10 14:55:26 -0700550{
Jason Sams40a29e82009-08-10 14:55:26 -0700551 jint len = _env->GetArrayLength(data);
552 LOG_API("nAllocationRead_i, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
553 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700554 rsAllocationRead(con, (RsAllocation)alloc, ptr);
Joe Onoratoae209ac2009-08-31 17:23:53 -0700555 _env->ReleaseIntArrayElements(data, ptr, 0);
Jason Sams40a29e82009-08-10 14:55:26 -0700556}
557
558static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700559nAllocationRead_f(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jfloatArray data)
Jason Sams40a29e82009-08-10 14:55:26 -0700560{
Jason Sams40a29e82009-08-10 14:55:26 -0700561 jint len = _env->GetArrayLength(data);
Joe Onoratoa8f2ace2009-08-12 11:47:23 -0700562 LOG_API("nAllocationRead_f, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
Jason Sams40a29e82009-08-10 14:55:26 -0700563 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700564 rsAllocationRead(con, (RsAllocation)alloc, ptr);
Joe Onoratoae209ac2009-08-31 17:23:53 -0700565 _env->ReleaseFloatArrayElements(data, ptr, 0);
Jason Sams40a29e82009-08-10 14:55:26 -0700566}
Jason Samsd19f10d2009-05-22 14:03:28 -0700567
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700568static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700569nAllocationGetType(JNIEnv *_env, jobject _this, RsContext con, jint a)
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700570{
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700571 LOG_API("nAllocationGetType, con(%p), a(%p)", con, (RsAllocation)a);
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700572 return (jint) rsaAllocationGetType(con, (RsAllocation)a);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700573}
574
Jason Sams5edc6082010-10-05 13:32:49 -0700575static void
576nAllocationResize1D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint dimX)
577{
578 LOG_API("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i)", con, (RsAllocation)alloc, dimX);
579 rsAllocationResize1D(con, (RsAllocation)alloc, dimX);
580}
581
582static void
583nAllocationResize2D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint dimX, jint dimY)
584{
585 LOG_API("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i), sizeY(%i)", con, (RsAllocation)alloc, dimX, dimY);
586 rsAllocationResize2D(con, (RsAllocation)alloc, dimX, dimY);
587}
588
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700589// -----------------------------------
590
591static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700592nFileA3DCreateFromAssetStream(JNIEnv *_env, jobject _this, RsContext con, jint native_asset)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700593{
594 LOGV("______nFileA3D %u", (uint32_t) native_asset);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700595
596 Asset* asset = reinterpret_cast<Asset*>(native_asset);
597
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800598 jint id = (jint)rsaFileA3DCreateFromMemory(con, asset->getBuffer(false), asset->getLength());
599 return id;
600}
601
602static int
603nFileA3DCreateFromAsset(JNIEnv *_env, jobject _this, RsContext con, jobject _assetMgr, jstring _path)
604{
605 AssetManager* mgr = assetManagerForJavaObject(_env, _assetMgr);
606 if (mgr == NULL) {
607 return 0;
608 }
609
610 AutoJavaStringToUTF8 str(_env, _path);
611 Asset* asset = mgr->open(str.c_str(), Asset::ACCESS_BUFFER);
612 if (asset == NULL) {
613 return 0;
614 }
615
616 jint id = (jint)rsaFileA3DCreateFromAsset(con, asset);
617 return id;
618}
619
620static int
621nFileA3DCreateFromFile(JNIEnv *_env, jobject _this, RsContext con, jstring fileName)
622{
623 AutoJavaStringToUTF8 fileNameUTF(_env, fileName);
624 jint id = (jint)rsaFileA3DCreateFromFile(con, fileNameUTF.c_str());
625
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700626 return id;
627}
628
629static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700630nFileA3DGetNumIndexEntries(JNIEnv *_env, jobject _this, RsContext con, jint fileA3D)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700631{
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700632 int32_t numEntries = 0;
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700633 rsaFileA3DGetNumIndexEntries(con, &numEntries, (RsFile)fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700634 return numEntries;
635}
636
637static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700638nFileA3DGetIndexEntries(JNIEnv *_env, jobject _this, RsContext con, jint fileA3D, jint numEntries, jintArray _ids, jobjectArray _entries)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700639{
640 LOGV("______nFileA3D %u", (uint32_t) fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700641 RsFileIndexEntry *fileEntries = (RsFileIndexEntry*)malloc((uint32_t)numEntries * sizeof(RsFileIndexEntry));
642
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700643 rsaFileA3DGetIndexEntries(con, fileEntries, (uint32_t)numEntries, (RsFile)fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700644
645 for(jint i = 0; i < numEntries; i ++) {
646 _env->SetObjectArrayElement(_entries, i, _env->NewStringUTF(fileEntries[i].objectName));
647 _env->SetIntArrayRegion(_ids, i, 1, (const jint*)&fileEntries[i].classID);
648 }
649
650 free(fileEntries);
651}
652
653static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700654nFileA3DGetEntryByIndex(JNIEnv *_env, jobject _this, RsContext con, jint fileA3D, jint index)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700655{
656 LOGV("______nFileA3D %u", (uint32_t) fileA3D);
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700657 jint id = (jint)rsaFileA3DGetEntryByIndex(con, (uint32_t)index, (RsFile)fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700658 return id;
659}
Jason Samsd19f10d2009-05-22 14:03:28 -0700660
661// -----------------------------------
662
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700663static int
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800664nFontCreateFromFile(JNIEnv *_env, jobject _this, RsContext con,
665 jstring fileName, jfloat fontSize, jint dpi)
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700666{
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800667 AutoJavaStringToUTF8 fileNameUTF(_env, fileName);
668 jint id = (jint)rsFontCreateFromFile(con, fileNameUTF.c_str(), fontSize, dpi);
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700669
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800670 return id;
671}
672
673static int
674nFontCreateFromAssetStream(JNIEnv *_env, jobject _this, RsContext con,
675 jstring name, jfloat fontSize, jint dpi, jint native_asset)
676{
677 Asset* asset = reinterpret_cast<Asset*>(native_asset);
678 AutoJavaStringToUTF8 nameUTF(_env, name);
679
680 jint id = (jint)rsFontCreateFromMemory(con, nameUTF.c_str(), fontSize, dpi,
681 asset->getBuffer(false), asset->getLength());
682 return id;
683}
684
685static int
686nFontCreateFromAsset(JNIEnv *_env, jobject _this, RsContext con, jobject _assetMgr, jstring _path,
687 jfloat fontSize, jint dpi)
688{
689 AssetManager* mgr = assetManagerForJavaObject(_env, _assetMgr);
690 if (mgr == NULL) {
691 return 0;
692 }
693
694 AutoJavaStringToUTF8 str(_env, _path);
695 Asset* asset = mgr->open(str.c_str(), Asset::ACCESS_BUFFER);
696 if (asset == NULL) {
697 return 0;
698 }
699
700 jint id = (jint)rsFontCreateFromMemory(con, str.c_str(), fontSize, dpi,
701 asset->getBuffer(false), asset->getLength());
702 delete asset;
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700703 return id;
704}
705
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700706// -----------------------------------
707
708static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700709nScriptBindAllocation(JNIEnv *_env, jobject _this, RsContext con, jint script, jint alloc, jint slot)
Jason Samsd19f10d2009-05-22 14:03:28 -0700710{
Jason Samsd19f10d2009-05-22 14:03:28 -0700711 LOG_API("nScriptBindAllocation, con(%p), script(%p), alloc(%p), slot(%i)", con, (RsScript)script, (RsAllocation)alloc, slot);
Jason Samsbc948de2009-08-17 18:35:48 -0700712 rsScriptBindAllocation(con, (RsScript)script, (RsAllocation)alloc, slot);
Jason Samsd19f10d2009-05-22 14:03:28 -0700713}
714
715static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700716nScriptSetVarI(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jint val)
Jason Sams4d339932010-05-11 14:03:58 -0700717{
Jason Samscfc04362010-09-14 14:59:03 -0700718 LOG_API("nScriptSetVarI, con(%p), s(%p), slot(%i), val(%i)", con, (void *)script, slot, val);
Jason Sams4d339932010-05-11 14:03:58 -0700719 rsScriptSetVarI(con, (RsScript)script, slot, val);
720}
721
722static void
Jason Sams6f4cf0b2010-11-16 17:37:02 -0800723nScriptSetVarObj(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jint val)
724{
725 LOG_API("nScriptSetVarObj, con(%p), s(%p), slot(%i), val(%i)", con, (void *)script, slot, val);
726 rsScriptSetVarObj(con, (RsScript)script, slot, (RsObjectBase)val);
727}
728
729static void
Stephen Hines031ec58c2010-10-11 10:54:21 -0700730nScriptSetVarJ(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jlong val)
731{
732 LOG_API("nScriptSetVarJ, con(%p), s(%p), slot(%i), val(%lli)", con, (void *)script, slot, val);
733 rsScriptSetVarJ(con, (RsScript)script, slot, val);
734}
735
736static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700737nScriptSetVarF(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, float val)
Jason Sams4d339932010-05-11 14:03:58 -0700738{
Stephen Hinesca54ec32010-09-20 17:20:30 -0700739 LOG_API("nScriptSetVarF, con(%p), s(%p), slot(%i), val(%f)", con, (void *)script, slot, val);
Jason Sams4d339932010-05-11 14:03:58 -0700740 rsScriptSetVarF(con, (RsScript)script, slot, val);
741}
742
743static void
Stephen Hinesca54ec32010-09-20 17:20:30 -0700744nScriptSetVarD(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, double val)
745{
746 LOG_API("nScriptSetVarD, con(%p), s(%p), slot(%i), val(%lf)", con, (void *)script, slot, val);
747 rsScriptSetVarD(con, (RsScript)script, slot, val);
748}
749
750static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700751nScriptSetVarV(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jbyteArray data)
Jason Sams4d339932010-05-11 14:03:58 -0700752{
Jason Sams4d339932010-05-11 14:03:58 -0700753 LOG_API("nScriptSetVarV, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
754 jint len = _env->GetArrayLength(data);
755 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
756 rsScriptSetVarV(con, (RsScript)script, slot, ptr, len);
757 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
758}
759
Jason Samsd19f10d2009-05-22 14:03:28 -0700760
761static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700762nScriptSetTimeZone(JNIEnv *_env, jobject _this, RsContext con, jint script, jbyteArray timeZone)
Jason Samsd19f10d2009-05-22 14:03:28 -0700763{
Jason Sams07ae4062009-08-27 20:23:34 -0700764 LOG_API("nScriptCSetTimeZone, con(%p), s(%p), timeZone(%s)", con, (void *)script, (const char *)timeZone);
Romain Guy584a3752009-07-30 18:45:01 -0700765
766 jint length = _env->GetArrayLength(timeZone);
767 jbyte* timeZone_ptr;
768 timeZone_ptr = (jbyte *) _env->GetPrimitiveArrayCritical(timeZone, (jboolean *)0);
769
Jason Samsbc948de2009-08-17 18:35:48 -0700770 rsScriptSetTimeZone(con, (RsScript)script, (const char *)timeZone_ptr, length);
Romain Guy584a3752009-07-30 18:45:01 -0700771
772 if (timeZone_ptr) {
773 _env->ReleasePrimitiveArrayCritical(timeZone, timeZone_ptr, 0);
774 }
775}
776
Jason Samsfbf0b9e2009-08-13 12:59:04 -0700777static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700778nScriptInvoke(JNIEnv *_env, jobject _this, RsContext con, jint obj, jint slot)
Jason Samsbe2e8412009-09-16 15:04:38 -0700779{
Jason Samsbe2e8412009-09-16 15:04:38 -0700780 LOG_API("nScriptInvoke, con(%p), script(%p)", con, (void *)obj);
781 rsScriptInvoke(con, (RsScript)obj, slot);
782}
783
784static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700785nScriptInvokeV(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jbyteArray data)
Jason Sams4d339932010-05-11 14:03:58 -0700786{
Jason Sams4d339932010-05-11 14:03:58 -0700787 LOG_API("nScriptInvokeV, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
788 jint len = _env->GetArrayLength(data);
789 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
790 rsScriptInvokeV(con, (RsScript)script, slot, ptr, len);
791 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
792}
793
Jason Samsfbf0b9e2009-08-13 12:59:04 -0700794
Jason Sams22534172009-08-04 16:58:20 -0700795// -----------------------------------
796
797static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700798nScriptCBegin(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams22534172009-08-04 16:58:20 -0700799{
Jason Sams22534172009-08-04 16:58:20 -0700800 LOG_API("nScriptCBegin, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -0700801 rsScriptCBegin(con);
Jason Sams22534172009-08-04 16:58:20 -0700802}
803
Romain Guy584a3752009-07-30 18:45:01 -0700804static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700805nScriptCSetScript(JNIEnv *_env, jobject _this, RsContext con, jbyteArray scriptRef,
Jack Palevich43702d82009-05-28 13:38:16 -0700806 jint offset, jint length)
Jason Samsd19f10d2009-05-22 14:03:28 -0700807{
Jason Samsd19f10d2009-05-22 14:03:28 -0700808 LOG_API("!!! nScriptCSetScript, con(%p)", con);
Jack Palevich43702d82009-05-28 13:38:16 -0700809 jint _exception = 0;
810 jint remaining;
811 jbyte* script_base = 0;
812 jbyte* script_ptr;
Jack Palevich43702d82009-05-28 13:38:16 -0700813 if (!scriptRef) {
814 _exception = 1;
815 //_env->ThrowNew(IAEClass, "script == null");
816 goto exit;
817 }
818 if (offset < 0) {
819 _exception = 1;
820 //_env->ThrowNew(IAEClass, "offset < 0");
821 goto exit;
822 }
823 if (length < 0) {
824 _exception = 1;
825 //_env->ThrowNew(IAEClass, "length < 0");
826 goto exit;
827 }
828 remaining = _env->GetArrayLength(scriptRef) - offset;
829 if (remaining < length) {
830 _exception = 1;
831 //_env->ThrowNew(IAEClass, "length > script.length - offset");
832 goto exit;
833 }
834 script_base = (jbyte *)
835 _env->GetPrimitiveArrayCritical(scriptRef, (jboolean *)0);
836 script_ptr = script_base + offset;
837
Jason Samsbc948de2009-08-17 18:35:48 -0700838 rsScriptCSetText(con, (const char *)script_ptr, length);
Jason Sams39ddc9502009-06-05 17:35:09 -0700839
Jack Palevich43702d82009-05-28 13:38:16 -0700840exit:
841 if (script_base) {
842 _env->ReleasePrimitiveArrayCritical(scriptRef, script_base,
843 _exception ? JNI_ABORT: 0);
844 }
Jason Samsd19f10d2009-05-22 14:03:28 -0700845}
846
847static jint
Shih-wei Liaoeeca4352010-12-20 20:45:56 +0800848nScriptCCreate(JNIEnv *_env, jobject _this, RsContext con, jstring packageName, jstring resName, jstring cacheDir)
Jason Samsd19f10d2009-05-22 14:03:28 -0700849{
Jason Samsd19f10d2009-05-22 14:03:28 -0700850 LOG_API("nScriptCCreate, con(%p)", con);
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800851 AutoJavaStringToUTF8 packageNameUTF(_env, packageName);
852 AutoJavaStringToUTF8 resNameUTF(_env, resName);
853 AutoJavaStringToUTF8 cacheDirUTF(_env, cacheDir);
854 jint i = (jint)rsScriptCCreate(con, packageNameUTF.c_str(), resNameUTF.c_str(), cacheDirUTF.c_str());
Shih-wei Liao6b32fab2010-12-10 01:03:59 -0800855 return i;
Jason Samsd19f10d2009-05-22 14:03:28 -0700856}
857
858// ---------------------------------------------------------------------------
859
860static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700861nProgramStoreBegin(JNIEnv *_env, jobject _this, RsContext con, jint in, jint out)
Jason Samsd19f10d2009-05-22 14:03:28 -0700862{
Jason Sams54db59c2010-05-13 18:30:11 -0700863 LOG_API("nProgramStoreBegin, con(%p), in(%p), out(%p)", con, (RsElement)in, (RsElement)out);
864 rsProgramStoreBegin(con, (RsElement)in, (RsElement)out);
Jason Samsd19f10d2009-05-22 14:03:28 -0700865}
866
867static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700868nProgramStoreDepthFunc(JNIEnv *_env, jobject _this, RsContext con, jint func)
Jason Samsd19f10d2009-05-22 14:03:28 -0700869{
Jason Sams54db59c2010-05-13 18:30:11 -0700870 LOG_API("nProgramStoreDepthFunc, con(%p), func(%i)", con, func);
871 rsProgramStoreDepthFunc(con, (RsDepthFunc)func);
Jason Samsd19f10d2009-05-22 14:03:28 -0700872}
873
874static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700875nProgramStoreDepthMask(JNIEnv *_env, jobject _this, RsContext con, jboolean enable)
Jason Samsd19f10d2009-05-22 14:03:28 -0700876{
Jason Sams54db59c2010-05-13 18:30:11 -0700877 LOG_API("nProgramStoreDepthMask, con(%p), enable(%i)", con, enable);
878 rsProgramStoreDepthMask(con, enable);
Jason Samsd19f10d2009-05-22 14:03:28 -0700879}
880
881static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700882nProgramStoreColorMask(JNIEnv *_env, jobject _this, RsContext con, jboolean r, jboolean g, jboolean b, jboolean a)
Jason Samsd19f10d2009-05-22 14:03:28 -0700883{
Jason Sams54db59c2010-05-13 18:30:11 -0700884 LOG_API("nProgramStoreColorMask, con(%p), r(%i), g(%i), b(%i), a(%i)", con, r, g, b, a);
885 rsProgramStoreColorMask(con, r, g, b, a);
Jason Samsd19f10d2009-05-22 14:03:28 -0700886}
887
888static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700889nProgramStoreBlendFunc(JNIEnv *_env, jobject _this, RsContext con, int src, int dst)
Jason Samsd19f10d2009-05-22 14:03:28 -0700890{
Jason Sams54db59c2010-05-13 18:30:11 -0700891 LOG_API("nProgramStoreBlendFunc, con(%p), src(%i), dst(%i)", con, src, dst);
892 rsProgramStoreBlendFunc(con, (RsBlendSrcFunc)src, (RsBlendDstFunc)dst);
Jason Samsd19f10d2009-05-22 14:03:28 -0700893}
894
895static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700896nProgramStoreDither(JNIEnv *_env, jobject _this, RsContext con, jboolean enable)
Jason Samsd19f10d2009-05-22 14:03:28 -0700897{
Jason Sams54db59c2010-05-13 18:30:11 -0700898 LOG_API("nProgramStoreDither, con(%p), enable(%i)", con, enable);
899 rsProgramStoreDither(con, enable);
Jason Samsd19f10d2009-05-22 14:03:28 -0700900}
901
902static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700903nProgramStoreCreate(JNIEnv *_env, jobject _this, RsContext con)
Jason Samsd19f10d2009-05-22 14:03:28 -0700904{
Jason Sams54db59c2010-05-13 18:30:11 -0700905 LOG_API("nProgramStoreCreate, con(%p)", con);
Jason Sams54db59c2010-05-13 18:30:11 -0700906 return (jint)rsProgramStoreCreate(con);
Jason Samsd19f10d2009-05-22 14:03:28 -0700907}
908
Jason Sams0011bcf2009-12-15 12:58:36 -0800909// ---------------------------------------------------------------------------
910
911static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700912nProgramBindConstants(JNIEnv *_env, jobject _this, RsContext con, jint vpv, jint slot, jint a)
Jason Sams0011bcf2009-12-15 12:58:36 -0800913{
Jason Sams0011bcf2009-12-15 12:58:36 -0800914 LOG_API("nProgramBindConstants, con(%p), vpf(%p), sloat(%i), a(%p)", con, (RsProgramVertex)vpv, slot, (RsAllocation)a);
915 rsProgramBindConstants(con, (RsProgram)vpv, slot, (RsAllocation)a);
916}
Jason Sams54c0ec12009-11-30 14:49:55 -0800917
Jason Sams68afd012009-12-17 16:55:08 -0800918static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700919nProgramBindTexture(JNIEnv *_env, jobject _this, RsContext con, jint vpf, jint slot, jint a)
Jason Sams68afd012009-12-17 16:55:08 -0800920{
Jason Sams68afd012009-12-17 16:55:08 -0800921 LOG_API("nProgramBindTexture, con(%p), vpf(%p), slot(%i), a(%p)", con, (RsProgramFragment)vpf, slot, (RsAllocation)a);
922 rsProgramBindTexture(con, (RsProgramFragment)vpf, slot, (RsAllocation)a);
923}
924
925static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700926nProgramBindSampler(JNIEnv *_env, jobject _this, RsContext con, jint vpf, jint slot, jint a)
Jason Sams68afd012009-12-17 16:55:08 -0800927{
Jason Sams68afd012009-12-17 16:55:08 -0800928 LOG_API("nProgramBindSampler, con(%p), vpf(%p), slot(%i), a(%p)", con, (RsProgramFragment)vpf, slot, (RsSampler)a);
929 rsProgramBindSampler(con, (RsProgramFragment)vpf, slot, (RsSampler)a);
930}
931
Jason Samsd19f10d2009-05-22 14:03:28 -0700932// ---------------------------------------------------------------------------
933
Jason Samsd19f10d2009-05-22 14:03:28 -0700934static jint
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -0700935nProgramFragmentCreate(JNIEnv *_env, jobject _this, RsContext con, jstring shader, jintArray params)
Jason Sams7e5ab3b2009-12-15 13:27:04 -0800936{
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800937 AutoJavaStringToUTF8 shaderUTF(_env, shader);
Jason Sams7e5ab3b2009-12-15 13:27:04 -0800938 jint *paramPtr = _env->GetIntArrayElements(params, NULL);
939 jint paramLen = _env->GetArrayLength(params);
940
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -0700941 LOG_API("nProgramFragmentCreate, con(%p), shaderLen(%i), paramLen(%i)", con, shaderLen, paramLen);
Jason Sams7e5ab3b2009-12-15 13:27:04 -0800942
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800943 jint ret = (jint)rsProgramFragmentCreate(con, shaderUTF.c_str(), shaderUTF.length(), (uint32_t *)paramPtr, paramLen);
Jason Sams7e5ab3b2009-12-15 13:27:04 -0800944 _env->ReleaseIntArrayElements(params, paramPtr, JNI_ABORT);
945 return ret;
946}
947
948
Jason Sams1fe9b8c2009-06-11 14:46:10 -0700949// ---------------------------------------------------------------------------
950
Jason Sams0011bcf2009-12-15 12:58:36 -0800951static jint
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -0700952nProgramVertexCreate(JNIEnv *_env, jobject _this, RsContext con, jstring shader, jintArray params)
Jason Sams1fe9b8c2009-06-11 14:46:10 -0700953{
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800954 AutoJavaStringToUTF8 shaderUTF(_env, shader);
Jason Sams0011bcf2009-12-15 12:58:36 -0800955 jint *paramPtr = _env->GetIntArrayElements(params, NULL);
956 jint paramLen = _env->GetArrayLength(params);
Jason Sams1fe9b8c2009-06-11 14:46:10 -0700957
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -0700958 LOG_API("nProgramVertexCreate, con(%p), shaderLen(%i), paramLen(%i)", con, shaderLen, paramLen);
Jason Sams0011bcf2009-12-15 12:58:36 -0800959
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800960 jint ret = (jint)rsProgramVertexCreate(con, shaderUTF.c_str(), shaderUTF.length(), (uint32_t *)paramPtr, paramLen);
Jason Sams0011bcf2009-12-15 12:58:36 -0800961 _env->ReleaseIntArrayElements(params, paramPtr, JNI_ABORT);
962 return ret;
963}
Jason Sams1fe9b8c2009-06-11 14:46:10 -0700964
Jason Samsebfb4362009-09-23 13:57:02 -0700965// ---------------------------------------------------------------------------
966
967static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700968nProgramRasterCreate(JNIEnv *_env, jobject _this, RsContext con, jboolean pointSmooth, jboolean lineSmooth, jboolean pointSprite)
Jason Samsebfb4362009-09-23 13:57:02 -0700969{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -0700970 LOG_API("nProgramRasterCreate, con(%p), pointSmooth(%i), lineSmooth(%i), pointSprite(%i)",
971 con, pointSmooth, lineSmooth, pointSprite);
972 return (jint)rsProgramRasterCreate(con, pointSmooth, lineSmooth, pointSprite);
Jason Samsebfb4362009-09-23 13:57:02 -0700973}
974
975static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700976nProgramRasterSetLineWidth(JNIEnv *_env, jobject _this, RsContext con, jint vpr, jfloat v)
Jason Samsebfb4362009-09-23 13:57:02 -0700977{
Jason Samsebfb4362009-09-23 13:57:02 -0700978 LOG_API("nProgramRasterSetLineWidth, con(%p), vpf(%p), value(%f)", con, (RsProgramRaster)vpr, v);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -0700979 rsProgramRasterSetLineWidth(con, (RsProgramRaster)vpr, v);
980}
981
982static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700983nProgramRasterSetCullMode(JNIEnv *_env, jobject _this, RsContext con, jint vpr, jint v)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -0700984{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -0700985 LOG_API("nProgramRasterSetCullMode, con(%p), vpf(%p), value(%i)", con, (RsProgramRaster)vpr, v);
986 rsProgramRasterSetCullMode(con, (RsProgramRaster)vpr, (RsCullMode)v);
Jason Samsebfb4362009-09-23 13:57:02 -0700987}
988
Jason Samsd19f10d2009-05-22 14:03:28 -0700989
990// ---------------------------------------------------------------------------
991
992static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700993nContextBindRootScript(JNIEnv *_env, jobject _this, RsContext con, jint script)
Jason Samsd19f10d2009-05-22 14:03:28 -0700994{
Jason Samsd19f10d2009-05-22 14:03:28 -0700995 LOG_API("nContextBindRootScript, con(%p), script(%p)", con, (RsScript)script);
Jason Samsbc948de2009-08-17 18:35:48 -0700996 rsContextBindRootScript(con, (RsScript)script);
Jason Samsd19f10d2009-05-22 14:03:28 -0700997}
998
999static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001000nContextBindProgramStore(JNIEnv *_env, jobject _this, RsContext con, jint pfs)
Jason Samsd19f10d2009-05-22 14:03:28 -07001001{
Jason Sams54db59c2010-05-13 18:30:11 -07001002 LOG_API("nContextBindProgramStore, con(%p), pfs(%p)", con, (RsProgramStore)pfs);
1003 rsContextBindProgramStore(con, (RsProgramStore)pfs);
Jason Samsd19f10d2009-05-22 14:03:28 -07001004}
1005
1006static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001007nContextBindProgramFragment(JNIEnv *_env, jobject _this, RsContext con, jint pf)
Jason Samsd19f10d2009-05-22 14:03:28 -07001008{
Jason Samsd19f10d2009-05-22 14:03:28 -07001009 LOG_API("nContextBindProgramFragment, con(%p), pf(%p)", con, (RsProgramFragment)pf);
Jason Samsbc948de2009-08-17 18:35:48 -07001010 rsContextBindProgramFragment(con, (RsProgramFragment)pf);
Jason Samsd19f10d2009-05-22 14:03:28 -07001011}
1012
Jason Sams0826a6f2009-06-15 19:04:56 -07001013static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001014nContextBindProgramVertex(JNIEnv *_env, jobject _this, RsContext con, jint pf)
Jason Sams0826a6f2009-06-15 19:04:56 -07001015{
Jason Sams0826a6f2009-06-15 19:04:56 -07001016 LOG_API("nContextBindProgramVertex, con(%p), pf(%p)", con, (RsProgramVertex)pf);
Jason Samsbc948de2009-08-17 18:35:48 -07001017 rsContextBindProgramVertex(con, (RsProgramVertex)pf);
Jason Sams0826a6f2009-06-15 19:04:56 -07001018}
1019
Joe Onoratod7b37742009-08-09 22:57:44 -07001020static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001021nContextBindProgramRaster(JNIEnv *_env, jobject _this, RsContext con, jint pf)
Jason Samsebfb4362009-09-23 13:57:02 -07001022{
Jason Samsebfb4362009-09-23 13:57:02 -07001023 LOG_API("nContextBindProgramRaster, con(%p), pf(%p)", con, (RsProgramRaster)pf);
1024 rsContextBindProgramRaster(con, (RsProgramRaster)pf);
1025}
1026
Joe Onoratod7b37742009-08-09 22:57:44 -07001027
Jason Sams02fb2cb2009-05-28 15:37:57 -07001028// ---------------------------------------------------------------------------
1029
1030static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001031nSamplerBegin(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams02fb2cb2009-05-28 15:37:57 -07001032{
Jason Sams02fb2cb2009-05-28 15:37:57 -07001033 LOG_API("nSamplerBegin, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -07001034 rsSamplerBegin(con);
Jason Sams02fb2cb2009-05-28 15:37:57 -07001035}
1036
1037static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001038nSamplerSet(JNIEnv *_env, jobject _this, RsContext con, jint p, jint v)
Jason Sams02fb2cb2009-05-28 15:37:57 -07001039{
Jason Sams02fb2cb2009-05-28 15:37:57 -07001040 LOG_API("nSamplerSet, con(%p), param(%i), value(%i)", con, p, v);
Jason Samsbc948de2009-08-17 18:35:48 -07001041 rsSamplerSet(con, (RsSamplerParam)p, (RsSamplerValue)v);
Jason Sams02fb2cb2009-05-28 15:37:57 -07001042}
1043
Alex Sakhartchoukf5b35102010-09-30 11:36:37 -07001044static void
1045nSamplerSet2(JNIEnv *_env, jobject _this, RsContext con, jint p, jfloat v)
1046{
1047 LOG_API("nSamplerSet2, con(%p), param(%i), value(%f)", con, p, v);
1048 rsSamplerSet2(con, (RsSamplerParam)p, v);
1049}
1050
Jason Sams02fb2cb2009-05-28 15:37:57 -07001051static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001052nSamplerCreate(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams02fb2cb2009-05-28 15:37:57 -07001053{
Jason Samsbba134c2009-06-22 15:49:21 -07001054 LOG_API("nSamplerCreate, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -07001055 return (jint)rsSamplerCreate(con);
Jason Sams02fb2cb2009-05-28 15:37:57 -07001056}
1057
Jason Samsbba134c2009-06-22 15:49:21 -07001058// ---------------------------------------------------------------------------
1059
Jason Samsbba134c2009-06-22 15:49:21 -07001060static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001061nMeshCreate(JNIEnv *_env, jobject _this, RsContext con, jint vtxCount, jint idxCount)
Jason Samsbba134c2009-06-22 15:49:21 -07001062{
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001063 LOG_API("nMeshCreate, con(%p), vtxCount(%i), idxCount(%i)", con, vtxCount, idxCount);
1064 int id = (int)rsMeshCreate(con, vtxCount, idxCount);
1065 return id;
1066}
1067
1068static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001069nMeshBindVertex(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jint alloc, jint slot)
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001070{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001071 LOG_API("nMeshBindVertex, con(%p), Mesh(%p), Alloc(%p), slot(%i)", con, (RsMesh)mesh, (RsAllocation)alloc, slot);
1072 rsMeshBindVertex(con, (RsMesh)mesh, (RsAllocation)alloc, slot);
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001073}
1074
1075static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001076nMeshBindIndex(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jint alloc, jint primID, jint slot)
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001077{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001078 LOG_API("nMeshBindIndex, con(%p), Mesh(%p), Alloc(%p)", con, (RsMesh)mesh, (RsAllocation)alloc);
1079 rsMeshBindIndex(con, (RsMesh)mesh, (RsAllocation)alloc, primID, slot);
1080}
1081
Alex Sakhartchouk9d71e212010-11-08 15:10:52 -08001082static void
1083nMeshInitVertexAttribs(JNIEnv *_env, jobject _this, RsContext con, jint mesh)
1084{
1085 LOG_API("nMeshInitVertexAttribs, con(%p), Mesh(%p)", con, (RsMesh)mesh);
1086 rsMeshInitVertexAttribs(con, (RsMesh)mesh);
1087}
1088
1089
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001090static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001091nMeshGetVertexBufferCount(JNIEnv *_env, jobject _this, RsContext con, jint mesh)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001092{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001093 LOG_API("nMeshGetVertexBufferCount, con(%p), Mesh(%p)", con, (RsMesh)mesh);
1094 jint vtxCount = 0;
Alex Sakhartchouk581cc642010-10-27 14:10:07 -07001095 rsaMeshGetVertexBufferCount(con, (RsMesh)mesh, &vtxCount);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001096 return vtxCount;
1097}
1098
1099static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001100nMeshGetIndexCount(JNIEnv *_env, jobject _this, RsContext con, jint mesh)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001101{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001102 LOG_API("nMeshGetIndexCount, con(%p), Mesh(%p)", con, (RsMesh)mesh);
1103 jint idxCount = 0;
Alex Sakhartchouk581cc642010-10-27 14:10:07 -07001104 rsaMeshGetIndexCount(con, (RsMesh)mesh, &idxCount);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001105 return idxCount;
1106}
1107
1108static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001109nMeshGetVertices(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jintArray _ids, int numVtxIDs)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001110{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001111 LOG_API("nMeshGetVertices, con(%p), Mesh(%p)", con, (RsMesh)mesh);
1112
1113 RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numVtxIDs * sizeof(RsAllocation));
Alex Sakhartchouk581cc642010-10-27 14:10:07 -07001114 rsaMeshGetVertices(con, (RsMesh)mesh, allocs, (uint32_t)numVtxIDs);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001115
1116 for(jint i = 0; i < numVtxIDs; i ++) {
1117 _env->SetIntArrayRegion(_ids, i, 1, (const jint*)&allocs[i]);
1118 }
1119
1120 free(allocs);
1121}
1122
1123static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001124nMeshGetIndices(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jintArray _idxIds, jintArray _primitives, int numIndices)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001125{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001126 LOG_API("nMeshGetVertices, con(%p), Mesh(%p)", con, (RsMesh)mesh);
1127
1128 RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numIndices * sizeof(RsAllocation));
1129 uint32_t *prims= (uint32_t*)malloc((uint32_t)numIndices * sizeof(uint32_t));
1130
Alex Sakhartchouk581cc642010-10-27 14:10:07 -07001131 rsaMeshGetIndices(con, (RsMesh)mesh, allocs, prims, (uint32_t)numIndices);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001132
1133 for(jint i = 0; i < numIndices; i ++) {
1134 _env->SetIntArrayRegion(_idxIds, i, 1, (const jint*)&allocs[i]);
1135 _env->SetIntArrayRegion(_primitives, i, 1, (const jint*)&prims[i]);
1136 }
1137
1138 free(allocs);
1139 free(prims);
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001140}
1141
1142// ---------------------------------------------------------------------------
1143
Jason Samsd19f10d2009-05-22 14:03:28 -07001144
Jason Sams94d8e90a2009-06-10 16:09:05 -07001145static const char *classPathName = "android/renderscript/RenderScript";
Jason Samsd19f10d2009-05-22 14:03:28 -07001146
1147static JNINativeMethod methods[] = {
Jason Sams1c415172010-11-08 17:06:46 -08001148{"_nInit", "()V", (void*)_nInit },
Jason Samsea84a7c2009-09-04 14:42:41 -07001149
Jason Sams1c415172010-11-08 17:06:46 -08001150{"nDeviceCreate", "()I", (void*)nDeviceCreate },
1151{"nDeviceDestroy", "(I)V", (void*)nDeviceDestroy },
1152{"nDeviceSetConfig", "(III)V", (void*)nDeviceSetConfig },
1153{"nContextGetUserMessage", "(I[I)V", (void*)nContextGetUserMessage },
1154{"nContextGetErrorMessage", "(I)Ljava/lang/String;", (void*)nContextGetErrorMessage },
1155{"nContextPeekMessage", "(I[IZ)I", (void*)nContextPeekMessage },
1156
1157{"nContextInitToClient", "(I)V", (void*)nContextInitToClient },
1158{"nContextDeinitToClient", "(I)V", (void*)nContextDeinitToClient },
Jason Samsd19f10d2009-05-22 14:03:28 -07001159
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -07001160
Jason Sams2e1872f2010-08-17 16:25:41 -07001161// All methods below are thread protected in java.
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001162{"rsnContextCreate", "(II)I", (void*)nContextCreate },
Jason Sams11c8af92010-10-13 15:31:10 -07001163{"rsnContextCreateGL", "(IIIIIIIIIIIIF)I", (void*)nContextCreateGL },
Jason Sams2e1872f2010-08-17 16:25:41 -07001164{"rsnContextFinish", "(I)V", (void*)nContextFinish },
1165{"rsnContextSetPriority", "(II)V", (void*)nContextSetPriority },
1166{"rsnContextSetSurface", "(IIILandroid/view/Surface;)V", (void*)nContextSetSurface },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001167{"rsnContextDestroy", "(I)V", (void*)nContextDestroy },
Jason Sams2e1872f2010-08-17 16:25:41 -07001168{"rsnContextDump", "(II)V", (void*)nContextDump },
1169{"rsnContextPause", "(I)V", (void*)nContextPause },
1170{"rsnContextResume", "(I)V", (void*)nContextResume },
1171{"rsnAssignName", "(II[B)V", (void*)nAssignName },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001172{"rsnGetName", "(II)Ljava/lang/String;", (void*)nGetName },
Jason Sams2e1872f2010-08-17 16:25:41 -07001173{"rsnObjDestroy", "(II)V", (void*)nObjDestroy },
Jason Sams64676f32009-07-08 18:01:53 -07001174
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -08001175{"rsnFileA3DCreateFromFile", "(ILjava/lang/String;)I", (void*)nFileA3DCreateFromFile },
Jason Sams2e1872f2010-08-17 16:25:41 -07001176{"rsnFileA3DCreateFromAssetStream", "(II)I", (void*)nFileA3DCreateFromAssetStream },
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -08001177{"rsnFileA3DCreateFromAsset", "(ILandroid/content/res/AssetManager;Ljava/lang/String;)I", (void*)nFileA3DCreateFromAsset },
Jason Sams2e1872f2010-08-17 16:25:41 -07001178{"rsnFileA3DGetNumIndexEntries", "(II)I", (void*)nFileA3DGetNumIndexEntries },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001179{"rsnFileA3DGetIndexEntries", "(III[I[Ljava/lang/String;)V", (void*)nFileA3DGetIndexEntries },
Jason Sams2e1872f2010-08-17 16:25:41 -07001180{"rsnFileA3DGetEntryByIndex", "(III)I", (void*)nFileA3DGetEntryByIndex },
Jason Samsd19f10d2009-05-22 14:03:28 -07001181
Alex Sakhartchouke27cdee2010-12-17 11:41:08 -08001182{"rsnFontCreateFromFile", "(ILjava/lang/String;FI)I", (void*)nFontCreateFromFile },
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -08001183{"rsnFontCreateFromAssetStream", "(ILjava/lang/String;FII)I", (void*)nFontCreateFromAssetStream },
1184{"rsnFontCreateFromAsset", "(ILandroid/content/res/AssetManager;Ljava/lang/String;FI)I", (void*)nFontCreateFromAsset },
Jason Samsd19f10d2009-05-22 14:03:28 -07001185
Jason Sams2e1872f2010-08-17 16:25:41 -07001186{"rsnElementCreate", "(IIIZI)I", (void*)nElementCreate },
Jason Sams70d4e502010-09-02 17:35:23 -07001187{"rsnElementCreate2", "(I[I[Ljava/lang/String;[I)I", (void*)nElementCreate2 },
Jason Sams2e1872f2010-08-17 16:25:41 -07001188{"rsnElementGetNativeData", "(II[I)V", (void*)nElementGetNativeData },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001189{"rsnElementGetSubElements", "(II[I[Ljava/lang/String;)V", (void*)nElementGetSubElements },
Jason Samsd19f10d2009-05-22 14:03:28 -07001190
Jason Samsbf6ef8d72010-12-06 15:59:59 -08001191{"rsnTypeCreate", "(IIIIIZZ)I", (void*)nTypeCreate },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001192{"rsnTypeGetNativeData", "(II[I)V", (void*)nTypeGetNativeData },
Jason Samsd19f10d2009-05-22 14:03:28 -07001193
Jason Samsd4b23b52010-12-13 15:32:35 -08001194{"rsnAllocationCreateTyped", "(IIII)I", (void*)nAllocationCreateTyped },
Jason Sams5476b452010-12-08 16:14:36 -08001195{"rsnAllocationCreateFromBitmap", "(IIILandroid/graphics/Bitmap;I)I", (void*)nAllocationCreateFromBitmap },
1196{"rsnAllocationCubeCreateFromBitmap","(IIILandroid/graphics/Bitmap;I)I", (void*)nAllocationCubeCreateFromBitmap },
Jason Sams5476b452010-12-08 16:14:36 -08001197
Jason Sams4ef66502010-12-10 16:03:15 -08001198{"rsnAllocationCopyFromBitmap", "(IILandroid/graphics/Bitmap;)V", (void*)nAllocationCopyFromBitmap },
1199{"rsnAllocationCopyToBitmap", "(IILandroid/graphics/Bitmap;)V", (void*)nAllocationCopyToBitmap },
1200
Jason Sams5476b452010-12-08 16:14:36 -08001201{"rsnAllocationSyncAll", "(III)V", (void*)nAllocationSyncAll },
Jason Sams49a05d72010-12-29 14:31:29 -08001202{"rsnAllocationData1D", "(IIIII[II)V", (void*)nAllocationData1D_i },
1203{"rsnAllocationData1D", "(IIIII[SI)V", (void*)nAllocationData1D_s },
1204{"rsnAllocationData1D", "(IIIII[BI)V", (void*)nAllocationData1D_b },
1205{"rsnAllocationData1D", "(IIIII[FI)V", (void*)nAllocationData1D_f },
1206{"rsnAllocationElementData1D", "(IIIII[BI)V", (void*)nAllocationElementData1D },
1207{"rsnAllocationData2D", "(IIIIIIII[II)V", (void*)nAllocationData2D_i },
1208{"rsnAllocationData2D", "(IIIIIIII[FI)V", (void*)nAllocationData2D_f },
Jason Sams2e1872f2010-08-17 16:25:41 -07001209{"rsnAllocationRead", "(II[I)V", (void*)nAllocationRead_i },
1210{"rsnAllocationRead", "(II[F)V", (void*)nAllocationRead_f },
Jason Sams2e1872f2010-08-17 16:25:41 -07001211{"rsnAllocationGetType", "(II)I", (void*)nAllocationGetType},
Jason Sams5edc6082010-10-05 13:32:49 -07001212{"rsnAllocationResize1D", "(III)V", (void*)nAllocationResize1D },
1213{"rsnAllocationResize2D", "(IIII)V", (void*)nAllocationResize2D },
Jason Samsbd1c3ad2009-08-03 16:03:08 -07001214
Jason Sams2e1872f2010-08-17 16:25:41 -07001215{"rsnScriptBindAllocation", "(IIII)V", (void*)nScriptBindAllocation },
1216{"rsnScriptSetTimeZone", "(II[B)V", (void*)nScriptSetTimeZone },
1217{"rsnScriptInvoke", "(III)V", (void*)nScriptInvoke },
1218{"rsnScriptInvokeV", "(III[B)V", (void*)nScriptInvokeV },
1219{"rsnScriptSetVarI", "(IIII)V", (void*)nScriptSetVarI },
Stephen Hines031ec58c2010-10-11 10:54:21 -07001220{"rsnScriptSetVarJ", "(IIIJ)V", (void*)nScriptSetVarJ },
Jason Sams2e1872f2010-08-17 16:25:41 -07001221{"rsnScriptSetVarF", "(IIIF)V", (void*)nScriptSetVarF },
Stephen Hinesca54ec32010-09-20 17:20:30 -07001222{"rsnScriptSetVarD", "(IIID)V", (void*)nScriptSetVarD },
Jason Sams2e1872f2010-08-17 16:25:41 -07001223{"rsnScriptSetVarV", "(III[B)V", (void*)nScriptSetVarV },
Jason Sams6f4cf0b2010-11-16 17:37:02 -08001224{"rsnScriptSetVarObj", "(IIII)V", (void*)nScriptSetVarObj },
Jason Samsd19f10d2009-05-22 14:03:28 -07001225
Jason Sams2e1872f2010-08-17 16:25:41 -07001226{"rsnScriptCBegin", "(I)V", (void*)nScriptCBegin },
1227{"rsnScriptCSetScript", "(I[BII)V", (void*)nScriptCSetScript },
Shih-wei Liaoeeca4352010-12-20 20:45:56 +08001228{"rsnScriptCCreate", "(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)I", (void*)nScriptCCreate },
Jason Sams0011bcf2009-12-15 12:58:36 -08001229
Jason Sams2e1872f2010-08-17 16:25:41 -07001230{"rsnProgramStoreBegin", "(III)V", (void*)nProgramStoreBegin },
1231{"rsnProgramStoreDepthFunc", "(II)V", (void*)nProgramStoreDepthFunc },
1232{"rsnProgramStoreDepthMask", "(IZ)V", (void*)nProgramStoreDepthMask },
1233{"rsnProgramStoreColorMask", "(IZZZZ)V", (void*)nProgramStoreColorMask },
1234{"rsnProgramStoreBlendFunc", "(III)V", (void*)nProgramStoreBlendFunc },
1235{"rsnProgramStoreDither", "(IZ)V", (void*)nProgramStoreDither },
1236{"rsnProgramStoreCreate", "(I)I", (void*)nProgramStoreCreate },
Jason Samsd19f10d2009-05-22 14:03:28 -07001237
Jason Sams2e1872f2010-08-17 16:25:41 -07001238{"rsnProgramBindConstants", "(IIII)V", (void*)nProgramBindConstants },
1239{"rsnProgramBindTexture", "(IIII)V", (void*)nProgramBindTexture },
1240{"rsnProgramBindSampler", "(IIII)V", (void*)nProgramBindSampler },
Jason Samsebfb4362009-09-23 13:57:02 -07001241
Jason Sams49a05d72010-12-29 14:31:29 -08001242{"rsnProgramFragmentCreate", "(ILjava/lang/String;[I)I", (void*)nProgramFragmentCreate },
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001243
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001244{"rsnProgramRasterCreate", "(IZZZ)I", (void*)nProgramRasterCreate },
Jason Sams2e1872f2010-08-17 16:25:41 -07001245{"rsnProgramRasterSetLineWidth", "(IIF)V", (void*)nProgramRasterSetLineWidth },
1246{"rsnProgramRasterSetCullMode", "(III)V", (void*)nProgramRasterSetCullMode },
Jason Samsbba134c2009-06-22 15:49:21 -07001247
Jason Sams49a05d72010-12-29 14:31:29 -08001248{"rsnProgramVertexCreate", "(ILjava/lang/String;[I)I", (void*)nProgramVertexCreate },
Jason Samsd19f10d2009-05-22 14:03:28 -07001249
Jason Sams2e1872f2010-08-17 16:25:41 -07001250{"rsnContextBindRootScript", "(II)V", (void*)nContextBindRootScript },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001251{"rsnContextBindProgramStore", "(II)V", (void*)nContextBindProgramStore },
Jason Sams2e1872f2010-08-17 16:25:41 -07001252{"rsnContextBindProgramFragment", "(II)V", (void*)nContextBindProgramFragment },
1253{"rsnContextBindProgramVertex", "(II)V", (void*)nContextBindProgramVertex },
1254{"rsnContextBindProgramRaster", "(II)V", (void*)nContextBindProgramRaster },
Jason Sams02fb2cb2009-05-28 15:37:57 -07001255
Jason Sams2e1872f2010-08-17 16:25:41 -07001256{"rsnSamplerBegin", "(I)V", (void*)nSamplerBegin },
1257{"rsnSamplerSet", "(III)V", (void*)nSamplerSet },
Alex Sakhartchoukf5b35102010-09-30 11:36:37 -07001258{"rsnSamplerSet2", "(IIF)V", (void*)nSamplerSet2 },
Jason Sams2e1872f2010-08-17 16:25:41 -07001259{"rsnSamplerCreate", "(I)I", (void*)nSamplerCreate },
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001260
Jason Sams2e1872f2010-08-17 16:25:41 -07001261{"rsnMeshCreate", "(III)I", (void*)nMeshCreate },
1262{"rsnMeshBindVertex", "(IIII)V", (void*)nMeshBindVertex },
1263{"rsnMeshBindIndex", "(IIIII)V", (void*)nMeshBindIndex },
Alex Sakhartchouk9d71e212010-11-08 15:10:52 -08001264{"rsnMeshInitVertexAttribs", "(II)V", (void*)nMeshInitVertexAttribs },
Jason Sams2e1872f2010-08-17 16:25:41 -07001265
1266{"rsnMeshGetVertexBufferCount", "(II)I", (void*)nMeshGetVertexBufferCount },
1267{"rsnMeshGetIndexCount", "(II)I", (void*)nMeshGetIndexCount },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001268{"rsnMeshGetVertices", "(II[II)V", (void*)nMeshGetVertices },
Jason Sams2e1872f2010-08-17 16:25:41 -07001269{"rsnMeshGetIndices", "(II[I[II)V", (void*)nMeshGetIndices },
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001270
Jason Samsd19f10d2009-05-22 14:03:28 -07001271};
1272
1273static int registerFuncs(JNIEnv *_env)
1274{
1275 return android::AndroidRuntime::registerNativeMethods(
1276 _env, classPathName, methods, NELEM(methods));
1277}
1278
1279// ---------------------------------------------------------------------------
1280
1281jint JNI_OnLoad(JavaVM* vm, void* reserved)
1282{
1283 JNIEnv* env = NULL;
1284 jint result = -1;
1285
Jason Samsd19f10d2009-05-22 14:03:28 -07001286 if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
1287 LOGE("ERROR: GetEnv failed\n");
1288 goto bail;
1289 }
1290 assert(env != NULL);
1291
1292 if (registerFuncs(env) < 0) {
1293 LOGE("ERROR: MediaPlayer native registration failed\n");
1294 goto bail;
1295 }
1296
1297 /* success -- return valid version number */
1298 result = JNI_VERSION_1_4;
1299
1300bail:
1301 return result;
1302}