blob: 6a1a319ea80c1ac56453f47df707333c39b90f69 [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>
35#include <utils/ResourceTypes.h>
Jason Samsf29ca502009-06-23 12:22:47 -070036
Jason Samsd19f10d2009-05-22 14:03:28 -070037#include "jni.h"
38#include "JNIHelp.h"
39#include "android_runtime/AndroidRuntime.h"
Jim Milleree956052010-08-19 18:56:00 -070040#include "android_runtime/android_view_Surface.h"
Jason Samsd19f10d2009-05-22 14:03:28 -070041
Jason Samse29d4712009-07-23 15:19:03 -070042#include <RenderScript.h>
43#include <RenderScriptEnv.h>
Jason Samsd19f10d2009-05-22 14:03:28 -070044
45//#define LOG_API LOGE
46#define LOG_API(...)
47
48using namespace android;
49
Jason Samsd19f10d2009-05-22 14:03:28 -070050// ---------------------------------------------------------------------------
51
52static void doThrow(JNIEnv* env, const char* exc, const char* msg = NULL)
53{
54 jclass npeClazz = env->FindClass(exc);
55 env->ThrowNew(npeClazz, msg);
56}
57
Jason Samsffe9f482009-06-01 17:45:53 -070058static jfieldID gContextId = 0;
59static jfieldID gNativeBitmapID = 0;
Jason Sams43ee06852009-08-12 17:54:11 -070060static jfieldID gTypeNativeCache = 0;
Jason Samsd19f10d2009-05-22 14:03:28 -070061
Jason Samsea84a7c2009-09-04 14:42:41 -070062static RsElement g_A_8 = NULL;
63static RsElement g_RGBA_4444 = NULL;
64static RsElement g_RGBA_8888 = NULL;
65static RsElement g_RGB_565 = NULL;
66
Jason Samsd19f10d2009-05-22 14:03:28 -070067static void _nInit(JNIEnv *_env, jclass _this)
68{
Jason Samsd19f10d2009-05-22 14:03:28 -070069 gContextId = _env->GetFieldID(_this, "mContext", "I");
Jason Samsffe9f482009-06-01 17:45:53 -070070
71 jclass bitmapClass = _env->FindClass("android/graphics/Bitmap");
72 gNativeBitmapID = _env->GetFieldID(bitmapClass, "mNativeBitmap", "I");
Jason Samsd19f10d2009-05-22 14:03:28 -070073}
74
Jason Samsea84a7c2009-09-04 14:42:41 -070075static void nInitElements(JNIEnv *_env, jobject _this, jint a8, jint rgba4444, jint rgba8888, jint rgb565)
76{
77 g_A_8 = reinterpret_cast<RsElement>(a8);
78 g_RGBA_4444 = reinterpret_cast<RsElement>(rgba4444);
79 g_RGBA_8888 = reinterpret_cast<RsElement>(rgba8888);
80 g_RGB_565 = reinterpret_cast<RsElement>(rgb565);
81}
Jason Samsd19f10d2009-05-22 14:03:28 -070082
83// ---------------------------------------------------------------------------
84
Jason Sams3eaa338e2009-06-10 15:04:38 -070085static void
Jason Sams2e1872f2010-08-17 16:25:41 -070086nContextFinish(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams96ed4cf2010-06-15 12:15:57 -070087{
Jason Sams96ed4cf2010-06-15 12:15:57 -070088 LOG_API("nContextFinish, con(%p)", con);
89 rsContextFinish(con);
90}
91
92static void
Jason Sams2e1872f2010-08-17 16:25:41 -070093nAssignName(JNIEnv *_env, jobject _this, RsContext con, jint obj, jbyteArray str)
Jason Sams3eaa338e2009-06-10 15:04:38 -070094{
Jason Sams07ae4062009-08-27 20:23:34 -070095 LOG_API("nAssignName, con(%p), obj(%p)", con, (void *)obj);
Jason Sams3eaa338e2009-06-10 15:04:38 -070096 jint len = _env->GetArrayLength(str);
97 jbyte * cptr = (jbyte *) _env->GetPrimitiveArrayCritical(str, 0);
Jason Samsbc948de2009-08-17 18:35:48 -070098 rsAssignName(con, (void *)obj, (const char *)cptr, len);
Jason Sams3eaa338e2009-06-10 15:04:38 -070099 _env->ReleasePrimitiveArrayCritical(str, cptr, JNI_ABORT);
100}
101
Alex Sakhartchoukfb10c162010-08-04 14:45:48 -0700102static jstring
Jason Sams2e1872f2010-08-17 16:25:41 -0700103nGetName(JNIEnv *_env, jobject _this, RsContext con, jint obj)
Alex Sakhartchoukfb10c162010-08-04 14:45:48 -0700104{
Alex Sakhartchoukfb10c162010-08-04 14:45:48 -0700105 LOG_API("nGetName, con(%p), obj(%p)", con, (void *)obj);
Alex Sakhartchoukfb10c162010-08-04 14:45:48 -0700106 const char *name = NULL;
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700107 rsaGetName(con, (void *)obj, &name);
108 if(name == NULL || strlen(name) == 0) {
109 return NULL;
110 }
Alex Sakhartchoukfb10c162010-08-04 14:45:48 -0700111 return _env->NewStringUTF(name);
112}
113
Jason Sams7ce033d2009-08-18 14:14:24 -0700114static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700115nObjDestroy(JNIEnv *_env, jobject _this, RsContext con, jint obj)
Jason Sams7ce033d2009-08-18 14:14:24 -0700116{
Jason Sams7ce033d2009-08-18 14:14:24 -0700117 LOG_API("nObjDestroy, con(%p) obj(%p)", con, (void *)obj);
Jason Sams9c25aee2010-10-14 17:57:30 -0700118 rsObjDestroy(con, (void *)obj);
Jason Sams7ce033d2009-08-18 14:14:24 -0700119}
120
Jason Sams3eaa338e2009-06-10 15:04:38 -0700121// ---------------------------------------------------------------------------
122
Jason Samsd19f10d2009-05-22 14:03:28 -0700123static jint
124nDeviceCreate(JNIEnv *_env, jobject _this)
125{
126 LOG_API("nDeviceCreate");
127 return (jint)rsDeviceCreate();
128}
129
130static void
131nDeviceDestroy(JNIEnv *_env, jobject _this, jint dev)
132{
133 LOG_API("nDeviceDestroy");
134 return rsDeviceDestroy((RsDevice)dev);
135}
136
Jason Samsebfb4362009-09-23 13:57:02 -0700137static void
138nDeviceSetConfig(JNIEnv *_env, jobject _this, jint dev, jint p, jint value)
139{
140 LOG_API("nDeviceSetConfig dev(%p), param(%i), value(%i)", (void *)dev, p, value);
141 return rsDeviceSetConfig((RsDevice)dev, (RsDeviceParam)p, value);
142}
143
Jason Samsd19f10d2009-05-22 14:03:28 -0700144static jint
Jason Sams704ff642010-02-09 16:05:07 -0800145nContextCreate(JNIEnv *_env, jobject _this, jint dev, jint ver)
Jason Samsd19f10d2009-05-22 14:03:28 -0700146{
147 LOG_API("nContextCreate");
Jason Sams704ff642010-02-09 16:05:07 -0800148 return (jint)rsContextCreate((RsDevice)dev, ver);
149}
150
151static jint
Jason Sams11c8af92010-10-13 15:31:10 -0700152nContextCreateGL(JNIEnv *_env, jobject _this, jint dev, jint ver,
153 int colorMin, int colorPref,
154 int alphaMin, int alphaPref,
155 int depthMin, int depthPref,
156 int stencilMin, int stencilPref,
157 int samplesMin, int samplesPref, float samplesQ)
Jason Sams704ff642010-02-09 16:05:07 -0800158{
Jason Sams11c8af92010-10-13 15:31:10 -0700159 RsSurfaceConfig sc;
160 sc.alphaMin = alphaMin;
161 sc.alphaPref = alphaPref;
162 sc.colorMin = colorMin;
163 sc.colorPref = colorPref;
164 sc.depthMin = depthMin;
165 sc.depthPref = depthPref;
166 sc.samplesMin = samplesMin;
167 sc.samplesPref = samplesPref;
168 sc.samplesQ = samplesQ;
169
Jason Sams704ff642010-02-09 16:05:07 -0800170 LOG_API("nContextCreateGL");
Jason Sams11c8af92010-10-13 15:31:10 -0700171 return (jint)rsContextCreateGL((RsDevice)dev, ver, sc);
Jason Samsd19f10d2009-05-22 14:03:28 -0700172}
173
174static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700175nContextSetPriority(JNIEnv *_env, jobject _this, RsContext con, jint p)
Jason Sams7d787b42009-11-15 12:14:26 -0800176{
Jason Sams7d787b42009-11-15 12:14:26 -0800177 LOG_API("ContextSetPriority, con(%p), priority(%i)", con, p);
178 rsContextSetPriority(con, p);
179}
180
181
182
183static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700184nContextSetSurface(JNIEnv *_env, jobject _this, RsContext con, jint width, jint height, jobject wnd)
Jason Samsefd9b6fb2009-11-03 13:58:36 -0800185{
Jason Sams3bc47d42009-11-12 15:10:25 -0800186 LOG_API("nContextSetSurface, con(%p), width(%i), height(%i), surface(%p)", con, width, height, (Surface *)wnd);
Jason Samsefd9b6fb2009-11-03 13:58:36 -0800187
188 Surface * window = NULL;
189 if (wnd == NULL) {
190
191 } else {
Jim Milleree956052010-08-19 18:56:00 -0700192 window = (Surface*) android_Surface_getNativeWindow(_env, wnd).get();
Jason Samsefd9b6fb2009-11-03 13:58:36 -0800193 }
194
Jason Sams3bc47d42009-11-12 15:10:25 -0800195 rsContextSetSurface(con, width, height, window);
Jason Samsefd9b6fb2009-11-03 13:58:36 -0800196}
197
198static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700199nContextDestroy(JNIEnv *_env, jobject _this, RsContext con)
Jason Samsd19f10d2009-05-22 14:03:28 -0700200{
Jason Sams2e1872f2010-08-17 16:25:41 -0700201 LOG_API("nContextDestroy, con(%p)", con);
202 rsContextDestroy(con);
Jason Samsd19f10d2009-05-22 14:03:28 -0700203}
204
Jason Sams715333b2009-11-17 17:26:46 -0800205static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700206nContextDump(JNIEnv *_env, jobject _this, RsContext con, jint bits)
Jason Sams715333b2009-11-17 17:26:46 -0800207{
Jason Sams715333b2009-11-17 17:26:46 -0800208 LOG_API("nContextDump, con(%p) bits(%i)", (RsContext)con, bits);
209 rsContextDump((RsContext)con, bits);
210}
Jason Samsd19f10d2009-05-22 14:03:28 -0700211
212static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700213nContextPause(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams65e7aa52009-09-24 17:38:20 -0700214{
Jason Sams65e7aa52009-09-24 17:38:20 -0700215 LOG_API("nContextPause, con(%p)", con);
216 rsContextPause(con);
217}
218
219static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700220nContextResume(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams65e7aa52009-09-24 17:38:20 -0700221{
Jason Sams65e7aa52009-09-24 17:38:20 -0700222 LOG_API("nContextResume, con(%p)", con);
223 rsContextResume(con);
224}
225
Jason Sams1c415172010-11-08 17:06:46 -0800226
227static jstring
228nContextGetErrorMessage(JNIEnv *_env, jobject _this, RsContext con)
229{
230 LOG_API("nContextGetErrorMessage, con(%p)", con);
231 char buf[1024];
232
233 size_t receiveLen;
234 uint32_t subID;
235 int id = rsContextGetMessage(con, buf, &receiveLen, &subID, sizeof(buf), true);
236 if (!id && receiveLen) {
237 LOGV("message receive buffer too small. %i", receiveLen);
238 }
239 return _env->NewStringUTF(buf);
240}
241
242static void
243nContextGetUserMessage(JNIEnv *_env, jobject _this, RsContext con, jintArray data)
Jason Sams516c3192009-10-06 13:58:47 -0700244{
Jason Sams516c3192009-10-06 13:58:47 -0700245 jint len = _env->GetArrayLength(data);
246 LOG_API("nContextGetMessage, con(%p), len(%i)", con, len);
247 jint *ptr = _env->GetIntArrayElements(data, NULL);
248 size_t receiveLen;
Jason Sams1c415172010-11-08 17:06:46 -0800249 uint32_t subID;
250 int id = rsContextGetMessage(con, ptr, &receiveLen, &subID, len * 4, true);
Jason Sams516c3192009-10-06 13:58:47 -0700251 if (!id && receiveLen) {
Jason Sams1d45c472010-08-25 14:31:48 -0700252 LOGV("message receive buffer too small. %i", receiveLen);
Jason Sams516c3192009-10-06 13:58:47 -0700253 }
254 _env->ReleaseIntArrayElements(data, ptr, 0);
Jason Sams1c415172010-11-08 17:06:46 -0800255}
256
257static jint
258nContextPeekMessage(JNIEnv *_env, jobject _this, RsContext con, jintArray auxData, jboolean wait)
259{
260 LOG_API("nContextPeekMessage, con(%p)", con);
261 jint *auxDataPtr = _env->GetIntArrayElements(auxData, NULL);
262 size_t receiveLen;
263 uint32_t subID;
264 int id = rsContextPeekMessage(con, &receiveLen, &subID, wait);
265 auxDataPtr[0] = (jint)subID;
266 auxDataPtr[1] = (jint)receiveLen;
267 _env->ReleaseIntArrayElements(auxData, auxDataPtr, 0);
Jason Sams516c3192009-10-06 13:58:47 -0700268 return id;
269}
270
Jason Sams2e1872f2010-08-17 16:25:41 -0700271static void nContextInitToClient(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams516c3192009-10-06 13:58:47 -0700272{
Jason Sams516c3192009-10-06 13:58:47 -0700273 LOG_API("nContextInitToClient, con(%p)", con);
274 rsContextInitToClient(con);
275}
276
Jason Sams2e1872f2010-08-17 16:25:41 -0700277static void nContextDeinitToClient(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams516c3192009-10-06 13:58:47 -0700278{
Jason Sams516c3192009-10-06 13:58:47 -0700279 LOG_API("nContextDeinitToClient, con(%p)", con);
280 rsContextDeinitToClient(con);
281}
282
283
Jason Sams718cd1f2009-12-23 14:35:29 -0800284static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700285nElementCreate(JNIEnv *_env, jobject _this, RsContext con, jint type, jint kind, jboolean norm, jint size)
Jason Samsd19f10d2009-05-22 14:03:28 -0700286{
Jason Sams718cd1f2009-12-23 14:35:29 -0800287 LOG_API("nElementCreate, con(%p), type(%i), kind(%i), norm(%i), size(%i)", con, type, kind, norm, size);
288 return (jint)rsElementCreate(con, (RsDataType)type, (RsDataKind)kind, norm, size);
Jason Samsd19f10d2009-05-22 14:03:28 -0700289}
290
291static jint
Jason Sams70d4e502010-09-02 17:35:23 -0700292nElementCreate2(JNIEnv *_env, jobject _this, RsContext con, jintArray _ids, jobjectArray _names, jintArray _arraySizes)
Jason Samsd19f10d2009-05-22 14:03:28 -0700293{
Jason Sams718cd1f2009-12-23 14:35:29 -0800294 int fieldCount = _env->GetArrayLength(_ids);
Jason Sams704ff642010-02-09 16:05:07 -0800295 LOG_API("nElementCreate2, con(%p)", con);
Jason Sams718cd1f2009-12-23 14:35:29 -0800296
297 jint *ids = _env->GetIntArrayElements(_ids, NULL);
Jason Sams70d4e502010-09-02 17:35:23 -0700298 jint *arraySizes = _env->GetIntArrayElements(_arraySizes, NULL);
Jason Sams718cd1f2009-12-23 14:35:29 -0800299 const char ** nameArray = (const char **)calloc(fieldCount, sizeof(char *));
300 size_t* sizeArray = (size_t*)calloc(fieldCount, sizeof(size_t));
301
302 for (int ct=0; ct < fieldCount; ct++) {
303 jstring s = (jstring)_env->GetObjectArrayElement(_names, ct);
304 nameArray[ct] = _env->GetStringUTFChars(s, NULL);
305 sizeArray[ct] = _env->GetStringUTFLength(s);
306 }
Jason Sams70d4e502010-09-02 17:35:23 -0700307 jint id = (jint)rsElementCreate2(con, fieldCount, (RsElement *)ids, nameArray, sizeArray, (const uint32_t *)arraySizes);
Jason Sams718cd1f2009-12-23 14:35:29 -0800308 for (int ct=0; ct < fieldCount; ct++) {
309 jstring s = (jstring)_env->GetObjectArrayElement(_names, ct);
310 _env->ReleaseStringUTFChars(s, nameArray[ct]);
311 }
312 _env->ReleaseIntArrayElements(_ids, ids, JNI_ABORT);
Jason Sams70d4e502010-09-02 17:35:23 -0700313 _env->ReleaseIntArrayElements(_arraySizes, arraySizes, JNI_ABORT);
Jason Sams718cd1f2009-12-23 14:35:29 -0800314 free(nameArray);
315 free(sizeArray);
316 return (jint)id;
Jason Samsd19f10d2009-05-22 14:03:28 -0700317}
318
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700319static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700320nElementGetNativeData(JNIEnv *_env, jobject _this, RsContext con, jint id, jintArray _elementData)
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700321{
322 int dataSize = _env->GetArrayLength(_elementData);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700323 LOG_API("nElementGetNativeData, con(%p)", con);
324
325 // we will pack mType; mKind; mNormalized; mVectorSize; NumSubElements
326 assert(dataSize == 5);
327
328 uint32_t elementData[5];
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700329 rsaElementGetNativeData(con, (RsElement)id, elementData, dataSize);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700330
331 for(jint i = 0; i < dataSize; i ++) {
332 _env->SetIntArrayRegion(_elementData, i, 1, (const jint*)&elementData[i]);
333 }
334}
335
336
337static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700338nElementGetSubElements(JNIEnv *_env, jobject _this, RsContext con, jint id, jintArray _IDs, jobjectArray _names)
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700339{
340 int dataSize = _env->GetArrayLength(_IDs);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700341 LOG_API("nElementGetSubElements, con(%p)", con);
342
343 uint32_t *ids = (uint32_t *)malloc((uint32_t)dataSize * sizeof(uint32_t));
344 const char **names = (const char **)malloc((uint32_t)dataSize * sizeof(const char *));
345
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700346 rsaElementGetSubElements(con, (RsElement)id, ids, names, (uint32_t)dataSize);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700347
Jason Sams11c8af92010-10-13 15:31:10 -0700348 for(jint i = 0; i < dataSize; i++) {
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700349 _env->SetObjectArrayElement(_names, i, _env->NewStringUTF(names[i]));
350 _env->SetIntArrayRegion(_IDs, i, 1, (const jint*)&ids[i]);
351 }
352
353 free(ids);
354 free(names);
355}
356
Jason Samsd19f10d2009-05-22 14:03:28 -0700357// -----------------------------------
358
Jason Sams3b9c52a2010-10-14 17:48:46 -0700359static int
360nTypeCreate(JNIEnv *_env, jobject _this, RsContext con, RsElement eid, jintArray _dims, jintArray _dimValues)
Jason Samsd19f10d2009-05-22 14:03:28 -0700361{
Jason Sams3b9c52a2010-10-14 17:48:46 -0700362 int count = _env->GetArrayLength(_dims);
Jason Samsd19f10d2009-05-22 14:03:28 -0700363 LOG_API("nTypeCreate, con(%p)", con);
Jason Sams3b9c52a2010-10-14 17:48:46 -0700364
365 jint *dimPtr = _env->GetIntArrayElements(_dims, NULL);
366 jint *dimValPtr = _env->GetIntArrayElements(_dimValues, NULL);
367
368 jint id = (jint)rsaTypeCreate(con, (RsElement)eid, count,
369 (RsDimension *)dimPtr, (uint32_t *)dimValPtr);
370
371 _env->ReleaseIntArrayElements(_dims, dimPtr, JNI_ABORT);
372 _env->ReleaseIntArrayElements(_dimValues, dimValPtr, JNI_ABORT);
373 return (jint)id;
Jason Samsd19f10d2009-05-22 14:03:28 -0700374}
375
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700376static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700377nTypeGetNativeData(JNIEnv *_env, jobject _this, RsContext con, jint id, jintArray _typeData)
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700378{
379 // We are packing 6 items: mDimX; mDimY; mDimZ;
380 // mDimLOD; mDimFaces; mElement; into typeData
381 int elementCount = _env->GetArrayLength(_typeData);
382
383 assert(elementCount == 6);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700384 LOG_API("nTypeCreate, con(%p)", con);
385
386 uint32_t typeData[6];
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700387 rsaTypeGetNativeData(con, (RsType)id, typeData, 6);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700388
389 for(jint i = 0; i < elementCount; i ++) {
390 _env->SetIntArrayRegion(_typeData, i, 1, (const jint*)&typeData[i]);
391 }
392}
393
Jason Samsd19f10d2009-05-22 14:03:28 -0700394// -----------------------------------
395
396static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700397nAllocationCreateTyped(JNIEnv *_env, jobject _this, RsContext con, jint e)
Jason Samsd19f10d2009-05-22 14:03:28 -0700398{
Jason Samsd19f10d2009-05-22 14:03:28 -0700399 LOG_API("nAllocationCreateTyped, con(%p), e(%p)", con, (RsElement)e);
Jason Sams31a7e422010-10-26 13:09:17 -0700400 return (jint) rsaAllocationCreateTyped(con, (RsElement)e);
Jason Samsd19f10d2009-05-22 14:03:28 -0700401}
402
Jason Samsd19f10d2009-05-22 14:03:28 -0700403static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700404nAllocationUploadToTexture(JNIEnv *_env, jobject _this, RsContext con, jint a, jboolean genMip, jint mip)
Jason Samsd19f10d2009-05-22 14:03:28 -0700405{
Jason Samsc2908e62010-02-23 17:44:28 -0800406 LOG_API("nAllocationUploadToTexture, con(%p), a(%p), genMip(%i), mip(%i)", con, (RsAllocation)a, genMip, mip);
407 rsAllocationUploadToTexture(con, (RsAllocation)a, genMip, mip);
Jason Samsd19f10d2009-05-22 14:03:28 -0700408}
409
Jason Sams07ae4062009-08-27 20:23:34 -0700410static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700411nAllocationUploadToBufferObject(JNIEnv *_env, jobject _this, RsContext con, jint a)
Jason Sams07ae4062009-08-27 20:23:34 -0700412{
Jason Sams07ae4062009-08-27 20:23:34 -0700413 LOG_API("nAllocationUploadToBufferObject, con(%p), a(%p)", con, (RsAllocation)a);
414 rsAllocationUploadToBufferObject(con, (RsAllocation)a);
415}
416
Jason Samsea84a7c2009-09-04 14:42:41 -0700417static RsElement SkBitmapToPredefined(SkBitmap::Config cfg)
Jason Samsfe08d992009-05-27 14:45:32 -0700418{
Jason Samsffe9f482009-06-01 17:45:53 -0700419 switch (cfg) {
420 case SkBitmap::kA8_Config:
Jason Samsea84a7c2009-09-04 14:42:41 -0700421 return g_A_8;
Jason Samsffe9f482009-06-01 17:45:53 -0700422 case SkBitmap::kARGB_4444_Config:
Jason Samsea84a7c2009-09-04 14:42:41 -0700423 return g_RGBA_4444;
Jason Samsffe9f482009-06-01 17:45:53 -0700424 case SkBitmap::kARGB_8888_Config:
Jason Samsea84a7c2009-09-04 14:42:41 -0700425 return g_RGBA_8888;
Jason Samsffe9f482009-06-01 17:45:53 -0700426 case SkBitmap::kRGB_565_Config:
Jason Samsea84a7c2009-09-04 14:42:41 -0700427 return g_RGB_565;
Jason Samsfe08d992009-05-27 14:45:32 -0700428
Jason Samsffe9f482009-06-01 17:45:53 -0700429 default:
430 break;
431 }
432 // If we don't have a conversion mark it as a user type.
433 LOGE("Unsupported bitmap type");
Jason Samsea84a7c2009-09-04 14:42:41 -0700434 return NULL;
Jason Samsfe08d992009-05-27 14:45:32 -0700435}
436
Jason Samsffe9f482009-06-01 17:45:53 -0700437static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700438nAllocationCreateFromBitmap(JNIEnv *_env, jobject _this, RsContext con, jint dstFmt, jboolean genMips, jobject jbitmap)
Jason Samsffe9f482009-06-01 17:45:53 -0700439{
Jason Samsffe9f482009-06-01 17:45:53 -0700440 SkBitmap const * nativeBitmap =
441 (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
442 const SkBitmap& bitmap(*nativeBitmap);
443 SkBitmap::Config config = bitmap.getConfig();
444
Jason Samsea84a7c2009-09-04 14:42:41 -0700445 RsElement e = SkBitmapToPredefined(config);
446 if (e) {
Jason Samsffe9f482009-06-01 17:45:53 -0700447 bitmap.lockPixels();
448 const int w = bitmap.width();
449 const int h = bitmap.height();
450 const void* ptr = bitmap.getPixels();
Jason Sams31a7e422010-10-26 13:09:17 -0700451 jint id = (jint)rsaAllocationCreateFromBitmap(con, w, h, (RsElement)dstFmt, e, genMips, ptr);
Jason Samsffe9f482009-06-01 17:45:53 -0700452 bitmap.unlockPixels();
453 return id;
454 }
455 return 0;
456}
Jason Samsfe08d992009-05-27 14:45:32 -0700457
Alex Sakhartchouk67f2e442010-11-18 15:22:43 -0800458static int
459nAllocationCubeCreateFromBitmap(JNIEnv *_env, jobject _this, RsContext con, jint dstFmt, jboolean genMips, jobject jbitmap)
460{
461 SkBitmap const * nativeBitmap =
462 (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
463 const SkBitmap& bitmap(*nativeBitmap);
464 SkBitmap::Config config = bitmap.getConfig();
465
466 RsElement e = SkBitmapToPredefined(config);
467 if (e) {
468 bitmap.lockPixels();
469 const int w = bitmap.width();
470 const int h = bitmap.height();
471 const void* ptr = bitmap.getPixels();
472 jint id = (jint)rsaAllocationCubeCreateFromBitmap(con, w, h, (RsElement)dstFmt, e, genMips, ptr);
473 bitmap.unlockPixels();
474 return id;
475 }
476 return 0;
477}
478
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -0700479static void
480nAllocationUpdateFromBitmap(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jobject jbitmap)
481{
482 SkBitmap const * nativeBitmap =
483 (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
484 const SkBitmap& bitmap(*nativeBitmap);
485 SkBitmap::Config config = bitmap.getConfig();
486
487 RsElement e = SkBitmapToPredefined(config);
488 if (e) {
489 bitmap.lockPixels();
490 const void* ptr = bitmap.getPixels();
491 rsAllocationUpdateFromBitmap(con, (RsAllocation)alloc, e, ptr);
492 bitmap.unlockPixels();
493 }
494}
495
Jason Sams8a647432010-03-01 15:31:04 -0800496static void ReleaseBitmapCallback(void *bmp)
497{
498 SkBitmap const * nativeBitmap = (SkBitmap const *)bmp;
499 nativeBitmap->unlockPixels();
500}
501
502static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700503nAllocationCreateBitmapRef(JNIEnv *_env, jobject _this, RsContext con, jint type, jobject jbitmap)
Jason Sams8a647432010-03-01 15:31:04 -0800504{
Jason Sams8a647432010-03-01 15:31:04 -0800505 SkBitmap * nativeBitmap =
506 (SkBitmap *)_env->GetIntField(jbitmap, gNativeBitmapID);
507
508
509 nativeBitmap->lockPixels();
510 void* ptr = nativeBitmap->getPixels();
511 jint id = (jint)rsAllocationCreateBitmapRef(con, (RsType)type, ptr, nativeBitmap, ReleaseBitmapCallback);
512 return id;
513}
514
Jason Samsb0ec1b42009-07-28 12:02:16 -0700515static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700516nAllocationCreateFromAssetStream(JNIEnv *_env, jobject _this, RsContext con, jint dstFmt, jboolean genMips, jint native_asset)
Romain Guy650a3eb2009-08-31 14:06:43 -0700517{
Romain Guy650a3eb2009-08-31 14:06:43 -0700518 Asset* asset = reinterpret_cast<Asset*>(native_asset);
519 SkBitmap bitmap;
520 SkImageDecoder::DecodeMemory(asset->getBuffer(false), asset->getLength(),
521 &bitmap, SkBitmap::kNo_Config, SkImageDecoder::kDecodePixels_Mode);
522
523 SkBitmap::Config config = bitmap.getConfig();
524
Jason Samsea84a7c2009-09-04 14:42:41 -0700525 RsElement e = SkBitmapToPredefined(config);
Romain Guy650a3eb2009-08-31 14:06:43 -0700526
Jason Samsea84a7c2009-09-04 14:42:41 -0700527 if (e) {
Romain Guy650a3eb2009-08-31 14:06:43 -0700528 bitmap.lockPixels();
529 const int w = bitmap.width();
530 const int h = bitmap.height();
531 const void* ptr = bitmap.getPixels();
Jason Sams31a7e422010-10-26 13:09:17 -0700532 jint id = (jint)rsaAllocationCreateFromBitmap(con, w, h, (RsElement)dstFmt, e, genMips, ptr);
Romain Guy650a3eb2009-08-31 14:06:43 -0700533 bitmap.unlockPixels();
534 return id;
535 }
536 return 0;
537}
538
Jason Samsd19f10d2009-05-22 14:03:28 -0700539static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700540nAllocationSubData1D_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint count, jintArray data, int sizeBytes)
Jason Samsd19f10d2009-05-22 14:03:28 -0700541{
Jason Samsd19f10d2009-05-22 14:03:28 -0700542 jint len = _env->GetArrayLength(data);
Jason Sams768bc022009-09-21 19:41:04 -0700543 LOG_API("nAllocation1DSubData_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 -0700544 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Sams07ae4062009-08-27 20:23:34 -0700545 rsAllocation1DSubData(con, (RsAllocation)alloc, offset, count, ptr, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700546 _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
547}
548
549static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700550nAllocationSubData1D_s(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint count, jshortArray data, int sizeBytes)
Jason Sams768bc022009-09-21 19:41:04 -0700551{
Jason Sams768bc022009-09-21 19:41:04 -0700552 jint len = _env->GetArrayLength(data);
553 LOG_API("nAllocation1DSubData_s, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, count, len, sizeBytes);
554 jshort *ptr = _env->GetShortArrayElements(data, NULL);
555 rsAllocation1DSubData(con, (RsAllocation)alloc, offset, count, ptr, sizeBytes);
556 _env->ReleaseShortArrayElements(data, ptr, JNI_ABORT);
557}
558
559static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700560nAllocationSubData1D_b(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint count, jbyteArray data, int sizeBytes)
Jason Sams768bc022009-09-21 19:41:04 -0700561{
Jason Sams768bc022009-09-21 19:41:04 -0700562 jint len = _env->GetArrayLength(data);
563 LOG_API("nAllocation1DSubData_b, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, count, len, sizeBytes);
564 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
565 rsAllocation1DSubData(con, (RsAllocation)alloc, offset, count, ptr, sizeBytes);
566 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
567}
568
569static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700570nAllocationSubData1D_f(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint count, jfloatArray data, int sizeBytes)
Jason Samsd19f10d2009-05-22 14:03:28 -0700571{
Jason Samsd19f10d2009-05-22 14:03:28 -0700572 jint len = _env->GetArrayLength(data);
Jason Sams768bc022009-09-21 19:41:04 -0700573 LOG_API("nAllocation1DSubData_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 -0700574 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Sams07ae4062009-08-27 20:23:34 -0700575 rsAllocation1DSubData(con, (RsAllocation)alloc, offset, count, ptr, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700576 _env->ReleaseFloatArrayElements(data, ptr, JNI_ABORT);
577}
578
579static void
Jason Sams49bdaf02010-08-31 13:50:42 -0700580// native void rsnAllocationSubElementData1D(int con, int id, int xoff, int compIdx, byte[] d, int sizeBytes);
581nAllocationSubElementData1D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint compIdx, jbyteArray data, int sizeBytes)
582{
583 jint len = _env->GetArrayLength(data);
584 LOG_API("nAllocationSubElementData1D, con(%p), alloc(%p), offset(%i), comp(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, compIdx, len, sizeBytes);
585 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
586 rsAllocation1DSubElementData(con, (RsAllocation)alloc, offset, ptr, compIdx, sizeBytes);
587 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
588}
589
590static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700591nAllocationSubData2D_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint w, jint h, jintArray data, int sizeBytes)
Jason Samsd19f10d2009-05-22 14:03:28 -0700592{
Jason Samsd19f10d2009-05-22 14:03:28 -0700593 jint len = _env->GetArrayLength(data);
594 LOG_API("nAllocation2DSubData_i, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)", con, (RsAllocation)alloc, xoff, yoff, w, h, len);
595 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Sams07ae4062009-08-27 20:23:34 -0700596 rsAllocation2DSubData(con, (RsAllocation)alloc, xoff, yoff, w, h, ptr, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700597 _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
598}
599
600static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700601nAllocationSubData2D_f(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint w, jint h, jfloatArray data, int sizeBytes)
Jason Samsd19f10d2009-05-22 14:03:28 -0700602{
Jason Samsd19f10d2009-05-22 14:03:28 -0700603 jint len = _env->GetArrayLength(data);
604 LOG_API("nAllocation2DSubData_i, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)", con, (RsAllocation)alloc, xoff, yoff, w, h, len);
605 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Sams07ae4062009-08-27 20:23:34 -0700606 rsAllocation2DSubData(con, (RsAllocation)alloc, xoff, yoff, w, h, ptr, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700607 _env->ReleaseFloatArrayElements(data, ptr, JNI_ABORT);
608}
609
Jason Sams40a29e82009-08-10 14:55:26 -0700610static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700611nAllocationRead_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jintArray data)
Jason Sams40a29e82009-08-10 14:55:26 -0700612{
Jason Sams40a29e82009-08-10 14:55:26 -0700613 jint len = _env->GetArrayLength(data);
614 LOG_API("nAllocationRead_i, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
615 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700616 rsAllocationRead(con, (RsAllocation)alloc, ptr);
Joe Onoratoae209ac2009-08-31 17:23:53 -0700617 _env->ReleaseIntArrayElements(data, ptr, 0);
Jason Sams40a29e82009-08-10 14:55:26 -0700618}
619
620static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700621nAllocationRead_f(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jfloatArray data)
Jason Sams40a29e82009-08-10 14:55:26 -0700622{
Jason Sams40a29e82009-08-10 14:55:26 -0700623 jint len = _env->GetArrayLength(data);
Joe Onoratoa8f2ace2009-08-12 11:47:23 -0700624 LOG_API("nAllocationRead_f, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
Jason Sams40a29e82009-08-10 14:55:26 -0700625 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700626 rsAllocationRead(con, (RsAllocation)alloc, ptr);
Joe Onoratoae209ac2009-08-31 17:23:53 -0700627 _env->ReleaseFloatArrayElements(data, ptr, 0);
Jason Sams40a29e82009-08-10 14:55:26 -0700628}
Jason Samsd19f10d2009-05-22 14:03:28 -0700629
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700630static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700631nAllocationGetType(JNIEnv *_env, jobject _this, RsContext con, jint a)
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700632{
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700633 LOG_API("nAllocationGetType, con(%p), a(%p)", con, (RsAllocation)a);
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700634 return (jint) rsaAllocationGetType(con, (RsAllocation)a);
Alex Sakhartchoukdfac8142010-07-15 11:33:03 -0700635}
636
Jason Sams5edc6082010-10-05 13:32:49 -0700637static void
638nAllocationResize1D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint dimX)
639{
640 LOG_API("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i)", con, (RsAllocation)alloc, dimX);
641 rsAllocationResize1D(con, (RsAllocation)alloc, dimX);
642}
643
644static void
645nAllocationResize2D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint dimX, jint dimY)
646{
647 LOG_API("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i), sizeY(%i)", con, (RsAllocation)alloc, dimX, dimY);
648 rsAllocationResize2D(con, (RsAllocation)alloc, dimX, dimY);
649}
650
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700651// -----------------------------------
652
653static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700654nFileA3DCreateFromAssetStream(JNIEnv *_env, jobject _this, RsContext con, jint native_asset)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700655{
656 LOGV("______nFileA3D %u", (uint32_t) native_asset);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700657
658 Asset* asset = reinterpret_cast<Asset*>(native_asset);
659
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700660 jint id = (jint)rsaFileA3DCreateFromAssetStream(con, asset->getBuffer(false), asset->getLength());
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700661 return id;
662}
663
664static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700665nFileA3DGetNumIndexEntries(JNIEnv *_env, jobject _this, RsContext con, jint fileA3D)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700666{
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700667 int32_t numEntries = 0;
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700668 rsaFileA3DGetNumIndexEntries(con, &numEntries, (RsFile)fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700669 return numEntries;
670}
671
672static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700673nFileA3DGetIndexEntries(JNIEnv *_env, jobject _this, RsContext con, jint fileA3D, jint numEntries, jintArray _ids, jobjectArray _entries)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700674{
675 LOGV("______nFileA3D %u", (uint32_t) fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700676 RsFileIndexEntry *fileEntries = (RsFileIndexEntry*)malloc((uint32_t)numEntries * sizeof(RsFileIndexEntry));
677
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700678 rsaFileA3DGetIndexEntries(con, fileEntries, (uint32_t)numEntries, (RsFile)fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700679
680 for(jint i = 0; i < numEntries; i ++) {
681 _env->SetObjectArrayElement(_entries, i, _env->NewStringUTF(fileEntries[i].objectName));
682 _env->SetIntArrayRegion(_ids, i, 1, (const jint*)&fileEntries[i].classID);
683 }
684
685 free(fileEntries);
686}
687
688static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700689nFileA3DGetEntryByIndex(JNIEnv *_env, jobject _this, RsContext con, jint fileA3D, jint index)
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700690{
691 LOGV("______nFileA3D %u", (uint32_t) fileA3D);
Alex Sakhartchouk581cc642010-10-27 14:10:07 -0700692 jint id = (jint)rsaFileA3DGetEntryByIndex(con, (uint32_t)index, (RsFile)fileA3D);
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700693 return id;
694}
Jason Samsd19f10d2009-05-22 14:03:28 -0700695
696// -----------------------------------
697
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700698static int
Jason Sams2e1872f2010-08-17 16:25:41 -0700699nFontCreateFromFile(JNIEnv *_env, jobject _this, RsContext con, jstring fileName, jint fontSize, jint dpi)
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700700{
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700701 const char* fileNameUTF = _env->GetStringUTFChars(fileName, NULL);
702
703 jint id = (jint)rsFontCreateFromFile(con, fileNameUTF, fontSize, dpi);
704 return id;
705}
706
707
708// -----------------------------------
709
Jason Samsd19f10d2009-05-22 14:03:28 -0700710static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700711nAdapter1DBindAllocation(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jint alloc)
Jason Samsd19f10d2009-05-22 14:03:28 -0700712{
Jason Samsd19f10d2009-05-22 14:03:28 -0700713 LOG_API("nAdapter1DBindAllocation, con(%p), adapter(%p), alloc(%p)", con, (RsAdapter1D)adapter, (RsAllocation)alloc);
Jason Samsbc948de2009-08-17 18:35:48 -0700714 rsAdapter1DBindAllocation(con, (RsAdapter1D)adapter, (RsAllocation)alloc);
Jason Samsd19f10d2009-05-22 14:03:28 -0700715}
716
717static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700718nAdapter1DSetConstraint(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jint dim, jint value)
Jason Samsd19f10d2009-05-22 14:03:28 -0700719{
Jason Samsd19f10d2009-05-22 14:03:28 -0700720 LOG_API("nAdapter1DSetConstraint, con(%p), adapter(%p), dim(%i), value(%i)", con, (RsAdapter1D)adapter, dim, value);
Jason Samsbc948de2009-08-17 18:35:48 -0700721 rsAdapter1DSetConstraint(con, (RsAdapter1D)adapter, (RsDimension)dim, value);
Jason Samsd19f10d2009-05-22 14:03:28 -0700722}
723
724static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700725nAdapter1DData_i(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jintArray data)
Jason Samsd19f10d2009-05-22 14:03:28 -0700726{
Jason Samsd19f10d2009-05-22 14:03:28 -0700727 jint len = _env->GetArrayLength(data);
728 LOG_API("nAdapter1DData_i, con(%p), adapter(%p), len(%i)", con, (RsAdapter1D)adapter, len);
729 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700730 rsAdapter1DData(con, (RsAdapter1D)adapter, ptr);
Jason Samsd19f10d2009-05-22 14:03:28 -0700731 _env->ReleaseIntArrayElements(data, ptr, 0/*JNI_ABORT*/);
732}
733
734static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700735nAdapter1DSubData_i(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jint offset, jint count, jintArray data)
Jason Samsd19f10d2009-05-22 14:03:28 -0700736{
Jason Samsd19f10d2009-05-22 14:03:28 -0700737 jint len = _env->GetArrayLength(data);
738 LOG_API("nAdapter1DSubData_i, con(%p), adapter(%p), offset(%i), count(%i), len(%i)", con, (RsAdapter1D)adapter, offset, count, len);
739 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700740 rsAdapter1DSubData(con, (RsAdapter1D)adapter, offset, count, ptr);
Jason Samsd19f10d2009-05-22 14:03:28 -0700741 _env->ReleaseIntArrayElements(data, ptr, 0/*JNI_ABORT*/);
742}
743
744static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700745nAdapter1DData_f(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jfloatArray data)
Jason Samsd19f10d2009-05-22 14:03:28 -0700746{
Jason Samsd19f10d2009-05-22 14:03:28 -0700747 jint len = _env->GetArrayLength(data);
748 LOG_API("nAdapter1DData_f, con(%p), adapter(%p), len(%i)", con, (RsAdapter1D)adapter, len);
749 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700750 rsAdapter1DData(con, (RsAdapter1D)adapter, ptr);
Jason Samsd19f10d2009-05-22 14:03:28 -0700751 _env->ReleaseFloatArrayElements(data, ptr, 0/*JNI_ABORT*/);
752}
753
754static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700755nAdapter1DSubData_f(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jint offset, jint count, jfloatArray data)
Jason Samsd19f10d2009-05-22 14:03:28 -0700756{
Jason Samsd19f10d2009-05-22 14:03:28 -0700757 jint len = _env->GetArrayLength(data);
758 LOG_API("nAdapter1DSubData_f, con(%p), adapter(%p), offset(%i), count(%i), len(%i)", con, (RsAdapter1D)adapter, offset, count, len);
759 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700760 rsAdapter1DSubData(con, (RsAdapter1D)adapter, offset, count, ptr);
Jason Samsd19f10d2009-05-22 14:03:28 -0700761 _env->ReleaseFloatArrayElements(data, ptr, 0/*JNI_ABORT*/);
762}
763
764static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700765nAdapter1DCreate(JNIEnv *_env, jobject _this, RsContext con)
Jason Samsd19f10d2009-05-22 14:03:28 -0700766{
Jason Samsd19f10d2009-05-22 14:03:28 -0700767 LOG_API("nAdapter1DCreate, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -0700768 return (jint)rsAdapter1DCreate(con);
Jason Samsd19f10d2009-05-22 14:03:28 -0700769}
770
771// -----------------------------------
772
773static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700774nAdapter2DBindAllocation(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jint alloc)
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700775{
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700776 LOG_API("nAdapter2DBindAllocation, con(%p), adapter(%p), alloc(%p)", con, (RsAdapter2D)adapter, (RsAllocation)alloc);
Jason Samsbc948de2009-08-17 18:35:48 -0700777 rsAdapter2DBindAllocation(con, (RsAdapter2D)adapter, (RsAllocation)alloc);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700778}
779
780static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700781nAdapter2DSetConstraint(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jint dim, jint value)
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700782{
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700783 LOG_API("nAdapter2DSetConstraint, con(%p), adapter(%p), dim(%i), value(%i)", con, (RsAdapter2D)adapter, dim, value);
Jason Samsbc948de2009-08-17 18:35:48 -0700784 rsAdapter2DSetConstraint(con, (RsAdapter2D)adapter, (RsDimension)dim, value);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700785}
786
787static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700788nAdapter2DData_i(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jintArray data)
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700789{
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700790 jint len = _env->GetArrayLength(data);
791 LOG_API("nAdapter2DData_i, con(%p), adapter(%p), len(%i)", con, (RsAdapter2D)adapter, len);
792 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700793 rsAdapter2DData(con, (RsAdapter2D)adapter, ptr);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700794 _env->ReleaseIntArrayElements(data, ptr, 0/*JNI_ABORT*/);
795}
796
797static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700798nAdapter2DData_f(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jfloatArray data)
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700799{
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700800 jint len = _env->GetArrayLength(data);
801 LOG_API("nAdapter2DData_f, con(%p), adapter(%p), len(%i)", con, (RsAdapter2D)adapter, len);
802 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700803 rsAdapter2DData(con, (RsAdapter2D)adapter, ptr);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700804 _env->ReleaseFloatArrayElements(data, ptr, 0/*JNI_ABORT*/);
805}
806
807static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700808nAdapter2DSubData_i(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jint xoff, jint yoff, jint w, jint h, jintArray data)
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700809{
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700810 jint len = _env->GetArrayLength(data);
811 LOG_API("nAdapter2DSubData_i, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)",
812 con, (RsAdapter2D)adapter, xoff, yoff, w, h, len);
813 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700814 rsAdapter2DSubData(con, (RsAdapter2D)adapter, xoff, yoff, w, h, ptr);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700815 _env->ReleaseIntArrayElements(data, ptr, 0/*JNI_ABORT*/);
816}
817
818static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700819nAdapter2DSubData_f(JNIEnv *_env, jobject _this, RsContext con, jint adapter, jint xoff, jint yoff, jint w, jint h, jfloatArray data)
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700820{
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700821 jint len = _env->GetArrayLength(data);
822 LOG_API("nAdapter2DSubData_f, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)",
823 con, (RsAdapter2D)adapter, xoff, yoff, w, h, len);
824 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700825 rsAdapter2DSubData(con, (RsAdapter1D)adapter, xoff, yoff, w, h, ptr);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700826 _env->ReleaseFloatArrayElements(data, ptr, 0/*JNI_ABORT*/);
827}
828
829static jint
Jason Sams2e1872f2010-08-17 16:25:41 -0700830nAdapter2DCreate(JNIEnv *_env, jobject _this, RsContext con)
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700831{
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700832 LOG_API("nAdapter2DCreate, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -0700833 return (jint)rsAdapter2DCreate(con);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700834}
835
836// -----------------------------------
837
838static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700839nScriptBindAllocation(JNIEnv *_env, jobject _this, RsContext con, jint script, jint alloc, jint slot)
Jason Samsd19f10d2009-05-22 14:03:28 -0700840{
Jason Samsd19f10d2009-05-22 14:03:28 -0700841 LOG_API("nScriptBindAllocation, con(%p), script(%p), alloc(%p), slot(%i)", con, (RsScript)script, (RsAllocation)alloc, slot);
Jason Samsbc948de2009-08-17 18:35:48 -0700842 rsScriptBindAllocation(con, (RsScript)script, (RsAllocation)alloc, slot);
Jason Samsd19f10d2009-05-22 14:03:28 -0700843}
844
845static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700846nScriptSetVarI(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jint val)
Jason Sams4d339932010-05-11 14:03:58 -0700847{
Jason Samscfc04362010-09-14 14:59:03 -0700848 LOG_API("nScriptSetVarI, con(%p), s(%p), slot(%i), val(%i)", con, (void *)script, slot, val);
Jason Sams4d339932010-05-11 14:03:58 -0700849 rsScriptSetVarI(con, (RsScript)script, slot, val);
850}
851
852static void
Jason Sams6f4cf0b2010-11-16 17:37:02 -0800853nScriptSetVarObj(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jint val)
854{
855 LOG_API("nScriptSetVarObj, con(%p), s(%p), slot(%i), val(%i)", con, (void *)script, slot, val);
856 rsScriptSetVarObj(con, (RsScript)script, slot, (RsObjectBase)val);
857}
858
859static void
Stephen Hines031ec58c2010-10-11 10:54:21 -0700860nScriptSetVarJ(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jlong val)
861{
862 LOG_API("nScriptSetVarJ, con(%p), s(%p), slot(%i), val(%lli)", con, (void *)script, slot, val);
863 rsScriptSetVarJ(con, (RsScript)script, slot, val);
864}
865
866static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700867nScriptSetVarF(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, float val)
Jason Sams4d339932010-05-11 14:03:58 -0700868{
Stephen Hinesca54ec32010-09-20 17:20:30 -0700869 LOG_API("nScriptSetVarF, con(%p), s(%p), slot(%i), val(%f)", con, (void *)script, slot, val);
Jason Sams4d339932010-05-11 14:03:58 -0700870 rsScriptSetVarF(con, (RsScript)script, slot, val);
871}
872
873static void
Stephen Hinesca54ec32010-09-20 17:20:30 -0700874nScriptSetVarD(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, double val)
875{
876 LOG_API("nScriptSetVarD, con(%p), s(%p), slot(%i), val(%lf)", con, (void *)script, slot, val);
877 rsScriptSetVarD(con, (RsScript)script, slot, val);
878}
879
880static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700881nScriptSetVarV(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jbyteArray data)
Jason Sams4d339932010-05-11 14:03:58 -0700882{
Jason Sams4d339932010-05-11 14:03:58 -0700883 LOG_API("nScriptSetVarV, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
884 jint len = _env->GetArrayLength(data);
885 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
886 rsScriptSetVarV(con, (RsScript)script, slot, ptr, len);
887 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
888}
889
Jason Samsd19f10d2009-05-22 14:03:28 -0700890
891static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700892nScriptSetTimeZone(JNIEnv *_env, jobject _this, RsContext con, jint script, jbyteArray timeZone)
Jason Samsd19f10d2009-05-22 14:03:28 -0700893{
Jason Sams07ae4062009-08-27 20:23:34 -0700894 LOG_API("nScriptCSetTimeZone, con(%p), s(%p), timeZone(%s)", con, (void *)script, (const char *)timeZone);
Romain Guy584a3752009-07-30 18:45:01 -0700895
896 jint length = _env->GetArrayLength(timeZone);
897 jbyte* timeZone_ptr;
898 timeZone_ptr = (jbyte *) _env->GetPrimitiveArrayCritical(timeZone, (jboolean *)0);
899
Jason Samsbc948de2009-08-17 18:35:48 -0700900 rsScriptSetTimeZone(con, (RsScript)script, (const char *)timeZone_ptr, length);
Romain Guy584a3752009-07-30 18:45:01 -0700901
902 if (timeZone_ptr) {
903 _env->ReleasePrimitiveArrayCritical(timeZone, timeZone_ptr, 0);
904 }
905}
906
Jason Samsfbf0b9e2009-08-13 12:59:04 -0700907static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700908nScriptInvoke(JNIEnv *_env, jobject _this, RsContext con, jint obj, jint slot)
Jason Samsbe2e8412009-09-16 15:04:38 -0700909{
Jason Samsbe2e8412009-09-16 15:04:38 -0700910 LOG_API("nScriptInvoke, con(%p), script(%p)", con, (void *)obj);
911 rsScriptInvoke(con, (RsScript)obj, slot);
912}
913
914static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700915nScriptInvokeV(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jbyteArray data)
Jason Sams4d339932010-05-11 14:03:58 -0700916{
Jason Sams4d339932010-05-11 14:03:58 -0700917 LOG_API("nScriptInvokeV, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
918 jint len = _env->GetArrayLength(data);
919 jbyte *ptr = _env->GetByteArrayElements(data, NULL);
920 rsScriptInvokeV(con, (RsScript)script, slot, ptr, len);
921 _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
922}
923
Jason Samsfbf0b9e2009-08-13 12:59:04 -0700924
Jason Sams22534172009-08-04 16:58:20 -0700925// -----------------------------------
926
927static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700928nScriptCBegin(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams22534172009-08-04 16:58:20 -0700929{
Jason Sams22534172009-08-04 16:58:20 -0700930 LOG_API("nScriptCBegin, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -0700931 rsScriptCBegin(con);
Jason Sams22534172009-08-04 16:58:20 -0700932}
933
Romain Guy584a3752009-07-30 18:45:01 -0700934static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700935nScriptCSetScript(JNIEnv *_env, jobject _this, RsContext con, jbyteArray scriptRef,
Jack Palevich43702d82009-05-28 13:38:16 -0700936 jint offset, jint length)
Jason Samsd19f10d2009-05-22 14:03:28 -0700937{
Jason Samsd19f10d2009-05-22 14:03:28 -0700938 LOG_API("!!! nScriptCSetScript, con(%p)", con);
Jack Palevich43702d82009-05-28 13:38:16 -0700939 jint _exception = 0;
940 jint remaining;
941 jbyte* script_base = 0;
942 jbyte* script_ptr;
Jack Palevich43702d82009-05-28 13:38:16 -0700943 if (!scriptRef) {
944 _exception = 1;
945 //_env->ThrowNew(IAEClass, "script == null");
946 goto exit;
947 }
948 if (offset < 0) {
949 _exception = 1;
950 //_env->ThrowNew(IAEClass, "offset < 0");
951 goto exit;
952 }
953 if (length < 0) {
954 _exception = 1;
955 //_env->ThrowNew(IAEClass, "length < 0");
956 goto exit;
957 }
958 remaining = _env->GetArrayLength(scriptRef) - offset;
959 if (remaining < length) {
960 _exception = 1;
961 //_env->ThrowNew(IAEClass, "length > script.length - offset");
962 goto exit;
963 }
964 script_base = (jbyte *)
965 _env->GetPrimitiveArrayCritical(scriptRef, (jboolean *)0);
966 script_ptr = script_base + offset;
967
Jason Samsbc948de2009-08-17 18:35:48 -0700968 rsScriptCSetText(con, (const char *)script_ptr, length);
Jason Sams39ddc9502009-06-05 17:35:09 -0700969
Jack Palevich43702d82009-05-28 13:38:16 -0700970exit:
971 if (script_base) {
972 _env->ReleasePrimitiveArrayCritical(scriptRef, script_base,
973 _exception ? JNI_ABORT: 0);
974 }
Jason Samsd19f10d2009-05-22 14:03:28 -0700975}
976
977static jint
Shih-wei Liaoa914f342010-11-08 01:33:59 -0800978nScriptCCreate(JNIEnv *_env, jobject _this, RsContext con, jstring resName)
Jason Samsd19f10d2009-05-22 14:03:28 -0700979{
Jason Samsd19f10d2009-05-22 14:03:28 -0700980 LOG_API("nScriptCCreate, con(%p)", con);
Shih-wei Liaoa914f342010-11-08 01:33:59 -0800981 const char* resNameUTF = _env->GetStringUTFChars(resName, NULL);
982 return (jint)rsScriptCCreate(con, resNameUTF);
Jason Samsd19f10d2009-05-22 14:03:28 -0700983}
984
985// ---------------------------------------------------------------------------
986
987static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700988nProgramStoreBegin(JNIEnv *_env, jobject _this, RsContext con, jint in, jint out)
Jason Samsd19f10d2009-05-22 14:03:28 -0700989{
Jason Sams54db59c2010-05-13 18:30:11 -0700990 LOG_API("nProgramStoreBegin, con(%p), in(%p), out(%p)", con, (RsElement)in, (RsElement)out);
991 rsProgramStoreBegin(con, (RsElement)in, (RsElement)out);
Jason Samsd19f10d2009-05-22 14:03:28 -0700992}
993
994static void
Jason Sams2e1872f2010-08-17 16:25:41 -0700995nProgramStoreDepthFunc(JNIEnv *_env, jobject _this, RsContext con, jint func)
Jason Samsd19f10d2009-05-22 14:03:28 -0700996{
Jason Sams54db59c2010-05-13 18:30:11 -0700997 LOG_API("nProgramStoreDepthFunc, con(%p), func(%i)", con, func);
998 rsProgramStoreDepthFunc(con, (RsDepthFunc)func);
Jason Samsd19f10d2009-05-22 14:03:28 -0700999}
1000
1001static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001002nProgramStoreDepthMask(JNIEnv *_env, jobject _this, RsContext con, jboolean enable)
Jason Samsd19f10d2009-05-22 14:03:28 -07001003{
Jason Sams54db59c2010-05-13 18:30:11 -07001004 LOG_API("nProgramStoreDepthMask, con(%p), enable(%i)", con, enable);
1005 rsProgramStoreDepthMask(con, enable);
Jason Samsd19f10d2009-05-22 14:03:28 -07001006}
1007
1008static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001009nProgramStoreColorMask(JNIEnv *_env, jobject _this, RsContext con, jboolean r, jboolean g, jboolean b, jboolean a)
Jason Samsd19f10d2009-05-22 14:03:28 -07001010{
Jason Sams54db59c2010-05-13 18:30:11 -07001011 LOG_API("nProgramStoreColorMask, con(%p), r(%i), g(%i), b(%i), a(%i)", con, r, g, b, a);
1012 rsProgramStoreColorMask(con, r, g, b, a);
Jason Samsd19f10d2009-05-22 14:03:28 -07001013}
1014
1015static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001016nProgramStoreBlendFunc(JNIEnv *_env, jobject _this, RsContext con, int src, int dst)
Jason Samsd19f10d2009-05-22 14:03:28 -07001017{
Jason Sams54db59c2010-05-13 18:30:11 -07001018 LOG_API("nProgramStoreBlendFunc, con(%p), src(%i), dst(%i)", con, src, dst);
1019 rsProgramStoreBlendFunc(con, (RsBlendSrcFunc)src, (RsBlendDstFunc)dst);
Jason Samsd19f10d2009-05-22 14:03:28 -07001020}
1021
1022static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001023nProgramStoreDither(JNIEnv *_env, jobject _this, RsContext con, jboolean enable)
Jason Samsd19f10d2009-05-22 14:03:28 -07001024{
Jason Sams54db59c2010-05-13 18:30:11 -07001025 LOG_API("nProgramStoreDither, con(%p), enable(%i)", con, enable);
1026 rsProgramStoreDither(con, enable);
Jason Samsd19f10d2009-05-22 14:03:28 -07001027}
1028
1029static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001030nProgramStoreCreate(JNIEnv *_env, jobject _this, RsContext con)
Jason Samsd19f10d2009-05-22 14:03:28 -07001031{
Jason Sams54db59c2010-05-13 18:30:11 -07001032 LOG_API("nProgramStoreCreate, con(%p)", con);
Jason Sams54db59c2010-05-13 18:30:11 -07001033 return (jint)rsProgramStoreCreate(con);
Jason Samsd19f10d2009-05-22 14:03:28 -07001034}
1035
Jason Sams0011bcf2009-12-15 12:58:36 -08001036// ---------------------------------------------------------------------------
1037
1038static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001039nProgramBindConstants(JNIEnv *_env, jobject _this, RsContext con, jint vpv, jint slot, jint a)
Jason Sams0011bcf2009-12-15 12:58:36 -08001040{
Jason Sams0011bcf2009-12-15 12:58:36 -08001041 LOG_API("nProgramBindConstants, con(%p), vpf(%p), sloat(%i), a(%p)", con, (RsProgramVertex)vpv, slot, (RsAllocation)a);
1042 rsProgramBindConstants(con, (RsProgram)vpv, slot, (RsAllocation)a);
1043}
Jason Sams54c0ec12009-11-30 14:49:55 -08001044
Jason Sams68afd012009-12-17 16:55:08 -08001045static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001046nProgramBindTexture(JNIEnv *_env, jobject _this, RsContext con, jint vpf, jint slot, jint a)
Jason Sams68afd012009-12-17 16:55:08 -08001047{
Jason Sams68afd012009-12-17 16:55:08 -08001048 LOG_API("nProgramBindTexture, con(%p), vpf(%p), slot(%i), a(%p)", con, (RsProgramFragment)vpf, slot, (RsAllocation)a);
1049 rsProgramBindTexture(con, (RsProgramFragment)vpf, slot, (RsAllocation)a);
1050}
1051
1052static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001053nProgramBindSampler(JNIEnv *_env, jobject _this, RsContext con, jint vpf, jint slot, jint a)
Jason Sams68afd012009-12-17 16:55:08 -08001054{
Jason Sams68afd012009-12-17 16:55:08 -08001055 LOG_API("nProgramBindSampler, con(%p), vpf(%p), slot(%i), a(%p)", con, (RsProgramFragment)vpf, slot, (RsSampler)a);
1056 rsProgramBindSampler(con, (RsProgramFragment)vpf, slot, (RsSampler)a);
1057}
1058
Jason Samsd19f10d2009-05-22 14:03:28 -07001059// ---------------------------------------------------------------------------
1060
Jason Samsd19f10d2009-05-22 14:03:28 -07001061static jint
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001062nProgramFragmentCreate(JNIEnv *_env, jobject _this, RsContext con, jstring shader, jintArray params)
Jason Sams7e5ab3b2009-12-15 13:27:04 -08001063{
Jason Sams7e5ab3b2009-12-15 13:27:04 -08001064 const char* shaderUTF = _env->GetStringUTFChars(shader, NULL);
1065 jint shaderLen = _env->GetStringUTFLength(shader);
1066 jint *paramPtr = _env->GetIntArrayElements(params, NULL);
1067 jint paramLen = _env->GetArrayLength(params);
1068
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001069 LOG_API("nProgramFragmentCreate, con(%p), shaderLen(%i), paramLen(%i)", con, shaderLen, paramLen);
Jason Sams7e5ab3b2009-12-15 13:27:04 -08001070
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001071 jint ret = (jint)rsProgramFragmentCreate(con, shaderUTF, shaderLen, (uint32_t *)paramPtr, paramLen);
Jason Sams7e5ab3b2009-12-15 13:27:04 -08001072 _env->ReleaseStringUTFChars(shader, shaderUTF);
1073 _env->ReleaseIntArrayElements(params, paramPtr, JNI_ABORT);
1074 return ret;
1075}
1076
1077
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001078// ---------------------------------------------------------------------------
1079
Jason Sams0011bcf2009-12-15 12:58:36 -08001080static jint
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001081nProgramVertexCreate(JNIEnv *_env, jobject _this, RsContext con, jstring shader, jintArray params)
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001082{
Jason Sams0011bcf2009-12-15 12:58:36 -08001083 const char* shaderUTF = _env->GetStringUTFChars(shader, NULL);
1084 jint shaderLen = _env->GetStringUTFLength(shader);
1085 jint *paramPtr = _env->GetIntArrayElements(params, NULL);
1086 jint paramLen = _env->GetArrayLength(params);
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001087
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001088 LOG_API("nProgramVertexCreate, con(%p), shaderLen(%i), paramLen(%i)", con, shaderLen, paramLen);
Jason Sams0011bcf2009-12-15 12:58:36 -08001089
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001090 jint ret = (jint)rsProgramVertexCreate(con, shaderUTF, shaderLen, (uint32_t *)paramPtr, paramLen);
Jason Sams0011bcf2009-12-15 12:58:36 -08001091 _env->ReleaseStringUTFChars(shader, shaderUTF);
1092 _env->ReleaseIntArrayElements(params, paramPtr, JNI_ABORT);
1093 return ret;
1094}
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001095
Jason Samsebfb4362009-09-23 13:57:02 -07001096// ---------------------------------------------------------------------------
1097
1098static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001099nProgramRasterCreate(JNIEnv *_env, jobject _this, RsContext con, jboolean pointSmooth, jboolean lineSmooth, jboolean pointSprite)
Jason Samsebfb4362009-09-23 13:57:02 -07001100{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001101 LOG_API("nProgramRasterCreate, con(%p), pointSmooth(%i), lineSmooth(%i), pointSprite(%i)",
1102 con, pointSmooth, lineSmooth, pointSprite);
1103 return (jint)rsProgramRasterCreate(con, pointSmooth, lineSmooth, pointSprite);
Jason Samsebfb4362009-09-23 13:57:02 -07001104}
1105
1106static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001107nProgramRasterSetLineWidth(JNIEnv *_env, jobject _this, RsContext con, jint vpr, jfloat v)
Jason Samsebfb4362009-09-23 13:57:02 -07001108{
Jason Samsebfb4362009-09-23 13:57:02 -07001109 LOG_API("nProgramRasterSetLineWidth, con(%p), vpf(%p), value(%f)", con, (RsProgramRaster)vpr, v);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001110 rsProgramRasterSetLineWidth(con, (RsProgramRaster)vpr, v);
1111}
1112
1113static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001114nProgramRasterSetCullMode(JNIEnv *_env, jobject _this, RsContext con, jint vpr, jint v)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001115{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001116 LOG_API("nProgramRasterSetCullMode, con(%p), vpf(%p), value(%i)", con, (RsProgramRaster)vpr, v);
1117 rsProgramRasterSetCullMode(con, (RsProgramRaster)vpr, (RsCullMode)v);
Jason Samsebfb4362009-09-23 13:57:02 -07001118}
1119
Jason Samsd19f10d2009-05-22 14:03:28 -07001120
1121// ---------------------------------------------------------------------------
1122
1123static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001124nContextBindRootScript(JNIEnv *_env, jobject _this, RsContext con, jint script)
Jason Samsd19f10d2009-05-22 14:03:28 -07001125{
Jason Samsd19f10d2009-05-22 14:03:28 -07001126 LOG_API("nContextBindRootScript, con(%p), script(%p)", con, (RsScript)script);
Jason Samsbc948de2009-08-17 18:35:48 -07001127 rsContextBindRootScript(con, (RsScript)script);
Jason Samsd19f10d2009-05-22 14:03:28 -07001128}
1129
1130static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001131nContextBindProgramStore(JNIEnv *_env, jobject _this, RsContext con, jint pfs)
Jason Samsd19f10d2009-05-22 14:03:28 -07001132{
Jason Sams54db59c2010-05-13 18:30:11 -07001133 LOG_API("nContextBindProgramStore, con(%p), pfs(%p)", con, (RsProgramStore)pfs);
1134 rsContextBindProgramStore(con, (RsProgramStore)pfs);
Jason Samsd19f10d2009-05-22 14:03:28 -07001135}
1136
1137static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001138nContextBindProgramFragment(JNIEnv *_env, jobject _this, RsContext con, jint pf)
Jason Samsd19f10d2009-05-22 14:03:28 -07001139{
Jason Samsd19f10d2009-05-22 14:03:28 -07001140 LOG_API("nContextBindProgramFragment, con(%p), pf(%p)", con, (RsProgramFragment)pf);
Jason Samsbc948de2009-08-17 18:35:48 -07001141 rsContextBindProgramFragment(con, (RsProgramFragment)pf);
Jason Samsd19f10d2009-05-22 14:03:28 -07001142}
1143
Jason Sams0826a6f2009-06-15 19:04:56 -07001144static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001145nContextBindProgramVertex(JNIEnv *_env, jobject _this, RsContext con, jint pf)
Jason Sams0826a6f2009-06-15 19:04:56 -07001146{
Jason Sams0826a6f2009-06-15 19:04:56 -07001147 LOG_API("nContextBindProgramVertex, con(%p), pf(%p)", con, (RsProgramVertex)pf);
Jason Samsbc948de2009-08-17 18:35:48 -07001148 rsContextBindProgramVertex(con, (RsProgramVertex)pf);
Jason Sams0826a6f2009-06-15 19:04:56 -07001149}
1150
Joe Onoratod7b37742009-08-09 22:57:44 -07001151static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001152nContextBindProgramRaster(JNIEnv *_env, jobject _this, RsContext con, jint pf)
Jason Samsebfb4362009-09-23 13:57:02 -07001153{
Jason Samsebfb4362009-09-23 13:57:02 -07001154 LOG_API("nContextBindProgramRaster, con(%p), pf(%p)", con, (RsProgramRaster)pf);
1155 rsContextBindProgramRaster(con, (RsProgramRaster)pf);
1156}
1157
Joe Onoratod7b37742009-08-09 22:57:44 -07001158
Jason Sams02fb2cb2009-05-28 15:37:57 -07001159// ---------------------------------------------------------------------------
1160
1161static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001162nSamplerBegin(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams02fb2cb2009-05-28 15:37:57 -07001163{
Jason Sams02fb2cb2009-05-28 15:37:57 -07001164 LOG_API("nSamplerBegin, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -07001165 rsSamplerBegin(con);
Jason Sams02fb2cb2009-05-28 15:37:57 -07001166}
1167
1168static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001169nSamplerSet(JNIEnv *_env, jobject _this, RsContext con, jint p, jint v)
Jason Sams02fb2cb2009-05-28 15:37:57 -07001170{
Jason Sams02fb2cb2009-05-28 15:37:57 -07001171 LOG_API("nSamplerSet, con(%p), param(%i), value(%i)", con, p, v);
Jason Samsbc948de2009-08-17 18:35:48 -07001172 rsSamplerSet(con, (RsSamplerParam)p, (RsSamplerValue)v);
Jason Sams02fb2cb2009-05-28 15:37:57 -07001173}
1174
Alex Sakhartchoukf5b35102010-09-30 11:36:37 -07001175static void
1176nSamplerSet2(JNIEnv *_env, jobject _this, RsContext con, jint p, jfloat v)
1177{
1178 LOG_API("nSamplerSet2, con(%p), param(%i), value(%f)", con, p, v);
1179 rsSamplerSet2(con, (RsSamplerParam)p, v);
1180}
1181
Jason Sams02fb2cb2009-05-28 15:37:57 -07001182static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001183nSamplerCreate(JNIEnv *_env, jobject _this, RsContext con)
Jason Sams02fb2cb2009-05-28 15:37:57 -07001184{
Jason Samsbba134c2009-06-22 15:49:21 -07001185 LOG_API("nSamplerCreate, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -07001186 return (jint)rsSamplerCreate(con);
Jason Sams02fb2cb2009-05-28 15:37:57 -07001187}
1188
Jason Samsbba134c2009-06-22 15:49:21 -07001189// ---------------------------------------------------------------------------
1190
Jason Samsbba134c2009-06-22 15:49:21 -07001191static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001192nMeshCreate(JNIEnv *_env, jobject _this, RsContext con, jint vtxCount, jint idxCount)
Jason Samsbba134c2009-06-22 15:49:21 -07001193{
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001194 LOG_API("nMeshCreate, con(%p), vtxCount(%i), idxCount(%i)", con, vtxCount, idxCount);
1195 int id = (int)rsMeshCreate(con, vtxCount, idxCount);
1196 return id;
1197}
1198
1199static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001200nMeshBindVertex(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jint alloc, jint slot)
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001201{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001202 LOG_API("nMeshBindVertex, con(%p), Mesh(%p), Alloc(%p), slot(%i)", con, (RsMesh)mesh, (RsAllocation)alloc, slot);
1203 rsMeshBindVertex(con, (RsMesh)mesh, (RsAllocation)alloc, slot);
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001204}
1205
1206static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001207nMeshBindIndex(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jint alloc, jint primID, jint slot)
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001208{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001209 LOG_API("nMeshBindIndex, con(%p), Mesh(%p), Alloc(%p)", con, (RsMesh)mesh, (RsAllocation)alloc);
1210 rsMeshBindIndex(con, (RsMesh)mesh, (RsAllocation)alloc, primID, slot);
1211}
1212
Alex Sakhartchouk9d71e212010-11-08 15:10:52 -08001213static void
1214nMeshInitVertexAttribs(JNIEnv *_env, jobject _this, RsContext con, jint mesh)
1215{
1216 LOG_API("nMeshInitVertexAttribs, con(%p), Mesh(%p)", con, (RsMesh)mesh);
1217 rsMeshInitVertexAttribs(con, (RsMesh)mesh);
1218}
1219
1220
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001221static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001222nMeshGetVertexBufferCount(JNIEnv *_env, jobject _this, RsContext con, jint mesh)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001223{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001224 LOG_API("nMeshGetVertexBufferCount, con(%p), Mesh(%p)", con, (RsMesh)mesh);
1225 jint vtxCount = 0;
Alex Sakhartchouk581cc642010-10-27 14:10:07 -07001226 rsaMeshGetVertexBufferCount(con, (RsMesh)mesh, &vtxCount);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001227 return vtxCount;
1228}
1229
1230static jint
Jason Sams2e1872f2010-08-17 16:25:41 -07001231nMeshGetIndexCount(JNIEnv *_env, jobject _this, RsContext con, jint mesh)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001232{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001233 LOG_API("nMeshGetIndexCount, con(%p), Mesh(%p)", con, (RsMesh)mesh);
1234 jint idxCount = 0;
Alex Sakhartchouk581cc642010-10-27 14:10:07 -07001235 rsaMeshGetIndexCount(con, (RsMesh)mesh, &idxCount);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001236 return idxCount;
1237}
1238
1239static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001240nMeshGetVertices(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jintArray _ids, int numVtxIDs)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001241{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001242 LOG_API("nMeshGetVertices, con(%p), Mesh(%p)", con, (RsMesh)mesh);
1243
1244 RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numVtxIDs * sizeof(RsAllocation));
Alex Sakhartchouk581cc642010-10-27 14:10:07 -07001245 rsaMeshGetVertices(con, (RsMesh)mesh, allocs, (uint32_t)numVtxIDs);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001246
1247 for(jint i = 0; i < numVtxIDs; i ++) {
1248 _env->SetIntArrayRegion(_ids, i, 1, (const jint*)&allocs[i]);
1249 }
1250
1251 free(allocs);
1252}
1253
1254static void
Jason Sams2e1872f2010-08-17 16:25:41 -07001255nMeshGetIndices(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jintArray _idxIds, jintArray _primitives, int numIndices)
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001256{
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001257 LOG_API("nMeshGetVertices, con(%p), Mesh(%p)", con, (RsMesh)mesh);
1258
1259 RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numIndices * sizeof(RsAllocation));
1260 uint32_t *prims= (uint32_t*)malloc((uint32_t)numIndices * sizeof(uint32_t));
1261
Alex Sakhartchouk581cc642010-10-27 14:10:07 -07001262 rsaMeshGetIndices(con, (RsMesh)mesh, allocs, prims, (uint32_t)numIndices);
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001263
1264 for(jint i = 0; i < numIndices; i ++) {
1265 _env->SetIntArrayRegion(_idxIds, i, 1, (const jint*)&allocs[i]);
1266 _env->SetIntArrayRegion(_primitives, i, 1, (const jint*)&prims[i]);
1267 }
1268
1269 free(allocs);
1270 free(prims);
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001271}
1272
1273// ---------------------------------------------------------------------------
1274
Jason Samsd19f10d2009-05-22 14:03:28 -07001275
Jason Sams94d8e90a2009-06-10 16:09:05 -07001276static const char *classPathName = "android/renderscript/RenderScript";
Jason Samsd19f10d2009-05-22 14:03:28 -07001277
1278static JNINativeMethod methods[] = {
Jason Sams1c415172010-11-08 17:06:46 -08001279{"_nInit", "()V", (void*)_nInit },
1280{"nInitElements", "(IIII)V", (void*)nInitElements },
Jason Samsea84a7c2009-09-04 14:42:41 -07001281
Jason Sams1c415172010-11-08 17:06:46 -08001282{"nDeviceCreate", "()I", (void*)nDeviceCreate },
1283{"nDeviceDestroy", "(I)V", (void*)nDeviceDestroy },
1284{"nDeviceSetConfig", "(III)V", (void*)nDeviceSetConfig },
1285{"nContextGetUserMessage", "(I[I)V", (void*)nContextGetUserMessage },
1286{"nContextGetErrorMessage", "(I)Ljava/lang/String;", (void*)nContextGetErrorMessage },
1287{"nContextPeekMessage", "(I[IZ)I", (void*)nContextPeekMessage },
1288
1289{"nContextInitToClient", "(I)V", (void*)nContextInitToClient },
1290{"nContextDeinitToClient", "(I)V", (void*)nContextDeinitToClient },
Jason Samsd19f10d2009-05-22 14:03:28 -07001291
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -07001292
Jason Sams2e1872f2010-08-17 16:25:41 -07001293// All methods below are thread protected in java.
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001294{"rsnContextCreate", "(II)I", (void*)nContextCreate },
Jason Sams11c8af92010-10-13 15:31:10 -07001295{"rsnContextCreateGL", "(IIIIIIIIIIIIF)I", (void*)nContextCreateGL },
Jason Sams2e1872f2010-08-17 16:25:41 -07001296{"rsnContextFinish", "(I)V", (void*)nContextFinish },
1297{"rsnContextSetPriority", "(II)V", (void*)nContextSetPriority },
1298{"rsnContextSetSurface", "(IIILandroid/view/Surface;)V", (void*)nContextSetSurface },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001299{"rsnContextDestroy", "(I)V", (void*)nContextDestroy },
Jason Sams2e1872f2010-08-17 16:25:41 -07001300{"rsnContextDump", "(II)V", (void*)nContextDump },
1301{"rsnContextPause", "(I)V", (void*)nContextPause },
1302{"rsnContextResume", "(I)V", (void*)nContextResume },
1303{"rsnAssignName", "(II[B)V", (void*)nAssignName },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001304{"rsnGetName", "(II)Ljava/lang/String;", (void*)nGetName },
Jason Sams2e1872f2010-08-17 16:25:41 -07001305{"rsnObjDestroy", "(II)V", (void*)nObjDestroy },
Jason Sams64676f32009-07-08 18:01:53 -07001306
Jason Sams2e1872f2010-08-17 16:25:41 -07001307{"rsnFileA3DCreateFromAssetStream", "(II)I", (void*)nFileA3DCreateFromAssetStream },
1308{"rsnFileA3DGetNumIndexEntries", "(II)I", (void*)nFileA3DGetNumIndexEntries },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001309{"rsnFileA3DGetIndexEntries", "(III[I[Ljava/lang/String;)V", (void*)nFileA3DGetIndexEntries },
Jason Sams2e1872f2010-08-17 16:25:41 -07001310{"rsnFileA3DGetEntryByIndex", "(III)I", (void*)nFileA3DGetEntryByIndex },
Jason Samsd19f10d2009-05-22 14:03:28 -07001311
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001312{"rsnFontCreateFromFile", "(ILjava/lang/String;II)I", (void*)nFontCreateFromFile },
Jason Samsd19f10d2009-05-22 14:03:28 -07001313
Jason Sams2e1872f2010-08-17 16:25:41 -07001314{"rsnElementCreate", "(IIIZI)I", (void*)nElementCreate },
Jason Sams70d4e502010-09-02 17:35:23 -07001315{"rsnElementCreate2", "(I[I[Ljava/lang/String;[I)I", (void*)nElementCreate2 },
Jason Sams2e1872f2010-08-17 16:25:41 -07001316{"rsnElementGetNativeData", "(II[I)V", (void*)nElementGetNativeData },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001317{"rsnElementGetSubElements", "(II[I[Ljava/lang/String;)V", (void*)nElementGetSubElements },
Jason Samsd19f10d2009-05-22 14:03:28 -07001318
Jason Sams3b9c52a2010-10-14 17:48:46 -07001319{"rsnTypeCreate", "(II[I[I)I", (void*)nTypeCreate },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001320{"rsnTypeGetNativeData", "(II[I)V", (void*)nTypeGetNativeData },
Jason Samsd19f10d2009-05-22 14:03:28 -07001321
Jason Sams2e1872f2010-08-17 16:25:41 -07001322{"rsnAllocationCreateTyped", "(II)I", (void*)nAllocationCreateTyped },
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -07001323{"rsnAllocationUpdateFromBitmap", "(IILandroid/graphics/Bitmap;)V", (void*)nAllocationUpdateFromBitmap },
Jason Sams2e1872f2010-08-17 16:25:41 -07001324{"rsnAllocationCreateFromBitmap", "(IIZLandroid/graphics/Bitmap;)I", (void*)nAllocationCreateFromBitmap },
Alex Sakhartchouk67f2e442010-11-18 15:22:43 -08001325{"rsnAllocationCubeCreateFromBitmap","(IIZLandroid/graphics/Bitmap;)I", (void*)nAllocationCubeCreateFromBitmap },
Jason Sams2e1872f2010-08-17 16:25:41 -07001326{"rsnAllocationCreateBitmapRef", "(IILandroid/graphics/Bitmap;)I", (void*)nAllocationCreateBitmapRef },
Jason Sams2e1872f2010-08-17 16:25:41 -07001327{"rsnAllocationCreateFromAssetStream","(IIZI)I", (void*)nAllocationCreateFromAssetStream },
1328{"rsnAllocationUploadToTexture", "(IIZI)V", (void*)nAllocationUploadToTexture },
1329{"rsnAllocationUploadToBufferObject","(II)V", (void*)nAllocationUploadToBufferObject },
1330{"rsnAllocationSubData1D", "(IIII[II)V", (void*)nAllocationSubData1D_i },
1331{"rsnAllocationSubData1D", "(IIII[SI)V", (void*)nAllocationSubData1D_s },
1332{"rsnAllocationSubData1D", "(IIII[BI)V", (void*)nAllocationSubData1D_b },
1333{"rsnAllocationSubData1D", "(IIII[FI)V", (void*)nAllocationSubData1D_f },
Jason Sams49bdaf02010-08-31 13:50:42 -07001334{"rsnAllocationSubElementData1D", "(IIII[BI)V", (void*)nAllocationSubElementData1D },
Jason Sams2e1872f2010-08-17 16:25:41 -07001335{"rsnAllocationSubData2D", "(IIIIII[II)V", (void*)nAllocationSubData2D_i },
1336{"rsnAllocationSubData2D", "(IIIIII[FI)V", (void*)nAllocationSubData2D_f },
1337{"rsnAllocationRead", "(II[I)V", (void*)nAllocationRead_i },
1338{"rsnAllocationRead", "(II[F)V", (void*)nAllocationRead_f },
Jason Sams2e1872f2010-08-17 16:25:41 -07001339{"rsnAllocationGetType", "(II)I", (void*)nAllocationGetType},
Jason Sams5edc6082010-10-05 13:32:49 -07001340{"rsnAllocationResize1D", "(III)V", (void*)nAllocationResize1D },
1341{"rsnAllocationResize2D", "(IIII)V", (void*)nAllocationResize2D },
Jason Samsbd1c3ad2009-08-03 16:03:08 -07001342
Jason Sams2e1872f2010-08-17 16:25:41 -07001343{"rsnAdapter1DBindAllocation", "(III)V", (void*)nAdapter1DBindAllocation },
1344{"rsnAdapter1DSetConstraint", "(IIII)V", (void*)nAdapter1DSetConstraint },
1345{"rsnAdapter1DData", "(II[I)V", (void*)nAdapter1DData_i },
1346{"rsnAdapter1DData", "(II[F)V", (void*)nAdapter1DData_f },
1347{"rsnAdapter1DSubData", "(IIII[I)V", (void*)nAdapter1DSubData_i },
1348{"rsnAdapter1DSubData", "(IIII[F)V", (void*)nAdapter1DSubData_f },
1349{"rsnAdapter1DCreate", "(I)I", (void*)nAdapter1DCreate },
Jason Sams22534172009-08-04 16:58:20 -07001350
Jason Sams2e1872f2010-08-17 16:25:41 -07001351{"rsnAdapter2DBindAllocation", "(III)V", (void*)nAdapter2DBindAllocation },
1352{"rsnAdapter2DSetConstraint", "(IIII)V", (void*)nAdapter2DSetConstraint },
1353{"rsnAdapter2DData", "(II[I)V", (void*)nAdapter2DData_i },
1354{"rsnAdapter2DData", "(II[F)V", (void*)nAdapter2DData_f },
1355{"rsnAdapter2DSubData", "(IIIIII[I)V", (void*)nAdapter2DSubData_i },
1356{"rsnAdapter2DSubData", "(IIIIII[F)V", (void*)nAdapter2DSubData_f },
1357{"rsnAdapter2DCreate", "(I)I", (void*)nAdapter2DCreate },
Jason Samsd19f10d2009-05-22 14:03:28 -07001358
Jason Sams2e1872f2010-08-17 16:25:41 -07001359{"rsnScriptBindAllocation", "(IIII)V", (void*)nScriptBindAllocation },
1360{"rsnScriptSetTimeZone", "(II[B)V", (void*)nScriptSetTimeZone },
1361{"rsnScriptInvoke", "(III)V", (void*)nScriptInvoke },
1362{"rsnScriptInvokeV", "(III[B)V", (void*)nScriptInvokeV },
1363{"rsnScriptSetVarI", "(IIII)V", (void*)nScriptSetVarI },
Stephen Hines031ec58c2010-10-11 10:54:21 -07001364{"rsnScriptSetVarJ", "(IIIJ)V", (void*)nScriptSetVarJ },
Jason Sams2e1872f2010-08-17 16:25:41 -07001365{"rsnScriptSetVarF", "(IIIF)V", (void*)nScriptSetVarF },
Stephen Hinesca54ec32010-09-20 17:20:30 -07001366{"rsnScriptSetVarD", "(IIID)V", (void*)nScriptSetVarD },
Jason Sams2e1872f2010-08-17 16:25:41 -07001367{"rsnScriptSetVarV", "(III[B)V", (void*)nScriptSetVarV },
Jason Sams6f4cf0b2010-11-16 17:37:02 -08001368{"rsnScriptSetVarObj", "(IIII)V", (void*)nScriptSetVarObj },
Jason Samsd19f10d2009-05-22 14:03:28 -07001369
Jason Sams2e1872f2010-08-17 16:25:41 -07001370{"rsnScriptCBegin", "(I)V", (void*)nScriptCBegin },
1371{"rsnScriptCSetScript", "(I[BII)V", (void*)nScriptCSetScript },
Shih-wei Liaoa914f342010-11-08 01:33:59 -08001372{"rsnScriptCCreate", "(ILjava/lang/String;)I", (void*)nScriptCCreate },
Jason Sams0011bcf2009-12-15 12:58:36 -08001373
Jason Sams2e1872f2010-08-17 16:25:41 -07001374{"rsnProgramStoreBegin", "(III)V", (void*)nProgramStoreBegin },
1375{"rsnProgramStoreDepthFunc", "(II)V", (void*)nProgramStoreDepthFunc },
1376{"rsnProgramStoreDepthMask", "(IZ)V", (void*)nProgramStoreDepthMask },
1377{"rsnProgramStoreColorMask", "(IZZZZ)V", (void*)nProgramStoreColorMask },
1378{"rsnProgramStoreBlendFunc", "(III)V", (void*)nProgramStoreBlendFunc },
1379{"rsnProgramStoreDither", "(IZ)V", (void*)nProgramStoreDither },
1380{"rsnProgramStoreCreate", "(I)I", (void*)nProgramStoreCreate },
Jason Samsd19f10d2009-05-22 14:03:28 -07001381
Jason Sams2e1872f2010-08-17 16:25:41 -07001382{"rsnProgramBindConstants", "(IIII)V", (void*)nProgramBindConstants },
1383{"rsnProgramBindTexture", "(IIII)V", (void*)nProgramBindTexture },
1384{"rsnProgramBindSampler", "(IIII)V", (void*)nProgramBindSampler },
Jason Samsebfb4362009-09-23 13:57:02 -07001385
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001386{"rsnProgramFragmentCreate", "(ILjava/lang/String;[I)I", (void*)nProgramFragmentCreate },
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001387
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001388{"rsnProgramRasterCreate", "(IZZZ)I", (void*)nProgramRasterCreate },
Jason Sams2e1872f2010-08-17 16:25:41 -07001389{"rsnProgramRasterSetLineWidth", "(IIF)V", (void*)nProgramRasterSetLineWidth },
1390{"rsnProgramRasterSetCullMode", "(III)V", (void*)nProgramRasterSetCullMode },
Jason Samsbba134c2009-06-22 15:49:21 -07001391
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001392{"rsnProgramVertexCreate", "(ILjava/lang/String;[I)I", (void*)nProgramVertexCreate },
Jason Samsd19f10d2009-05-22 14:03:28 -07001393
Jason Sams2e1872f2010-08-17 16:25:41 -07001394{"rsnContextBindRootScript", "(II)V", (void*)nContextBindRootScript },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001395{"rsnContextBindProgramStore", "(II)V", (void*)nContextBindProgramStore },
Jason Sams2e1872f2010-08-17 16:25:41 -07001396{"rsnContextBindProgramFragment", "(II)V", (void*)nContextBindProgramFragment },
1397{"rsnContextBindProgramVertex", "(II)V", (void*)nContextBindProgramVertex },
1398{"rsnContextBindProgramRaster", "(II)V", (void*)nContextBindProgramRaster },
Jason Sams02fb2cb2009-05-28 15:37:57 -07001399
Jason Sams2e1872f2010-08-17 16:25:41 -07001400{"rsnSamplerBegin", "(I)V", (void*)nSamplerBegin },
1401{"rsnSamplerSet", "(III)V", (void*)nSamplerSet },
Alex Sakhartchoukf5b35102010-09-30 11:36:37 -07001402{"rsnSamplerSet2", "(IIF)V", (void*)nSamplerSet2 },
Jason Sams2e1872f2010-08-17 16:25:41 -07001403{"rsnSamplerCreate", "(I)I", (void*)nSamplerCreate },
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -07001404
Jason Sams2e1872f2010-08-17 16:25:41 -07001405{"rsnMeshCreate", "(III)I", (void*)nMeshCreate },
1406{"rsnMeshBindVertex", "(IIII)V", (void*)nMeshBindVertex },
1407{"rsnMeshBindIndex", "(IIIII)V", (void*)nMeshBindIndex },
Alex Sakhartchouk9d71e212010-11-08 15:10:52 -08001408{"rsnMeshInitVertexAttribs", "(II)V", (void*)nMeshInitVertexAttribs },
Jason Sams2e1872f2010-08-17 16:25:41 -07001409
1410{"rsnMeshGetVertexBufferCount", "(II)I", (void*)nMeshGetVertexBufferCount },
1411{"rsnMeshGetIndexCount", "(II)I", (void*)nMeshGetIndexCount },
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -07001412{"rsnMeshGetVertices", "(II[II)V", (void*)nMeshGetVertices },
Jason Sams2e1872f2010-08-17 16:25:41 -07001413{"rsnMeshGetIndices", "(II[I[II)V", (void*)nMeshGetIndices },
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001414
Jason Samsd19f10d2009-05-22 14:03:28 -07001415};
1416
1417static int registerFuncs(JNIEnv *_env)
1418{
1419 return android::AndroidRuntime::registerNativeMethods(
1420 _env, classPathName, methods, NELEM(methods));
1421}
1422
1423// ---------------------------------------------------------------------------
1424
1425jint JNI_OnLoad(JavaVM* vm, void* reserved)
1426{
1427 JNIEnv* env = NULL;
1428 jint result = -1;
1429
Jason Samsd19f10d2009-05-22 14:03:28 -07001430 if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
1431 LOGE("ERROR: GetEnv failed\n");
1432 goto bail;
1433 }
1434 assert(env != NULL);
1435
1436 if (registerFuncs(env) < 0) {
1437 LOGE("ERROR: MediaPlayer native registration failed\n");
1438 goto bail;
1439 }
1440
1441 /* success -- return valid version number */
1442 result = JNI_VERSION_1_4;
1443
1444bail:
1445 return result;
1446}
Alex Sakhartchouk80a4c2c2010-07-12 15:50:32 -07001447