blob: 35db786916849b08bb597328b328cc20be953128 [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 Samsf7086092011-01-12 13:28:37 -0800414static void
415nAllocationGenerateMipmaps(JNIEnv *_env, jobject _this, RsContext con, jint alloc)
416{
417 LOG_API("nAllocationGenerateMipmaps, con(%p), a(%p)", con, (RsAllocation)alloc);
418 rsAllocationGenerateMipmaps(con, (RsAllocation)alloc);
419}
420
Jason Samsffe9f482009-06-01 17:45:53 -0700421static int
Jason Sams5476b452010-12-08 16:14:36 -0800422nAllocationCreateFromBitmap(JNIEnv *_env, jobject _this, RsContext con, jint type, jint mip, jobject jbitmap, jint usage)
Jason Samsffe9f482009-06-01 17:45:53 -0700423{
Jason Samsffe9f482009-06-01 17:45:53 -0700424 SkBitmap const * nativeBitmap =
425 (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
426 const SkBitmap& bitmap(*nativeBitmap);
Jason Samsffe9f482009-06-01 17:45:53 -0700427
Jason Sams5476b452010-12-08 16:14:36 -0800428 bitmap.lockPixels();
429 const void* ptr = bitmap.getPixels();
Jason Samsd4b23b52010-12-13 15:32:35 -0800430 jint id = (jint)rsaAllocationCreateFromBitmap(con, (RsType)type, (RsAllocationMipmapControl)mip, ptr, usage);
Jason Sams5476b452010-12-08 16:14:36 -0800431 bitmap.unlockPixels();
432 return id;
Jason Samsffe9f482009-06-01 17:45:53 -0700433}
Jason Samsfe08d992009-05-27 14:45:32 -0700434
Alex Sakhartchouk67f2e442010-11-18 15:22:43 -0800435static int
Jason Sams5476b452010-12-08 16:14:36 -0800436nAllocationCubeCreateFromBitmap(JNIEnv *_env, jobject _this, RsContext con, jint type, jint mip, jobject jbitmap, jint usage)
Alex Sakhartchouk67f2e442010-11-18 15:22:43 -0800437{
438 SkBitmap const * nativeBitmap =
439 (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
440 const SkBitmap& bitmap(*nativeBitmap);
Alex Sakhartchouk67f2e442010-11-18 15:22:43 -0800441
Jason Sams5476b452010-12-08 16:14:36 -0800442 bitmap.lockPixels();
443 const void* ptr = bitmap.getPixels();
Jason Samsd4b23b52010-12-13 15:32:35 -0800444 jint id = (jint)rsaAllocationCubeCreateFromBitmap(con, (RsType)type, (RsAllocationMipmapControl)mip, ptr, usage);
Jason Sams5476b452010-12-08 16:14:36 -0800445 bitmap.unlockPixels();
446 return id;
Alex Sakhartchouk67f2e442010-11-18 15:22:43 -0800447}
448
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -0700449static void
Jason Sams4ef66502010-12-10 16:03:15 -0800450nAllocationCopyFromBitmap(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jobject jbitmap)
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -0700451{
452 SkBitmap const * nativeBitmap =
453 (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
454 const SkBitmap& bitmap(*nativeBitmap);
Jason Samsf7086092011-01-12 13:28:37 -0800455 int w = bitmap.width();
456 int h = bitmap.height();
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -0700457
Jason Sams4ef66502010-12-10 16:03:15 -0800458 bitmap.lockPixels();
459 const void* ptr = bitmap.getPixels();
Jason Samsf7086092011-01-12 13:28:37 -0800460 rsAllocation2DData(con, (RsAllocation)alloc, 0, 0,
461 0, RS_ALLOCATION_CUBMAP_FACE_POSITVE_X,
462 w, h, ptr, bitmap.getSize());
Jason Sams4ef66502010-12-10 16:03:15 -0800463 bitmap.unlockPixels();
464}
465
466static void
467nAllocationCopyToBitmap(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jobject jbitmap)
468{
469 SkBitmap const * nativeBitmap =
470 (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
471 const SkBitmap& bitmap(*nativeBitmap);
472
473 bitmap.lockPixels();
474 void* ptr = bitmap.getPixels();
475 rsAllocationCopyToBitmap(con, (RsAllocation)alloc, ptr, bitmap.getSize());
476 bitmap.unlockPixels();
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -0700477}
478
Jason Sams8a647432010-03-01 15:31:04 -0800479static void ReleaseBitmapCallback(void *bmp)
480{
481 SkBitmap const * nativeBitmap = (SkBitmap const *)bmp;
482 nativeBitmap->unlockPixels();
483}
484
Romain Guy650a3eb2009-08-31 14:06:43 -0700485
Jason Samsd19f10d2009-05-22 14:03:28 -0700486static void
Jason Sams49a05d72010-12-29 14:31:29 -0800487nAllocationData1D_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 -0700488{
Jason Samsd19f10d2009-05-22 14:03:28 -0700489 jint len = _env->GetArrayLength(data);
Jason Sams49a05d72010-12-29 14:31:29 -0800490 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 -0700491 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Sams49a05d72010-12-29 14:31:29 -0800492 rsAllocation1DData(con, (RsAllocation)alloc, offset, lod, count, ptr, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700493 _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
494}
495
496static void
Jason Sams49a05d72010-12-29 14:31:29 -0800497nAllocationData1D_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 -0700498{
Jason Sams768bc022009-09-21 19:41:04 -0700499 jint len = _env->GetArrayLength(data);
Jason Sams49a05d72010-12-29 14:31:29 -0800500 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 -0700501 jshort *ptr = _env->GetShortArrayElements(data, NULL);
Jason Sams49a05d72010-12-29 14:31:29 -0800502 rsAllocation1DData(con, (RsAllocation)alloc, offset, lod, count, ptr, sizeBytes);
Jason Sams768bc022009-09-21 19:41:04 -0700503 _env->ReleaseShortArrayElements(data, ptr, JNI_ABORT);
504}
505
506static void
Jason Sams49a05d72010-12-29 14:31:29 -0800507nAllocationData1D_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 -0700508{
Jason Sams768bc022009-09-21 19:41:04 -0700509 jint len = _env->GetArrayLength(data);
Jason Sams49a05d72010-12-29 14:31:29 -0800510 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 -0700511 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
Jason Sams49a05d72010-12-29 14:31:29 -0800512 rsAllocation1DData(con, (RsAllocation)alloc, offset, lod, count, ptr, sizeBytes);
Jason Sams768bc022009-09-21 19:41:04 -0700513 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
514}
515
516static void
Jason Sams49a05d72010-12-29 14:31:29 -0800517nAllocationData1D_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 -0700518{
Jason Samsd19f10d2009-05-22 14:03:28 -0700519 jint len = _env->GetArrayLength(data);
Jason Sams49a05d72010-12-29 14:31:29 -0800520 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 -0700521 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Sams49a05d72010-12-29 14:31:29 -0800522 rsAllocation1DData(con, (RsAllocation)alloc, offset, lod, count, ptr, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700523 _env->ReleaseFloatArrayElements(data, ptr, JNI_ABORT);
524}
525
526static void
Jason Sams49a05d72010-12-29 14:31:29 -0800527// native void rsnAllocationElementData1D(int con, int id, int xoff, int compIdx, byte[] d, int sizeBytes);
528nAllocationElementData1D(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 -0700529{
530 jint len = _env->GetArrayLength(data);
Jason Sams49a05d72010-12-29 14:31:29 -0800531 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 -0700532 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
Jason Sams49a05d72010-12-29 14:31:29 -0800533 rsAllocation1DElementData(con, (RsAllocation)alloc, offset, lod, ptr, compIdx, sizeBytes);
Jason Sams49bdaf02010-08-31 13:50:42 -0700534 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
535}
536
537static void
Jason Samsfb9f82c2011-01-12 14:53:25 -0800538nAllocationData2D_s(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint lod, jint face,
539 jint w, jint h, jshortArray data, int sizeBytes)
540{
541 jint len = _env->GetArrayLength(data);
542 LOG_API("nAllocation2DData_s, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)", con, (RsAllocation)alloc, xoff, yoff, w, h, len);
543 jshort *ptr = _env->GetShortArrayElements(data, NULL);
544 rsAllocation2DData(con, (RsAllocation)alloc, xoff, yoff, lod, (RsAllocationCubemapFace)face, w, h, ptr, sizeBytes);
545 _env->ReleaseShortArrayElements(data, ptr, JNI_ABORT);
546}
547
548static void
549nAllocationData2D_b(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint lod, jint face,
550 jint w, jint h, jbyteArray data, int sizeBytes)
551{
552 jint len = _env->GetArrayLength(data);
553 LOG_API("nAllocation2DData_b, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)", con, (RsAllocation)alloc, xoff, yoff, w, h, len);
554 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
555 rsAllocation2DData(con, (RsAllocation)alloc, xoff, yoff, lod, (RsAllocationCubemapFace)face, w, h, ptr, sizeBytes);
556 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
557}
558
559static void
Jason Sams49a05d72010-12-29 14:31:29 -0800560nAllocationData2D_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint lod, jint face,
561 jint w, jint h, jintArray data, int sizeBytes)
Jason Samsd19f10d2009-05-22 14:03:28 -0700562{
Jason Samsd19f10d2009-05-22 14:03:28 -0700563 jint len = _env->GetArrayLength(data);
Jason Sams49a05d72010-12-29 14:31:29 -0800564 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 -0700565 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Sams49a05d72010-12-29 14:31:29 -0800566 rsAllocation2DData(con, (RsAllocation)alloc, xoff, yoff, lod, (RsAllocationCubemapFace)face, w, h, ptr, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700567 _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
568}
569
570static void
Jason Sams49a05d72010-12-29 14:31:29 -0800571nAllocationData2D_f(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint lod, jint face,
572 jint w, jint h, jfloatArray data, int sizeBytes)
Jason Samsd19f10d2009-05-22 14:03:28 -0700573{
Jason Samsd19f10d2009-05-22 14:03:28 -0700574 jint len = _env->GetArrayLength(data);
Jason Sams49a05d72010-12-29 14:31:29 -0800575 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 -0700576 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Sams49a05d72010-12-29 14:31:29 -0800577 rsAllocation2DData(con, (RsAllocation)alloc, xoff, yoff, lod, (RsAllocationCubemapFace)face, w, h, ptr, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700578 _env->ReleaseFloatArrayElements(data, ptr, JNI_ABORT);
579}
580
Jason Sams40a29e82009-08-10 14:55:26 -0700581static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700582nAllocationRead_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jintArray data)
Jason Sams40a29e82009-08-10 14:55:26 -0700583{
Jason Sams40a29e82009-08-10 14:55:26 -0700584 jint len = _env->GetArrayLength(data);
585 LOG_API("nAllocationRead_i, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
586 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700587 rsAllocationRead(con, (RsAllocation)alloc, ptr);
Joe Onoratoae209ac2009-08-31 17:23:53 -0700588 _env->ReleaseIntArrayElements(data, ptr, 0);
Jason Sams40a29e82009-08-10 14:55:26 -0700589}
590
591static void
Jason Samsfb9f82c2011-01-12 14:53:25 -0800592nAllocationRead_s(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jshortArray data)
593{
594 jint len = _env->GetArrayLength(data);
595 LOG_API("nAllocationRead_i, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
596 jshort *ptr = _env->GetShortArrayElements(data, NULL);
597 rsAllocationRead(con, (RsAllocation)alloc, ptr);
598 _env->ReleaseShortArrayElements(data, ptr, 0);
599}
600
601static void
602nAllocationRead_b(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jbyteArray data)
603{
604 jint len = _env->GetArrayLength(data);
605 LOG_API("nAllocationRead_i, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
606 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
607 rsAllocationRead(con, (RsAllocation)alloc, ptr);
608 _env->ReleaseByteArrayElements(data, ptr, 0);
609}
610
611static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700612nAllocationRead_f(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jfloatArray data)
Jason Sams40a29e82009-08-10 14:55:26 -0700613{
Jason Sams40a29e82009-08-10 14:55:26 -0700614 jint len = _env->GetArrayLength(data);
Joe Onoratoa8f2ace2009-08-12 11:47:23 -0700615 LOG_API("nAllocationRead_f, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
Jason Sams40a29e82009-08-10 14:55:26 -0700616 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700617 rsAllocationRead(con, (RsAllocation)alloc, ptr);
Joe Onoratoae209ac2009-08-31 17:23:53 -0700618 _env->ReleaseFloatArrayElements(data, ptr, 0);
Jason Sams40a29e82009-08-10 14:55:26 -0700619}
Jason Samsd19f10d2009-05-22 14:03:28 -0700620
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700621static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700622nAllocationGetType(JNIEnv *_env, jobject _this, RsContext con, jint a)
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700623{
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700624 LOG_API("nAllocationGetType, con(%p), a(%p)", con, (RsAllocation)a);
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700625 return (jint) rsaAllocationGetType(con, (RsAllocation)a);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700626}
627
Jason Sams5edc6082010-10-05 13:32:49 -0700628static void
629nAllocationResize1D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint dimX)
630{
631 LOG_API("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i)", con, (RsAllocation)alloc, dimX);
632 rsAllocationResize1D(con, (RsAllocation)alloc, dimX);
633}
634
635static void
636nAllocationResize2D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint dimX, jint dimY)
637{
638 LOG_API("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i), sizeY(%i)", con, (RsAllocation)alloc, dimX, dimY);
639 rsAllocationResize2D(con, (RsAllocation)alloc, dimX, dimY);
640}
641
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700642// -----------------------------------
643
644static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700645nFileA3DCreateFromAssetStream(JNIEnv *_env, jobject _this, RsContext con, jint native_asset)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700646{
647 LOGV("______nFileA3D %u", (uint32_t) native_asset);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700648
649 Asset* asset = reinterpret_cast<Asset*>(native_asset);
650
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800651 jint id = (jint)rsaFileA3DCreateFromMemory(con, asset->getBuffer(false), asset->getLength());
652 return id;
653}
654
655static int
656nFileA3DCreateFromAsset(JNIEnv *_env, jobject _this, RsContext con, jobject _assetMgr, jstring _path)
657{
658 AssetManager* mgr = assetManagerForJavaObject(_env, _assetMgr);
659 if (mgr == NULL) {
660 return 0;
661 }
662
663 AutoJavaStringToUTF8 str(_env, _path);
664 Asset* asset = mgr->open(str.c_str(), Asset::ACCESS_BUFFER);
665 if (asset == NULL) {
666 return 0;
667 }
668
669 jint id = (jint)rsaFileA3DCreateFromAsset(con, asset);
670 return id;
671}
672
673static int
674nFileA3DCreateFromFile(JNIEnv *_env, jobject _this, RsContext con, jstring fileName)
675{
676 AutoJavaStringToUTF8 fileNameUTF(_env, fileName);
677 jint id = (jint)rsaFileA3DCreateFromFile(con, fileNameUTF.c_str());
678
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700679 return id;
680}
681
682static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700683nFileA3DGetNumIndexEntries(JNIEnv *_env, jobject _this, RsContext con, jint fileA3D)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700684{
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700685 int32_t numEntries = 0;
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700686 rsaFileA3DGetNumIndexEntries(con, &numEntries, (RsFile)fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700687 return numEntries;
688}
689
690static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700691nFileA3DGetIndexEntries(JNIEnv *_env, jobject _this, RsContext con, jint fileA3D, jint numEntries, jintArray _ids, jobjectArray _entries)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700692{
693 LOGV("______nFileA3D %u", (uint32_t) fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700694 RsFileIndexEntry *fileEntries = (RsFileIndexEntry*)malloc((uint32_t)numEntries * sizeof(RsFileIndexEntry));
695
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700696 rsaFileA3DGetIndexEntries(con, fileEntries, (uint32_t)numEntries, (RsFile)fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700697
698 for(jint i = 0; i < numEntries; i ++) {
699 _env->SetObjectArrayElement(_entries, i, _env->NewStringUTF(fileEntries[i].objectName));
700 _env->SetIntArrayRegion(_ids, i, 1, (const jint*)&fileEntries[i].classID);
701 }
702
703 free(fileEntries);
704}
705
706static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700707nFileA3DGetEntryByIndex(JNIEnv *_env, jobject _this, RsContext con, jint fileA3D, jint index)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700708{
709 LOGV("______nFileA3D %u", (uint32_t) fileA3D);
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700710 jint id = (jint)rsaFileA3DGetEntryByIndex(con, (uint32_t)index, (RsFile)fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700711 return id;
712}
Jason Samsd19f10d2009-05-22 14:03:28 -0700713
714// -----------------------------------
715
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700716static int
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800717nFontCreateFromFile(JNIEnv *_env, jobject _this, RsContext con,
718 jstring fileName, jfloat fontSize, jint dpi)
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700719{
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800720 AutoJavaStringToUTF8 fileNameUTF(_env, fileName);
721 jint id = (jint)rsFontCreateFromFile(con, fileNameUTF.c_str(), fontSize, dpi);
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700722
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800723 return id;
724}
725
726static int
727nFontCreateFromAssetStream(JNIEnv *_env, jobject _this, RsContext con,
728 jstring name, jfloat fontSize, jint dpi, jint native_asset)
729{
730 Asset* asset = reinterpret_cast<Asset*>(native_asset);
731 AutoJavaStringToUTF8 nameUTF(_env, name);
732
733 jint id = (jint)rsFontCreateFromMemory(con, nameUTF.c_str(), fontSize, dpi,
734 asset->getBuffer(false), asset->getLength());
735 return id;
736}
737
738static int
739nFontCreateFromAsset(JNIEnv *_env, jobject _this, RsContext con, jobject _assetMgr, jstring _path,
740 jfloat fontSize, jint dpi)
741{
742 AssetManager* mgr = assetManagerForJavaObject(_env, _assetMgr);
743 if (mgr == NULL) {
744 return 0;
745 }
746
747 AutoJavaStringToUTF8 str(_env, _path);
748 Asset* asset = mgr->open(str.c_str(), Asset::ACCESS_BUFFER);
749 if (asset == NULL) {
750 return 0;
751 }
752
753 jint id = (jint)rsFontCreateFromMemory(con, str.c_str(), fontSize, dpi,
754 asset->getBuffer(false), asset->getLength());
755 delete asset;
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700756 return id;
757}
758
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700759// -----------------------------------
760
761static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700762nScriptBindAllocation(JNIEnv *_env, jobject _this, RsContext con, jint script, jint alloc, jint slot)
Jason Samsd19f10d2009-05-22 14:03:28 -0700763{
Jason Samsd19f10d2009-05-22 14:03:28 -0700764 LOG_API("nScriptBindAllocation, con(%p), script(%p), alloc(%p), slot(%i)", con, (RsScript)script, (RsAllocation)alloc, slot);
Jason Samsbc948de2009-08-17 18:35:48 -0700765 rsScriptBindAllocation(con, (RsScript)script, (RsAllocation)alloc, slot);
Jason Samsd19f10d2009-05-22 14:03:28 -0700766}
767
768static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700769nScriptSetVarI(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jint val)
Jason Sams4d339932010-05-11 14:03:58 -0700770{
Jason Samscfc04362010-09-14 14:59:03 -0700771 LOG_API("nScriptSetVarI, con(%p), s(%p), slot(%i), val(%i)", con, (void *)script, slot, val);
Jason Sams4d339932010-05-11 14:03:58 -0700772 rsScriptSetVarI(con, (RsScript)script, slot, val);
773}
774
775static void
Jason Sams6f4cf0b2010-11-16 17:37:02 -0800776nScriptSetVarObj(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jint val)
777{
778 LOG_API("nScriptSetVarObj, con(%p), s(%p), slot(%i), val(%i)", con, (void *)script, slot, val);
779 rsScriptSetVarObj(con, (RsScript)script, slot, (RsObjectBase)val);
780}
781
782static void
Stephen Hines031ec58c2010-10-11 10:54:21 -0700783nScriptSetVarJ(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jlong val)
784{
785 LOG_API("nScriptSetVarJ, con(%p), s(%p), slot(%i), val(%lli)", con, (void *)script, slot, val);
786 rsScriptSetVarJ(con, (RsScript)script, slot, val);
787}
788
789static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700790nScriptSetVarF(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, float val)
Jason Sams4d339932010-05-11 14:03:58 -0700791{
Stephen Hinesca54ec32010-09-20 17:20:30 -0700792 LOG_API("nScriptSetVarF, con(%p), s(%p), slot(%i), val(%f)", con, (void *)script, slot, val);
Jason Sams4d339932010-05-11 14:03:58 -0700793 rsScriptSetVarF(con, (RsScript)script, slot, val);
794}
795
796static void
Stephen Hinesca54ec32010-09-20 17:20:30 -0700797nScriptSetVarD(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, double val)
798{
799 LOG_API("nScriptSetVarD, con(%p), s(%p), slot(%i), val(%lf)", con, (void *)script, slot, val);
800 rsScriptSetVarD(con, (RsScript)script, slot, val);
801}
802
803static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700804nScriptSetVarV(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jbyteArray data)
Jason Sams4d339932010-05-11 14:03:58 -0700805{
Jason Sams4d339932010-05-11 14:03:58 -0700806 LOG_API("nScriptSetVarV, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
807 jint len = _env->GetArrayLength(data);
808 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
809 rsScriptSetVarV(con, (RsScript)script, slot, ptr, len);
810 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
811}
812
Jason Samsd19f10d2009-05-22 14:03:28 -0700813
814static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700815nScriptSetTimeZone(JNIEnv *_env, jobject _this, RsContext con, jint script, jbyteArray timeZone)
Jason Samsd19f10d2009-05-22 14:03:28 -0700816{
Jason Sams07ae4062009-08-27 20:23:34 -0700817 LOG_API("nScriptCSetTimeZone, con(%p), s(%p), timeZone(%s)", con, (void *)script, (const char *)timeZone);
Romain Guy584a3752009-07-30 18:45:01 -0700818
819 jint length = _env->GetArrayLength(timeZone);
820 jbyte* timeZone_ptr;
821 timeZone_ptr = (jbyte *) _env->GetPrimitiveArrayCritical(timeZone, (jboolean *)0);
822
Jason Samsbc948de2009-08-17 18:35:48 -0700823 rsScriptSetTimeZone(con, (RsScript)script, (const char *)timeZone_ptr, length);
Romain Guy584a3752009-07-30 18:45:01 -0700824
825 if (timeZone_ptr) {
826 _env->ReleasePrimitiveArrayCritical(timeZone, timeZone_ptr, 0);
827 }
828}
829
Jason Samsfbf0b9e2009-08-13 12:59:04 -0700830static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700831nScriptInvoke(JNIEnv *_env, jobject _this, RsContext con, jint obj, jint slot)
Jason Samsbe2e8412009-09-16 15:04:38 -0700832{
Jason Samsbe2e8412009-09-16 15:04:38 -0700833 LOG_API("nScriptInvoke, con(%p), script(%p)", con, (void *)obj);
834 rsScriptInvoke(con, (RsScript)obj, slot);
835}
836
837static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700838nScriptInvokeV(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jbyteArray data)
Jason Sams4d339932010-05-11 14:03:58 -0700839{
Jason Sams4d339932010-05-11 14:03:58 -0700840 LOG_API("nScriptInvokeV, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
841 jint len = _env->GetArrayLength(data);
842 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
843 rsScriptInvokeV(con, (RsScript)script, slot, ptr, len);
844 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
845}
846
Jason Samsfbf0b9e2009-08-13 12:59:04 -0700847
Jason Sams22534172009-08-04 16:58:20 -0700848// -----------------------------------
849
850static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700851nScriptCBegin(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams22534172009-08-04 16:58:20 -0700852{
Jason Sams22534172009-08-04 16:58:20 -0700853 LOG_API("nScriptCBegin, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -0700854 rsScriptCBegin(con);
Jason Sams22534172009-08-04 16:58:20 -0700855}
856
Romain Guy584a3752009-07-30 18:45:01 -0700857static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700858nScriptCSetScript(JNIEnv *_env, jobject _this, RsContext con, jbyteArray scriptRef,
Jack Palevich43702d82009-05-28 13:38:16 -0700859 jint offset, jint length)
Jason Samsd19f10d2009-05-22 14:03:28 -0700860{
Jason Samsd19f10d2009-05-22 14:03:28 -0700861 LOG_API("!!! nScriptCSetScript, con(%p)", con);
Jack Palevich43702d82009-05-28 13:38:16 -0700862 jint _exception = 0;
863 jint remaining;
864 jbyte* script_base = 0;
865 jbyte* script_ptr;
Jack Palevich43702d82009-05-28 13:38:16 -0700866 if (!scriptRef) {
867 _exception = 1;
868 //_env->ThrowNew(IAEClass, "script == null");
869 goto exit;
870 }
871 if (offset < 0) {
872 _exception = 1;
873 //_env->ThrowNew(IAEClass, "offset < 0");
874 goto exit;
875 }
876 if (length < 0) {
877 _exception = 1;
878 //_env->ThrowNew(IAEClass, "length < 0");
879 goto exit;
880 }
881 remaining = _env->GetArrayLength(scriptRef) - offset;
882 if (remaining < length) {
883 _exception = 1;
884 //_env->ThrowNew(IAEClass, "length > script.length - offset");
885 goto exit;
886 }
887 script_base = (jbyte *)
888 _env->GetPrimitiveArrayCritical(scriptRef, (jboolean *)0);
889 script_ptr = script_base + offset;
890
Jason Samsbc948de2009-08-17 18:35:48 -0700891 rsScriptCSetText(con, (const char *)script_ptr, length);
Jason Sams39ddc9502009-06-05 17:35:09 -0700892
Jack Palevich43702d82009-05-28 13:38:16 -0700893exit:
894 if (script_base) {
895 _env->ReleasePrimitiveArrayCritical(scriptRef, script_base,
896 _exception ? JNI_ABORT: 0);
897 }
Jason Samsd19f10d2009-05-22 14:03:28 -0700898}
899
900static jint
Shih-wei Liaoeeca4352010-12-20 20:45:56 +0800901nScriptCCreate(JNIEnv *_env, jobject _this, RsContext con, jstring packageName, jstring resName, jstring cacheDir)
Jason Samsd19f10d2009-05-22 14:03:28 -0700902{
Jason Samsd19f10d2009-05-22 14:03:28 -0700903 LOG_API("nScriptCCreate, con(%p)", con);
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800904 AutoJavaStringToUTF8 packageNameUTF(_env, packageName);
905 AutoJavaStringToUTF8 resNameUTF(_env, resName);
906 AutoJavaStringToUTF8 cacheDirUTF(_env, cacheDir);
907 jint i = (jint)rsScriptCCreate(con, packageNameUTF.c_str(), resNameUTF.c_str(), cacheDirUTF.c_str());
Shih-wei Liao6b32fab2010-12-10 01:03:59 -0800908 return i;
Jason Samsd19f10d2009-05-22 14:03:28 -0700909}
910
911// ---------------------------------------------------------------------------
912
913static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700914nProgramStoreBegin(JNIEnv *_env, jobject _this, RsContext con, jint in, jint out)
Jason Samsd19f10d2009-05-22 14:03:28 -0700915{
Jason Sams54db59c2010-05-13 18:30:11 -0700916 LOG_API("nProgramStoreBegin, con(%p), in(%p), out(%p)", con, (RsElement)in, (RsElement)out);
917 rsProgramStoreBegin(con, (RsElement)in, (RsElement)out);
Jason Samsd19f10d2009-05-22 14:03:28 -0700918}
919
920static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700921nProgramStoreDepthFunc(JNIEnv *_env, jobject _this, RsContext con, jint func)
Jason Samsd19f10d2009-05-22 14:03:28 -0700922{
Jason Sams54db59c2010-05-13 18:30:11 -0700923 LOG_API("nProgramStoreDepthFunc, con(%p), func(%i)", con, func);
924 rsProgramStoreDepthFunc(con, (RsDepthFunc)func);
Jason Samsd19f10d2009-05-22 14:03:28 -0700925}
926
927static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700928nProgramStoreDepthMask(JNIEnv *_env, jobject _this, RsContext con, jboolean enable)
Jason Samsd19f10d2009-05-22 14:03:28 -0700929{
Jason Sams54db59c2010-05-13 18:30:11 -0700930 LOG_API("nProgramStoreDepthMask, con(%p), enable(%i)", con, enable);
931 rsProgramStoreDepthMask(con, enable);
Jason Samsd19f10d2009-05-22 14:03:28 -0700932}
933
934static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700935nProgramStoreColorMask(JNIEnv *_env, jobject _this, RsContext con, jboolean r, jboolean g, jboolean b, jboolean a)
Jason Samsd19f10d2009-05-22 14:03:28 -0700936{
Jason Sams54db59c2010-05-13 18:30:11 -0700937 LOG_API("nProgramStoreColorMask, con(%p), r(%i), g(%i), b(%i), a(%i)", con, r, g, b, a);
938 rsProgramStoreColorMask(con, r, g, b, a);
Jason Samsd19f10d2009-05-22 14:03:28 -0700939}
940
941static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700942nProgramStoreBlendFunc(JNIEnv *_env, jobject _this, RsContext con, int src, int dst)
Jason Samsd19f10d2009-05-22 14:03:28 -0700943{
Jason Sams54db59c2010-05-13 18:30:11 -0700944 LOG_API("nProgramStoreBlendFunc, con(%p), src(%i), dst(%i)", con, src, dst);
945 rsProgramStoreBlendFunc(con, (RsBlendSrcFunc)src, (RsBlendDstFunc)dst);
Jason Samsd19f10d2009-05-22 14:03:28 -0700946}
947
948static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700949nProgramStoreDither(JNIEnv *_env, jobject _this, RsContext con, jboolean enable)
Jason Samsd19f10d2009-05-22 14:03:28 -0700950{
Jason Sams54db59c2010-05-13 18:30:11 -0700951 LOG_API("nProgramStoreDither, con(%p), enable(%i)", con, enable);
952 rsProgramStoreDither(con, enable);
Jason Samsd19f10d2009-05-22 14:03:28 -0700953}
954
955static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700956nProgramStoreCreate(JNIEnv *_env, jobject _this, RsContext con)
Jason Samsd19f10d2009-05-22 14:03:28 -0700957{
Jason Sams54db59c2010-05-13 18:30:11 -0700958 LOG_API("nProgramStoreCreate, con(%p)", con);
Jason Sams54db59c2010-05-13 18:30:11 -0700959 return (jint)rsProgramStoreCreate(con);
Jason Samsd19f10d2009-05-22 14:03:28 -0700960}
961
Jason Sams0011bcf2009-12-15 12:58:36 -0800962// ---------------------------------------------------------------------------
963
964static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700965nProgramBindConstants(JNIEnv *_env, jobject _this, RsContext con, jint vpv, jint slot, jint a)
Jason Sams0011bcf2009-12-15 12:58:36 -0800966{
Jason Sams0011bcf2009-12-15 12:58:36 -0800967 LOG_API("nProgramBindConstants, con(%p), vpf(%p), sloat(%i), a(%p)", con, (RsProgramVertex)vpv, slot, (RsAllocation)a);
968 rsProgramBindConstants(con, (RsProgram)vpv, slot, (RsAllocation)a);
969}
Jason Sams54c0ec12009-11-30 14:49:55 -0800970
Jason Sams68afd012009-12-17 16:55:08 -0800971static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700972nProgramBindTexture(JNIEnv *_env, jobject _this, RsContext con, jint vpf, jint slot, jint a)
Jason Sams68afd012009-12-17 16:55:08 -0800973{
Jason Sams68afd012009-12-17 16:55:08 -0800974 LOG_API("nProgramBindTexture, con(%p), vpf(%p), slot(%i), a(%p)", con, (RsProgramFragment)vpf, slot, (RsAllocation)a);
975 rsProgramBindTexture(con, (RsProgramFragment)vpf, slot, (RsAllocation)a);
976}
977
978static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700979nProgramBindSampler(JNIEnv *_env, jobject _this, RsContext con, jint vpf, jint slot, jint a)
Jason Sams68afd012009-12-17 16:55:08 -0800980{
Jason Sams68afd012009-12-17 16:55:08 -0800981 LOG_API("nProgramBindSampler, con(%p), vpf(%p), slot(%i), a(%p)", con, (RsProgramFragment)vpf, slot, (RsSampler)a);
982 rsProgramBindSampler(con, (RsProgramFragment)vpf, slot, (RsSampler)a);
983}
984
Jason Samsd19f10d2009-05-22 14:03:28 -0700985// ---------------------------------------------------------------------------
986
Jason Samsd19f10d2009-05-22 14:03:28 -0700987static jint
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -0700988nProgramFragmentCreate(JNIEnv *_env, jobject _this, RsContext con, jstring shader, jintArray params)
Jason Sams7e5ab3b2009-12-15 13:27:04 -0800989{
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800990 AutoJavaStringToUTF8 shaderUTF(_env, shader);
Jason Sams7e5ab3b2009-12-15 13:27:04 -0800991 jint *paramPtr = _env->GetIntArrayElements(params, NULL);
992 jint paramLen = _env->GetArrayLength(params);
993
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -0700994 LOG_API("nProgramFragmentCreate, con(%p), shaderLen(%i), paramLen(%i)", con, shaderLen, paramLen);
Jason Sams7e5ab3b2009-12-15 13:27:04 -0800995
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800996 jint ret = (jint)rsProgramFragmentCreate(con, shaderUTF.c_str(), shaderUTF.length(), (uint32_t *)paramPtr, paramLen);
Jason Sams7e5ab3b2009-12-15 13:27:04 -0800997 _env->ReleaseIntArrayElements(params, paramPtr, JNI_ABORT);
998 return ret;
999}
1000
1001
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001002// ---------------------------------------------------------------------------
1003
Jason Sams0011bcf2009-12-15 12:58:36 -08001004static jint
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001005nProgramVertexCreate(JNIEnv *_env, jobject _this, RsContext con, jstring shader, jintArray params)
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001006{
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -08001007 AutoJavaStringToUTF8 shaderUTF(_env, shader);
Jason Sams0011bcf2009-12-15 12:58:36 -08001008 jint *paramPtr = _env->GetIntArrayElements(params, NULL);
1009 jint paramLen = _env->GetArrayLength(params);
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001010
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001011 LOG_API("nProgramVertexCreate, con(%p), shaderLen(%i), paramLen(%i)", con, shaderLen, paramLen);
Jason Sams0011bcf2009-12-15 12:58:36 -08001012
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -08001013 jint ret = (jint)rsProgramVertexCreate(con, shaderUTF.c_str(), shaderUTF.length(), (uint32_t *)paramPtr, paramLen);
Jason Sams0011bcf2009-12-15 12:58:36 -08001014 _env->ReleaseIntArrayElements(params, paramPtr, JNI_ABORT);
1015 return ret;
1016}
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001017
Jason Samsebfb4362009-09-23 13:57:02 -07001018// ---------------------------------------------------------------------------
1019
1020static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001021nProgramRasterCreate(JNIEnv *_env, jobject _this, RsContext con, jboolean pointSmooth, jboolean lineSmooth, jboolean pointSprite)
Jason Samsebfb4362009-09-23 13:57:02 -07001022{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001023 LOG_API("nProgramRasterCreate, con(%p), pointSmooth(%i), lineSmooth(%i), pointSprite(%i)",
1024 con, pointSmooth, lineSmooth, pointSprite);
1025 return (jint)rsProgramRasterCreate(con, pointSmooth, lineSmooth, pointSprite);
Jason Samsebfb4362009-09-23 13:57:02 -07001026}
1027
1028static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001029nProgramRasterSetLineWidth(JNIEnv *_env, jobject _this, RsContext con, jint vpr, jfloat v)
Jason Samsebfb4362009-09-23 13:57:02 -07001030{
Jason Samsebfb4362009-09-23 13:57:02 -07001031 LOG_API("nProgramRasterSetLineWidth, con(%p), vpf(%p), value(%f)", con, (RsProgramRaster)vpr, v);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001032 rsProgramRasterSetLineWidth(con, (RsProgramRaster)vpr, v);
1033}
1034
1035static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001036nProgramRasterSetCullMode(JNIEnv *_env, jobject _this, RsContext con, jint vpr, jint v)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001037{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001038 LOG_API("nProgramRasterSetCullMode, con(%p), vpf(%p), value(%i)", con, (RsProgramRaster)vpr, v);
1039 rsProgramRasterSetCullMode(con, (RsProgramRaster)vpr, (RsCullMode)v);
Jason Samsebfb4362009-09-23 13:57:02 -07001040}
1041
Jason Samsd19f10d2009-05-22 14:03:28 -07001042
1043// ---------------------------------------------------------------------------
1044
1045static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001046nContextBindRootScript(JNIEnv *_env, jobject _this, RsContext con, jint script)
Jason Samsd19f10d2009-05-22 14:03:28 -07001047{
Jason Samsd19f10d2009-05-22 14:03:28 -07001048 LOG_API("nContextBindRootScript, con(%p), script(%p)", con, (RsScript)script);
Jason Samsbc948de2009-08-17 18:35:48 -07001049 rsContextBindRootScript(con, (RsScript)script);
Jason Samsd19f10d2009-05-22 14:03:28 -07001050}
1051
1052static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001053nContextBindProgramStore(JNIEnv *_env, jobject _this, RsContext con, jint pfs)
Jason Samsd19f10d2009-05-22 14:03:28 -07001054{
Jason Sams54db59c2010-05-13 18:30:11 -07001055 LOG_API("nContextBindProgramStore, con(%p), pfs(%p)", con, (RsProgramStore)pfs);
1056 rsContextBindProgramStore(con, (RsProgramStore)pfs);
Jason Samsd19f10d2009-05-22 14:03:28 -07001057}
1058
1059static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001060nContextBindProgramFragment(JNIEnv *_env, jobject _this, RsContext con, jint pf)
Jason Samsd19f10d2009-05-22 14:03:28 -07001061{
Jason Samsd19f10d2009-05-22 14:03:28 -07001062 LOG_API("nContextBindProgramFragment, con(%p), pf(%p)", con, (RsProgramFragment)pf);
Jason Samsbc948de2009-08-17 18:35:48 -07001063 rsContextBindProgramFragment(con, (RsProgramFragment)pf);
Jason Samsd19f10d2009-05-22 14:03:28 -07001064}
1065
Jason Sams0826a6f2009-06-15 19:04:56 -07001066static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001067nContextBindProgramVertex(JNIEnv *_env, jobject _this, RsContext con, jint pf)
Jason Sams0826a6f2009-06-15 19:04:56 -07001068{
Jason Sams0826a6f2009-06-15 19:04:56 -07001069 LOG_API("nContextBindProgramVertex, con(%p), pf(%p)", con, (RsProgramVertex)pf);
Jason Samsbc948de2009-08-17 18:35:48 -07001070 rsContextBindProgramVertex(con, (RsProgramVertex)pf);
Jason Sams0826a6f2009-06-15 19:04:56 -07001071}
1072
Joe Onoratod7b37742009-08-09 22:57:44 -07001073static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001074nContextBindProgramRaster(JNIEnv *_env, jobject _this, RsContext con, jint pf)
Jason Samsebfb4362009-09-23 13:57:02 -07001075{
Jason Samsebfb4362009-09-23 13:57:02 -07001076 LOG_API("nContextBindProgramRaster, con(%p), pf(%p)", con, (RsProgramRaster)pf);
1077 rsContextBindProgramRaster(con, (RsProgramRaster)pf);
1078}
1079
Joe Onoratod7b37742009-08-09 22:57:44 -07001080
Jason Sams02fb2cb2009-05-28 15:37:57 -07001081// ---------------------------------------------------------------------------
1082
1083static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001084nSamplerBegin(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams02fb2cb2009-05-28 15:37:57 -07001085{
Jason Sams02fb2cb2009-05-28 15:37:57 -07001086 LOG_API("nSamplerBegin, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -07001087 rsSamplerBegin(con);
Jason Sams02fb2cb2009-05-28 15:37:57 -07001088}
1089
1090static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001091nSamplerSet(JNIEnv *_env, jobject _this, RsContext con, jint p, jint v)
Jason Sams02fb2cb2009-05-28 15:37:57 -07001092{
Jason Sams02fb2cb2009-05-28 15:37:57 -07001093 LOG_API("nSamplerSet, con(%p), param(%i), value(%i)", con, p, v);
Jason Samsbc948de2009-08-17 18:35:48 -07001094 rsSamplerSet(con, (RsSamplerParam)p, (RsSamplerValue)v);
Jason Sams02fb2cb2009-05-28 15:37:57 -07001095}
1096
Alex Sakhartchoukf5b35102010-09-30 11:36:37 -07001097static void
1098nSamplerSet2(JNIEnv *_env, jobject _this, RsContext con, jint p, jfloat v)
1099{
1100 LOG_API("nSamplerSet2, con(%p), param(%i), value(%f)", con, p, v);
1101 rsSamplerSet2(con, (RsSamplerParam)p, v);
1102}
1103
Jason Sams02fb2cb2009-05-28 15:37:57 -07001104static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001105nSamplerCreate(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams02fb2cb2009-05-28 15:37:57 -07001106{
Jason Samsbba134c2009-06-22 15:49:21 -07001107 LOG_API("nSamplerCreate, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -07001108 return (jint)rsSamplerCreate(con);
Jason Sams02fb2cb2009-05-28 15:37:57 -07001109}
1110
Jason Samsbba134c2009-06-22 15:49:21 -07001111// ---------------------------------------------------------------------------
1112
Jason Samsbba134c2009-06-22 15:49:21 -07001113static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001114nMeshCreate(JNIEnv *_env, jobject _this, RsContext con, jint vtxCount, jint idxCount)
Jason Samsbba134c2009-06-22 15:49:21 -07001115{
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001116 LOG_API("nMeshCreate, con(%p), vtxCount(%i), idxCount(%i)", con, vtxCount, idxCount);
1117 int id = (int)rsMeshCreate(con, vtxCount, idxCount);
1118 return id;
1119}
1120
1121static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001122nMeshBindVertex(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jint alloc, jint slot)
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001123{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001124 LOG_API("nMeshBindVertex, con(%p), Mesh(%p), Alloc(%p), slot(%i)", con, (RsMesh)mesh, (RsAllocation)alloc, slot);
1125 rsMeshBindVertex(con, (RsMesh)mesh, (RsAllocation)alloc, slot);
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001126}
1127
1128static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001129nMeshBindIndex(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jint alloc, jint primID, jint slot)
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001130{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001131 LOG_API("nMeshBindIndex, con(%p), Mesh(%p), Alloc(%p)", con, (RsMesh)mesh, (RsAllocation)alloc);
1132 rsMeshBindIndex(con, (RsMesh)mesh, (RsAllocation)alloc, primID, slot);
1133}
1134
Alex Sakhartchouk9d71e212010-11-08 15:10:52 -08001135static void
1136nMeshInitVertexAttribs(JNIEnv *_env, jobject _this, RsContext con, jint mesh)
1137{
1138 LOG_API("nMeshInitVertexAttribs, con(%p), Mesh(%p)", con, (RsMesh)mesh);
1139 rsMeshInitVertexAttribs(con, (RsMesh)mesh);
1140}
1141
1142
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001143static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001144nMeshGetVertexBufferCount(JNIEnv *_env, jobject _this, RsContext con, jint mesh)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001145{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001146 LOG_API("nMeshGetVertexBufferCount, con(%p), Mesh(%p)", con, (RsMesh)mesh);
1147 jint vtxCount = 0;
Alex Sakhartchouk581cc642010-10-27 14:10:07 -07001148 rsaMeshGetVertexBufferCount(con, (RsMesh)mesh, &vtxCount);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001149 return vtxCount;
1150}
1151
1152static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001153nMeshGetIndexCount(JNIEnv *_env, jobject _this, RsContext con, jint mesh)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001154{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001155 LOG_API("nMeshGetIndexCount, con(%p), Mesh(%p)", con, (RsMesh)mesh);
1156 jint idxCount = 0;
Alex Sakhartchouk581cc642010-10-27 14:10:07 -07001157 rsaMeshGetIndexCount(con, (RsMesh)mesh, &idxCount);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001158 return idxCount;
1159}
1160
1161static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001162nMeshGetVertices(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jintArray _ids, int numVtxIDs)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001163{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001164 LOG_API("nMeshGetVertices, con(%p), Mesh(%p)", con, (RsMesh)mesh);
1165
1166 RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numVtxIDs * sizeof(RsAllocation));
Alex Sakhartchouk581cc642010-10-27 14:10:07 -07001167 rsaMeshGetVertices(con, (RsMesh)mesh, allocs, (uint32_t)numVtxIDs);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001168
1169 for(jint i = 0; i < numVtxIDs; i ++) {
1170 _env->SetIntArrayRegion(_ids, i, 1, (const jint*)&allocs[i]);
1171 }
1172
1173 free(allocs);
1174}
1175
1176static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001177nMeshGetIndices(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jintArray _idxIds, jintArray _primitives, int numIndices)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001178{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001179 LOG_API("nMeshGetVertices, con(%p), Mesh(%p)", con, (RsMesh)mesh);
1180
1181 RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numIndices * sizeof(RsAllocation));
1182 uint32_t *prims= (uint32_t*)malloc((uint32_t)numIndices * sizeof(uint32_t));
1183
Alex Sakhartchouk581cc642010-10-27 14:10:07 -07001184 rsaMeshGetIndices(con, (RsMesh)mesh, allocs, prims, (uint32_t)numIndices);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001185
1186 for(jint i = 0; i < numIndices; i ++) {
1187 _env->SetIntArrayRegion(_idxIds, i, 1, (const jint*)&allocs[i]);
1188 _env->SetIntArrayRegion(_primitives, i, 1, (const jint*)&prims[i]);
1189 }
1190
1191 free(allocs);
1192 free(prims);
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001193}
1194
1195// ---------------------------------------------------------------------------
1196
Jason Samsd19f10d2009-05-22 14:03:28 -07001197
Jason Sams94d8e90a2009-06-10 16:09:05 -07001198static const char *classPathName = "android/renderscript/RenderScript";
Jason Samsd19f10d2009-05-22 14:03:28 -07001199
1200static JNINativeMethod methods[] = {
Jason Sams1c415172010-11-08 17:06:46 -08001201{"_nInit", "()V", (void*)_nInit },
Jason Samsea84a7c2009-09-04 14:42:41 -07001202
Jason Sams1c415172010-11-08 17:06:46 -08001203{"nDeviceCreate", "()I", (void*)nDeviceCreate },
1204{"nDeviceDestroy", "(I)V", (void*)nDeviceDestroy },
1205{"nDeviceSetConfig", "(III)V", (void*)nDeviceSetConfig },
1206{"nContextGetUserMessage", "(I[I)V", (void*)nContextGetUserMessage },
1207{"nContextGetErrorMessage", "(I)Ljava/lang/String;", (void*)nContextGetErrorMessage },
1208{"nContextPeekMessage", "(I[IZ)I", (void*)nContextPeekMessage },
1209
1210{"nContextInitToClient", "(I)V", (void*)nContextInitToClient },
1211{"nContextDeinitToClient", "(I)V", (void*)nContextDeinitToClient },
Jason Samsd19f10d2009-05-22 14:03:28 -07001212
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -07001213
Jason Sams2e1872f2010-08-17 16:25:41 -07001214// All methods below are thread protected in java.
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001215{"rsnContextCreate", "(II)I", (void*)nContextCreate },
Jason Sams11c8af92010-10-13 15:31:10 -07001216{"rsnContextCreateGL", "(IIIIIIIIIIIIF)I", (void*)nContextCreateGL },
Jason Sams2e1872f2010-08-17 16:25:41 -07001217{"rsnContextFinish", "(I)V", (void*)nContextFinish },
1218{"rsnContextSetPriority", "(II)V", (void*)nContextSetPriority },
1219{"rsnContextSetSurface", "(IIILandroid/view/Surface;)V", (void*)nContextSetSurface },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001220{"rsnContextDestroy", "(I)V", (void*)nContextDestroy },
Jason Sams2e1872f2010-08-17 16:25:41 -07001221{"rsnContextDump", "(II)V", (void*)nContextDump },
1222{"rsnContextPause", "(I)V", (void*)nContextPause },
1223{"rsnContextResume", "(I)V", (void*)nContextResume },
1224{"rsnAssignName", "(II[B)V", (void*)nAssignName },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001225{"rsnGetName", "(II)Ljava/lang/String;", (void*)nGetName },
Jason Sams2e1872f2010-08-17 16:25:41 -07001226{"rsnObjDestroy", "(II)V", (void*)nObjDestroy },
Jason Sams64676f32009-07-08 18:01:53 -07001227
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -08001228{"rsnFileA3DCreateFromFile", "(ILjava/lang/String;)I", (void*)nFileA3DCreateFromFile },
Jason Sams2e1872f2010-08-17 16:25:41 -07001229{"rsnFileA3DCreateFromAssetStream", "(II)I", (void*)nFileA3DCreateFromAssetStream },
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -08001230{"rsnFileA3DCreateFromAsset", "(ILandroid/content/res/AssetManager;Ljava/lang/String;)I", (void*)nFileA3DCreateFromAsset },
Jason Sams2e1872f2010-08-17 16:25:41 -07001231{"rsnFileA3DGetNumIndexEntries", "(II)I", (void*)nFileA3DGetNumIndexEntries },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001232{"rsnFileA3DGetIndexEntries", "(III[I[Ljava/lang/String;)V", (void*)nFileA3DGetIndexEntries },
Jason Sams2e1872f2010-08-17 16:25:41 -07001233{"rsnFileA3DGetEntryByIndex", "(III)I", (void*)nFileA3DGetEntryByIndex },
Jason Samsd19f10d2009-05-22 14:03:28 -07001234
Alex Sakhartchouke27cdee2010-12-17 11:41:08 -08001235{"rsnFontCreateFromFile", "(ILjava/lang/String;FI)I", (void*)nFontCreateFromFile },
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -08001236{"rsnFontCreateFromAssetStream", "(ILjava/lang/String;FII)I", (void*)nFontCreateFromAssetStream },
1237{"rsnFontCreateFromAsset", "(ILandroid/content/res/AssetManager;Ljava/lang/String;FI)I", (void*)nFontCreateFromAsset },
Jason Samsd19f10d2009-05-22 14:03:28 -07001238
Jason Sams2e1872f2010-08-17 16:25:41 -07001239{"rsnElementCreate", "(IIIZI)I", (void*)nElementCreate },
Jason Sams70d4e502010-09-02 17:35:23 -07001240{"rsnElementCreate2", "(I[I[Ljava/lang/String;[I)I", (void*)nElementCreate2 },
Jason Sams2e1872f2010-08-17 16:25:41 -07001241{"rsnElementGetNativeData", "(II[I)V", (void*)nElementGetNativeData },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001242{"rsnElementGetSubElements", "(II[I[Ljava/lang/String;)V", (void*)nElementGetSubElements },
Jason Samsd19f10d2009-05-22 14:03:28 -07001243
Jason Samsbf6ef8d72010-12-06 15:59:59 -08001244{"rsnTypeCreate", "(IIIIIZZ)I", (void*)nTypeCreate },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001245{"rsnTypeGetNativeData", "(II[I)V", (void*)nTypeGetNativeData },
Jason Samsd19f10d2009-05-22 14:03:28 -07001246
Jason Samsd4b23b52010-12-13 15:32:35 -08001247{"rsnAllocationCreateTyped", "(IIII)I", (void*)nAllocationCreateTyped },
Jason Sams5476b452010-12-08 16:14:36 -08001248{"rsnAllocationCreateFromBitmap", "(IIILandroid/graphics/Bitmap;I)I", (void*)nAllocationCreateFromBitmap },
1249{"rsnAllocationCubeCreateFromBitmap","(IIILandroid/graphics/Bitmap;I)I", (void*)nAllocationCubeCreateFromBitmap },
Jason Sams5476b452010-12-08 16:14:36 -08001250
Jason Sams4ef66502010-12-10 16:03:15 -08001251{"rsnAllocationCopyFromBitmap", "(IILandroid/graphics/Bitmap;)V", (void*)nAllocationCopyFromBitmap },
1252{"rsnAllocationCopyToBitmap", "(IILandroid/graphics/Bitmap;)V", (void*)nAllocationCopyToBitmap },
1253
Jason Sams5476b452010-12-08 16:14:36 -08001254{"rsnAllocationSyncAll", "(III)V", (void*)nAllocationSyncAll },
Jason Sams49a05d72010-12-29 14:31:29 -08001255{"rsnAllocationData1D", "(IIIII[II)V", (void*)nAllocationData1D_i },
1256{"rsnAllocationData1D", "(IIIII[SI)V", (void*)nAllocationData1D_s },
1257{"rsnAllocationData1D", "(IIIII[BI)V", (void*)nAllocationData1D_b },
1258{"rsnAllocationData1D", "(IIIII[FI)V", (void*)nAllocationData1D_f },
1259{"rsnAllocationElementData1D", "(IIIII[BI)V", (void*)nAllocationElementData1D },
1260{"rsnAllocationData2D", "(IIIIIIII[II)V", (void*)nAllocationData2D_i },
Jason Samsfb9f82c2011-01-12 14:53:25 -08001261{"rsnAllocationData2D", "(IIIIIIII[SI)V", (void*)nAllocationData2D_s },
1262{"rsnAllocationData2D", "(IIIIIIII[BI)V", (void*)nAllocationData2D_b },
Jason Sams49a05d72010-12-29 14:31:29 -08001263{"rsnAllocationData2D", "(IIIIIIII[FI)V", (void*)nAllocationData2D_f },
Jason Sams2e1872f2010-08-17 16:25:41 -07001264{"rsnAllocationRead", "(II[I)V", (void*)nAllocationRead_i },
Jason Samsfb9f82c2011-01-12 14:53:25 -08001265{"rsnAllocationRead", "(II[S)V", (void*)nAllocationRead_s },
1266{"rsnAllocationRead", "(II[B)V", (void*)nAllocationRead_b },
Jason Sams2e1872f2010-08-17 16:25:41 -07001267{"rsnAllocationRead", "(II[F)V", (void*)nAllocationRead_f },
Jason Sams2e1872f2010-08-17 16:25:41 -07001268{"rsnAllocationGetType", "(II)I", (void*)nAllocationGetType},
Jason Sams5edc6082010-10-05 13:32:49 -07001269{"rsnAllocationResize1D", "(III)V", (void*)nAllocationResize1D },
1270{"rsnAllocationResize2D", "(IIII)V", (void*)nAllocationResize2D },
Jason Samsf7086092011-01-12 13:28:37 -08001271{"rsnAllocationGenerateMipmaps", "(II)V", (void*)nAllocationGenerateMipmaps },
Jason Samsbd1c3ad2009-08-03 16:03:08 -07001272
Jason Sams2e1872f2010-08-17 16:25:41 -07001273{"rsnScriptBindAllocation", "(IIII)V", (void*)nScriptBindAllocation },
1274{"rsnScriptSetTimeZone", "(II[B)V", (void*)nScriptSetTimeZone },
1275{"rsnScriptInvoke", "(III)V", (void*)nScriptInvoke },
1276{"rsnScriptInvokeV", "(III[B)V", (void*)nScriptInvokeV },
1277{"rsnScriptSetVarI", "(IIII)V", (void*)nScriptSetVarI },
Stephen Hines031ec58c2010-10-11 10:54:21 -07001278{"rsnScriptSetVarJ", "(IIIJ)V", (void*)nScriptSetVarJ },
Jason Sams2e1872f2010-08-17 16:25:41 -07001279{"rsnScriptSetVarF", "(IIIF)V", (void*)nScriptSetVarF },
Stephen Hinesca54ec32010-09-20 17:20:30 -07001280{"rsnScriptSetVarD", "(IIID)V", (void*)nScriptSetVarD },
Jason Sams2e1872f2010-08-17 16:25:41 -07001281{"rsnScriptSetVarV", "(III[B)V", (void*)nScriptSetVarV },
Jason Sams6f4cf0b2010-11-16 17:37:02 -08001282{"rsnScriptSetVarObj", "(IIII)V", (void*)nScriptSetVarObj },
Jason Samsd19f10d2009-05-22 14:03:28 -07001283
Jason Sams2e1872f2010-08-17 16:25:41 -07001284{"rsnScriptCBegin", "(I)V", (void*)nScriptCBegin },
1285{"rsnScriptCSetScript", "(I[BII)V", (void*)nScriptCSetScript },
Shih-wei Liaoeeca4352010-12-20 20:45:56 +08001286{"rsnScriptCCreate", "(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)I", (void*)nScriptCCreate },
Jason Sams0011bcf2009-12-15 12:58:36 -08001287
Jason Sams2e1872f2010-08-17 16:25:41 -07001288{"rsnProgramStoreBegin", "(III)V", (void*)nProgramStoreBegin },
1289{"rsnProgramStoreDepthFunc", "(II)V", (void*)nProgramStoreDepthFunc },
1290{"rsnProgramStoreDepthMask", "(IZ)V", (void*)nProgramStoreDepthMask },
1291{"rsnProgramStoreColorMask", "(IZZZZ)V", (void*)nProgramStoreColorMask },
1292{"rsnProgramStoreBlendFunc", "(III)V", (void*)nProgramStoreBlendFunc },
1293{"rsnProgramStoreDither", "(IZ)V", (void*)nProgramStoreDither },
1294{"rsnProgramStoreCreate", "(I)I", (void*)nProgramStoreCreate },
Jason Samsd19f10d2009-05-22 14:03:28 -07001295
Jason Sams2e1872f2010-08-17 16:25:41 -07001296{"rsnProgramBindConstants", "(IIII)V", (void*)nProgramBindConstants },
1297{"rsnProgramBindTexture", "(IIII)V", (void*)nProgramBindTexture },
1298{"rsnProgramBindSampler", "(IIII)V", (void*)nProgramBindSampler },
Jason Samsebfb4362009-09-23 13:57:02 -07001299
Jason Sams49a05d72010-12-29 14:31:29 -08001300{"rsnProgramFragmentCreate", "(ILjava/lang/String;[I)I", (void*)nProgramFragmentCreate },
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001301
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001302{"rsnProgramRasterCreate", "(IZZZ)I", (void*)nProgramRasterCreate },
Jason Sams2e1872f2010-08-17 16:25:41 -07001303{"rsnProgramRasterSetLineWidth", "(IIF)V", (void*)nProgramRasterSetLineWidth },
1304{"rsnProgramRasterSetCullMode", "(III)V", (void*)nProgramRasterSetCullMode },
Jason Samsbba134c2009-06-22 15:49:21 -07001305
Jason Sams49a05d72010-12-29 14:31:29 -08001306{"rsnProgramVertexCreate", "(ILjava/lang/String;[I)I", (void*)nProgramVertexCreate },
Jason Samsd19f10d2009-05-22 14:03:28 -07001307
Jason Sams2e1872f2010-08-17 16:25:41 -07001308{"rsnContextBindRootScript", "(II)V", (void*)nContextBindRootScript },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001309{"rsnContextBindProgramStore", "(II)V", (void*)nContextBindProgramStore },
Jason Sams2e1872f2010-08-17 16:25:41 -07001310{"rsnContextBindProgramFragment", "(II)V", (void*)nContextBindProgramFragment },
1311{"rsnContextBindProgramVertex", "(II)V", (void*)nContextBindProgramVertex },
1312{"rsnContextBindProgramRaster", "(II)V", (void*)nContextBindProgramRaster },
Jason Sams02fb2cb2009-05-28 15:37:57 -07001313
Jason Sams2e1872f2010-08-17 16:25:41 -07001314{"rsnSamplerBegin", "(I)V", (void*)nSamplerBegin },
1315{"rsnSamplerSet", "(III)V", (void*)nSamplerSet },
Alex Sakhartchoukf5b35102010-09-30 11:36:37 -07001316{"rsnSamplerSet2", "(IIF)V", (void*)nSamplerSet2 },
Jason Sams2e1872f2010-08-17 16:25:41 -07001317{"rsnSamplerCreate", "(I)I", (void*)nSamplerCreate },
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001318
Jason Sams2e1872f2010-08-17 16:25:41 -07001319{"rsnMeshCreate", "(III)I", (void*)nMeshCreate },
1320{"rsnMeshBindVertex", "(IIII)V", (void*)nMeshBindVertex },
1321{"rsnMeshBindIndex", "(IIIII)V", (void*)nMeshBindIndex },
Alex Sakhartchouk9d71e212010-11-08 15:10:52 -08001322{"rsnMeshInitVertexAttribs", "(II)V", (void*)nMeshInitVertexAttribs },
Jason Sams2e1872f2010-08-17 16:25:41 -07001323
1324{"rsnMeshGetVertexBufferCount", "(II)I", (void*)nMeshGetVertexBufferCount },
1325{"rsnMeshGetIndexCount", "(II)I", (void*)nMeshGetIndexCount },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001326{"rsnMeshGetVertices", "(II[II)V", (void*)nMeshGetVertices },
Jason Sams2e1872f2010-08-17 16:25:41 -07001327{"rsnMeshGetIndices", "(II[I[II)V", (void*)nMeshGetIndices },
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001328
Jason Samsd19f10d2009-05-22 14:03:28 -07001329};
1330
1331static int registerFuncs(JNIEnv *_env)
1332{
1333 return android::AndroidRuntime::registerNativeMethods(
1334 _env, classPathName, methods, NELEM(methods));
1335}
1336
1337// ---------------------------------------------------------------------------
1338
1339jint JNI_OnLoad(JavaVM* vm, void* reserved)
1340{
1341 JNIEnv* env = NULL;
1342 jint result = -1;
1343
Jason Samsd19f10d2009-05-22 14:03:28 -07001344 if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
1345 LOGE("ERROR: GetEnv failed\n");
1346 goto bail;
1347 }
1348 assert(env != NULL);
1349
1350 if (registerFuncs(env) < 0) {
1351 LOGE("ERROR: MediaPlayer native registration failed\n");
1352 goto bail;
1353 }
1354
1355 /* success -- return valid version number */
1356 result = JNI_VERSION_1_4;
1357
1358bail:
1359 return result;
1360}