android_renderscript_RenderScript.cpp revision 7d5f5e7c8943e043a422ad51c85d4e1684c37e28
1d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams/*
2faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams * Copyright (C) 2011 The Android Open Source Project
3d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams *
4d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * Licensed under the Apache License, Version 2.0 (the "License");
5d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * you may not use this file except in compliance with the License.
6d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * You may obtain a copy of the License at
7d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams *
8d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams *      http://www.apache.org/licenses/LICENSE-2.0
9d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams *
10d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * Unless required by applicable law or agreed to in writing, software
11d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * distributed under the License is distributed on an "AS IS" BASIS,
12d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * See the License for the specific language governing permissions and
14d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * limitations under the License.
15d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams */
16d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
17f29ca50d80e3dc379de1642e85b7963175b2ca38Jason Sams#define LOG_TAG "libRS_jni"
18f29ca50d80e3dc379de1642e85b7963175b2ca38Jason Sams
19d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include <stdlib.h>
20d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include <stdio.h>
21d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include <fcntl.h>
22d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include <unistd.h>
23d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include <math.h>
24d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include <utils/misc.h>
25d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
26000479f9e325b4e426a67033abd92d47da412725Mathias Agopian#include <surfaceflinger/Surface.h>
27d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
28ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams#include <core/SkBitmap.h>
29650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy#include <core/SkPixelRef.h>
30650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy#include <core/SkStream.h>
31650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy#include <core/SkTemplates.h>
32650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy#include <images/SkImageDecoder.h>
33ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams
34650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy#include <utils/Asset.h>
35b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk#include <utils/AssetManager.h>
36650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy#include <utils/ResourceTypes.h>
37f29ca50d80e3dc379de1642e85b7963175b2ca38Jason Sams
38d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "jni.h"
39d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "JNIHelp.h"
40d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "android_runtime/AndroidRuntime.h"
41ee956053d6e3f7a7a82e41853b9b251fdc226d7aJim Miller#include "android_runtime/android_view_Surface.h"
42b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk#include "android_runtime/android_util_AssetManager.h"
43d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
44e29d471e5ca9781d8772d445ec7832e94856fd14Jason Sams#include <RenderScript.h>
45e29d471e5ca9781d8772d445ec7832e94856fd14Jason Sams#include <RenderScriptEnv.h>
46faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams#include <gui/SurfaceTexture.h>
47faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams#include <gui/SurfaceTextureClient.h>
48faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams#include <android_runtime/android_graphics_SurfaceTexture.h>
49d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
50d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams//#define LOG_API LOGE
51d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#define LOG_API(...)
52d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
53d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsusing namespace android;
54d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
55b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukclass AutoJavaStringToUTF8 {
56b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukpublic:
57b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8(JNIEnv* env, jstring str) : fEnv(env), fJStr(str)
58b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    {
59b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        fCStr = env->GetStringUTFChars(str, NULL);
60b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        fLength = env->GetStringUTFLength(str);
61b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
62b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    ~AutoJavaStringToUTF8()
63b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    {
64b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        fEnv->ReleaseStringUTFChars(fJStr, fCStr);
65b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
66b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    const char* c_str() const { return fCStr; }
67b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    jsize length() const { return fLength; }
68b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
69b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukprivate:
70b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    JNIEnv*     fEnv;
71b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    jstring     fJStr;
72b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    const char* fCStr;
73b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    jsize       fLength;
74b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk};
75b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
76d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
77d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
78ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Samsstatic jfieldID gContextId = 0;
79ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Samsstatic jfieldID gNativeBitmapID = 0;
8043ee06857bb7f99446d1d84f8789016c5d105558Jason Samsstatic jfieldID gTypeNativeCache = 0;
81d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
82d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void _nInit(JNIEnv *_env, jclass _this)
83d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
84d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    gContextId             = _env->GetFieldID(_this, "mContext", "I");
85ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams
86ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams    jclass bitmapClass = _env->FindClass("android/graphics/Bitmap");
87ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams    gNativeBitmapID = _env->GetFieldID(bitmapClass, "mNativeBitmap", "I");
88d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
89d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
90d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
91d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
923eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Samsstatic void
932e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextFinish(JNIEnv *_env, jobject _this, RsContext con)
9496ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams{
9596ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams    LOG_API("nContextFinish, con(%p)", con);
9696ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams    rsContextFinish(con);
9796ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams}
9896ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams
9996ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Samsstatic void
1002e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnAssignName(JNIEnv *_env, jobject _this, RsContext con, jint obj, jbyteArray str)
1013eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams{
10207ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams    LOG_API("nAssignName, con(%p), obj(%p)", con, (void *)obj);
1033eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams    jint len = _env->GetArrayLength(str);
1043eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams    jbyte * cptr = (jbyte *) _env->GetPrimitiveArrayCritical(str, 0);
105bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsAssignName(con, (void *)obj, (const char *)cptr, len);
1063eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams    _env->ReleasePrimitiveArrayCritical(str, cptr, JNI_ABORT);
1073eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams}
1083eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams
109fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchoukstatic jstring
1102e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnGetName(JNIEnv *_env, jobject _this, RsContext con, jint obj)
111fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk{
112fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk    LOG_API("nGetName, con(%p), obj(%p)", con, (void *)obj);
113fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk    const char *name = NULL;
114581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    rsaGetName(con, (void *)obj, &name);
115581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    if(name == NULL || strlen(name) == 0) {
116581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk        return NULL;
117581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    }
118fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk    return _env->NewStringUTF(name);
119fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk}
120fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk
1217ce033d797e5df5e2131e2ed459fba181eaf4658Jason Samsstatic void
1222e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnObjDestroy(JNIEnv *_env, jobject _this, RsContext con, jint obj)
1237ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams{
1247ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams    LOG_API("nObjDestroy, con(%p) obj(%p)", con, (void *)obj);
1259c25aee52672f9c8908e062bde502341c189970eJason Sams    rsObjDestroy(con, (void *)obj);
1267ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams}
1277ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams
1283eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams// ---------------------------------------------------------------------------
1293eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams
130d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic jint
131d19f10d43aa400e1183aa21a97099d02074131a2Jason SamsnDeviceCreate(JNIEnv *_env, jobject _this)
132d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
133d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("nDeviceCreate");
134d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    return (jint)rsDeviceCreate();
135d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
136d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
137d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
138d19f10d43aa400e1183aa21a97099d02074131a2Jason SamsnDeviceDestroy(JNIEnv *_env, jobject _this, jint dev)
139d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
140d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("nDeviceDestroy");
141d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    return rsDeviceDestroy((RsDevice)dev);
142d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
143d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
144ebfb436a49673693b98469683451bd9ede797557Jason Samsstatic void
145ebfb436a49673693b98469683451bd9ede797557Jason SamsnDeviceSetConfig(JNIEnv *_env, jobject _this, jint dev, jint p, jint value)
146ebfb436a49673693b98469683451bd9ede797557Jason Sams{
147ebfb436a49673693b98469683451bd9ede797557Jason Sams    LOG_API("nDeviceSetConfig  dev(%p), param(%i), value(%i)", (void *)dev, p, value);
148ebfb436a49673693b98469683451bd9ede797557Jason Sams    return rsDeviceSetConfig((RsDevice)dev, (RsDeviceParam)p, value);
149ebfb436a49673693b98469683451bd9ede797557Jason Sams}
150ebfb436a49673693b98469683451bd9ede797557Jason Sams
151d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic jint
1524382467a80dd12c6362d57edca7f2367f7ae877cStephen HinesnContextCreate(JNIEnv *_env, jobject _this, jint dev, jint ver, jint sdkVer)
153d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
154d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("nContextCreate");
1554382467a80dd12c6362d57edca7f2367f7ae877cStephen Hines    return (jint)rsContextCreate((RsDevice)dev, ver, sdkVer);
156704ff64b099406bb328898a7443921f22dbffd6dJason Sams}
157704ff64b099406bb328898a7443921f22dbffd6dJason Sams
158704ff64b099406bb328898a7443921f22dbffd6dJason Samsstatic jint
1594382467a80dd12c6362d57edca7f2367f7ae877cStephen HinesnContextCreateGL(JNIEnv *_env, jobject _this, jint dev, jint ver, jint sdkVer,
16011c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int colorMin, int colorPref,
16111c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int alphaMin, int alphaPref,
16211c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int depthMin, int depthPref,
16311c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int stencilMin, int stencilPref,
1642c74ad9aae29cc64fece926f353825a7925792c2Alex Sakhartchouk                 int samplesMin, int samplesPref, float samplesQ,
1652c74ad9aae29cc64fece926f353825a7925792c2Alex Sakhartchouk                 int dpi)
16611c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams{
16711c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    RsSurfaceConfig sc;
16811c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.alphaMin = alphaMin;
16911c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.alphaPref = alphaPref;
17011c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.colorMin = colorMin;
17111c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.colorPref = colorPref;
17211c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.depthMin = depthMin;
17311c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.depthPref = depthPref;
17411c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.samplesMin = samplesMin;
17511c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.samplesPref = samplesPref;
17611c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    sc.samplesQ = samplesQ;
17711c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams
178704ff64b099406bb328898a7443921f22dbffd6dJason Sams    LOG_API("nContextCreateGL");
1794382467a80dd12c6362d57edca7f2367f7ae877cStephen Hines    return (jint)rsContextCreateGL((RsDevice)dev, ver, sdkVer, sc, dpi);
180d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
181d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
182d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
1832e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextSetPriority(JNIEnv *_env, jobject _this, RsContext con, jint p)
1847d787b4722eaeb79cab42c36060336e092b77b5fJason Sams{
1857d787b4722eaeb79cab42c36060336e092b77b5fJason Sams    LOG_API("ContextSetPriority, con(%p), priority(%i)", con, p);
1867d787b4722eaeb79cab42c36060336e092b77b5fJason Sams    rsContextSetPriority(con, p);
1877d787b4722eaeb79cab42c36060336e092b77b5fJason Sams}
1887d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
1897d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
1907d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
1917d787b4722eaeb79cab42c36060336e092b77b5fJason Samsstatic void
1922e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextSetSurface(JNIEnv *_env, jobject _this, RsContext con, jint width, jint height, jobject wnd)
193efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams{
1943bc47d438171dce294e816366d53bc9eca772c5bJason Sams    LOG_API("nContextSetSurface, con(%p), width(%i), height(%i), surface(%p)", con, width, height, (Surface *)wnd);
195efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams
1966c72eec06e69559b4d990777c7b280aa81586797Alex Sakhartchouk    ANativeWindow * window = NULL;
197efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams    if (wnd == NULL) {
198efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams
199efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams    } else {
2006c72eec06e69559b4d990777c7b280aa81586797Alex Sakhartchouk        window = android_Surface_getNativeWindow(_env, wnd).get();
201efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams    }
202efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams
2036c72eec06e69559b4d990777c7b280aa81586797Alex Sakhartchouk    rsContextSetSurface(con, width, height, window);
204efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams}
205efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams
206efd9b6fb2e0f31b50db089352118e5daeb268879Jason Samsstatic void
207faa32b33b50ad941f631716dd0915e936bdc3ac5Jason SamsnContextSetSurfaceTexture(JNIEnv *_env, jobject _this, RsContext con, jint width, jint height, jobject sur)
208faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams{
209faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams    LOG_API("nContextSetSurfaceTexture, con(%p), width(%i), height(%i), surface(%p)", con, width, height, (Surface *)sur);
210faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams
211faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams    sp<ANativeWindow> window;
212faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams    sp<SurfaceTexture> st;
213faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams    if (sur == 0) {
214faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams
215faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams    } else {
216faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams        st = SurfaceTexture_getSurfaceTexture(_env, sur);
217faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams        window = new SurfaceTextureClient(st);
218faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams    }
219faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams
220faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams    rsContextSetSurface(con, width, height, window.get());
221faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams}
222faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams
223faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Samsstatic void
2242e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextDestroy(JNIEnv *_env, jobject _this, RsContext con)
225d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
2262e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    LOG_API("nContextDestroy, con(%p)", con);
2272e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    rsContextDestroy(con);
228d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
229d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
230715333b832fb448c32165c7d97d408a3fa43f7cbJason Samsstatic void
2312e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextDump(JNIEnv *_env, jobject _this, RsContext con, jint bits)
232715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams{
233715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams    LOG_API("nContextDump, con(%p)  bits(%i)", (RsContext)con, bits);
234715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams    rsContextDump((RsContext)con, bits);
235715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams}
236d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
237d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
2382e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextPause(JNIEnv *_env, jobject _this, RsContext con)
23965e7aa56f56097418d617663683544c25b3988eaJason Sams{
24065e7aa56f56097418d617663683544c25b3988eaJason Sams    LOG_API("nContextPause, con(%p)", con);
24165e7aa56f56097418d617663683544c25b3988eaJason Sams    rsContextPause(con);
24265e7aa56f56097418d617663683544c25b3988eaJason Sams}
24365e7aa56f56097418d617663683544c25b3988eaJason Sams
24465e7aa56f56097418d617663683544c25b3988eaJason Samsstatic void
2452e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextResume(JNIEnv *_env, jobject _this, RsContext con)
24665e7aa56f56097418d617663683544c25b3988eaJason Sams{
24765e7aa56f56097418d617663683544c25b3988eaJason Sams    LOG_API("nContextResume, con(%p)", con);
24865e7aa56f56097418d617663683544c25b3988eaJason Sams    rsContextResume(con);
24965e7aa56f56097418d617663683544c25b3988eaJason Sams}
25065e7aa56f56097418d617663683544c25b3988eaJason Sams
2511c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
2521c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Samsstatic jstring
2531c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason SamsnContextGetErrorMessage(JNIEnv *_env, jobject _this, RsContext con)
2541c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{
2551c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    LOG_API("nContextGetErrorMessage, con(%p)", con);
2561c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    char buf[1024];
2571c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
2581c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    size_t receiveLen;
2591c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    uint32_t subID;
26065bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams    int id = rsContextGetMessage(con,
26165bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                 buf, sizeof(buf),
26265bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                 &receiveLen, sizeof(receiveLen),
263edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams                                 &subID, sizeof(subID));
2641c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    if (!id && receiveLen) {
2651c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams        LOGV("message receive buffer too small.  %i", receiveLen);
2661c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    }
2671c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    return _env->NewStringUTF(buf);
2681c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams}
2691c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
270edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Samsstatic jint
2711c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason SamsnContextGetUserMessage(JNIEnv *_env, jobject _this, RsContext con, jintArray data)
272516c31911578db8ce53529483c3ded918ac7dc6bJason Sams{
273516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    jint len = _env->GetArrayLength(data);
274516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    LOG_API("nContextGetMessage, con(%p), len(%i)", con, len);
275516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    jint *ptr = _env->GetIntArrayElements(data, NULL);
276516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    size_t receiveLen;
2771c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    uint32_t subID;
27865bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams    int id = rsContextGetMessage(con,
27965bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                 ptr, len * 4,
28065bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                 &receiveLen, sizeof(receiveLen),
281edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams                                 &subID, sizeof(subID));
282516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    if (!id && receiveLen) {
2831d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams        LOGV("message receive buffer too small.  %i", receiveLen);
284516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    }
285516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    _env->ReleaseIntArrayElements(data, ptr, 0);
286edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams    return id;
2871c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams}
2881c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
2891c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Samsstatic jint
290edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason SamsnContextPeekMessage(JNIEnv *_env, jobject _this, RsContext con, jintArray auxData)
2911c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{
2921c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    LOG_API("nContextPeekMessage, con(%p)", con);
2931c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    jint *auxDataPtr = _env->GetIntArrayElements(auxData, NULL);
2941c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    size_t receiveLen;
2951c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    uint32_t subID;
29665bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams    int id = rsContextPeekMessage(con, &receiveLen, sizeof(receiveLen),
297edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams                                  &subID, sizeof(subID));
2981c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    auxDataPtr[0] = (jint)subID;
2991c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    auxDataPtr[1] = (jint)receiveLen;
3001c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    _env->ReleaseIntArrayElements(auxData, auxDataPtr, 0);
301516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    return id;
302516c31911578db8ce53529483c3ded918ac7dc6bJason Sams}
303516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
3042e1872fe07cf8952812a417985e6e1f61bdeab5dJason Samsstatic void nContextInitToClient(JNIEnv *_env, jobject _this, RsContext con)
305516c31911578db8ce53529483c3ded918ac7dc6bJason Sams{
306516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    LOG_API("nContextInitToClient, con(%p)", con);
307516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    rsContextInitToClient(con);
308516c31911578db8ce53529483c3ded918ac7dc6bJason Sams}
309516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
3102e1872fe07cf8952812a417985e6e1f61bdeab5dJason Samsstatic void nContextDeinitToClient(JNIEnv *_env, jobject _this, RsContext con)
311516c31911578db8ce53529483c3ded918ac7dc6bJason Sams{
312516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    LOG_API("nContextDeinitToClient, con(%p)", con);
313516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    rsContextDeinitToClient(con);
314516c31911578db8ce53529483c3ded918ac7dc6bJason Sams}
315516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
316516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
317718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Samsstatic jint
3182e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnElementCreate(JNIEnv *_env, jobject _this, RsContext con, jint type, jint kind, jboolean norm, jint size)
319d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
320718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    LOG_API("nElementCreate, con(%p), type(%i), kind(%i), norm(%i), size(%i)", con, type, kind, norm, size);
321718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    return (jint)rsElementCreate(con, (RsDataType)type, (RsDataKind)kind, norm, size);
322d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
323d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
324718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Samsstatic jint
32570d4e5024298f71edb3b04867e05568f5495b4ceJason SamsnElementCreate2(JNIEnv *_env, jobject _this, RsContext con, jintArray _ids, jobjectArray _names, jintArray _arraySizes)
326d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
327718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    int fieldCount = _env->GetArrayLength(_ids);
328704ff64b099406bb328898a7443921f22dbffd6dJason Sams    LOG_API("nElementCreate2, con(%p)", con);
329718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams
330718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    jint *ids = _env->GetIntArrayElements(_ids, NULL);
33170d4e5024298f71edb3b04867e05568f5495b4ceJason Sams    jint *arraySizes = _env->GetIntArrayElements(_arraySizes, NULL);
332718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    const char ** nameArray = (const char **)calloc(fieldCount, sizeof(char *));
333718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    size_t* sizeArray = (size_t*)calloc(fieldCount, sizeof(size_t));
334718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams
335718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    for (int ct=0; ct < fieldCount; ct++) {
336718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        jstring s = (jstring)_env->GetObjectArrayElement(_names, ct);
337718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        nameArray[ct] = _env->GetStringUTFChars(s, NULL);
338718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        sizeArray[ct] = _env->GetStringUTFLength(s);
33943ee06857bb7f99446d1d84f8789016c5d105558Jason Sams    }
340e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk    jint id = (jint)rsElementCreate2(con,
341e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                     (RsElement *)ids, fieldCount,
3427a22e107d100caea2a661ec73e4525d69f0f9759Jason Sams                                     nameArray, fieldCount * sizeof(size_t),  sizeArray,
343e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                     (const uint32_t *)arraySizes, fieldCount);
344718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    for (int ct=0; ct < fieldCount; ct++) {
345718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        jstring s = (jstring)_env->GetObjectArrayElement(_names, ct);
346718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        _env->ReleaseStringUTFChars(s, nameArray[ct]);
34743ee06857bb7f99446d1d84f8789016c5d105558Jason Sams    }
348718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    _env->ReleaseIntArrayElements(_ids, ids, JNI_ABORT);
34970d4e5024298f71edb3b04867e05568f5495b4ceJason Sams    _env->ReleaseIntArrayElements(_arraySizes, arraySizes, JNI_ABORT);
350718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    free(nameArray);
351718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    free(sizeArray);
352718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    return (jint)id;
353d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
354d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
355dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchoukstatic void
3562e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnElementGetNativeData(JNIEnv *_env, jobject _this, RsContext con, jint id, jintArray _elementData)
357dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{
358dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    int dataSize = _env->GetArrayLength(_elementData);
359dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    LOG_API("nElementGetNativeData, con(%p)", con);
360dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
361dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    // we will pack mType; mKind; mNormalized; mVectorSize; NumSubElements
362dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    assert(dataSize == 5);
363dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
364dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    uint32_t elementData[5];
365581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    rsaElementGetNativeData(con, (RsElement)id, elementData, dataSize);
366dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
367dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    for(jint i = 0; i < dataSize; i ++) {
368dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk        _env->SetIntArrayRegion(_elementData, i, 1, (const jint*)&elementData[i]);
369dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    }
370dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk}
371dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
372dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
373dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchoukstatic void
3747d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex SakhartchouknElementGetSubElements(JNIEnv *_env, jobject _this, RsContext con, jint id,
3757d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk                       jintArray _IDs,
3767d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk                       jobjectArray _names,
3777d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk                       jintArray _arraySizes)
378dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{
379dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    int dataSize = _env->GetArrayLength(_IDs);
380dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    LOG_API("nElementGetSubElements, con(%p)", con);
381dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
382dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    uint32_t *ids = (uint32_t *)malloc((uint32_t)dataSize * sizeof(uint32_t));
383dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    const char **names = (const char **)malloc((uint32_t)dataSize * sizeof(const char *));
3847d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    uint32_t *arraySizes = (uint32_t *)malloc((uint32_t)dataSize * sizeof(uint32_t));
385dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
3867d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    rsaElementGetSubElements(con, (RsElement)id, ids, names, arraySizes, (uint32_t)dataSize);
387dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
38811c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    for(jint i = 0; i < dataSize; i++) {
389dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk        _env->SetObjectArrayElement(_names, i, _env->NewStringUTF(names[i]));
390dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk        _env->SetIntArrayRegion(_IDs, i, 1, (const jint*)&ids[i]);
3917d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk        _env->SetIntArrayRegion(_arraySizes, i, 1, (const jint*)&arraySizes[i]);
392dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    }
393dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
394dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    free(ids);
395dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    free(names);
3967d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    free(arraySizes);
397dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk}
398dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
399d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// -----------------------------------
400d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
4013b9c52ab8c1ab240d2299358d01a8efbe392d111Jason Samsstatic int
402bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason SamsnTypeCreate(JNIEnv *_env, jobject _this, RsContext con, RsElement eid,
403bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams            jint dimx, jint dimy, jint dimz, jboolean mips, jboolean faces)
404d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
405bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    LOG_API("nTypeCreate, con(%p) eid(%p), x(%i), y(%i), z(%i), mips(%i), faces(%i)",
406bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams            con, eid, dimx, dimy, dimz, mips, faces);
4073b9c52ab8c1ab240d2299358d01a8efbe392d111Jason Sams
408c576537166fa3f829e4b5d8c6617a36b47e75fc3Jason Sams    jint id = (jint)rsTypeCreate(con, (RsElement)eid, dimx, dimy, dimz, mips, faces);
4093b9c52ab8c1ab240d2299358d01a8efbe392d111Jason Sams    return (jint)id;
410d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
411d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
412dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchoukstatic void
4132e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnTypeGetNativeData(JNIEnv *_env, jobject _this, RsContext con, jint id, jintArray _typeData)
414dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{
415dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    // We are packing 6 items: mDimX; mDimY; mDimZ;
416dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    // mDimLOD; mDimFaces; mElement; into typeData
417dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    int elementCount = _env->GetArrayLength(_typeData);
418dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
419dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    assert(elementCount == 6);
420dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    LOG_API("nTypeCreate, con(%p)", con);
421dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
422dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    uint32_t typeData[6];
423581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    rsaTypeGetNativeData(con, (RsType)id, typeData, 6);
424dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
425dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    for(jint i = 0; i < elementCount; i ++) {
426dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk        _env->SetIntArrayRegion(_typeData, i, 1, (const jint*)&typeData[i]);
427dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    }
428dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk}
429dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
430d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// -----------------------------------
431d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
432d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic jint
4335476b450e50939940dcf3f15c92335cee2fc572dJason SamsnAllocationCreateTyped(JNIEnv *_env, jobject _this, RsContext con, jint type, jint mips, jint usage)
434d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
435d4b23b54445b13dacaafad97d100999abb36ea6fJason Sams    LOG_API("nAllocationCreateTyped, con(%p), type(%p), mip(%i), usage(%i)", con, (RsElement)type, mips, usage);
436c576537166fa3f829e4b5d8c6617a36b47e75fc3Jason Sams    return (jint) rsAllocationCreateTyped(con, (RsType)type, (RsAllocationMipmapControl)mips, (uint32_t)usage);
437d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
438d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
439d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
4405476b450e50939940dcf3f15c92335cee2fc572dJason SamsnAllocationSyncAll(JNIEnv *_env, jobject _this, RsContext con, jint a, jint bits)
4415476b450e50939940dcf3f15c92335cee2fc572dJason Sams{
4425476b450e50939940dcf3f15c92335cee2fc572dJason Sams    LOG_API("nAllocationSyncAll, con(%p), a(%p), bits(0x%08x)", con, (RsAllocation)a, bits);
4435476b450e50939940dcf3f15c92335cee2fc572dJason Sams    rsAllocationSyncAll(con, (RsAllocation)a, (RsAllocationUsageType)bits);
4445476b450e50939940dcf3f15c92335cee2fc572dJason Sams}
4455476b450e50939940dcf3f15c92335cee2fc572dJason Sams
446f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Samsstatic void
447f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason SamsnAllocationGenerateMipmaps(JNIEnv *_env, jobject _this, RsContext con, jint alloc)
448f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams{
449f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams    LOG_API("nAllocationGenerateMipmaps, con(%p), a(%p)", con, (RsAllocation)alloc);
450f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams    rsAllocationGenerateMipmaps(con, (RsAllocation)alloc);
451f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams}
452f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams
453fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Samsstatic int
4545476b450e50939940dcf3f15c92335cee2fc572dJason SamsnAllocationCreateFromBitmap(JNIEnv *_env, jobject _this, RsContext con, jint type, jint mip, jobject jbitmap, jint usage)
455fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams{
456ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams    SkBitmap const * nativeBitmap =
457ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams            (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
458ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams    const SkBitmap& bitmap(*nativeBitmap);
459fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams
4605476b450e50939940dcf3f15c92335cee2fc572dJason Sams    bitmap.lockPixels();
4615476b450e50939940dcf3f15c92335cee2fc572dJason Sams    const void* ptr = bitmap.getPixels();
462c576537166fa3f829e4b5d8c6617a36b47e75fc3Jason Sams    jint id = (jint)rsAllocationCreateFromBitmap(con,
46365bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                                  (RsType)type, (RsAllocationMipmapControl)mip,
46465bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                                  ptr, bitmap.getSize(), usage);
4655476b450e50939940dcf3f15c92335cee2fc572dJason Sams    bitmap.unlockPixels();
4665476b450e50939940dcf3f15c92335cee2fc572dJason Sams    return id;
467ffe9f48890dde7173a0845d32887fdf94a49b0a7Jason Sams}
468fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams
46967f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchoukstatic int
4705476b450e50939940dcf3f15c92335cee2fc572dJason SamsnAllocationCubeCreateFromBitmap(JNIEnv *_env, jobject _this, RsContext con, jint type, jint mip, jobject jbitmap, jint usage)
47167f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk{
47267f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk    SkBitmap const * nativeBitmap =
47367f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk            (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
47467f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk    const SkBitmap& bitmap(*nativeBitmap);
47567f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk
4765476b450e50939940dcf3f15c92335cee2fc572dJason Sams    bitmap.lockPixels();
4775476b450e50939940dcf3f15c92335cee2fc572dJason Sams    const void* ptr = bitmap.getPixels();
478c576537166fa3f829e4b5d8c6617a36b47e75fc3Jason Sams    jint id = (jint)rsAllocationCubeCreateFromBitmap(con,
47965bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                                      (RsType)type, (RsAllocationMipmapControl)mip,
48065bdaf1c6d463d9441125d2c87a36015bfef2d95Jason Sams                                                      ptr, bitmap.getSize(), usage);
4815476b450e50939940dcf3f15c92335cee2fc572dJason Sams    bitmap.unlockPixels();
4825476b450e50939940dcf3f15c92335cee2fc572dJason Sams    return id;
48367f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk}
48467f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk
48526ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchoukstatic void
4864ef6650bd05a39a09958ea1db92f120ea4949cb1Jason SamsnAllocationCopyFromBitmap(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jobject jbitmap)
48726ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk{
48826ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk    SkBitmap const * nativeBitmap =
48926ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk            (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
49026ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk    const SkBitmap& bitmap(*nativeBitmap);
491f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams    int w = bitmap.width();
492f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams    int h = bitmap.height();
49326ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk
4944ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    bitmap.lockPixels();
4954ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    const void* ptr = bitmap.getPixels();
496f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams    rsAllocation2DData(con, (RsAllocation)alloc, 0, 0,
497304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                       0, RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X,
498f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams                       w, h, ptr, bitmap.getSize());
4994ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    bitmap.unlockPixels();
5008a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams}
5018a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams
5024ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Samsstatic void
5034ef6650bd05a39a09958ea1db92f120ea4949cb1Jason SamsnAllocationCopyToBitmap(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jobject jbitmap)
5048a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams{
5054ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    SkBitmap const * nativeBitmap =
5064ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams            (SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
5074ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    const SkBitmap& bitmap(*nativeBitmap);
5088a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams
5094ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    bitmap.lockPixels();
5104ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    void* ptr = bitmap.getPixels();
5114ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    rsAllocationCopyToBitmap(con, (RsAllocation)alloc, ptr, bitmap.getSize());
5124ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    bitmap.unlockPixels();
513835b8544cc333ef87e42b1d71cf8ad3cddccdc19Alex Sakhartchouk    bitmap.notifyPixelsChanged();
5148a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams}
5158a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams
5164ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Samsstatic void ReleaseBitmapCallback(void *bmp)
517650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy{
5184ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    SkBitmap const * nativeBitmap = (SkBitmap const *)bmp;
5194ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    nativeBitmap->unlockPixels();
520650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy}
521650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy
5224ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams
523d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
52449a05d7b82956009f03acbb92a064eed054eb031Jason SamsnAllocationData1D_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint lod, jint count, jintArray data, int sizeBytes)
525d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
526d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint len = _env->GetArrayLength(data);
52749a05d7b82956009f03acbb92a064eed054eb031Jason Sams    LOG_API("nAllocation1DData_i, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, count, len, sizeBytes);
528d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint *ptr = _env->GetIntArrayElements(data, NULL);
52949a05d7b82956009f03acbb92a064eed054eb031Jason Sams    rsAllocation1DData(con, (RsAllocation)alloc, offset, lod, count, ptr, sizeBytes);
530d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
531d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
532d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
533d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
53449a05d7b82956009f03acbb92a064eed054eb031Jason SamsnAllocationData1D_s(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint lod, jint count, jshortArray data, int sizeBytes)
535d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
536d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint len = _env->GetArrayLength(data);
53749a05d7b82956009f03acbb92a064eed054eb031Jason Sams    LOG_API("nAllocation1DData_s, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, count, len, sizeBytes);
538768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams    jshort *ptr = _env->GetShortArrayElements(data, NULL);
53949a05d7b82956009f03acbb92a064eed054eb031Jason Sams    rsAllocation1DData(con, (RsAllocation)alloc, offset, lod, count, ptr, sizeBytes);
540768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams    _env->ReleaseShortArrayElements(data, ptr, JNI_ABORT);
541d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
542d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
543d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
54449a05d7b82956009f03acbb92a064eed054eb031Jason SamsnAllocationData1D_b(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint lod, jint count, jbyteArray data, int sizeBytes)
545d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
546d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint len = _env->GetArrayLength(data);
54749a05d7b82956009f03acbb92a064eed054eb031Jason Sams    LOG_API("nAllocation1DData_b, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, count, len, sizeBytes);
548768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
54949a05d7b82956009f03acbb92a064eed054eb031Jason Sams    rsAllocation1DData(con, (RsAllocation)alloc, offset, lod, count, ptr, sizeBytes);
550768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
551d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
552d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
553d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
55449a05d7b82956009f03acbb92a064eed054eb031Jason SamsnAllocationData1D_f(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint lod, jint count, jfloatArray data, int sizeBytes)
555d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
556d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint len = _env->GetArrayLength(data);
55749a05d7b82956009f03acbb92a064eed054eb031Jason Sams    LOG_API("nAllocation1DData_f, con(%p), adapter(%p), offset(%i), count(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, count, len, sizeBytes);
558d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
55949a05d7b82956009f03acbb92a064eed054eb031Jason Sams    rsAllocation1DData(con, (RsAllocation)alloc, offset, lod, count, ptr, sizeBytes);
560d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    _env->ReleaseFloatArrayElements(data, ptr, JNI_ABORT);
561d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
562d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
563d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
56449a05d7b82956009f03acbb92a064eed054eb031Jason Sams//    native void rsnAllocationElementData1D(int con, int id, int xoff, int compIdx, byte[] d, int sizeBytes);
56549a05d7b82956009f03acbb92a064eed054eb031Jason SamsnAllocationElementData1D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint lod, jint compIdx, jbyteArray data, int sizeBytes)
56649bdaf0293408159df18a1d8540360f9623c40f7Jason Sams{
56749bdaf0293408159df18a1d8540360f9623c40f7Jason Sams    jint len = _env->GetArrayLength(data);
56849a05d7b82956009f03acbb92a064eed054eb031Jason Sams    LOG_API("nAllocationElementData1D, con(%p), alloc(%p), offset(%i), comp(%i), len(%i), sizeBytes(%i)", con, (RsAllocation)alloc, offset, compIdx, len, sizeBytes);
56949bdaf0293408159df18a1d8540360f9623c40f7Jason Sams    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
57049a05d7b82956009f03acbb92a064eed054eb031Jason Sams    rsAllocation1DElementData(con, (RsAllocation)alloc, offset, lod, ptr, compIdx, sizeBytes);
57149bdaf0293408159df18a1d8540360f9623c40f7Jason Sams    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
57249bdaf0293408159df18a1d8540360f9623c40f7Jason Sams}
57349bdaf0293408159df18a1d8540360f9623c40f7Jason Sams
57449bdaf0293408159df18a1d8540360f9623c40f7Jason Samsstatic void
575fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason SamsnAllocationData2D_s(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint lod, jint face,
576fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams                    jint w, jint h, jshortArray data, int sizeBytes)
577fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams{
578fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    jint len = _env->GetArrayLength(data);
579fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    LOG_API("nAllocation2DData_s, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)", con, (RsAllocation)alloc, xoff, yoff, w, h, len);
580fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    jshort *ptr = _env->GetShortArrayElements(data, NULL);
581fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    rsAllocation2DData(con, (RsAllocation)alloc, xoff, yoff, lod, (RsAllocationCubemapFace)face, w, h, ptr, sizeBytes);
582fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    _env->ReleaseShortArrayElements(data, ptr, JNI_ABORT);
583fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams}
584fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams
585fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Samsstatic void
586fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason SamsnAllocationData2D_b(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint lod, jint face,
587fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams                    jint w, jint h, jbyteArray data, int sizeBytes)
588fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams{
589fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    jint len = _env->GetArrayLength(data);
590fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    LOG_API("nAllocation2DData_b, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)", con, (RsAllocation)alloc, xoff, yoff, w, h, len);
591fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
592fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    rsAllocation2DData(con, (RsAllocation)alloc, xoff, yoff, lod, (RsAllocationCubemapFace)face, w, h, ptr, sizeBytes);
593fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
594fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams}
595fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams
596fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Samsstatic void
59749a05d7b82956009f03acbb92a064eed054eb031Jason SamsnAllocationData2D_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint lod, jint face,
59849a05d7b82956009f03acbb92a064eed054eb031Jason Sams                    jint w, jint h, jintArray data, int sizeBytes)
599d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
600d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint len = _env->GetArrayLength(data);
60149a05d7b82956009f03acbb92a064eed054eb031Jason Sams    LOG_API("nAllocation2DData_i, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)", con, (RsAllocation)alloc, xoff, yoff, w, h, len);
602d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint *ptr = _env->GetIntArrayElements(data, NULL);
60349a05d7b82956009f03acbb92a064eed054eb031Jason Sams    rsAllocation2DData(con, (RsAllocation)alloc, xoff, yoff, lod, (RsAllocationCubemapFace)face, w, h, ptr, sizeBytes);
604d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    _env->ReleaseIntArrayElements(data, ptr, JNI_ABORT);
605d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
606d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
607d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
60849a05d7b82956009f03acbb92a064eed054eb031Jason SamsnAllocationData2D_f(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint xoff, jint yoff, jint lod, jint face,
60949a05d7b82956009f03acbb92a064eed054eb031Jason Sams                    jint w, jint h, jfloatArray data, int sizeBytes)
610d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
611d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint len = _env->GetArrayLength(data);
61249a05d7b82956009f03acbb92a064eed054eb031Jason Sams    LOG_API("nAllocation2DData_i, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)", con, (RsAllocation)alloc, xoff, yoff, w, h, len);
613d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
61449a05d7b82956009f03acbb92a064eed054eb031Jason Sams    rsAllocation2DData(con, (RsAllocation)alloc, xoff, yoff, lod, (RsAllocationCubemapFace)face, w, h, ptr, sizeBytes);
615d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    _env->ReleaseFloatArrayElements(data, ptr, JNI_ABORT);
616d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
617d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
61840a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Samsstatic void
619304b1f5497155bcf91e7b855cfab7a675e80bf26Alex SakhartchouknAllocationData2D_alloc(JNIEnv *_env, jobject _this, RsContext con,
620304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                        jint dstAlloc, jint dstXoff, jint dstYoff,
621304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                        jint dstMip, jint dstFace,
622304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                        jint width, jint height,
623304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                        jint srcAlloc, jint srcXoff, jint srcYoff,
624304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                        jint srcMip, jint srcFace)
625304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk{
626304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk    LOG_API("nAllocation2DData_s, con(%p), dstAlloc(%p), dstXoff, dstYoff,"
627304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk            " dstMip(%i), dstFace(%i), width(%i), height(%i),"
628304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk            " srcAlloc(%p), srcXoff(%i), srcYoff(%i), srcMip(%i), srcFace(%i)",
629304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk            con, (RsAllocation)dstAlloc, dstXoff, dstYoff, dstMip, dstFace,
630304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk            width, height, (RsAllocation)srcAlloc, srcXoff, srcYoff, srcMip, srcFace);
631304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk
632304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk    rsAllocationCopy2DRange(con,
633304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            (RsAllocation)dstAlloc,
634304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            dstXoff, dstYoff,
635304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            dstMip, dstFace,
636304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            width, height,
637304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            (RsAllocation)srcAlloc,
638304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            srcXoff, srcYoff,
639304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            srcMip, srcFace);
640304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk}
641304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk
642304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchoukstatic void
6432e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnAllocationRead_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jintArray data)
64440a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams{
64540a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams    jint len = _env->GetArrayLength(data);
64640a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams    LOG_API("nAllocationRead_i, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
64740a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams    jint *ptr = _env->GetIntArrayElements(data, NULL);
648e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk    jsize length = _env->GetArrayLength(data);
649e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk    rsAllocationRead(con, (RsAllocation)alloc, ptr, length);
650ae209acd8d48755df7d49459b1bcbc3b8e20561dJoe Onorato    _env->ReleaseIntArrayElements(data, ptr, 0);
65140a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams}
65240a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams
65340a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Samsstatic void
654fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason SamsnAllocationRead_s(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jshortArray data)
655fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams{
656fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    jint len = _env->GetArrayLength(data);
657fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    LOG_API("nAllocationRead_i, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
658fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    jshort *ptr = _env->GetShortArrayElements(data, NULL);
659e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk    jsize length = _env->GetArrayLength(data);
660e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk    rsAllocationRead(con, (RsAllocation)alloc, ptr, length);
661fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    _env->ReleaseShortArrayElements(data, ptr, 0);
662fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams}
663fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams
664fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Samsstatic void
665fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason SamsnAllocationRead_b(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jbyteArray data)
666fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams{
667fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    jint len = _env->GetArrayLength(data);
668fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    LOG_API("nAllocationRead_i, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
669fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
670e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk    jsize length = _env->GetArrayLength(data);
671e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk    rsAllocationRead(con, (RsAllocation)alloc, ptr, length);
672fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams    _env->ReleaseByteArrayElements(data, ptr, 0);
673fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams}
674fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams
675fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Samsstatic void
6762e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnAllocationRead_f(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jfloatArray data)
67740a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams{
67840a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams    jint len = _env->GetArrayLength(data);
679a8f2acee39aae94f9d7148f775ca8e35344da4b4Joe Onorato    LOG_API("nAllocationRead_f, con(%p), alloc(%p), len(%i)", con, (RsAllocation)alloc, len);
68040a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams    jfloat *ptr = _env->GetFloatArrayElements(data, NULL);
681e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk    jsize length = _env->GetArrayLength(data);
682e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk    rsAllocationRead(con, (RsAllocation)alloc, ptr, length);
683ae209acd8d48755df7d49459b1bcbc3b8e20561dJoe Onorato    _env->ReleaseFloatArrayElements(data, ptr, 0);
68440a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams}
685d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
686dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchoukstatic jint
6872e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnAllocationGetType(JNIEnv *_env, jobject _this, RsContext con, jint a)
688dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk{
689dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk    LOG_API("nAllocationGetType, con(%p), a(%p)", con, (RsAllocation)a);
690581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    return (jint) rsaAllocationGetType(con, (RsAllocation)a);
691dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk}
692dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk
6935edc608a0749ed4b7074b5c1243043eb722c3c31Jason Samsstatic void
6945edc608a0749ed4b7074b5c1243043eb722c3c31Jason SamsnAllocationResize1D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint dimX)
6955edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams{
6965edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams    LOG_API("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i)", con, (RsAllocation)alloc, dimX);
6975edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams    rsAllocationResize1D(con, (RsAllocation)alloc, dimX);
6985edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams}
6995edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams
7005edc608a0749ed4b7074b5c1243043eb722c3c31Jason Samsstatic void
7015edc608a0749ed4b7074b5c1243043eb722c3c31Jason SamsnAllocationResize2D(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint dimX, jint dimY)
7025edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams{
7035edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams    LOG_API("nAllocationResize1D, con(%p), alloc(%p), sizeX(%i), sizeY(%i)", con, (RsAllocation)alloc, dimX, dimY);
7045edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams    rsAllocationResize2D(con, (RsAllocation)alloc, dimX, dimY);
7055edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams}
7065edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams
707aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk// -----------------------------------
708aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
709aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchoukstatic int
7102e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnFileA3DCreateFromAssetStream(JNIEnv *_env, jobject _this, RsContext con, jint native_asset)
711aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{
712aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    LOGV("______nFileA3D %u", (uint32_t) native_asset);
713aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
714aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    Asset* asset = reinterpret_cast<Asset*>(native_asset);
715aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
716b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    jint id = (jint)rsaFileA3DCreateFromMemory(con, asset->getBuffer(false), asset->getLength());
717b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    return id;
718b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk}
719b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
720b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukstatic int
721b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex SakhartchouknFileA3DCreateFromAsset(JNIEnv *_env, jobject _this, RsContext con, jobject _assetMgr, jstring _path)
722b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{
723b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AssetManager* mgr = assetManagerForJavaObject(_env, _assetMgr);
724b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    if (mgr == NULL) {
725b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return 0;
726b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
727b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
728b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 str(_env, _path);
729b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    Asset* asset = mgr->open(str.c_str(), Asset::ACCESS_BUFFER);
730b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    if (asset == NULL) {
731b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return 0;
732b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
733b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
734b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    jint id = (jint)rsaFileA3DCreateFromAsset(con, asset);
735b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    return id;
736b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk}
737b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
738b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukstatic int
739b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex SakhartchouknFileA3DCreateFromFile(JNIEnv *_env, jobject _this, RsContext con, jstring fileName)
740b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{
741b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 fileNameUTF(_env, fileName);
742b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    jint id = (jint)rsaFileA3DCreateFromFile(con, fileNameUTF.c_str());
743b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
744aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    return id;
745aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk}
746aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
747aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchoukstatic int
7482e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnFileA3DGetNumIndexEntries(JNIEnv *_env, jobject _this, RsContext con, jint fileA3D)
749aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{
750aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    int32_t numEntries = 0;
751581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    rsaFileA3DGetNumIndexEntries(con, &numEntries, (RsFile)fileA3D);
752aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    return numEntries;
753aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk}
754aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
755aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchoukstatic void
7562e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnFileA3DGetIndexEntries(JNIEnv *_env, jobject _this, RsContext con, jint fileA3D, jint numEntries, jintArray _ids, jobjectArray _entries)
757aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{
758aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    LOGV("______nFileA3D %u", (uint32_t) fileA3D);
759aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    RsFileIndexEntry *fileEntries = (RsFileIndexEntry*)malloc((uint32_t)numEntries * sizeof(RsFileIndexEntry));
760aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
761581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    rsaFileA3DGetIndexEntries(con, fileEntries, (uint32_t)numEntries, (RsFile)fileA3D);
762aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
763aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    for(jint i = 0; i < numEntries; i ++) {
764aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk        _env->SetObjectArrayElement(_entries, i, _env->NewStringUTF(fileEntries[i].objectName));
765aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk        _env->SetIntArrayRegion(_ids, i, 1, (const jint*)&fileEntries[i].classID);
766aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    }
767aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
768aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    free(fileEntries);
769aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk}
770aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk
771aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchoukstatic int
7722e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnFileA3DGetEntryByIndex(JNIEnv *_env, jobject _this, RsContext con, jint fileA3D, jint index)
773aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk{
774aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    LOGV("______nFileA3D %u", (uint32_t) fileA3D);
775581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    jint id = (jint)rsaFileA3DGetEntryByIndex(con, (uint32_t)index, (RsFile)fileA3D);
776aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    return id;
777aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk}
778d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
779d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// -----------------------------------
780d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
7819b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchoukstatic int
782b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex SakhartchouknFontCreateFromFile(JNIEnv *_env, jobject _this, RsContext con,
783b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk                    jstring fileName, jfloat fontSize, jint dpi)
7849b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk{
785b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 fileNameUTF(_env, fileName);
786e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk    jint id = (jint)rsFontCreateFromFile(con,
787e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                         fileNameUTF.c_str(), fileNameUTF.length(),
788e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                         fontSize, dpi);
789b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
790b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    return id;
791b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk}
792b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
793b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukstatic int
794b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex SakhartchouknFontCreateFromAssetStream(JNIEnv *_env, jobject _this, RsContext con,
795b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk                           jstring name, jfloat fontSize, jint dpi, jint native_asset)
796b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{
797b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    Asset* asset = reinterpret_cast<Asset*>(native_asset);
798b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 nameUTF(_env, name);
799b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
800e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk    jint id = (jint)rsFontCreateFromMemory(con,
801e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                           nameUTF.c_str(), nameUTF.length(),
802e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                           fontSize, dpi,
803b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk                                           asset->getBuffer(false), asset->getLength());
804b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    return id;
805b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk}
806b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
807b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukstatic int
808b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex SakhartchouknFontCreateFromAsset(JNIEnv *_env, jobject _this, RsContext con, jobject _assetMgr, jstring _path,
809b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk                     jfloat fontSize, jint dpi)
810b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{
811b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AssetManager* mgr = assetManagerForJavaObject(_env, _assetMgr);
812b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    if (mgr == NULL) {
813b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return 0;
814b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
815b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk
816b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 str(_env, _path);
817b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    Asset* asset = mgr->open(str.c_str(), Asset::ACCESS_BUFFER);
818b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    if (asset == NULL) {
819b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return 0;
820b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
8219b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk
822e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk    jint id = (jint)rsFontCreateFromMemory(con,
823e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                           str.c_str(), str.length(),
824e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                           fontSize, dpi,
825b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk                                           asset->getBuffer(false), asset->getLength());
826b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    delete asset;
8279b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk    return id;
8289b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk}
8299b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk
830bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams// -----------------------------------
831bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams
832bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Samsstatic void
8332e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnScriptBindAllocation(JNIEnv *_env, jobject _this, RsContext con, jint script, jint alloc, jint slot)
834d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
835d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("nScriptBindAllocation, con(%p), script(%p), alloc(%p), slot(%i)", con, (RsScript)script, (RsAllocation)alloc, slot);
836bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsScriptBindAllocation(con, (RsScript)script, (RsAllocation)alloc, slot);
837d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
838d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
839d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
8402e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnScriptSetVarI(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jint val)
8414d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams{
842cfc04366998cd0c626594c9cf70336a11bdf5996Jason Sams    LOG_API("nScriptSetVarI, con(%p), s(%p), slot(%i), val(%i)", con, (void *)script, slot, val);
8434d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    rsScriptSetVarI(con, (RsScript)script, slot, val);
8444d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams}
8454d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams
8464d3399337d18ef04116bc8a2e5799274655d0c30Jason Samsstatic void
8476f4cf0b8885403ead157ae00fd43cf1282331c23Jason SamsnScriptSetVarObj(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jint val)
8486f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams{
8496f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams    LOG_API("nScriptSetVarObj, con(%p), s(%p), slot(%i), val(%i)", con, (void *)script, slot, val);
8506f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams    rsScriptSetVarObj(con, (RsScript)script, slot, (RsObjectBase)val);
8516f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams}
8526f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams
8536f4cf0b8885403ead157ae00fd43cf1282331c23Jason Samsstatic void
854031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen HinesnScriptSetVarJ(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jlong val)
855031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines{
856031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines    LOG_API("nScriptSetVarJ, con(%p), s(%p), slot(%i), val(%lli)", con, (void *)script, slot, val);
857031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines    rsScriptSetVarJ(con, (RsScript)script, slot, val);
858031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines}
859031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines
860031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hinesstatic void
8612e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnScriptSetVarF(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, float val)
8624d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams{
863ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines    LOG_API("nScriptSetVarF, con(%p), s(%p), slot(%i), val(%f)", con, (void *)script, slot, val);
8644d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    rsScriptSetVarF(con, (RsScript)script, slot, val);
8654d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams}
8664d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams
8674d3399337d18ef04116bc8a2e5799274655d0c30Jason Samsstatic void
868ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen HinesnScriptSetVarD(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, double val)
869ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines{
870ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines    LOG_API("nScriptSetVarD, con(%p), s(%p), slot(%i), val(%lf)", con, (void *)script, slot, val);
871ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines    rsScriptSetVarD(con, (RsScript)script, slot, val);
872ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines}
873ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines
874ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hinesstatic void
8752e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnScriptSetVarV(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jbyteArray data)
8764d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams{
8774d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    LOG_API("nScriptSetVarV, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
8784d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    jint len = _env->GetArrayLength(data);
8794d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
8804d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    rsScriptSetVarV(con, (RsScript)script, slot, ptr, len);
8814d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
8824d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams}
8834d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams
884d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
885d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
8862e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnScriptSetTimeZone(JNIEnv *_env, jobject _this, RsContext con, jint script, jbyteArray timeZone)
887584a375df68ed7d62b38389078c6804edf228f9cRomain Guy{
88807ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams    LOG_API("nScriptCSetTimeZone, con(%p), s(%p), timeZone(%s)", con, (void *)script, (const char *)timeZone);
889584a375df68ed7d62b38389078c6804edf228f9cRomain Guy
890584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    jint length = _env->GetArrayLength(timeZone);
891584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    jbyte* timeZone_ptr;
892584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    timeZone_ptr = (jbyte *) _env->GetPrimitiveArrayCritical(timeZone, (jboolean *)0);
893584a375df68ed7d62b38389078c6804edf228f9cRomain Guy
894bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsScriptSetTimeZone(con, (RsScript)script, (const char *)timeZone_ptr, length);
895584a375df68ed7d62b38389078c6804edf228f9cRomain Guy
896584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    if (timeZone_ptr) {
897584a375df68ed7d62b38389078c6804edf228f9cRomain Guy        _env->ReleasePrimitiveArrayCritical(timeZone, timeZone_ptr, 0);
898584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    }
899584a375df68ed7d62b38389078c6804edf228f9cRomain Guy}
900584a375df68ed7d62b38389078c6804edf228f9cRomain Guy
90122534176fb5c1257130ef4ee589739ca42766a32Jason Samsstatic void
9022e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnScriptInvoke(JNIEnv *_env, jobject _this, RsContext con, jint obj, jint slot)
90322534176fb5c1257130ef4ee589739ca42766a32Jason Sams{
9044d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    LOG_API("nScriptInvoke, con(%p), script(%p)", con, (void *)obj);
9054d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    rsScriptInvoke(con, (RsScript)obj, slot);
90622534176fb5c1257130ef4ee589739ca42766a32Jason Sams}
90722534176fb5c1257130ef4ee589739ca42766a32Jason Sams
908584a375df68ed7d62b38389078c6804edf228f9cRomain Guystatic void
9092e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnScriptInvokeV(JNIEnv *_env, jobject _this, RsContext con, jint script, jint slot, jbyteArray data)
910be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams{
9114d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    LOG_API("nScriptInvokeV, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
9124d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    jint len = _env->GetArrayLength(data);
9134d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    jbyte *ptr = _env->GetByteArrayElements(data, NULL);
9144d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    rsScriptInvokeV(con, (RsScript)script, slot, ptr, len);
9154d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
916be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams}
917be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams
9186e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Samsstatic void
9196e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason SamsnScriptForEach(JNIEnv *_env, jobject _this, RsContext con,
9206e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams               jint script, jint slot, jint ain, jint aout)
9216e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams{
9226e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams    LOG_API("nScriptForEach, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
9236e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams    rsScriptForEach(con, (RsScript)script, slot, (RsAllocation)ain, (RsAllocation)aout, NULL, 0);
9246e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams}
9256e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Samsstatic void
9266e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason SamsnScriptForEachV(JNIEnv *_env, jobject _this, RsContext con,
9276e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams                jint script, jint slot, jint ain, jint aout, jbyteArray params)
9286e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams{
9296e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams    LOG_API("nScriptForEach, con(%p), s(%p), slot(%i)", con, (void *)script, slot);
9306e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams    jint len = _env->GetArrayLength(params);
9316e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams    jbyte *ptr = _env->GetByteArrayElements(params, NULL);
9326e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams    rsScriptForEach(con, (RsScript)script, slot, (RsAllocation)ain, (RsAllocation)aout, ptr, len);
9336e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams    _env->ReleaseByteArrayElements(params, ptr, JNI_ABORT);
9346e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams}
9356e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams
936d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
937fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams// -----------------------------------
938fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams
939e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Samsstatic jint
940e4a06c5fc738bf219f2a495e12a637b2d0871651Jason SamsnScriptCCreate(JNIEnv *_env, jobject _this, RsContext con,
941e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams               jstring resName, jstring cacheDir,
942e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams               jbyteArray scriptRef, jint length)
943d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
944e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    LOG_API("nScriptCCreate, con(%p)", con);
945e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams
946e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    AutoJavaStringToUTF8 resNameUTF(_env, resName);
947e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    AutoJavaStringToUTF8 cacheDirUTF(_env, cacheDir);
948e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    jint ret = 0;
9498451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes    jbyte* script_ptr = NULL;
95043702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    jint _exception = 0;
95143702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    jint remaining;
95243702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    if (!scriptRef) {
95343702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        _exception = 1;
9548451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        //jniThrowException(_env, "java/lang/IllegalArgumentException", "script == null");
95543702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        goto exit;
95643702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    }
95743702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    if (length < 0) {
95843702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        _exception = 1;
9598451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        //jniThrowException(_env, "java/lang/IllegalArgumentException", "length < 0");
96043702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        goto exit;
96143702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    }
962e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    remaining = _env->GetArrayLength(scriptRef);
96343702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    if (remaining < length) {
96443702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        _exception = 1;
9658451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        //jniThrowException(_env, "java/lang/IllegalArgumentException",
9668451b25a4422656bbd6657a5855e69c0f4d53c74Elliott Hughes        //        "length > script.length - offset");
96743702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        goto exit;
96843702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    }
969e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    script_ptr = (jbyte *)
97043702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        _env->GetPrimitiveArrayCritical(scriptRef, (jboolean *)0);
97143702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich
972e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    //rsScriptCSetText(con, (const char *)script_ptr, length);
973e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams
974e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk    ret = (jint)rsScriptCCreate(con,
975e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                resNameUTF.c_str(), resNameUTF.length(),
976e7c4a7565c7f8c8fc1ec92dc0692577fcc474750Alex Sakhartchouk                                cacheDirUTF.c_str(), cacheDirUTF.length(),
977e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams                                (const char *)script_ptr, length);
97839ddc950c9064129ead5de04b200106c0659f937Jason Sams
97943702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevichexit:
980e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    if (script_ptr) {
981e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams        _env->ReleasePrimitiveArrayCritical(scriptRef, script_ptr,
98243702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich                _exception ? JNI_ABORT: 0);
98343702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    }
984d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
985e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    return ret;
986d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
987d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
988d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
989d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
990d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic jint
991331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason SamsnProgramStoreCreate(JNIEnv *_env, jobject _this, RsContext con,
992331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                    jboolean colorMaskR, jboolean colorMaskG, jboolean colorMaskB, jboolean colorMaskA,
993331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                    jboolean depthMask, jboolean ditherEnable,
994331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                    jint srcFunc, jint destFunc,
995331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                    jint depthFunc)
996d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
99754db59c3594e887a412a24713fc3daa1c2404593Jason Sams    LOG_API("nProgramStoreCreate, con(%p)", con);
998331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams    return (jint)rsProgramStoreCreate(con, colorMaskR, colorMaskG, colorMaskB, colorMaskA,
999331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                                      depthMask, ditherEnable, (RsBlendSrcFunc)srcFunc,
1000331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                                      (RsBlendDstFunc)destFunc, (RsDepthFunc)depthFunc);
1001d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1002d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
10030011bcf57ff711a221a3a4c73f2a79125111647dJason Sams// ---------------------------------------------------------------------------
10040011bcf57ff711a221a3a4c73f2a79125111647dJason Sams
10050011bcf57ff711a221a3a4c73f2a79125111647dJason Samsstatic void
10062e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnProgramBindConstants(JNIEnv *_env, jobject _this, RsContext con, jint vpv, jint slot, jint a)
10070011bcf57ff711a221a3a4c73f2a79125111647dJason Sams{
10080011bcf57ff711a221a3a4c73f2a79125111647dJason Sams    LOG_API("nProgramBindConstants, con(%p), vpf(%p), sloat(%i), a(%p)", con, (RsProgramVertex)vpv, slot, (RsAllocation)a);
10090011bcf57ff711a221a3a4c73f2a79125111647dJason Sams    rsProgramBindConstants(con, (RsProgram)vpv, slot, (RsAllocation)a);
10100011bcf57ff711a221a3a4c73f2a79125111647dJason Sams}
101154c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams
1012d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
10132e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnProgramBindTexture(JNIEnv *_env, jobject _this, RsContext con, jint vpf, jint slot, jint a)
101454c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams{
101568afd01ec9fd37774d8291192952a25e5605b6fbJason Sams    LOG_API("nProgramBindTexture, con(%p), vpf(%p), slot(%i), a(%p)", con, (RsProgramFragment)vpf, slot, (RsAllocation)a);
101668afd01ec9fd37774d8291192952a25e5605b6fbJason Sams    rsProgramBindTexture(con, (RsProgramFragment)vpf, slot, (RsAllocation)a);
101754c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams}
101854c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams
101954c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Samsstatic void
10202e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnProgramBindSampler(JNIEnv *_env, jobject _this, RsContext con, jint vpf, jint slot, jint a)
1021d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
102268afd01ec9fd37774d8291192952a25e5605b6fbJason Sams    LOG_API("nProgramBindSampler, con(%p), vpf(%p), slot(%i), a(%p)", con, (RsProgramFragment)vpf, slot, (RsSampler)a);
102368afd01ec9fd37774d8291192952a25e5605b6fbJason Sams    rsProgramBindSampler(con, (RsProgramFragment)vpf, slot, (RsSampler)a);
1024d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1025d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
102668afd01ec9fd37774d8291192952a25e5605b6fbJason Sams// ---------------------------------------------------------------------------
1027d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
102868afd01ec9fd37774d8291192952a25e5605b6fbJason Samsstatic jint
1029b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex SakhartchouknProgramFragmentCreate(JNIEnv *_env, jobject _this, RsContext con, jstring shader, jintArray params)
10307e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams{
1031b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 shaderUTF(_env, shader);
10327e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams    jint *paramPtr = _env->GetIntArrayElements(params, NULL);
10337e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams    jint paramLen = _env->GetArrayLength(params);
10347e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams
1035991040c8261237997915f8a4c899a6ea5012fb42Jason Sams    LOG_API("nProgramFragmentCreate, con(%p), paramLen(%i)", con, paramLen);
10367e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams
1037b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    jint ret = (jint)rsProgramFragmentCreate(con, shaderUTF.c_str(), shaderUTF.length(), (uint32_t *)paramPtr, paramLen);
10387e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams    _env->ReleaseIntArrayElements(params, paramPtr, JNI_ABORT);
10397e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams    return ret;
10407e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams}
10417e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams
10427e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams
10431fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams// ---------------------------------------------------------------------------
10441fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams
10450011bcf57ff711a221a3a4c73f2a79125111647dJason Samsstatic jint
1046b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex SakhartchouknProgramVertexCreate(JNIEnv *_env, jobject _this, RsContext con, jstring shader, jintArray params)
10471fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams{
1048b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    AutoJavaStringToUTF8 shaderUTF(_env, shader);
10490011bcf57ff711a221a3a4c73f2a79125111647dJason Sams    jint *paramPtr = _env->GetIntArrayElements(params, NULL);
10500011bcf57ff711a221a3a4c73f2a79125111647dJason Sams    jint paramLen = _env->GetArrayLength(params);
10511fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams
1052991040c8261237997915f8a4c899a6ea5012fb42Jason Sams    LOG_API("nProgramVertexCreate, con(%p), paramLen(%i)", con, paramLen);
1053ee41112e1539de95596600fd2c6dada5d275217fJason Sams
1054b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    jint ret = (jint)rsProgramVertexCreate(con, shaderUTF.c_str(), shaderUTF.length(), (uint32_t *)paramPtr, paramLen);
10550011bcf57ff711a221a3a4c73f2a79125111647dJason Sams    _env->ReleaseIntArrayElements(params, paramPtr, JNI_ABORT);
10560011bcf57ff711a221a3a4c73f2a79125111647dJason Sams    return ret;
10571fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams}
10581fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams
1059ebfb436a49673693b98469683451bd9ede797557Jason Sams// ---------------------------------------------------------------------------
1060ebfb436a49673693b98469683451bd9ede797557Jason Sams
1061ebfb436a49673693b98469683451bd9ede797557Jason Samsstatic jint
106294aaed38467c71a6c804f0e18b41346a4013c25bJason SamsnProgramRasterCreate(JNIEnv *_env, jobject _this, RsContext con, jboolean pointSprite, jint cull)
1063ebfb436a49673693b98469683451bd9ede797557Jason Sams{
106494aaed38467c71a6c804f0e18b41346a4013c25bJason Sams    LOG_API("nProgramRasterCreate, con(%p), pointSprite(%i), cull(%i)", con, pointSprite, cull);
106594aaed38467c71a6c804f0e18b41346a4013c25bJason Sams    return (jint)rsProgramRasterCreate(con, pointSprite, (RsCullMode)cull);
1066ebfb436a49673693b98469683451bd9ede797557Jason Sams}
1067ebfb436a49673693b98469683451bd9ede797557Jason Sams
1068d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1069d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
1070d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1071d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
10722e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextBindRootScript(JNIEnv *_env, jobject _this, RsContext con, jint script)
1073d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
1074d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("nContextBindRootScript, con(%p), script(%p)", con, (RsScript)script);
1075bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsContextBindRootScript(con, (RsScript)script);
1076d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1077d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1078d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
10792e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextBindProgramStore(JNIEnv *_env, jobject _this, RsContext con, jint pfs)
1080d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
108154db59c3594e887a412a24713fc3daa1c2404593Jason Sams    LOG_API("nContextBindProgramStore, con(%p), pfs(%p)", con, (RsProgramStore)pfs);
108254db59c3594e887a412a24713fc3daa1c2404593Jason Sams    rsContextBindProgramStore(con, (RsProgramStore)pfs);
1083d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1084d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1085d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic void
10862e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextBindProgramFragment(JNIEnv *_env, jobject _this, RsContext con, jint pf)
1087d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
1088d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    LOG_API("nContextBindProgramFragment, con(%p), pf(%p)", con, (RsProgramFragment)pf);
1089bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsContextBindProgramFragment(con, (RsProgramFragment)pf);
1090d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1091d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
10920826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Samsstatic void
10932e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextBindProgramVertex(JNIEnv *_env, jobject _this, RsContext con, jint pf)
10940826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams{
10950826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams    LOG_API("nContextBindProgramVertex, con(%p), pf(%p)", con, (RsProgramVertex)pf);
1096bc948dedcee57a66fe2cb38d4c79d04a10c7efb3Jason Sams    rsContextBindProgramVertex(con, (RsProgramVertex)pf);
10970826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams}
10980826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams
1099d7b3774da62d3c70cc7e8cf549967a1c823501e6Joe Onoratostatic void
11002e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnContextBindProgramRaster(JNIEnv *_env, jobject _this, RsContext con, jint pf)
1101ebfb436a49673693b98469683451bd9ede797557Jason Sams{
1102ebfb436a49673693b98469683451bd9ede797557Jason Sams    LOG_API("nContextBindProgramRaster, con(%p), pf(%p)", con, (RsProgramRaster)pf);
1103ebfb436a49673693b98469683451bd9ede797557Jason Sams    rsContextBindProgramRaster(con, (RsProgramRaster)pf);
1104ebfb436a49673693b98469683451bd9ede797557Jason Sams}
1105ebfb436a49673693b98469683451bd9ede797557Jason Sams
1106d7b3774da62d3c70cc7e8cf549967a1c823501e6Joe Onorato
110702fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams// ---------------------------------------------------------------------------
110802fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams
110902fb2cb531035779a25dbf9595e0628ea40585b0Jason Samsstatic jint
1110a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex SakhartchouknSamplerCreate(JNIEnv *_env, jobject _this, RsContext con, jint magFilter, jint minFilter,
1111a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk               jint wrapS, jint wrapT, jint wrapR, jfloat aniso)
111202fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams{
1113bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams    LOG_API("nSamplerCreate, con(%p)", con);
1114a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk    return (jint)rsSamplerCreate(con,
1115a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk                                 (RsSamplerValue)magFilter,
1116a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk                                 (RsSamplerValue)minFilter,
1117a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk                                 (RsSamplerValue)wrapS,
1118a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk                                 (RsSamplerValue)wrapT,
1119a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk                                 (RsSamplerValue)wrapR,
1120a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk                                 aniso);
112102fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams}
112202fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams
1123bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams// ---------------------------------------------------------------------------
1124bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams
11251bada8cd6e4f340de93cff4a2439835fc3b1456cJason Samsstatic jint
112625999a08a6652ff5d7d0973f279f1e92e04b3506Alex SakhartchouknMeshCreate(JNIEnv *_env, jobject _this, RsContext con, jintArray _vtx, jintArray _idx, jintArray _prim)
1127164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk{
112825999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    LOG_API("nMeshCreate, con(%p)", con);
1129164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk
113025999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    jint vtxLen = _env->GetArrayLength(_vtx);
113125999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    jint *vtxPtr = _env->GetIntArrayElements(_vtx, NULL);
113225999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    jint idxLen = _env->GetArrayLength(_idx);
113325999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    jint *idxPtr = _env->GetIntArrayElements(_idx, NULL);
113425999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    jint primLen = _env->GetArrayLength(_prim);
113525999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    jint *primPtr = _env->GetIntArrayElements(_prim, NULL);
1136164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk
113725999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    int id = (int)rsMeshCreate(con,
113825999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk                               (RsAllocation *)vtxPtr, vtxLen,
113925999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk                               (RsAllocation *)idxPtr, idxLen,
114025999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk                               (uint32_t *)primPtr, primLen);
114180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
114225999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    _env->ReleaseIntArrayElements(_vtx, vtxPtr, 0);
114325999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    _env->ReleaseIntArrayElements(_idx, idxPtr, 0);
114425999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    _env->ReleaseIntArrayElements(_prim, primPtr, 0);
114525999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    return id;
11469d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk}
11479d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk
114880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic jint
11492e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnMeshGetVertexBufferCount(JNIEnv *_env, jobject _this, RsContext con, jint mesh)
115080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{
115180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    LOG_API("nMeshGetVertexBufferCount, con(%p), Mesh(%p)", con, (RsMesh)mesh);
115280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    jint vtxCount = 0;
1153581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    rsaMeshGetVertexBufferCount(con, (RsMesh)mesh, &vtxCount);
115480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    return vtxCount;
115580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk}
115680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
115780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic jint
11582e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnMeshGetIndexCount(JNIEnv *_env, jobject _this, RsContext con, jint mesh)
115980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{
116080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    LOG_API("nMeshGetIndexCount, con(%p), Mesh(%p)", con, (RsMesh)mesh);
116180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    jint idxCount = 0;
1162581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    rsaMeshGetIndexCount(con, (RsMesh)mesh, &idxCount);
116380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    return idxCount;
116480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk}
116580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
116680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic void
11672e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnMeshGetVertices(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jintArray _ids, int numVtxIDs)
116880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{
116980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    LOG_API("nMeshGetVertices, con(%p), Mesh(%p)", con, (RsMesh)mesh);
117080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
117180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numVtxIDs * sizeof(RsAllocation));
1172581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    rsaMeshGetVertices(con, (RsMesh)mesh, allocs, (uint32_t)numVtxIDs);
117380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
117480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    for(jint i = 0; i < numVtxIDs; i ++) {
117580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk        _env->SetIntArrayRegion(_ids, i, 1, (const jint*)&allocs[i]);
117680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    }
117780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
117880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    free(allocs);
117980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk}
118080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
118180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchoukstatic void
11822e1872fe07cf8952812a417985e6e1f61bdeab5dJason SamsnMeshGetIndices(JNIEnv *_env, jobject _this, RsContext con, jint mesh, jintArray _idxIds, jintArray _primitives, int numIndices)
118380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk{
118480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    LOG_API("nMeshGetVertices, con(%p), Mesh(%p)", con, (RsMesh)mesh);
118580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
118680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    RsAllocation *allocs = (RsAllocation*)malloc((uint32_t)numIndices * sizeof(RsAllocation));
118780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    uint32_t *prims= (uint32_t*)malloc((uint32_t)numIndices * sizeof(uint32_t));
118880a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
1189581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk    rsaMeshGetIndices(con, (RsMesh)mesh, allocs, prims, (uint32_t)numIndices);
119080a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
119180a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    for(jint i = 0; i < numIndices; i ++) {
119280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk        _env->SetIntArrayRegion(_idxIds, i, 1, (const jint*)&allocs[i]);
119380a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk        _env->SetIntArrayRegion(_primitives, i, 1, (const jint*)&prims[i]);
119480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    }
119580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
119680a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    free(allocs);
119780a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk    free(prims);
1198164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk}
1199164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk
1200164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk// ---------------------------------------------------------------------------
1201164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk
1202d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
120394d8e90ad78ee1dbc0efa315117688abd126ae55Jason Samsstatic const char *classPathName = "android/renderscript/RenderScript";
1204d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1205d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic JNINativeMethod methods[] = {
12061c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"_nInit",                         "()V",                                     (void*)_nInit },
12071c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
12081c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"nDeviceCreate",                  "()I",                                     (void*)nDeviceCreate },
12091c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"nDeviceDestroy",                 "(I)V",                                    (void*)nDeviceDestroy },
12101c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"nDeviceSetConfig",               "(III)V",                                  (void*)nDeviceSetConfig },
1211edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams{"nContextGetUserMessage",         "(I[I)I",                                  (void*)nContextGetUserMessage },
12121c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"nContextGetErrorMessage",        "(I)Ljava/lang/String;",                   (void*)nContextGetErrorMessage },
1213edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams{"nContextPeekMessage",            "(I[I)I",                                  (void*)nContextPeekMessage },
12141c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
12151c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"nContextInitToClient",           "(I)V",                                    (void*)nContextInitToClient },
12161c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams{"nContextDeinitToClient",         "(I)V",                                    (void*)nContextDeinitToClient },
12172e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
12182e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
12192e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams// All methods below are thread protected in java.
12204382467a80dd12c6362d57edca7f2367f7ae877cStephen Hines{"rsnContextCreate",                 "(III)I",                                (void*)nContextCreate },
12214382467a80dd12c6362d57edca7f2367f7ae877cStephen Hines{"rsnContextCreateGL",               "(IIIIIIIIIIIIIFI)I",                    (void*)nContextCreateGL },
12222e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextFinish",                 "(I)V",                                  (void*)nContextFinish },
12232e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextSetPriority",            "(II)V",                                 (void*)nContextSetPriority },
12242e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextSetSurface",             "(IIILandroid/view/Surface;)V",          (void*)nContextSetSurface },
1225faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams{"rsnContextSetSurfaceTexture",      "(IIILandroid/graphics/SurfaceTexture;)V", (void*)nContextSetSurfaceTexture },
1226b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk{"rsnContextDestroy",                "(I)V",                                  (void*)nContextDestroy },
12272e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextDump",                   "(II)V",                                 (void*)nContextDump },
12282e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextPause",                  "(I)V",                                  (void*)nContextPause },
12292e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextResume",                 "(I)V",                                  (void*)nContextResume },
12302e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnAssignName",                    "(II[B)V",                               (void*)nAssignName },
1231b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk{"rsnGetName",                       "(II)Ljava/lang/String;",                (void*)nGetName },
12322e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnObjDestroy",                    "(II)V",                                 (void*)nObjDestroy },
12332e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
1234b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{"rsnFileA3DCreateFromFile",         "(ILjava/lang/String;)I",                (void*)nFileA3DCreateFromFile },
12352e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnFileA3DCreateFromAssetStream",  "(II)I",                                 (void*)nFileA3DCreateFromAssetStream },
1236b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{"rsnFileA3DCreateFromAsset",        "(ILandroid/content/res/AssetManager;Ljava/lang/String;)I",            (void*)nFileA3DCreateFromAsset },
12372e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnFileA3DGetNumIndexEntries",     "(II)I",                                 (void*)nFileA3DGetNumIndexEntries },
1238b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk{"rsnFileA3DGetIndexEntries",        "(III[I[Ljava/lang/String;)V",           (void*)nFileA3DGetIndexEntries },
12392e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnFileA3DGetEntryByIndex",        "(III)I",                                (void*)nFileA3DGetEntryByIndex },
12402e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
1241e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk{"rsnFontCreateFromFile",            "(ILjava/lang/String;FI)I",              (void*)nFontCreateFromFile },
1242b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{"rsnFontCreateFromAssetStream",     "(ILjava/lang/String;FII)I",             (void*)nFontCreateFromAssetStream },
1243b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk{"rsnFontCreateFromAsset",        "(ILandroid/content/res/AssetManager;Ljava/lang/String;FI)I",            (void*)nFontCreateFromAsset },
12442e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
12452e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnElementCreate",                 "(IIIZI)I",                              (void*)nElementCreate },
124670d4e5024298f71edb3b04867e05568f5495b4ceJason Sams{"rsnElementCreate2",                "(I[I[Ljava/lang/String;[I)I",           (void*)nElementCreate2 },
12472e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnElementGetNativeData",          "(II[I)V",                               (void*)nElementGetNativeData },
12487d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk{"rsnElementGetSubElements",         "(II[I[Ljava/lang/String;[I)V",          (void*)nElementGetSubElements },
12492e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
1250bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams{"rsnTypeCreate",                    "(IIIIIZZ)I",                            (void*)nTypeCreate },
1251b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk{"rsnTypeGetNativeData",             "(II[I)V",                               (void*)nTypeGetNativeData },
12522e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
1253d4b23b54445b13dacaafad97d100999abb36ea6fJason Sams{"rsnAllocationCreateTyped",         "(IIII)I",                               (void*)nAllocationCreateTyped },
12545476b450e50939940dcf3f15c92335cee2fc572dJason Sams{"rsnAllocationCreateFromBitmap",    "(IIILandroid/graphics/Bitmap;I)I",      (void*)nAllocationCreateFromBitmap },
12555476b450e50939940dcf3f15c92335cee2fc572dJason Sams{"rsnAllocationCubeCreateFromBitmap","(IIILandroid/graphics/Bitmap;I)I",      (void*)nAllocationCubeCreateFromBitmap },
12565476b450e50939940dcf3f15c92335cee2fc572dJason Sams
12574ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams{"rsnAllocationCopyFromBitmap",      "(IILandroid/graphics/Bitmap;)V",        (void*)nAllocationCopyFromBitmap },
12584ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams{"rsnAllocationCopyToBitmap",        "(IILandroid/graphics/Bitmap;)V",        (void*)nAllocationCopyToBitmap },
12594ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams
12605476b450e50939940dcf3f15c92335cee2fc572dJason Sams{"rsnAllocationSyncAll",             "(III)V",                                (void*)nAllocationSyncAll },
126149a05d7b82956009f03acbb92a064eed054eb031Jason Sams{"rsnAllocationData1D",              "(IIIII[II)V",                           (void*)nAllocationData1D_i },
126249a05d7b82956009f03acbb92a064eed054eb031Jason Sams{"rsnAllocationData1D",              "(IIIII[SI)V",                           (void*)nAllocationData1D_s },
126349a05d7b82956009f03acbb92a064eed054eb031Jason Sams{"rsnAllocationData1D",              "(IIIII[BI)V",                           (void*)nAllocationData1D_b },
126449a05d7b82956009f03acbb92a064eed054eb031Jason Sams{"rsnAllocationData1D",              "(IIIII[FI)V",                           (void*)nAllocationData1D_f },
126549a05d7b82956009f03acbb92a064eed054eb031Jason Sams{"rsnAllocationElementData1D",       "(IIIII[BI)V",                           (void*)nAllocationElementData1D },
126649a05d7b82956009f03acbb92a064eed054eb031Jason Sams{"rsnAllocationData2D",              "(IIIIIIII[II)V",                        (void*)nAllocationData2D_i },
1267fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams{"rsnAllocationData2D",              "(IIIIIIII[SI)V",                        (void*)nAllocationData2D_s },
1268fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams{"rsnAllocationData2D",              "(IIIIIIII[BI)V",                        (void*)nAllocationData2D_b },
126949a05d7b82956009f03acbb92a064eed054eb031Jason Sams{"rsnAllocationData2D",              "(IIIIIIII[FI)V",                        (void*)nAllocationData2D_f },
1270304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk{"rsnAllocationData2D",              "(IIIIIIIIIIIII)V",                      (void*)nAllocationData2D_alloc },
12712e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnAllocationRead",                "(II[I)V",                               (void*)nAllocationRead_i },
1272fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams{"rsnAllocationRead",                "(II[S)V",                               (void*)nAllocationRead_s },
1273fb9f82ca4f11cf7e43a001f3e6fd1b381cc86210Jason Sams{"rsnAllocationRead",                "(II[B)V",                               (void*)nAllocationRead_b },
12742e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnAllocationRead",                "(II[F)V",                               (void*)nAllocationRead_f },
12752e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnAllocationGetType",             "(II)I",                                 (void*)nAllocationGetType},
12765edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams{"rsnAllocationResize1D",            "(III)V",                                (void*)nAllocationResize1D },
12775edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams{"rsnAllocationResize2D",            "(IIII)V",                               (void*)nAllocationResize2D },
1278f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams{"rsnAllocationGenerateMipmaps",     "(II)V",                                 (void*)nAllocationGenerateMipmaps },
12792e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
12802e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnScriptBindAllocation",          "(IIII)V",                               (void*)nScriptBindAllocation },
12812e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnScriptSetTimeZone",             "(II[B)V",                               (void*)nScriptSetTimeZone },
12822e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnScriptInvoke",                  "(III)V",                                (void*)nScriptInvoke },
12832e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnScriptInvokeV",                 "(III[B)V",                              (void*)nScriptInvokeV },
12846e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams{"rsnScriptForEach",                 "(IIIII)V",                              (void*)nScriptForEach },
12856e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams{"rsnScriptForEach",                 "(IIIII[B)V",                            (void*)nScriptForEachV },
12862e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnScriptSetVarI",                 "(IIII)V",                               (void*)nScriptSetVarI },
1287031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines{"rsnScriptSetVarJ",                 "(IIIJ)V",                               (void*)nScriptSetVarJ },
12882e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnScriptSetVarF",                 "(IIIF)V",                               (void*)nScriptSetVarF },
1289ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines{"rsnScriptSetVarD",                 "(IIID)V",                               (void*)nScriptSetVarD },
12902e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnScriptSetVarV",                 "(III[B)V",                              (void*)nScriptSetVarV },
12916f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams{"rsnScriptSetVarObj",               "(IIII)V",                               (void*)nScriptSetVarObj },
12922e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
1293e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams{"rsnScriptCCreate",                 "(ILjava/lang/String;Ljava/lang/String;[BI)I",  (void*)nScriptCCreate },
12942e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
1295331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams{"rsnProgramStoreCreate",            "(IZZZZZZIII)I",                         (void*)nProgramStoreCreate },
12962e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
12972e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnProgramBindConstants",          "(IIII)V",                               (void*)nProgramBindConstants },
12982e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnProgramBindTexture",            "(IIII)V",                               (void*)nProgramBindTexture },
12992e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnProgramBindSampler",            "(IIII)V",                               (void*)nProgramBindSampler },
13002e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
130149a05d7b82956009f03acbb92a064eed054eb031Jason Sams{"rsnProgramFragmentCreate",         "(ILjava/lang/String;[I)I",              (void*)nProgramFragmentCreate },
130294aaed38467c71a6c804f0e18b41346a4013c25bJason Sams{"rsnProgramRasterCreate",           "(IZI)I",                                (void*)nProgramRasterCreate },
130349a05d7b82956009f03acbb92a064eed054eb031Jason Sams{"rsnProgramVertexCreate",           "(ILjava/lang/String;[I)I",              (void*)nProgramVertexCreate },
13042e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
13052e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextBindRootScript",         "(II)V",                                 (void*)nContextBindRootScript },
1306b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk{"rsnContextBindProgramStore",       "(II)V",                                 (void*)nContextBindProgramStore },
13072e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextBindProgramFragment",    "(II)V",                                 (void*)nContextBindProgramFragment },
13082e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextBindProgramVertex",      "(II)V",                                 (void*)nContextBindProgramVertex },
13092e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnContextBindProgramRaster",      "(II)V",                                 (void*)nContextBindProgramRaster },
13102e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
1311a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk{"rsnSamplerCreate",                 "(IIIIIIF)I",                            (void*)nSamplerCreate },
13122e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
131325999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk{"rsnMeshCreate",                    "(I[I[I[I)I",                            (void*)nMeshCreate },
13142e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
13152e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnMeshGetVertexBufferCount",      "(II)I",                                 (void*)nMeshGetVertexBufferCount },
13162e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnMeshGetIndexCount",             "(II)I",                                 (void*)nMeshGetIndexCount },
1317b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk{"rsnMeshGetVertices",               "(II[II)V",                              (void*)nMeshGetVertices },
13182e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams{"rsnMeshGetIndices",                "(II[I[II)V",                            (void*)nMeshGetIndices },
131980a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk
1320d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams};
1321d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1322d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsstatic int registerFuncs(JNIEnv *_env)
1323d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
1324d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    return android::AndroidRuntime::registerNativeMethods(
1325d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams            _env, classPathName, methods, NELEM(methods));
1326d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1327d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1328d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
1329d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1330d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsjint JNI_OnLoad(JavaVM* vm, void* reserved)
1331d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
1332d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    JNIEnv* env = NULL;
1333d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    jint result = -1;
1334d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1335d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
1336d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams        LOGE("ERROR: GetEnv failed\n");
1337d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams        goto bail;
1338d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    }
1339d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    assert(env != NULL);
1340d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1341d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    if (registerFuncs(env) < 0) {
1342d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams        LOGE("ERROR: MediaPlayer native registration failed\n");
1343d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams        goto bail;
1344d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    }
1345d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1346d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    /* success -- return valid version number */
1347d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    result = JNI_VERSION_1_4;
1348d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
1349d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsbail:
1350d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    return result;
1351d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
1352