blob: 558146d79dcefcd5a106f3ff3e6e3f1927c5bae1 [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
Jason Samsd19f10d2009-05-22 14:03:28 -070026#include <ui/Surface.h>
27
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"
40
Jason Samse29d4712009-07-23 15:19:03 -070041#include <RenderScript.h>
42#include <RenderScriptEnv.h>
Jason Samsd19f10d2009-05-22 14:03:28 -070043
44//#define LOG_API LOGE
45#define LOG_API(...)
46
47using namespace android;
48
Jason Samsd19f10d2009-05-22 14:03:28 -070049// ---------------------------------------------------------------------------
50
51static void doThrow(JNIEnv* env, const char* exc, const char* msg = NULL)
52{
53 jclass npeClazz = env->FindClass(exc);
54 env->ThrowNew(npeClazz, msg);
55}
56
Jason Samsffe9f482009-06-01 17:45:53 -070057static jfieldID gContextId = 0;
58static jfieldID gNativeBitmapID = 0;
Jason Sams43ee06852009-08-12 17:54:11 -070059static jfieldID gTypeNativeCache = 0;
Jason Samsd19f10d2009-05-22 14:03:28 -070060
61static void _nInit(JNIEnv *_env, jclass _this)
62{
Jason Samsd19f10d2009-05-22 14:03:28 -070063 gContextId = _env->GetFieldID(_this, "mContext", "I");
Jason Samsffe9f482009-06-01 17:45:53 -070064
65 jclass bitmapClass = _env->FindClass("android/graphics/Bitmap");
66 gNativeBitmapID = _env->GetFieldID(bitmapClass, "mNativeBitmap", "I");
Jason Sams43ee06852009-08-12 17:54:11 -070067
68 jclass typeClass = _env->FindClass("android/renderscript/Type");
69 gTypeNativeCache = _env->GetFieldID(typeClass, "mNativeCache", "I");
Jason Samsd19f10d2009-05-22 14:03:28 -070070}
71
72
73// ---------------------------------------------------------------------------
74
Jason Sams3eaa338e2009-06-10 15:04:38 -070075static void
76nAssignName(JNIEnv *_env, jobject _this, jint obj, jbyteArray str)
77{
78 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
Jason Sams07ae4062009-08-27 20:23:34 -070079 LOG_API("nAssignName, con(%p), obj(%p)", con, (void *)obj);
Jason Sams3eaa338e2009-06-10 15:04:38 -070080
81 jint len = _env->GetArrayLength(str);
82 jbyte * cptr = (jbyte *) _env->GetPrimitiveArrayCritical(str, 0);
Jason Samsbc948de2009-08-17 18:35:48 -070083 rsAssignName(con, (void *)obj, (const char *)cptr, len);
Jason Sams3eaa338e2009-06-10 15:04:38 -070084 _env->ReleasePrimitiveArrayCritical(str, cptr, JNI_ABORT);
85}
86
Jason Sams7ce033d2009-08-18 14:14:24 -070087static void
88nObjDestroy(JNIEnv *_env, jobject _this, jint obj)
89{
90 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
91 LOG_API("nObjDestroy, con(%p) obj(%p)", con, (void *)obj);
92 rsObjDestroy(con, (void *)obj);
93}
94
Jason Sams730ee652009-08-18 17:07:09 -070095static void
96nObjDestroyOOB(JNIEnv *_env, jobject _this, jint obj)
97{
98 // This function only differs from nObjDestroy in that it calls the
99 // special Out Of Band version of ObjDestroy which is thread safe.
100 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
101 LOG_API("nObjDestroyOOB, con(%p) obj(%p)", con, (void *)obj);
102 rsObjDestroyOOB(con, (void *)obj);
103}
Jason Sams3eaa338e2009-06-10 15:04:38 -0700104
Jason Sams64676f32009-07-08 18:01:53 -0700105static jint
106nFileOpen(JNIEnv *_env, jobject _this, jbyteArray str)
107{
108 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
109 LOG_API("nFileOpen, con(%p)", con);
110
111 jint len = _env->GetArrayLength(str);
112 jbyte * cptr = (jbyte *) _env->GetPrimitiveArrayCritical(str, 0);
Jason Samsbc948de2009-08-17 18:35:48 -0700113 jint ret = (jint)rsFileOpen(con, (const char *)cptr, len);
Jason Sams64676f32009-07-08 18:01:53 -0700114 _env->ReleasePrimitiveArrayCritical(str, cptr, JNI_ABORT);
115 return ret;
116}
117
Jason Sams3eaa338e2009-06-10 15:04:38 -0700118// ---------------------------------------------------------------------------
119
Jason Samsd19f10d2009-05-22 14:03:28 -0700120static jint
121nDeviceCreate(JNIEnv *_env, jobject _this)
122{
123 LOG_API("nDeviceCreate");
124 return (jint)rsDeviceCreate();
125}
126
127static void
128nDeviceDestroy(JNIEnv *_env, jobject _this, jint dev)
129{
130 LOG_API("nDeviceDestroy");
131 return rsDeviceDestroy((RsDevice)dev);
132}
133
134static jint
Jason Samsb13ada52009-08-25 11:34:49 -0700135nContextCreate(JNIEnv *_env, jobject _this, jint dev, jobject wnd, jint ver, jboolean useDepth)
Jason Samsd19f10d2009-05-22 14:03:28 -0700136{
137 LOG_API("nContextCreate");
138
139 if (wnd == NULL) {
140 not_valid_surface:
141 doThrow(_env, "java/lang/IllegalArgumentException",
142 "Make sure the SurfaceView or associated SurfaceHolder has a valid Surface");
143 return 0;
144 }
145 jclass surface_class = _env->FindClass("android/view/Surface");
146 jfieldID surfaceFieldID = _env->GetFieldID(surface_class, "mSurface", "I");
147 Surface * window = (Surface*)_env->GetIntField(wnd, surfaceFieldID);
148 if (window == NULL)
149 goto not_valid_surface;
150
Jason Samsb13ada52009-08-25 11:34:49 -0700151 return (jint)rsContextCreate((RsDevice)dev, window, ver, useDepth);
Jason Samsd19f10d2009-05-22 14:03:28 -0700152}
153
154static void
155nContextDestroy(JNIEnv *_env, jobject _this, jint con)
156{
157 LOG_API("nContextDestroy, con(%p)", (RsContext)con);
158 return rsContextDestroy((RsContext)con);
159}
160
161
162static void
163nElementBegin(JNIEnv *_env, jobject _this)
164{
165 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
166 LOG_API("nElementBegin, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -0700167 rsElementBegin(con);
Jason Samsd19f10d2009-05-22 14:03:28 -0700168}
169
170static void
171nElementAddPredefined(JNIEnv *_env, jobject _this, jint predef)
172{
173 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
174 LOG_API("nElementAddPredefined, con(%p), predef(%i)", con, predef);
Jason Samsbc948de2009-08-17 18:35:48 -0700175 rsElementAddPredefined(con, (RsElementPredefined)predef);
Jason Samsd19f10d2009-05-22 14:03:28 -0700176}
177
178static void
Jason Sams43ee06852009-08-12 17:54:11 -0700179nElementAdd(JNIEnv *_env, jobject _this, jint kind, jint type, jint norm, jint bits, jstring name)
Jason Samsd19f10d2009-05-22 14:03:28 -0700180{
181 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
Jason Sams43ee06852009-08-12 17:54:11 -0700182 const char* n = NULL;
183 if (name) {
184 n = _env->GetStringUTFChars(name, NULL);
185 }
Jason Samsd19f10d2009-05-22 14:03:28 -0700186 LOG_API("nElementAdd, con(%p), kind(%i), type(%i), norm(%i), bits(%i)", con, kind, type, norm, bits);
Jason Samsbc948de2009-08-17 18:35:48 -0700187 rsElementAdd(con, (RsDataKind)kind, (RsDataType)type, norm != 0, (size_t)bits, n);
Jason Sams43ee06852009-08-12 17:54:11 -0700188 if (n) {
189 _env->ReleaseStringUTFChars(name, n);
190 }
Jason Samsd19f10d2009-05-22 14:03:28 -0700191}
192
193static jint
194nElementCreate(JNIEnv *_env, jobject _this)
195{
196 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
197 LOG_API("nElementCreate, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -0700198 return (jint)rsElementCreate(con);
Jason Samsd19f10d2009-05-22 14:03:28 -0700199}
200
201static jint
202nElementGetPredefined(JNIEnv *_env, jobject _this, jint predef)
203{
204 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
205 LOG_API("nElementGetPredefined, con(%p) predef(%i)", con, predef);
Jason Samsbc948de2009-08-17 18:35:48 -0700206 return (jint)rsElementGetPredefined(con, (RsElementPredefined)predef);
Jason Samsd19f10d2009-05-22 14:03:28 -0700207}
208
Jason Samsd19f10d2009-05-22 14:03:28 -0700209// -----------------------------------
210
211static void
212nTypeBegin(JNIEnv *_env, jobject _this, jint eID)
213{
214 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
215 LOG_API("nTypeBegin, con(%p) e(%p)", con, (RsElement)eID);
Jason Samsbc948de2009-08-17 18:35:48 -0700216 rsTypeBegin(con, (RsElement)eID);
Jason Samsd19f10d2009-05-22 14:03:28 -0700217}
218
219static void
220nTypeAdd(JNIEnv *_env, jobject _this, jint dim, jint val)
221{
222 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
223 LOG_API("nTypeAdd, con(%p) dim(%i), val(%i)", con, dim, val);
Jason Samsbc948de2009-08-17 18:35:48 -0700224 rsTypeAdd(con, (RsDimension)dim, val);
Jason Samsd19f10d2009-05-22 14:03:28 -0700225}
226
227static jint
228nTypeCreate(JNIEnv *_env, jobject _this)
229{
230 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
231 LOG_API("nTypeCreate, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -0700232 return (jint)rsTypeCreate(con);
Jason Samsd19f10d2009-05-22 14:03:28 -0700233}
234
Jason Sams43ee06852009-08-12 17:54:11 -0700235static void * SF_LoadInt(JNIEnv *_env, jobject _obj, jfieldID _field, void *buffer)
236{
237 ((int32_t *)buffer)[0] = _env->GetIntField(_obj, _field);
238 return ((uint8_t *)buffer) + 4;
239}
240
241static void * SF_LoadShort(JNIEnv *_env, jobject _obj, jfieldID _field, void *buffer)
242{
243 ((int16_t *)buffer)[0] = _env->GetShortField(_obj, _field);
244 return ((uint8_t *)buffer) + 2;
245}
246
247static void * SF_LoadByte(JNIEnv *_env, jobject _obj, jfieldID _field, void *buffer)
248{
249 ((int8_t *)buffer)[0] = _env->GetByteField(_obj, _field);
250 return ((uint8_t *)buffer) + 1;
251}
252
253static void * SF_LoadFloat(JNIEnv *_env, jobject _obj, jfieldID _field, void *buffer)
254{
255 ((float *)buffer)[0] = _env->GetFloatField(_obj, _field);
256 return ((uint8_t *)buffer) + 4;
257}
258
259struct TypeFieldCache {
260 jfieldID field;
261 int bits;
262 void * (*ptr)(JNIEnv *, jobject, jfieldID, void *buffer);
263};
264
265struct TypeCache {
266 int fieldCount;
267 int size;
268 TypeFieldCache fields[1];
269};
270
271//{"nTypeFinalDestroy", "(Landroid/renderscript/Type;)V", (void*)nTypeFinalDestroy },
272static void
273nTypeFinalDestroy(JNIEnv *_env, jobject _this, jobject _type)
274{
275 TypeCache *tc = (TypeCache *)_env->GetIntField(_type, gTypeNativeCache);
276 free(tc);
277}
278
279// native void nTypeSetupFields(Type t, int[] types, int[] bits, Field[] IDs);
280static void
281nTypeSetupFields(JNIEnv *_env, jobject _this, jobject _type, jintArray _types, jintArray _bits, jobjectArray _IDs)
282{
283 int fieldCount = _env->GetArrayLength(_types);
284 size_t structSize = sizeof(TypeCache) + (sizeof(TypeFieldCache) * (fieldCount-1));
285 TypeCache *tc = (TypeCache *)malloc(structSize);
286 memset(tc, 0, structSize);
287
288 TypeFieldCache *tfc = &tc->fields[0];
289 tc->fieldCount = fieldCount;
290 _env->SetIntField(_type, gTypeNativeCache, (jint)tc);
291
292 jint *fType = _env->GetIntArrayElements(_types, NULL);
293 jint *fBits = _env->GetIntArrayElements(_bits, NULL);
294 for (int ct=0; ct < fieldCount; ct++) {
295 jobject field = _env->GetObjectArrayElement(_IDs, ct);
296 tfc[ct].field = _env->FromReflectedField(field);
297 tfc[ct].bits = fBits[ct];
298
299 switch(fType[ct]) {
300 case RS_TYPE_FLOAT:
301 tfc[ct].ptr = SF_LoadFloat;
302 break;
303 case RS_TYPE_UNSIGNED:
304 case RS_TYPE_SIGNED:
305 switch(tfc[ct].bits) {
306 case 32: tfc[ct].ptr = SF_LoadInt; break;
307 case 16: tfc[ct].ptr = SF_LoadShort; break;
308 case 8: tfc[ct].ptr = SF_LoadByte; break;
309 }
310 break;
311 }
312 tc->size += 4;
313 }
314
315 _env->ReleaseIntArrayElements(_types, fType, JNI_ABORT);
316 _env->ReleaseIntArrayElements(_bits, fBits, JNI_ABORT);
317}
318
319
Jason Samsd19f10d2009-05-22 14:03:28 -0700320// -----------------------------------
321
322static jint
323nAllocationCreateTyped(JNIEnv *_env, jobject _this, jint e)
324{
325 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
326 LOG_API("nAllocationCreateTyped, con(%p), e(%p)", con, (RsElement)e);
Jason Samsbc948de2009-08-17 18:35:48 -0700327 return (jint) rsAllocationCreateTyped(con, (RsElement)e);
Jason Samsd19f10d2009-05-22 14:03:28 -0700328}
329
330static jint
331nAllocationCreatePredefSized(JNIEnv *_env, jobject _this, jint predef, jint count)
332{
333 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
334 LOG_API("nAllocationCreatePredefSized, con(%p), predef(%i), count(%i)", con, predef, count);
Jason Samsbc948de2009-08-17 18:35:48 -0700335 return (jint) rsAllocationCreatePredefSized(con, (RsElementPredefined)predef, count);
Jason Samsd19f10d2009-05-22 14:03:28 -0700336}
337
338static jint
339nAllocationCreateSized(JNIEnv *_env, jobject _this, jint e, jint count)
340{
341 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
342 LOG_API("nAllocationCreateSized, con(%p), e(%p), count(%i)", con, (RsElement)e, count);
Jason Samsbc948de2009-08-17 18:35:48 -0700343 return (jint) rsAllocationCreateSized(con, (RsElement)e, count);
Jason Samsd19f10d2009-05-22 14:03:28 -0700344}
345
346static void
347nAllocationUploadToTexture(JNIEnv *_env, jobject _this, jint a, jint mip)
348{
349 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
350 LOG_API("nAllocationUploadToTexture, con(%p), a(%p), mip(%i)", con, (RsAllocation)a, mip);
Jason Samsbc948de2009-08-17 18:35:48 -0700351 rsAllocationUploadToTexture(con, (RsAllocation)a, mip);
Jason Samsd19f10d2009-05-22 14:03:28 -0700352}
353
Jason Sams07ae4062009-08-27 20:23:34 -0700354static void
355nAllocationUploadToBufferObject(JNIEnv *_env, jobject _this, jint a)
356{
357 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
358 LOG_API("nAllocationUploadToBufferObject, con(%p), a(%p)", con, (RsAllocation)a);
359 rsAllocationUploadToBufferObject(con, (RsAllocation)a);
360}
361
Jason Samsffe9f482009-06-01 17:45:53 -0700362static RsElementPredefined SkBitmapToPredefined(SkBitmap::Config cfg)
Jason Samsfe08d992009-05-27 14:45:32 -0700363{
Jason Samsffe9f482009-06-01 17:45:53 -0700364 switch (cfg) {
365 case SkBitmap::kA8_Config:
366 return RS_ELEMENT_A_8;
367 case SkBitmap::kARGB_4444_Config:
368 return RS_ELEMENT_RGBA_4444;
369 case SkBitmap::kARGB_8888_Config:
370 return RS_ELEMENT_RGBA_8888;
371 case SkBitmap::kRGB_565_Config:
372 return RS_ELEMENT_RGB_565;
Jason Samsfe08d992009-05-27 14:45:32 -0700373
Jason Samsffe9f482009-06-01 17:45:53 -0700374 default:
375 break;
376 }
377 // If we don't have a conversion mark it as a user type.
378 LOGE("Unsupported bitmap type");
379 return RS_ELEMENT_USER_U8;
Jason Samsfe08d992009-05-27 14:45:32 -0700380}
381
Jason Samsffe9f482009-06-01 17:45:53 -0700382static int
383nAllocationCreateFromBitmap(JNIEnv *_env, jobject _this, jint dstFmt, jboolean genMips, jobject jbitmap)
384{
385 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
386 SkBitmap const * nativeBitmap =
387 (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
388 const SkBitmap& bitmap(*nativeBitmap);
389 SkBitmap::Config config = bitmap.getConfig();
390
391 RsElementPredefined e = SkBitmapToPredefined(config);
392
393 if (e != RS_ELEMENT_USER_U8) {
394 bitmap.lockPixels();
395 const int w = bitmap.width();
396 const int h = bitmap.height();
397 const void* ptr = bitmap.getPixels();
Jason Samsbc948de2009-08-17 18:35:48 -0700398 jint id = (jint)rsAllocationCreateFromBitmap(con, w, h, (RsElementPredefined)dstFmt, e, genMips, ptr);
Jason Samsffe9f482009-06-01 17:45:53 -0700399 bitmap.unlockPixels();
400 return id;
401 }
402 return 0;
403}
Jason Samsfe08d992009-05-27 14:45:32 -0700404
Jason Samsb0ec1b42009-07-28 12:02:16 -0700405static int
Romain Guy650a3eb2009-08-31 14:06:43 -0700406nAllocationCreateFromAssetStream(JNIEnv *_env, jobject _this, jint dstFmt, jboolean genMips, jint native_asset)
407{
408 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
409
410 Asset* asset = reinterpret_cast<Asset*>(native_asset);
411 SkBitmap bitmap;
412 SkImageDecoder::DecodeMemory(asset->getBuffer(false), asset->getLength(),
413 &bitmap, SkBitmap::kNo_Config, SkImageDecoder::kDecodePixels_Mode);
414
415 SkBitmap::Config config = bitmap.getConfig();
416
417 RsElementPredefined e = SkBitmapToPredefined(config);
418
419 if (e != RS_ELEMENT_USER_U8) {
420 bitmap.lockPixels();
421 const int w = bitmap.width();
422 const int h = bitmap.height();
423 const void* ptr = bitmap.getPixels();
424 jint id = (jint)rsAllocationCreateFromBitmap(con, w, h, (RsElementPredefined)dstFmt, e, genMips, ptr);
425 bitmap.unlockPixels();
426 return id;
427 }
428 return 0;
429}
430
431static int
Jason Samsb0ec1b42009-07-28 12:02:16 -0700432nAllocationCreateFromBitmapBoxed(JNIEnv *_env, jobject _this, jint dstFmt, jboolean genMips, jobject jbitmap)
433{
434 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
435 SkBitmap const * nativeBitmap =
436 (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
437 const SkBitmap& bitmap(*nativeBitmap);
438 SkBitmap::Config config = bitmap.getConfig();
439
440 RsElementPredefined e = SkBitmapToPredefined(config);
441
442 if (e != RS_ELEMENT_USER_U8) {
443 bitmap.lockPixels();
444 const int w = bitmap.width();
445 const int h = bitmap.height();
446 const void* ptr = bitmap.getPixels();
Jason Samsbc948de2009-08-17 18:35:48 -0700447 jint id = (jint)rsAllocationCreateFromBitmapBoxed(con, w, h, (RsElementPredefined)dstFmt, e, genMips, ptr);
Jason Samsb0ec1b42009-07-28 12:02:16 -0700448 bitmap.unlockPixels();
449 return id;
450 }
451 return 0;
452}
453
Jason Samsfe08d992009-05-27 14:45:32 -0700454
Jason Samsd19f10d2009-05-22 14:03:28 -0700455static void
Jason Sams07ae4062009-08-27 20:23:34 -0700456nAllocationData_i(JNIEnv *_env, jobject _this, jint alloc, jintArray data, int sizeBytes)
Jason Samsd19f10d2009-05-22 14:03:28 -0700457{
458 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
459 jint len = _env->GetArrayLength(data);
460 LOG_API("nAllocationData_i, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
461 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Sams07ae4062009-08-27 20:23:34 -0700462 rsAllocationData(con, (RsAllocation)alloc, ptr, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700463 _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
464}
465
466static void
Jason Sams07ae4062009-08-27 20:23:34 -0700467nAllocationData_f(JNIEnv *_env, jobject _this, jint alloc, jfloatArray data, int sizeBytes)
Jason Samsd19f10d2009-05-22 14:03:28 -0700468{
469 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
470 jint len = _env->GetArrayLength(data);
471 LOG_API("nAllocationData_i, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
472 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Sams07ae4062009-08-27 20:23:34 -0700473 rsAllocationData(con, (RsAllocation)alloc, ptr, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700474 _env->ReleaseFloatArrayElements(data, ptr, JNI_ABORT);
475}
476
477static void
Jason Sams07ae4062009-08-27 20:23:34 -0700478nAllocationSubData1D_i(JNIEnv *_env, jobject _this, jint alloc, jint offset, jint count, jintArray data, int sizeBytes)
Jason Samsd19f10d2009-05-22 14:03:28 -0700479{
480 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
481 jint len = _env->GetArrayLength(data);
482 LOG_API("nAllocation1DSubData_i, con(%p), adapter(%p), offset(%i), count(%i), len(%i)", con, (RsAllocation)alloc, offset, count, len);
483 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Sams07ae4062009-08-27 20:23:34 -0700484 rsAllocation1DSubData(con, (RsAllocation)alloc, offset, count, ptr, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700485 _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
486}
487
488static void
Jason Sams07ae4062009-08-27 20:23:34 -0700489nAllocationSubData1D_f(JNIEnv *_env, jobject _this, jint alloc, jint offset, jint count, jfloatArray data, int sizeBytes)
Jason Samsd19f10d2009-05-22 14:03:28 -0700490{
491 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
492 jint len = _env->GetArrayLength(data);
493 LOG_API("nAllocation1DSubData_f, con(%p), adapter(%p), offset(%i), count(%i), len(%i)", con, (RsAllocation)alloc, offset, count, len);
494 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Sams07ae4062009-08-27 20:23:34 -0700495 rsAllocation1DSubData(con, (RsAllocation)alloc, offset, count, ptr, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700496 _env->ReleaseFloatArrayElements(data, ptr, JNI_ABORT);
497}
498
499static void
Jason Sams07ae4062009-08-27 20:23:34 -0700500nAllocationSubData2D_i(JNIEnv *_env, jobject _this, jint alloc, jint xoff, jint yoff, jint w, jint h, jintArray data, int sizeBytes)
Jason Samsd19f10d2009-05-22 14:03:28 -0700501{
502 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
503 jint len = _env->GetArrayLength(data);
504 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);
505 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Sams07ae4062009-08-27 20:23:34 -0700506 rsAllocation2DSubData(con, (RsAllocation)alloc, xoff, yoff, w, h, ptr, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700507 _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
508}
509
510static void
Jason Sams07ae4062009-08-27 20:23:34 -0700511nAllocationSubData2D_f(JNIEnv *_env, jobject _this, jint alloc, jint xoff, jint yoff, jint w, jint h, jfloatArray data, int sizeBytes)
Jason Samsd19f10d2009-05-22 14:03:28 -0700512{
513 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
514 jint len = _env->GetArrayLength(data);
515 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);
516 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Sams07ae4062009-08-27 20:23:34 -0700517 rsAllocation2DSubData(con, (RsAllocation)alloc, xoff, yoff, w, h, ptr, sizeBytes);
Jason Samsd19f10d2009-05-22 14:03:28 -0700518 _env->ReleaseFloatArrayElements(data, ptr, JNI_ABORT);
519}
520
Jason Sams40a29e82009-08-10 14:55:26 -0700521static void
522nAllocationRead_i(JNIEnv *_env, jobject _this, jint alloc, jintArray data)
523{
524 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
525 jint len = _env->GetArrayLength(data);
526 LOG_API("nAllocationRead_i, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
527 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700528 rsAllocationRead(con, (RsAllocation)alloc, ptr);
Joe Onoratoae209ac2009-08-31 17:23:53 -0700529 _env->ReleaseIntArrayElements(data, ptr, 0);
Jason Sams40a29e82009-08-10 14:55:26 -0700530}
531
532static void
533nAllocationRead_f(JNIEnv *_env, jobject _this, jint alloc, jfloatArray data)
534{
535 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
536 jint len = _env->GetArrayLength(data);
Joe Onoratoa8f2ace2009-08-12 11:47:23 -0700537 LOG_API("nAllocationRead_f, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
Jason Sams40a29e82009-08-10 14:55:26 -0700538 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700539 rsAllocationRead(con, (RsAllocation)alloc, ptr);
Joe Onoratoae209ac2009-08-31 17:23:53 -0700540 _env->ReleaseFloatArrayElements(data, ptr, 0);
Jason Sams40a29e82009-08-10 14:55:26 -0700541}
Jason Samsd19f10d2009-05-22 14:03:28 -0700542
543
Jason Sams43ee06852009-08-12 17:54:11 -0700544//{"nAllocationDataFromObject", "(ILandroid/renderscript/Type;Ljava/lang/Object;)V", (void*)nAllocationDataFromObject },
545static void
546nAllocationDataFromObject(JNIEnv *_env, jobject _this, jint alloc, jobject _type, jobject _o)
547{
548 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
549 LOG_API("nAllocationDataFromObject con(%p), alloc(%p)", con, (RsAllocation)alloc);
550
551 const TypeCache *tc = (TypeCache *)_env->GetIntField(_type, gTypeNativeCache);
552
553 void * bufAlloc = malloc(tc->size);
554 void * buf = bufAlloc;
555 for (int ct=0; ct < tc->fieldCount; ct++) {
556 const TypeFieldCache *tfc = &tc->fields[ct];
557 buf = tfc->ptr(_env, _o, tfc->field, buf);
558 }
Jason Sams07ae4062009-08-27 20:23:34 -0700559 rsAllocationData(con, (RsAllocation)alloc, bufAlloc, tc->size);
Jason Sams43ee06852009-08-12 17:54:11 -0700560 const uint32_t * tmp = (const uint32_t *)bufAlloc;
561 free(bufAlloc);
562}
563
Jason Samsd19f10d2009-05-22 14:03:28 -0700564// -----------------------------------
565
566static void
Jason Samsd19f10d2009-05-22 14:03:28 -0700567nTriangleMeshBegin(JNIEnv *_env, jobject _this, jint v, jint i)
568{
569 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
570 LOG_API("nTriangleMeshBegin, con(%p), vertex(%p), index(%p)", con, (RsElement)v, (RsElement)i);
Jason Samsbc948de2009-08-17 18:35:48 -0700571 rsTriangleMeshBegin(con, (RsElement)v, (RsElement)i);
Jason Samsd19f10d2009-05-22 14:03:28 -0700572}
573
574static void
575nTriangleMeshAddVertex_XY(JNIEnv *_env, jobject _this, jfloat x, jfloat y)
576{
577 float v[] = {x, y};
578 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
579 LOG_API("nTriangleMeshAddVertex_XY, con(%p), x(%f), y(%f)", con, x, y);
Jason Samsbc948de2009-08-17 18:35:48 -0700580 rsTriangleMeshAddVertex(con, v);
Jason Samsd19f10d2009-05-22 14:03:28 -0700581}
582
583static void
584nTriangleMeshAddVertex_XYZ(JNIEnv *_env, jobject _this, jfloat x, jfloat y, jfloat z)
585{
586 float v[] = {x, y, z};
587 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
588 LOG_API("nTriangleMeshAddVertex_XYZ, con(%p), x(%f), y(%f), z(%f)", con, x, y, z);
Jason Samsbc948de2009-08-17 18:35:48 -0700589 rsTriangleMeshAddVertex(con, v);
Jason Samsd19f10d2009-05-22 14:03:28 -0700590}
591
592static void
593nTriangleMeshAddVertex_XY_ST(JNIEnv *_env, jobject _this, jfloat x, jfloat y, jfloat s, jfloat t)
594{
595 float v[] = {s, t, x, y};
596 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
597 LOG_API("nTriangleMeshAddVertex_XY_ST, con(%p), x(%f), y(%f), s(%f), t(%f)", con, x, y, s, t);
Jason Samsbc948de2009-08-17 18:35:48 -0700598 rsTriangleMeshAddVertex(con, v);
Jason Samsd19f10d2009-05-22 14:03:28 -0700599}
600
601static void
602nTriangleMeshAddVertex_XYZ_ST(JNIEnv *_env, jobject _this, jfloat x, jfloat y, jfloat z, jfloat s, jfloat t)
603{
604 float v[] = {s, t, x, y, z};
605 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
606 LOG_API("nTriangleMeshAddVertex_XYZ_ST, con(%p), x(%f), y(%f), z(%f), s(%f), t(%f)", con, x, y, z, s, t);
Jason Samsbc948de2009-08-17 18:35:48 -0700607 rsTriangleMeshAddVertex(con, v);
Jason Samsd19f10d2009-05-22 14:03:28 -0700608}
609
610static void
Jason Sams0826a6f2009-06-15 19:04:56 -0700611nTriangleMeshAddVertex_XYZ_ST_NORM(JNIEnv *_env, jobject _this, jfloat x, jfloat y, jfloat z, jfloat s, jfloat t, jfloat nx, jfloat ny, jfloat nz)
612{
613 float v[] = {nx, ny, nz, s, t, x, y, z};
614 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
615 LOG_API("nTriangleMeshAddVertex_XYZ_ST, con(%p), x(%f), y(%f), z(%f), s(%f), t(%f)", con, x, y, z, s, t);
Jason Samsbc948de2009-08-17 18:35:48 -0700616 rsTriangleMeshAddVertex(con, v);
Jason Sams0826a6f2009-06-15 19:04:56 -0700617}
618
619static void
Jason Samsd19f10d2009-05-22 14:03:28 -0700620nTriangleMeshAddTriangle(JNIEnv *_env, jobject _this, jint i1, jint i2, jint i3)
621{
622 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
623 LOG_API("nTriangleMeshAddTriangle, con(%p), i1(%i), i2(%i), i3(%i)", con, i1, i2, i3);
Jason Samsbc948de2009-08-17 18:35:48 -0700624 rsTriangleMeshAddTriangle(con, i1, i2, i3);
Jason Samsd19f10d2009-05-22 14:03:28 -0700625}
626
627static jint
628nTriangleMeshCreate(JNIEnv *_env, jobject _this)
629{
630 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
631 LOG_API("nTriangleMeshCreate, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -0700632 return (jint) rsTriangleMeshCreate(con);
Jason Samsd19f10d2009-05-22 14:03:28 -0700633}
634
635// -----------------------------------
636
637static void
Jason Samsd19f10d2009-05-22 14:03:28 -0700638nAdapter1DBindAllocation(JNIEnv *_env, jobject _this, jint adapter, jint alloc)
639{
640 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
641 LOG_API("nAdapter1DBindAllocation, con(%p), adapter(%p), alloc(%p)", con, (RsAdapter1D)adapter, (RsAllocation)alloc);
Jason Samsbc948de2009-08-17 18:35:48 -0700642 rsAdapter1DBindAllocation(con, (RsAdapter1D)adapter, (RsAllocation)alloc);
Jason Samsd19f10d2009-05-22 14:03:28 -0700643}
644
645static void
646nAdapter1DSetConstraint(JNIEnv *_env, jobject _this, jint adapter, jint dim, jint value)
647{
648 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
649 LOG_API("nAdapter1DSetConstraint, con(%p), adapter(%p), dim(%i), value(%i)", con, (RsAdapter1D)adapter, dim, value);
Jason Samsbc948de2009-08-17 18:35:48 -0700650 rsAdapter1DSetConstraint(con, (RsAdapter1D)adapter, (RsDimension)dim, value);
Jason Samsd19f10d2009-05-22 14:03:28 -0700651}
652
653static void
654nAdapter1DData_i(JNIEnv *_env, jobject _this, jint adapter, jintArray data)
655{
656 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
657 jint len = _env->GetArrayLength(data);
658 LOG_API("nAdapter1DData_i, con(%p), adapter(%p), len(%i)", con, (RsAdapter1D)adapter, len);
659 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700660 rsAdapter1DData(con, (RsAdapter1D)adapter, ptr);
Jason Samsd19f10d2009-05-22 14:03:28 -0700661 _env->ReleaseIntArrayElements(data, ptr, 0/*JNI_ABORT*/);
662}
663
664static void
665nAdapter1DSubData_i(JNIEnv *_env, jobject _this, jint adapter, jint offset, jint count, jintArray data)
666{
667 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
668 jint len = _env->GetArrayLength(data);
669 LOG_API("nAdapter1DSubData_i, con(%p), adapter(%p), offset(%i), count(%i), len(%i)", con, (RsAdapter1D)adapter, offset, count, len);
670 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700671 rsAdapter1DSubData(con, (RsAdapter1D)adapter, offset, count, ptr);
Jason Samsd19f10d2009-05-22 14:03:28 -0700672 _env->ReleaseIntArrayElements(data, ptr, 0/*JNI_ABORT*/);
673}
674
675static void
676nAdapter1DData_f(JNIEnv *_env, jobject _this, jint adapter, jfloatArray data)
677{
678 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
679 jint len = _env->GetArrayLength(data);
680 LOG_API("nAdapter1DData_f, con(%p), adapter(%p), len(%i)", con, (RsAdapter1D)adapter, len);
681 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700682 rsAdapter1DData(con, (RsAdapter1D)adapter, ptr);
Jason Samsd19f10d2009-05-22 14:03:28 -0700683 _env->ReleaseFloatArrayElements(data, ptr, 0/*JNI_ABORT*/);
684}
685
686static void
687nAdapter1DSubData_f(JNIEnv *_env, jobject _this, jint adapter, jint offset, jint count, jfloatArray data)
688{
689 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
690 jint len = _env->GetArrayLength(data);
691 LOG_API("nAdapter1DSubData_f, con(%p), adapter(%p), offset(%i), count(%i), len(%i)", con, (RsAdapter1D)adapter, offset, count, len);
692 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700693 rsAdapter1DSubData(con, (RsAdapter1D)adapter, offset, count, ptr);
Jason Samsd19f10d2009-05-22 14:03:28 -0700694 _env->ReleaseFloatArrayElements(data, ptr, 0/*JNI_ABORT*/);
695}
696
697static jint
698nAdapter1DCreate(JNIEnv *_env, jobject _this)
699{
700 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
701 LOG_API("nAdapter1DCreate, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -0700702 return (jint)rsAdapter1DCreate(con);
Jason Samsd19f10d2009-05-22 14:03:28 -0700703}
704
705// -----------------------------------
706
707static void
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700708nAdapter2DBindAllocation(JNIEnv *_env, jobject _this, jint adapter, jint alloc)
709{
710 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
711 LOG_API("nAdapter2DBindAllocation, con(%p), adapter(%p), alloc(%p)", con, (RsAdapter2D)adapter, (RsAllocation)alloc);
Jason Samsbc948de2009-08-17 18:35:48 -0700712 rsAdapter2DBindAllocation(con, (RsAdapter2D)adapter, (RsAllocation)alloc);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700713}
714
715static void
716nAdapter2DSetConstraint(JNIEnv *_env, jobject _this, jint adapter, jint dim, jint value)
717{
718 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
719 LOG_API("nAdapter2DSetConstraint, con(%p), adapter(%p), dim(%i), value(%i)", con, (RsAdapter2D)adapter, dim, value);
Jason Samsbc948de2009-08-17 18:35:48 -0700720 rsAdapter2DSetConstraint(con, (RsAdapter2D)adapter, (RsDimension)dim, value);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700721}
722
723static void
724nAdapter2DData_i(JNIEnv *_env, jobject _this, jint adapter, jintArray data)
725{
726 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
727 jint len = _env->GetArrayLength(data);
728 LOG_API("nAdapter2DData_i, con(%p), adapter(%p), len(%i)", con, (RsAdapter2D)adapter, len);
729 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700730 rsAdapter2DData(con, (RsAdapter2D)adapter, ptr);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700731 _env->ReleaseIntArrayElements(data, ptr, 0/*JNI_ABORT*/);
732}
733
734static void
735nAdapter2DData_f(JNIEnv *_env, jobject _this, jint adapter, jfloatArray data)
736{
737 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
738 jint len = _env->GetArrayLength(data);
739 LOG_API("nAdapter2DData_f, con(%p), adapter(%p), len(%i)", con, (RsAdapter2D)adapter, len);
740 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700741 rsAdapter2DData(con, (RsAdapter2D)adapter, ptr);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700742 _env->ReleaseFloatArrayElements(data, ptr, 0/*JNI_ABORT*/);
743}
744
745static void
746nAdapter2DSubData_i(JNIEnv *_env, jobject _this, jint adapter, jint xoff, jint yoff, jint w, jint h, jintArray data)
747{
748 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
749 jint len = _env->GetArrayLength(data);
750 LOG_API("nAdapter2DSubData_i, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)",
751 con, (RsAdapter2D)adapter, xoff, yoff, w, h, len);
752 jint *ptr = _env->GetIntArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700753 rsAdapter2DSubData(con, (RsAdapter2D)adapter, xoff, yoff, w, h, ptr);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700754 _env->ReleaseIntArrayElements(data, ptr, 0/*JNI_ABORT*/);
755}
756
757static void
758nAdapter2DSubData_f(JNIEnv *_env, jobject _this, jint adapter, jint xoff, jint yoff, jint w, jint h, jfloatArray data)
759{
760 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
761 jint len = _env->GetArrayLength(data);
762 LOG_API("nAdapter2DSubData_f, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)",
763 con, (RsAdapter2D)adapter, xoff, yoff, w, h, len);
764 jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -0700765 rsAdapter2DSubData(con, (RsAdapter1D)adapter, xoff, yoff, w, h, ptr);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700766 _env->ReleaseFloatArrayElements(data, ptr, 0/*JNI_ABORT*/);
767}
768
769static jint
770nAdapter2DCreate(JNIEnv *_env, jobject _this)
771{
772 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
773 LOG_API("nAdapter2DCreate, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -0700774 return (jint)rsAdapter2DCreate(con);
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700775}
776
777// -----------------------------------
778
779static void
Jason Samsd19f10d2009-05-22 14:03:28 -0700780nScriptBindAllocation(JNIEnv *_env, jobject _this, jint script, jint alloc, jint slot)
781{
782 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
783 LOG_API("nScriptBindAllocation, con(%p), script(%p), alloc(%p), slot(%i)", con, (RsScript)script, (RsAllocation)alloc, slot);
Jason Samsbc948de2009-08-17 18:35:48 -0700784 rsScriptBindAllocation(con, (RsScript)script, (RsAllocation)alloc, slot);
Jason Samsd19f10d2009-05-22 14:03:28 -0700785}
786
787static void
Jason Sams22534172009-08-04 16:58:20 -0700788nScriptSetClearColor(JNIEnv *_env, jobject _this, jint script, jfloat r, jfloat g, jfloat b, jfloat a)
Jason Samsd19f10d2009-05-22 14:03:28 -0700789{
790 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
Jason Sams07ae4062009-08-27 20:23:34 -0700791 LOG_API("nScriptSetClearColor, con(%p), s(%p), r(%f), g(%f), b(%f), a(%f)", con, (void *)script, r, g, b, a);
Jason Samsbc948de2009-08-17 18:35:48 -0700792 rsScriptSetClearColor(con, (RsScript)script, r, g, b, a);
Jason Samsd19f10d2009-05-22 14:03:28 -0700793}
794
795static void
Jason Sams22534172009-08-04 16:58:20 -0700796nScriptSetClearDepth(JNIEnv *_env, jobject _this, jint script, jfloat d)
Jason Samsd19f10d2009-05-22 14:03:28 -0700797{
798 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
Jason Sams07ae4062009-08-27 20:23:34 -0700799 LOG_API("nScriptCSetClearDepth, con(%p), s(%p), depth(%f)", con, (void *)script, d);
Jason Samsbc948de2009-08-17 18:35:48 -0700800 rsScriptSetClearDepth(con, (RsScript)script, d);
Jason Samsd19f10d2009-05-22 14:03:28 -0700801}
802
803static void
Jason Sams22534172009-08-04 16:58:20 -0700804nScriptSetClearStencil(JNIEnv *_env, jobject _this, jint script, jint stencil)
Jason Samsd19f10d2009-05-22 14:03:28 -0700805{
806 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
Jason Sams07ae4062009-08-27 20:23:34 -0700807 LOG_API("nScriptCSetClearStencil, con(%p), s(%p), stencil(%i)", con, (void *)script, stencil);
Jason Samsbc948de2009-08-17 18:35:48 -0700808 rsScriptSetClearStencil(con, (RsScript)script, stencil);
Jason Samsd19f10d2009-05-22 14:03:28 -0700809}
810
811static void
Jason Sams22534172009-08-04 16:58:20 -0700812nScriptSetTimeZone(JNIEnv *_env, jobject _this, jint script, jbyteArray timeZone)
Jason Samsd19f10d2009-05-22 14:03:28 -0700813{
814 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
Jason Sams07ae4062009-08-27 20:23:34 -0700815 LOG_API("nScriptCSetTimeZone, con(%p), s(%p), timeZone(%s)", con, (void *)script, (const char *)timeZone);
Romain Guy584a3752009-07-30 18:45:01 -0700816
817 jint length = _env->GetArrayLength(timeZone);
818 jbyte* timeZone_ptr;
819 timeZone_ptr = (jbyte *) _env->GetPrimitiveArrayCritical(timeZone, (jboolean *)0);
820
Jason Samsbc948de2009-08-17 18:35:48 -0700821 rsScriptSetTimeZone(con, (RsScript)script, (const char *)timeZone_ptr, length);
Romain Guy584a3752009-07-30 18:45:01 -0700822
823 if (timeZone_ptr) {
824 _env->ReleasePrimitiveArrayCritical(timeZone, timeZone_ptr, 0);
825 }
826}
827
Jason Samsfbf0b9e2009-08-13 12:59:04 -0700828static void
Jason Sams334ea0c2009-08-17 13:56:09 -0700829nScriptSetType(JNIEnv *_env, jobject _this, jint type, jboolean writable, jstring _str, jint slot)
Jason Samsfbf0b9e2009-08-13 12:59:04 -0700830{
831 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
Jason Sams334ea0c2009-08-17 13:56:09 -0700832 LOG_API("nScriptCAddType, con(%p), type(%p), writable(%i), slot(%i)", con, (RsType)type, writable, slot);
Jason Samsfbf0b9e2009-08-13 12:59:04 -0700833 const char* n = NULL;
834 if (_str) {
835 n = _env->GetStringUTFChars(_str, NULL);
836 }
Jason Samsbc948de2009-08-17 18:35:48 -0700837 rsScriptSetType(con, (RsType)type, slot, writable, n);
Jason Samsfbf0b9e2009-08-13 12:59:04 -0700838 if (n) {
839 _env->ReleaseStringUTFChars(_str, n);
840 }
841}
842
843static void
844nScriptSetRoot(JNIEnv *_env, jobject _this, jboolean isRoot)
845{
846 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
847 LOG_API("nScriptCSetRoot, con(%p), isRoot(%i)", con, isRoot);
Jason Samsbc948de2009-08-17 18:35:48 -0700848 rsScriptSetRoot(con, isRoot);
Jason Samsfbf0b9e2009-08-13 12:59:04 -0700849}
850
Jason Sams22534172009-08-04 16:58:20 -0700851// -----------------------------------
852
853static void
854nScriptCBegin(JNIEnv *_env, jobject _this)
855{
856 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
857 LOG_API("nScriptCBegin, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -0700858 rsScriptCBegin(con);
Jason Sams22534172009-08-04 16:58:20 -0700859}
860
Romain Guy584a3752009-07-30 18:45:01 -0700861static void
Jack Palevich43702d82009-05-28 13:38:16 -0700862nScriptCSetScript(JNIEnv *_env, jobject _this, jbyteArray scriptRef,
863 jint offset, jint length)
Jason Samsd19f10d2009-05-22 14:03:28 -0700864{
865 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
866 LOG_API("!!! nScriptCSetScript, con(%p)", con);
Jack Palevich43702d82009-05-28 13:38:16 -0700867 jint _exception = 0;
868 jint remaining;
869 jbyte* script_base = 0;
870 jbyte* script_ptr;
Jack Palevich43702d82009-05-28 13:38:16 -0700871 if (!scriptRef) {
872 _exception = 1;
873 //_env->ThrowNew(IAEClass, "script == null");
874 goto exit;
875 }
876 if (offset < 0) {
877 _exception = 1;
878 //_env->ThrowNew(IAEClass, "offset < 0");
879 goto exit;
880 }
881 if (length < 0) {
882 _exception = 1;
883 //_env->ThrowNew(IAEClass, "length < 0");
884 goto exit;
885 }
886 remaining = _env->GetArrayLength(scriptRef) - offset;
887 if (remaining < length) {
888 _exception = 1;
889 //_env->ThrowNew(IAEClass, "length > script.length - offset");
890 goto exit;
891 }
892 script_base = (jbyte *)
893 _env->GetPrimitiveArrayCritical(scriptRef, (jboolean *)0);
894 script_ptr = script_base + offset;
895
Jason Samsbc948de2009-08-17 18:35:48 -0700896 rsScriptCSetText(con, (const char *)script_ptr, length);
Jason Sams39ddc9502009-06-05 17:35:09 -0700897
Jack Palevich43702d82009-05-28 13:38:16 -0700898exit:
899 if (script_base) {
900 _env->ReleasePrimitiveArrayCritical(scriptRef, script_base,
901 _exception ? JNI_ABORT: 0);
902 }
Jason Samsd19f10d2009-05-22 14:03:28 -0700903}
904
905static jint
906nScriptCCreate(JNIEnv *_env, jobject _this)
907{
908 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
909 LOG_API("nScriptCCreate, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -0700910 return (jint)rsScriptCCreate(con);
Jason Samsd19f10d2009-05-22 14:03:28 -0700911}
912
Joe Onoratod7b37742009-08-09 22:57:44 -0700913static void
914nScriptCAddDefineI32(JNIEnv *_env, jobject _this, jstring name, jint value)
915{
916 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
917 const char* n = _env->GetStringUTFChars(name, NULL);
918 LOG_API("nScriptCAddDefineI32, con(%p) name(%s) value(%d)", con, n, value);
Jason Samsbc948de2009-08-17 18:35:48 -0700919 rsScriptCSetDefineI32(con, n, value);
Joe Onoratod7b37742009-08-09 22:57:44 -0700920 _env->ReleaseStringUTFChars(name, n);
921}
922
923static void
924nScriptCAddDefineF(JNIEnv *_env, jobject _this, jstring name, jfloat value)
925{
926 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
927 const char* n = _env->GetStringUTFChars(name, NULL);
928 LOG_API("nScriptCAddDefineF, con(%p) name(%s) value(%f)", con, n, value);
Jason Samsbc948de2009-08-17 18:35:48 -0700929 rsScriptCSetDefineF(con, n, value);
Joe Onoratod7b37742009-08-09 22:57:44 -0700930 _env->ReleaseStringUTFChars(name, n);
931}
932
Jason Samsd19f10d2009-05-22 14:03:28 -0700933// ---------------------------------------------------------------------------
934
935static void
936nProgramFragmentStoreBegin(JNIEnv *_env, jobject _this, jint in, jint out)
937{
938 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
939 LOG_API("nProgramFragmentStoreBegin, con(%p), in(%p), out(%p)", con, (RsElement)in, (RsElement)out);
Jason Samsbc948de2009-08-17 18:35:48 -0700940 rsProgramFragmentStoreBegin(con, (RsElement)in, (RsElement)out);
Jason Samsd19f10d2009-05-22 14:03:28 -0700941}
942
943static void
944nProgramFragmentStoreDepthFunc(JNIEnv *_env, jobject _this, jint func)
945{
946 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
947 LOG_API("nProgramFragmentStoreDepthFunc, con(%p), func(%i)", con, func);
Jason Samsbc948de2009-08-17 18:35:48 -0700948 rsProgramFragmentStoreDepthFunc(con, (RsDepthFunc)func);
Jason Samsd19f10d2009-05-22 14:03:28 -0700949}
950
951static void
952nProgramFragmentStoreDepthMask(JNIEnv *_env, jobject _this, jboolean enable)
953{
954 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
955 LOG_API("nProgramFragmentStoreDepthMask, con(%p), enable(%i)", con, enable);
Jason Samsbc948de2009-08-17 18:35:48 -0700956 rsProgramFragmentStoreDepthMask(con, enable);
Jason Samsd19f10d2009-05-22 14:03:28 -0700957}
958
959static void
960nProgramFragmentStoreColorMask(JNIEnv *_env, jobject _this, jboolean r, jboolean g, jboolean b, jboolean a)
961{
962 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
963 LOG_API("nProgramFragmentStoreColorMask, con(%p), r(%i), g(%i), b(%i), a(%i)", con, r, g, b, a);
Jason Samsbc948de2009-08-17 18:35:48 -0700964 rsProgramFragmentStoreColorMask(con, r, g, b, a);
Jason Samsd19f10d2009-05-22 14:03:28 -0700965}
966
967static void
968nProgramFragmentStoreBlendFunc(JNIEnv *_env, jobject _this, int src, int dst)
969{
970 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
971 LOG_API("nProgramFragmentStoreBlendFunc, con(%p), src(%i), dst(%i)", con, src, dst);
Jason Samsbc948de2009-08-17 18:35:48 -0700972 rsProgramFragmentStoreBlendFunc(con, (RsBlendSrcFunc)src, (RsBlendDstFunc)dst);
Jason Samsd19f10d2009-05-22 14:03:28 -0700973}
974
975static void
976nProgramFragmentStoreDither(JNIEnv *_env, jobject _this, jboolean enable)
977{
978 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
979 LOG_API("nProgramFragmentStoreDither, con(%p), enable(%i)", con, enable);
Jason Samsbc948de2009-08-17 18:35:48 -0700980 rsProgramFragmentStoreDither(con, enable);
Jason Samsd19f10d2009-05-22 14:03:28 -0700981}
982
983static jint
984nProgramFragmentStoreCreate(JNIEnv *_env, jobject _this)
985{
986 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
987 LOG_API("nProgramFragmentStoreCreate, con(%p)", con);
Jason Sams3eaa338e2009-06-10 15:04:38 -0700988
Jason Samsbc948de2009-08-17 18:35:48 -0700989 return (jint)rsProgramFragmentStoreCreate(con);
Jason Samsd19f10d2009-05-22 14:03:28 -0700990}
991
992// ---------------------------------------------------------------------------
993
994static void
Jason Sams25ffcdc2009-08-20 16:10:36 -0700995nProgramFragmentBegin(JNIEnv *_env, jobject _this, jint in, jint out, jboolean pointSpriteEnable)
Jason Samsd19f10d2009-05-22 14:03:28 -0700996{
997 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
Jason Sams25ffcdc2009-08-20 16:10:36 -0700998 LOG_API("nProgramFragmentBegin, con(%p), in(%p), out(%p) PointSprite(%i)", con, (RsElement)in, (RsElement)out, pointSpriteEnable);
999 rsProgramFragmentBegin(con, (RsElement)in, (RsElement)out, pointSpriteEnable);
Jason Samsd19f10d2009-05-22 14:03:28 -07001000}
1001
1002static void
1003nProgramFragmentBindTexture(JNIEnv *_env, jobject _this, jint vpf, jint slot, jint a)
1004{
1005 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
1006 LOG_API("nProgramFragmentBindTexture, con(%p), vpf(%p), slot(%i), a(%p)", con, (RsProgramFragment)vpf, slot, (RsAllocation)a);
Jason Samsbc948de2009-08-17 18:35:48 -07001007 rsProgramFragmentBindTexture(con, (RsProgramFragment)vpf, slot, (RsAllocation)a);
Jason Samsd19f10d2009-05-22 14:03:28 -07001008}
1009
1010static void
1011nProgramFragmentBindSampler(JNIEnv *_env, jobject _this, jint vpf, jint slot, jint a)
1012{
1013 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
1014 LOG_API("nProgramFragmentBindSampler, con(%p), vpf(%p), slot(%i), a(%p)", con, (RsProgramFragment)vpf, slot, (RsSampler)a);
Jason Samsbc948de2009-08-17 18:35:48 -07001015 rsProgramFragmentBindSampler(con, (RsProgramFragment)vpf, slot, (RsSampler)a);
Jason Samsd19f10d2009-05-22 14:03:28 -07001016}
1017
1018static void
Jason Sams25ffcdc2009-08-20 16:10:36 -07001019nProgramFragmentSetSlot(JNIEnv *_env, jobject _this, jint slot, jboolean enable, jint env, jint vt)
Jason Samsd19f10d2009-05-22 14:03:28 -07001020{
1021 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
Jason Sams25ffcdc2009-08-20 16:10:36 -07001022 LOG_API("nProgramFragmentSetType, con(%p), slot(%i), enable(%i), env(%i), vt(%p)", con, slot, enable, env, (RsType)vt);
1023 rsProgramFragmentSetSlot(con, slot, enable, (RsTexEnvMode)env, (RsType)vt);
Jason Samsd19f10d2009-05-22 14:03:28 -07001024}
1025
1026static jint
1027nProgramFragmentCreate(JNIEnv *_env, jobject _this, jint slot, jboolean enable)
1028{
1029 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
1030 LOG_API("nProgramFragmentCreate, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -07001031 return (jint)rsProgramFragmentCreate(con);
Jason Samsd19f10d2009-05-22 14:03:28 -07001032}
1033
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001034// ---------------------------------------------------------------------------
1035
1036static void
1037nProgramVertexBegin(JNIEnv *_env, jobject _this, jint in, jint out)
1038{
1039 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
1040 LOG_API("nProgramVertexBegin, con(%p), in(%p), out(%p)", con, (RsElement)in, (RsElement)out);
Jason Samsbc948de2009-08-17 18:35:48 -07001041 rsProgramVertexBegin(con, (RsElement)in, (RsElement)out);
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001042}
1043
1044static void
Jason Sams9bee51c2009-08-05 13:57:03 -07001045nProgramVertexBindAllocation(JNIEnv *_env, jobject _this, jint vpv, jint a)
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001046{
1047 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
Jason Sams07ae4062009-08-27 20:23:34 -07001048 LOG_API("nProgramVertexBindAllocation, con(%p), vpf(%p), a(%p)", con, (RsProgramVertex)vpv, (RsAllocation)a);
Jason Samsbc948de2009-08-17 18:35:48 -07001049 rsProgramVertexBindAllocation(con, (RsProgramFragment)vpv, (RsAllocation)a);
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001050}
1051
1052static void
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001053nProgramVertexSetTextureMatrixEnable(JNIEnv *_env, jobject _this, jboolean enable)
1054{
1055 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
1056 LOG_API("nProgramVertexSetTextureMatrixEnable, con(%p), enable(%i)", con, enable);
Jason Samsbc948de2009-08-17 18:35:48 -07001057 rsProgramVertexSetTextureMatrixEnable(con, enable);
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001058}
1059
Jason Samsee411122009-07-21 12:20:54 -07001060static void
1061nProgramVertexAddLight(JNIEnv *_env, jobject _this, jint light)
1062{
1063 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
1064 LOG_API("nProgramVertexAddLight, con(%p), light(%p)", con, (RsLight)light);
Jason Samsbc948de2009-08-17 18:35:48 -07001065 rsProgramVertexAddLight(con, (RsLight)light);
Jason Samsee411122009-07-21 12:20:54 -07001066}
1067
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001068static jint
1069nProgramVertexCreate(JNIEnv *_env, jobject _this)
1070{
1071 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
1072 LOG_API("nProgramVertexCreate, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -07001073 return (jint)rsProgramVertexCreate(con);
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001074}
1075
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001076
Jason Samsd19f10d2009-05-22 14:03:28 -07001077
1078// ---------------------------------------------------------------------------
1079
1080static void
1081nContextBindRootScript(JNIEnv *_env, jobject _this, jint script)
1082{
1083 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
1084 LOG_API("nContextBindRootScript, con(%p), script(%p)", con, (RsScript)script);
Jason Samsbc948de2009-08-17 18:35:48 -07001085 rsContextBindRootScript(con, (RsScript)script);
Jason Samsd19f10d2009-05-22 14:03:28 -07001086}
1087
1088static void
Jason Samsd19f10d2009-05-22 14:03:28 -07001089nContextBindProgramFragmentStore(JNIEnv *_env, jobject _this, jint pfs)
1090{
1091 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
1092 LOG_API("nContextBindProgramFragmentStore, con(%p), pfs(%p)", con, (RsProgramFragmentStore)pfs);
Jason Samsbc948de2009-08-17 18:35:48 -07001093 rsContextBindProgramFragmentStore(con, (RsProgramFragmentStore)pfs);
Jason Samsd19f10d2009-05-22 14:03:28 -07001094}
1095
1096static void
1097nContextBindProgramFragment(JNIEnv *_env, jobject _this, jint pf)
1098{
1099 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
1100 LOG_API("nContextBindProgramFragment, con(%p), pf(%p)", con, (RsProgramFragment)pf);
Jason Samsbc948de2009-08-17 18:35:48 -07001101 rsContextBindProgramFragment(con, (RsProgramFragment)pf);
Jason Samsd19f10d2009-05-22 14:03:28 -07001102}
1103
Jason Sams0826a6f2009-06-15 19:04:56 -07001104static void
1105nContextBindProgramVertex(JNIEnv *_env, jobject _this, jint pf)
1106{
1107 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
1108 LOG_API("nContextBindProgramVertex, con(%p), pf(%p)", con, (RsProgramVertex)pf);
Jason Samsbc948de2009-08-17 18:35:48 -07001109 rsContextBindProgramVertex(con, (RsProgramVertex)pf);
Jason Sams0826a6f2009-06-15 19:04:56 -07001110}
1111
Joe Onoratod7b37742009-08-09 22:57:44 -07001112static void
1113nContextAddDefineI32(JNIEnv *_env, jobject _this, jstring name, jint value)
1114{
1115 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
1116 const char* n = _env->GetStringUTFChars(name, NULL);
1117 LOG_API("nScriptCAddDefineI32, con(%p) name(%s) value(%d)", con, n, value);
Jason Samsbc948de2009-08-17 18:35:48 -07001118 rsContextSetDefineI32(con, n, value);
Joe Onoratod7b37742009-08-09 22:57:44 -07001119 _env->ReleaseStringUTFChars(name, n);
1120}
1121
1122static void
1123nContextAddDefineF(JNIEnv *_env, jobject _this, jstring name, jfloat value)
1124{
1125 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
1126 const char* n = _env->GetStringUTFChars(name, NULL);
1127 LOG_API("nScriptCAddDefineF, con(%p) name(%s) value(%f)", con, n, value);
Jason Samsbc948de2009-08-17 18:35:48 -07001128 rsContextSetDefineF(con, n, value);
Joe Onoratod7b37742009-08-09 22:57:44 -07001129 _env->ReleaseStringUTFChars(name, n);
1130}
1131
1132
Jason Sams02fb2cb2009-05-28 15:37:57 -07001133// ---------------------------------------------------------------------------
1134
1135static void
Jason Sams02fb2cb2009-05-28 15:37:57 -07001136nSamplerBegin(JNIEnv *_env, jobject _this)
1137{
1138 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
1139 LOG_API("nSamplerBegin, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -07001140 rsSamplerBegin(con);
Jason Sams02fb2cb2009-05-28 15:37:57 -07001141}
1142
1143static void
1144nSamplerSet(JNIEnv *_env, jobject _this, jint p, jint v)
1145{
1146 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
1147 LOG_API("nSamplerSet, con(%p), param(%i), value(%i)", con, p, v);
Jason Samsbc948de2009-08-17 18:35:48 -07001148 rsSamplerSet(con, (RsSamplerParam)p, (RsSamplerValue)v);
Jason Sams02fb2cb2009-05-28 15:37:57 -07001149}
1150
1151static jint
1152nSamplerCreate(JNIEnv *_env, jobject _this)
1153{
1154 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
Jason Samsbba134c2009-06-22 15:49:21 -07001155 LOG_API("nSamplerCreate, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -07001156 return (jint)rsSamplerCreate(con);
Jason Sams02fb2cb2009-05-28 15:37:57 -07001157}
1158
Jason Samsbba134c2009-06-22 15:49:21 -07001159// ---------------------------------------------------------------------------
1160
1161static void
1162nLightBegin(JNIEnv *_env, jobject _this)
1163{
1164 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
1165 LOG_API("nLightBegin, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -07001166 rsLightBegin(con);
Jason Samsbba134c2009-06-22 15:49:21 -07001167}
1168
1169static void
1170nLightSetIsMono(JNIEnv *_env, jobject _this, jboolean isMono)
1171{
1172 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
1173 LOG_API("nLightSetIsMono, con(%p), isMono(%i)", con, isMono);
Jason Samsbc948de2009-08-17 18:35:48 -07001174 rsLightSetMonochromatic(con, isMono);
Jason Samsbba134c2009-06-22 15:49:21 -07001175}
1176
1177static void
1178nLightSetIsLocal(JNIEnv *_env, jobject _this, jboolean isLocal)
1179{
1180 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
1181 LOG_API("nLightSetIsLocal, con(%p), isLocal(%i)", con, isLocal);
Jason Samsbc948de2009-08-17 18:35:48 -07001182 rsLightSetLocal(con, isLocal);
Jason Samsbba134c2009-06-22 15:49:21 -07001183}
1184
1185static jint
1186nLightCreate(JNIEnv *_env, jobject _this)
1187{
1188 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
1189 LOG_API("nLightCreate, con(%p)", con);
Jason Samsbc948de2009-08-17 18:35:48 -07001190 return (jint)rsLightCreate(con);
Jason Samsbba134c2009-06-22 15:49:21 -07001191}
1192
1193static void
Jason Samsbba134c2009-06-22 15:49:21 -07001194nLightSetColor(JNIEnv *_env, jobject _this, jint light, float r, float g, float b)
1195{
1196 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
1197 LOG_API("nLightSetColor, con(%p), light(%p), r(%f), g(%f), b(%f)", con, (RsLight)light, r, g, b);
Jason Samsbc948de2009-08-17 18:35:48 -07001198 rsLightSetColor(con, (RsLight)light, r, g, b);
Jason Samsbba134c2009-06-22 15:49:21 -07001199}
1200
1201static void
1202nLightSetPosition(JNIEnv *_env, jobject _this, jint light, float x, float y, float z)
1203{
1204 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
1205 LOG_API("nLightSetPosition, con(%p), light(%p), x(%f), y(%f), z(%f)", con, (RsLight)light, x, y, z);
Jason Samsbc948de2009-08-17 18:35:48 -07001206 rsLightSetPosition(con, (RsLight)light, x, y, z);
Jason Samsbba134c2009-06-22 15:49:21 -07001207}
Jason Samsd19f10d2009-05-22 14:03:28 -07001208
1209// ---------------------------------------------------------------------------
1210
Jason Sams1bada8c2009-08-09 17:01:55 -07001211static jint
1212nSimpleMeshCreate(JNIEnv *_env, jobject _this, jint batchID, jint indexID, jintArray vtxIDs, jint primID)
1213{
1214 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
1215 jint len = _env->GetArrayLength(vtxIDs);
1216 LOG_API("nSimpleMeshCreate, con(%p), batchID(%i), indexID(%i), vtxIDs.len(%i), primID(%i)",
1217 con, batchID, indexID, len, primID);
1218 jint *ptr = _env->GetIntArrayElements(vtxIDs, NULL);
Jason Samsbc948de2009-08-17 18:35:48 -07001219 int id = (int)rsSimpleMeshCreate(con, (void *)batchID, (void *)indexID, (void **)ptr, len, primID);
Jason Sams1bada8c2009-08-09 17:01:55 -07001220 _env->ReleaseIntArrayElements(vtxIDs, ptr, 0/*JNI_ABORT*/);
1221 return id;
1222}
1223
1224static void
1225nSimpleMeshBindVertex(JNIEnv *_env, jobject _this, jint s, jint alloc, jint slot)
1226{
1227 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
1228 LOG_API("nSimpleMeshBindVertex, con(%p), SimpleMesh(%p), Alloc(%p), slot(%i)", con, (RsSimpleMesh)s, (RsAllocation)alloc, slot);
Jason Samsbc948de2009-08-17 18:35:48 -07001229 rsSimpleMeshBindVertex(con, (RsSimpleMesh)s, (RsAllocation)alloc, slot);
Jason Sams1bada8c2009-08-09 17:01:55 -07001230}
1231
1232static void
1233nSimpleMeshBindIndex(JNIEnv *_env, jobject _this, jint s, jint alloc)
1234{
1235 RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
1236 LOG_API("nSimpleMeshBindIndex, con(%p), SimpleMesh(%p), Alloc(%p)", con, (RsSimpleMesh)s, (RsAllocation)alloc);
Jason Samsbc948de2009-08-17 18:35:48 -07001237 rsSimpleMeshBindIndex(con, (RsSimpleMesh)s, (RsAllocation)alloc);
Jason Sams1bada8c2009-08-09 17:01:55 -07001238}
1239
1240// ---------------------------------------------------------------------------
1241
Jason Samsd19f10d2009-05-22 14:03:28 -07001242
Jason Sams94d8e90a2009-06-10 16:09:05 -07001243static const char *classPathName = "android/renderscript/RenderScript";
Jason Samsd19f10d2009-05-22 14:03:28 -07001244
1245static JNINativeMethod methods[] = {
1246{"_nInit", "()V", (void*)_nInit },
1247{"nDeviceCreate", "()I", (void*)nDeviceCreate },
1248{"nDeviceDestroy", "(I)V", (void*)nDeviceDestroy },
Jason Samsb13ada52009-08-25 11:34:49 -07001249{"nContextCreate", "(ILandroid/view/Surface;IZ)I", (void*)nContextCreate },
Jason Samsd19f10d2009-05-22 14:03:28 -07001250{"nContextDestroy", "(I)V", (void*)nContextDestroy },
Jason Sams3eaa338e2009-06-10 15:04:38 -07001251{"nAssignName", "(I[B)V", (void*)nAssignName },
Jason Sams7ce033d2009-08-18 14:14:24 -07001252{"nObjDestroy", "(I)V", (void*)nObjDestroy },
Jason Sams730ee652009-08-18 17:07:09 -07001253{"nObjDestroyOOB", "(I)V", (void*)nObjDestroyOOB },
Jason Samsd19f10d2009-05-22 14:03:28 -07001254
Jason Sams64676f32009-07-08 18:01:53 -07001255{"nFileOpen", "([B)I", (void*)nFileOpen },
1256
Jason Samsd19f10d2009-05-22 14:03:28 -07001257{"nElementBegin", "()V", (void*)nElementBegin },
1258{"nElementAddPredefined", "(I)V", (void*)nElementAddPredefined },
Jason Sams43ee06852009-08-12 17:54:11 -07001259{"nElementAdd", "(IIIILjava/lang/String;)V", (void*)nElementAdd },
Jason Samsd19f10d2009-05-22 14:03:28 -07001260{"nElementCreate", "()I", (void*)nElementCreate },
1261{"nElementGetPredefined", "(I)I", (void*)nElementGetPredefined },
Jason Samsd19f10d2009-05-22 14:03:28 -07001262
1263{"nTypeBegin", "(I)V", (void*)nTypeBegin },
1264{"nTypeAdd", "(II)V", (void*)nTypeAdd },
1265{"nTypeCreate", "()I", (void*)nTypeCreate },
Jason Sams43ee06852009-08-12 17:54:11 -07001266{"nTypeFinalDestroy", "(Landroid/renderscript/Type;)V", (void*)nTypeFinalDestroy },
1267{"nTypeSetupFields", "(Landroid/renderscript/Type;[I[I[Ljava/lang/reflect/Field;)V", (void*)nTypeSetupFields },
Jason Samsd19f10d2009-05-22 14:03:28 -07001268
1269{"nAllocationCreateTyped", "(I)I", (void*)nAllocationCreateTyped },
1270{"nAllocationCreatePredefSized", "(II)I", (void*)nAllocationCreatePredefSized },
1271{"nAllocationCreateSized", "(II)I", (void*)nAllocationCreateSized },
Jason Samsffe9f482009-06-01 17:45:53 -07001272{"nAllocationCreateFromBitmap", "(IZLandroid/graphics/Bitmap;)I", (void*)nAllocationCreateFromBitmap },
Jason Sams07ae4062009-08-27 20:23:34 -07001273{"nAllocationCreateFromBitmapBoxed","(IZLandroid/graphics/Bitmap;)I", (void*)nAllocationCreateFromBitmapBoxed },
Romain Guy650a3eb2009-08-31 14:06:43 -07001274{"nAllocationCreateFromAssetStream","(IZI)I", (void*)nAllocationCreateFromAssetStream },
Jason Samsd19f10d2009-05-22 14:03:28 -07001275{"nAllocationUploadToTexture", "(II)V", (void*)nAllocationUploadToTexture },
Jason Sams07ae4062009-08-27 20:23:34 -07001276{"nAllocationUploadToBufferObject","(I)V", (void*)nAllocationUploadToBufferObject },
1277{"nAllocationData", "(I[II)V", (void*)nAllocationData_i },
1278{"nAllocationData", "(I[FI)V", (void*)nAllocationData_f },
1279{"nAllocationSubData1D", "(III[II)V", (void*)nAllocationSubData1D_i },
1280{"nAllocationSubData1D", "(III[FI)V", (void*)nAllocationSubData1D_f },
1281{"nAllocationSubData2D", "(IIIII[II)V", (void*)nAllocationSubData2D_i },
1282{"nAllocationSubData2D", "(IIIII[FI)V", (void*)nAllocationSubData2D_f },
Jason Sams40a29e82009-08-10 14:55:26 -07001283{"nAllocationRead", "(I[I)V", (void*)nAllocationRead_i },
1284{"nAllocationRead", "(I[F)V", (void*)nAllocationRead_f },
Jason Sams43ee06852009-08-12 17:54:11 -07001285{"nAllocationDataFromObject", "(ILandroid/renderscript/Type;Ljava/lang/Object;)V", (void*)nAllocationDataFromObject },
Jason Samsd19f10d2009-05-22 14:03:28 -07001286
Jason Samsd19f10d2009-05-22 14:03:28 -07001287{"nTriangleMeshBegin", "(II)V", (void*)nTriangleMeshBegin },
1288{"nTriangleMeshAddVertex_XY", "(FF)V", (void*)nTriangleMeshAddVertex_XY },
1289{"nTriangleMeshAddVertex_XYZ", "(FFF)V", (void*)nTriangleMeshAddVertex_XYZ },
1290{"nTriangleMeshAddVertex_XY_ST", "(FFFF)V", (void*)nTriangleMeshAddVertex_XY_ST },
1291{"nTriangleMeshAddVertex_XYZ_ST", "(FFFFF)V", (void*)nTriangleMeshAddVertex_XYZ_ST },
Jason Sams0826a6f2009-06-15 19:04:56 -07001292{"nTriangleMeshAddVertex_XYZ_ST_NORM", "(FFFFFFFF)V", (void*)nTriangleMeshAddVertex_XYZ_ST_NORM },
Jason Samsd19f10d2009-05-22 14:03:28 -07001293{"nTriangleMeshAddTriangle", "(III)V", (void*)nTriangleMeshAddTriangle },
1294{"nTriangleMeshCreate", "()I", (void*)nTriangleMeshCreate },
1295
Jason Samsd19f10d2009-05-22 14:03:28 -07001296{"nAdapter1DBindAllocation", "(II)V", (void*)nAdapter1DBindAllocation },
1297{"nAdapter1DSetConstraint", "(III)V", (void*)nAdapter1DSetConstraint },
1298{"nAdapter1DData", "(I[I)V", (void*)nAdapter1DData_i },
Jason Samsd19f10d2009-05-22 14:03:28 -07001299{"nAdapter1DData", "(I[F)V", (void*)nAdapter1DData_f },
Jason Samsbd1c3ad2009-08-03 16:03:08 -07001300{"nAdapter1DSubData", "(III[I)V", (void*)nAdapter1DSubData_i },
Jason Samsd19f10d2009-05-22 14:03:28 -07001301{"nAdapter1DSubData", "(III[F)V", (void*)nAdapter1DSubData_f },
1302{"nAdapter1DCreate", "()I", (void*)nAdapter1DCreate },
1303
Jason Samsbd1c3ad2009-08-03 16:03:08 -07001304{"nAdapter2DBindAllocation", "(II)V", (void*)nAdapter2DBindAllocation },
1305{"nAdapter2DSetConstraint", "(III)V", (void*)nAdapter2DSetConstraint },
1306{"nAdapter2DData", "(I[I)V", (void*)nAdapter2DData_i },
1307{"nAdapter2DData", "(I[F)V", (void*)nAdapter2DData_f },
1308{"nAdapter2DSubData", "(IIIII[I)V", (void*)nAdapter2DSubData_i },
1309{"nAdapter2DSubData", "(IIIII[F)V", (void*)nAdapter2DSubData_f },
1310{"nAdapter2DCreate", "()I", (void*)nAdapter2DCreate },
1311
Jason Samsd19f10d2009-05-22 14:03:28 -07001312{"nScriptBindAllocation", "(III)V", (void*)nScriptBindAllocation },
Jason Sams22534172009-08-04 16:58:20 -07001313{"nScriptSetClearColor", "(IFFFF)V", (void*)nScriptSetClearColor },
1314{"nScriptSetClearDepth", "(IF)V", (void*)nScriptSetClearDepth },
1315{"nScriptSetClearStencil", "(II)V", (void*)nScriptSetClearStencil },
1316{"nScriptSetTimeZone", "(I[B)V", (void*)nScriptSetTimeZone },
Jason Sams334ea0c2009-08-17 13:56:09 -07001317{"nScriptSetType", "(IZLjava/lang/String;I)V", (void*)nScriptSetType },
Jason Samsfbf0b9e2009-08-13 12:59:04 -07001318{"nScriptSetRoot", "(Z)V", (void*)nScriptSetRoot },
Jason Sams22534172009-08-04 16:58:20 -07001319
Jason Samsd19f10d2009-05-22 14:03:28 -07001320{"nScriptCBegin", "()V", (void*)nScriptCBegin },
Jack Palevich43702d82009-05-28 13:38:16 -07001321{"nScriptCSetScript", "([BII)V", (void*)nScriptCSetScript },
Jason Samsd19f10d2009-05-22 14:03:28 -07001322{"nScriptCCreate", "()I", (void*)nScriptCCreate },
Joe Onoratod7b37742009-08-09 22:57:44 -07001323{"nScriptCAddDefineI32", "(Ljava/lang/String;I)V", (void*)nScriptCAddDefineI32 },
1324{"nScriptCAddDefineF", "(Ljava/lang/String;F)V", (void*)nScriptCAddDefineF },
Jason Samsd19f10d2009-05-22 14:03:28 -07001325
1326{"nProgramFragmentStoreBegin", "(II)V", (void*)nProgramFragmentStoreBegin },
1327{"nProgramFragmentStoreDepthFunc", "(I)V", (void*)nProgramFragmentStoreDepthFunc },
1328{"nProgramFragmentStoreDepthMask", "(Z)V", (void*)nProgramFragmentStoreDepthMask },
1329{"nProgramFragmentStoreColorMask", "(ZZZZ)V", (void*)nProgramFragmentStoreColorMask },
1330{"nProgramFragmentStoreBlendFunc", "(II)V", (void*)nProgramFragmentStoreBlendFunc },
1331{"nProgramFragmentStoreDither", "(Z)V", (void*)nProgramFragmentStoreDither },
1332{"nProgramFragmentStoreCreate", "()I", (void*)nProgramFragmentStoreCreate },
1333
Jason Sams25ffcdc2009-08-20 16:10:36 -07001334{"nProgramFragmentBegin", "(IIZ)V", (void*)nProgramFragmentBegin },
Jason Samsd19f10d2009-05-22 14:03:28 -07001335{"nProgramFragmentBindTexture", "(III)V", (void*)nProgramFragmentBindTexture },
1336{"nProgramFragmentBindSampler", "(III)V", (void*)nProgramFragmentBindSampler },
Jason Sams25ffcdc2009-08-20 16:10:36 -07001337{"nProgramFragmentSetSlot", "(IZII)V", (void*)nProgramFragmentSetSlot },
Jason Samsd19f10d2009-05-22 14:03:28 -07001338{"nProgramFragmentCreate", "()I", (void*)nProgramFragmentCreate },
1339
Jason Sams9bee51c2009-08-05 13:57:03 -07001340{"nProgramVertexBindAllocation", "(II)V", (void*)nProgramVertexBindAllocation },
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001341{"nProgramVertexBegin", "(II)V", (void*)nProgramVertexBegin },
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001342{"nProgramVertexSetTextureMatrixEnable", "(Z)V", (void*)nProgramVertexSetTextureMatrixEnable },
Jason Samsee411122009-07-21 12:20:54 -07001343{"nProgramVertexAddLight", "(I)V", (void*)nProgramVertexAddLight },
Jason Sams1fe9b8c2009-06-11 14:46:10 -07001344{"nProgramVertexCreate", "()I", (void*)nProgramVertexCreate },
1345
Jason Samsbba134c2009-06-22 15:49:21 -07001346{"nLightBegin", "()V", (void*)nLightBegin },
1347{"nLightSetIsMono", "(Z)V", (void*)nLightSetIsMono },
1348{"nLightSetIsLocal", "(Z)V", (void*)nLightSetIsLocal },
1349{"nLightCreate", "()I", (void*)nLightCreate },
Jason Samsbba134c2009-06-22 15:49:21 -07001350{"nLightSetColor", "(IFFF)V", (void*)nLightSetColor },
1351{"nLightSetPosition", "(IFFF)V", (void*)nLightSetPosition },
1352
Jason Samsd19f10d2009-05-22 14:03:28 -07001353{"nContextBindRootScript", "(I)V", (void*)nContextBindRootScript },
Jason Samsd19f10d2009-05-22 14:03:28 -07001354{"nContextBindProgramFragmentStore","(I)V", (void*)nContextBindProgramFragmentStore },
1355{"nContextBindProgramFragment", "(I)V", (void*)nContextBindProgramFragment },
Jason Sams0826a6f2009-06-15 19:04:56 -07001356{"nContextBindProgramVertex", "(I)V", (void*)nContextBindProgramVertex },
Jason Samsd19f10d2009-05-22 14:03:28 -07001357
Jason Sams02fb2cb2009-05-28 15:37:57 -07001358{"nSamplerBegin", "()V", (void*)nSamplerBegin },
1359{"nSamplerSet", "(II)V", (void*)nSamplerSet },
1360{"nSamplerCreate", "()I", (void*)nSamplerCreate },
1361
Jason Sams1bada8c2009-08-09 17:01:55 -07001362{"nSimpleMeshCreate", "(II[II)I", (void*)nSimpleMeshCreate },
1363{"nSimpleMeshBindVertex", "(III)V", (void*)nSimpleMeshBindVertex },
1364{"nSimpleMeshBindIndex", "(II)V", (void*)nSimpleMeshBindIndex },
1365
Jason Samsd19f10d2009-05-22 14:03:28 -07001366};
1367
1368static int registerFuncs(JNIEnv *_env)
1369{
1370 return android::AndroidRuntime::registerNativeMethods(
1371 _env, classPathName, methods, NELEM(methods));
1372}
1373
1374// ---------------------------------------------------------------------------
1375
1376jint JNI_OnLoad(JavaVM* vm, void* reserved)
1377{
1378 JNIEnv* env = NULL;
1379 jint result = -1;
1380
Jason Samsd19f10d2009-05-22 14:03:28 -07001381 if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
1382 LOGE("ERROR: GetEnv failed\n");
1383 goto bail;
1384 }
1385 assert(env != NULL);
1386
1387 if (registerFuncs(env) < 0) {
1388 LOGE("ERROR: MediaPlayer native registration failed\n");
1389 goto bail;
1390 }
1391
1392 /* success -- return valid version number */
1393 result = JNI_VERSION_1_4;
1394
1395bail:
1396 return result;
1397}