Merge "Make the value for shadowRadius less than 1.0 work"
diff --git a/Android.mk b/Android.mk
index d9e4455..9bfbab5 100644
--- a/Android.mk
+++ b/Android.mk
@@ -406,6 +406,7 @@
LOCAL_MODULE := framework
LOCAL_DX_FLAGS := --core-library --multi-dex
+LOCAL_JACK_FLAGS := --multi-dex native
LOCAL_RMTYPEDEFS := true
@@ -417,6 +418,7 @@
framework_res_R_stamp := \
$(call intermediates-dir-for,APPS,framework-res,,COMMON)/src/R.stamp
$(full_classes_compiled_jar): $(framework_res_R_stamp)
+$(built_dex_intermediate): $(framework_res_R_stamp)
$(framework_module): | $(dir $(framework_module))framework-res.apk
@@ -678,6 +680,7 @@
bouncycastle \
okhttp \
ext \
+ icu4j \
framework \
telephony-common \
voip-common
@@ -729,7 +732,8 @@
$(foreach lib,$(FRAMEWORKS_SUPPORT_JAVA_LIBRARIES),$(call intermediates-dir-for,JAVA_LIBRARIES,$(lib)-res,,COMMON))
framework_docs_LOCAL_ADDITIONAL_DEPENDENCIES := \
- frameworks/base/docs/knowntags.txt
+ frameworks/base/docs/knowntags.txt \
+ libcore/Docs.mk
samples_dir := development/samples/browseable
diff --git a/api/current.txt b/api/current.txt
index ed80e38..8d650cb 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -16998,6 +16998,7 @@
}
public final class IpPrefix implements android.os.Parcelable {
+ method public boolean contains(java.net.InetAddress);
method public int describeContents();
method public java.net.InetAddress getAddress();
method public int getPrefixLength();
@@ -18444,6 +18445,7 @@
public final class NfcEvent {
field public final android.nfc.NfcAdapter nfcAdapter;
+ field public final byte peerLlcpVersion;
}
public final class NfcManager {
@@ -26518,6 +26520,7 @@
public class Script extends android.renderscript.BaseObj {
method public void bindAllocation(android.renderscript.Allocation, int);
method protected android.renderscript.Script.FieldID createFieldID(int, android.renderscript.Element);
+ method protected android.renderscript.Script.InvokeID createInvokeID(int);
method protected android.renderscript.Script.KernelID createKernelID(int, int, android.renderscript.Element, android.renderscript.Element);
method protected void forEach(int, android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.FieldPacker);
method protected void forEach(int, android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.FieldPacker, android.renderscript.Script.LaunchOptions);
@@ -26558,6 +26561,9 @@
public static final class Script.FieldID extends android.renderscript.BaseObj {
}
+ public static final class Script.InvokeID extends android.renderscript.BaseObj {
+ }
+
public static final class Script.KernelID extends android.renderscript.BaseObj {
}
@@ -26582,12 +26588,19 @@
}
public final class ScriptGroup extends android.renderscript.BaseObj {
- method public void execute();
- method public void setInput(android.renderscript.Script.KernelID, android.renderscript.Allocation);
- method public void setOutput(android.renderscript.Script.KernelID, android.renderscript.Allocation);
+ method public java.lang.Object[] execute(java.lang.Object...);
+ method public deprecated void execute();
+ method public deprecated void setInput(android.renderscript.Script.KernelID, android.renderscript.Allocation);
+ method public deprecated void setOutput(android.renderscript.Script.KernelID, android.renderscript.Allocation);
}
- public static final class ScriptGroup.Builder {
+ public static final class ScriptGroup.Binding {
+ ctor public ScriptGroup.Binding(android.renderscript.Script.FieldID, java.lang.Object);
+ method public android.renderscript.Script.FieldID getField();
+ method public java.lang.Object getValue();
+ }
+
+ public static final deprecated class ScriptGroup.Builder {
ctor public ScriptGroup.Builder(android.renderscript.RenderScript);
method public android.renderscript.ScriptGroup.Builder addConnection(android.renderscript.Type, android.renderscript.Script.KernelID, android.renderscript.Script.FieldID);
method public android.renderscript.ScriptGroup.Builder addConnection(android.renderscript.Type, android.renderscript.Script.KernelID, android.renderscript.Script.KernelID);
@@ -26595,6 +26608,25 @@
method public android.renderscript.ScriptGroup create();
}
+ public static final class ScriptGroup.Builder2 {
+ ctor public ScriptGroup.Builder2(android.renderscript.RenderScript);
+ method public android.renderscript.ScriptGroup.Input addInput();
+ method public android.renderscript.ScriptGroup.Closure addInvoke(android.renderscript.Script.InvokeID, java.lang.Object...);
+ method public android.renderscript.ScriptGroup.Closure addKernel(android.renderscript.Script.KernelID, android.renderscript.Type, java.lang.Object...);
+ method public android.renderscript.ScriptGroup create(java.lang.String, android.renderscript.ScriptGroup.Future...);
+ }
+
+ public static final class ScriptGroup.Closure extends android.renderscript.BaseObj {
+ method public android.renderscript.ScriptGroup.Future getGlobal(android.renderscript.Script.FieldID);
+ method public android.renderscript.ScriptGroup.Future getReturn();
+ }
+
+ public static final class ScriptGroup.Future {
+ }
+
+ public static final class ScriptGroup.Input {
+ }
+
public abstract class ScriptIntrinsic extends android.renderscript.Script {
}
diff --git a/api/system-current.txt b/api/system-current.txt
index 8f1b8b2..8af6a95 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -18261,6 +18261,7 @@
}
public final class IpPrefix implements android.os.Parcelable {
+ method public boolean contains(java.net.InetAddress);
method public int describeContents();
method public java.net.InetAddress getAddress();
method public int getPrefixLength();
@@ -20028,6 +20029,7 @@
public final class NfcEvent {
field public final android.nfc.NfcAdapter nfcAdapter;
+ field public final byte peerLlcpVersion;
}
public final class NfcManager {
@@ -28115,6 +28117,7 @@
public class Script extends android.renderscript.BaseObj {
method public void bindAllocation(android.renderscript.Allocation, int);
method protected android.renderscript.Script.FieldID createFieldID(int, android.renderscript.Element);
+ method protected android.renderscript.Script.InvokeID createInvokeID(int);
method protected android.renderscript.Script.KernelID createKernelID(int, int, android.renderscript.Element, android.renderscript.Element);
method protected void forEach(int, android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.FieldPacker);
method protected void forEach(int, android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.FieldPacker, android.renderscript.Script.LaunchOptions);
@@ -28155,6 +28158,9 @@
public static final class Script.FieldID extends android.renderscript.BaseObj {
}
+ public static final class Script.InvokeID extends android.renderscript.BaseObj {
+ }
+
public static final class Script.KernelID extends android.renderscript.BaseObj {
}
@@ -28179,12 +28185,19 @@
}
public final class ScriptGroup extends android.renderscript.BaseObj {
- method public void execute();
- method public void setInput(android.renderscript.Script.KernelID, android.renderscript.Allocation);
- method public void setOutput(android.renderscript.Script.KernelID, android.renderscript.Allocation);
+ method public java.lang.Object[] execute(java.lang.Object...);
+ method public deprecated void execute();
+ method public deprecated void setInput(android.renderscript.Script.KernelID, android.renderscript.Allocation);
+ method public deprecated void setOutput(android.renderscript.Script.KernelID, android.renderscript.Allocation);
}
- public static final class ScriptGroup.Builder {
+ public static final class ScriptGroup.Binding {
+ ctor public ScriptGroup.Binding(android.renderscript.Script.FieldID, java.lang.Object);
+ method public android.renderscript.Script.FieldID getField();
+ method public java.lang.Object getValue();
+ }
+
+ public static final deprecated class ScriptGroup.Builder {
ctor public ScriptGroup.Builder(android.renderscript.RenderScript);
method public android.renderscript.ScriptGroup.Builder addConnection(android.renderscript.Type, android.renderscript.Script.KernelID, android.renderscript.Script.FieldID);
method public android.renderscript.ScriptGroup.Builder addConnection(android.renderscript.Type, android.renderscript.Script.KernelID, android.renderscript.Script.KernelID);
@@ -28192,6 +28205,25 @@
method public android.renderscript.ScriptGroup create();
}
+ public static final class ScriptGroup.Builder2 {
+ ctor public ScriptGroup.Builder2(android.renderscript.RenderScript);
+ method public android.renderscript.ScriptGroup.Input addInput();
+ method public android.renderscript.ScriptGroup.Closure addInvoke(android.renderscript.Script.InvokeID, java.lang.Object...);
+ method public android.renderscript.ScriptGroup.Closure addKernel(android.renderscript.Script.KernelID, android.renderscript.Type, java.lang.Object...);
+ method public android.renderscript.ScriptGroup create(java.lang.String, android.renderscript.ScriptGroup.Future...);
+ }
+
+ public static final class ScriptGroup.Closure extends android.renderscript.BaseObj {
+ method public android.renderscript.ScriptGroup.Future getGlobal(android.renderscript.Script.FieldID);
+ method public android.renderscript.ScriptGroup.Future getReturn();
+ }
+
+ public static final class ScriptGroup.Future {
+ }
+
+ public static final class ScriptGroup.Input {
+ }
+
public abstract class ScriptIntrinsic extends android.renderscript.Script {
}
diff --git a/cmds/am/src/com/android/commands/am/Am.java b/cmds/am/src/com/android/commands/am/Am.java
index 2ea1d4d..50cfe6f 100644
--- a/cmds/am/src/com/android/commands/am/Am.java
+++ b/cmds/am/src/com/android/commands/am/Am.java
@@ -103,7 +103,7 @@
"usage: am [subcommand] [options]\n" +
"usage: am start [-D] [-W] [-P <FILE>] [--start-profiler <FILE>]\n" +
" [--sampling INTERVAL] [-R COUNT] [-S] [--opengl-trace]\n" +
- " [--user <USER_ID> | current] <INTENT>\n" +
+ " [--track-allocation] [--user <USER_ID> | current] <INTENT>\n" +
" am startservice [--user <USER_ID> | current] <INTENT>\n" +
" am stopservice [--user <USER_ID> | current] <INTENT>\n" +
" am force-stop [--user <USER_ID> | all | current] <PACKAGE>\n" +
@@ -149,6 +149,7 @@
" the top activity will be finished.\n" +
" -S: force stop the target app before starting the activity\n" +
" --opengl-trace: enable tracing of OpenGL functions\n" +
+ " --track-allocation: enable tracking of object allocations\n" +
" --user <USER_ID> | current: Specify which user to run as; if not\n" +
" specified then run as the current user.\n" +
"\n" +
@@ -583,6 +584,8 @@
mStopOption = true;
} else if (opt.equals("--opengl-trace")) {
mStartFlags |= ActivityManager.START_FLAG_OPENGL_TRACES;
+ } else if (opt.equals("--track-allocation")) {
+ mStartFlags |= ActivityManager.START_FLAG_TRACK_ALLOCATION;
} else if (opt.equals("--user")) {
mUserId = parseUserArg(nextArgRequired());
} else if (opt.equals("--receiver-permission")) {
diff --git a/cmds/app_process/Android.mk b/cmds/app_process/Android.mk
index dd5e0ea..171809c 100644
--- a/cmds/app_process/Android.mk
+++ b/cmds/app_process/Android.mk
@@ -52,10 +52,13 @@
LOCAL_CPPFLAGS := -std=c++11
LOCAL_MODULE := app_process__asan
-LOCAL_MODULE_TAGS := eng
+LOCAL_MULTILIB := both
+LOCAL_MODULE_STEM_32 := app_process32
+LOCAL_MODULE_STEM_64 := app_process64
+
+LOCAL_SANITIZE := address
+LOCAL_CLANG := true
LOCAL_MODULE_PATH := $(TARGET_OUT_EXECUTABLES)/asan
-LOCAL_MODULE_STEM := app_process
-LOCAL_ADDRESS_SANITIZER := true
LOCAL_CFLAGS += -Wall -Werror -Wunused -Wunreachable-code
diff --git a/cmds/bootanimation/BootAnimation.cpp b/cmds/bootanimation/BootAnimation.cpp
index bb25ec6..fb2370e 100644
--- a/cmds/bootanimation/BootAnimation.cpp
+++ b/cmds/bootanimation/BootAnimation.cpp
@@ -530,7 +530,7 @@
if (leaf.size() > 0) {
for (size_t j=0 ; j<pcount ; j++) {
if (path == animation.parts[j].path) {
- int method;
+ uint16_t method;
// supports only stored png files
if (mZip->getEntryInfo(entry, &method, NULL, NULL, NULL, NULL, NULL)) {
if (method == ZipFileRO::kCompressStored) {
diff --git a/cmds/idmap/create.cpp b/cmds/idmap/create.cpp
index 16532b8..41395f1 100644
--- a/cmds/idmap/create.cpp
+++ b/cmds/idmap/create.cpp
@@ -23,7 +23,7 @@
if (entry == NULL) {
return -1;
}
- if (!zip->getEntryInfo(entry, NULL, NULL, NULL, NULL, NULL, reinterpret_cast<long*>(crc))) {
+ if (!zip->getEntryInfo(entry, NULL, NULL, NULL, NULL, NULL, crc)) {
return -1;
}
zip->releaseEntry(entry);
diff --git a/cmds/idmap/scan.cpp b/cmds/idmap/scan.cpp
index 84158d3..612a7eb 100644
--- a/cmds/idmap/scan.cpp
+++ b/cmds/idmap/scan.cpp
@@ -1,4 +1,5 @@
#include <dirent.h>
+#include <inttypes.h>
#include <sys/stat.h>
#include "idmap.h"
@@ -130,14 +131,14 @@
ALOGW("%s: failed to find entry AndroidManifest.xml\n", __FUNCTION__);
return -1;
}
- size_t uncompLen = 0;
- int method;
+ uint32_t uncompLen = 0;
+ uint16_t method;
if (!zip->getEntryInfo(entry, &method, &uncompLen, NULL, NULL, NULL, NULL)) {
ALOGW("%s: failed to read entry info\n", __FUNCTION__);
return -1;
}
if (method != ZipFileRO::kCompressDeflated) {
- ALOGW("%s: cannot handle zip compression method %d\n", __FUNCTION__, method);
+ ALOGW("%s: cannot handle zip compression method %" PRIu16 "\n", __FUNCTION__, method);
return -1;
}
FileMap *dataMap = zip->createEntryFileMap(entry);
@@ -147,19 +148,19 @@
}
char *buf = new char[uncompLen];
if (NULL == buf) {
- ALOGW("%s: failed to allocate %zd byte\n", __FUNCTION__, uncompLen);
+ ALOGW("%s: failed to allocate %" PRIu32 " byte\n", __FUNCTION__, uncompLen);
delete dataMap;
return -1;
}
StreamingZipInflater inflater(dataMap, uncompLen);
if (inflater.read(buf, uncompLen) < 0) {
- ALOGW("%s: failed to inflate %zd byte\n", __FUNCTION__, uncompLen);
+ ALOGW("%s: failed to inflate %" PRIu32 " byte\n", __FUNCTION__, uncompLen);
delete[] buf;
delete dataMap;
return -1;
}
- int priority = parse_manifest(buf, uncompLen, target_package_name);
+ int priority = parse_manifest(buf, static_cast<size_t>(uncompLen), target_package_name);
delete[] buf;
delete dataMap;
return priority;
diff --git a/cmds/input/src/com/android/commands/input/Input.java b/cmds/input/src/com/android/commands/input/Input.java
index 2a7c79b..754d3f5 100644
--- a/cmds/input/src/com/android/commands/input/Input.java
+++ b/cmds/input/src/com/android/commands/input/Input.java
@@ -234,6 +234,18 @@
InputManager.INJECT_INPUT_EVENT_MODE_WAIT_FOR_FINISH);
}
+ private int getInputDeviceId(int inputSource) {
+ final int DEFAULT_DEVICE_ID = 0;
+ int[] devIds = InputDevice.getDeviceIds();
+ for (int devId : devIds) {
+ InputDevice inputDev = InputDevice.getDevice(devId);
+ if (inputDev.supportsSource(inputSource)) {
+ return devId;
+ }
+ }
+ return DEFAULT_DEVICE_ID;
+ }
+
/**
* Builds a MotionEvent and injects it into the event stream.
*
@@ -249,11 +261,10 @@
final int DEFAULT_META_STATE = 0;
final float DEFAULT_PRECISION_X = 1.0f;
final float DEFAULT_PRECISION_Y = 1.0f;
- final int DEFAULT_DEVICE_ID = 0;
final int DEFAULT_EDGE_FLAGS = 0;
MotionEvent event = MotionEvent.obtain(when, when, action, x, y, pressure, DEFAULT_SIZE,
- DEFAULT_META_STATE, DEFAULT_PRECISION_X, DEFAULT_PRECISION_Y, DEFAULT_DEVICE_ID,
- DEFAULT_EDGE_FLAGS);
+ DEFAULT_META_STATE, DEFAULT_PRECISION_X, DEFAULT_PRECISION_Y,
+ getInputDeviceId(inputSource), DEFAULT_EDGE_FLAGS);
event.setSource(inputSource);
Log.i(TAG, "injectMotionEvent: " + event);
InputManager.getInstance().injectInputEvent(event,
diff --git a/cmds/svc/src/com/android/commands/svc/PowerCommand.java b/cmds/svc/src/com/android/commands/svc/PowerCommand.java
index da8586c..e11d278 100644
--- a/cmds/svc/src/com/android/commands/svc/PowerCommand.java
+++ b/cmds/svc/src/com/android/commands/svc/PowerCommand.java
@@ -93,7 +93,7 @@
} else if ("shutdown".equals(args[1])) {
try {
// no confirm, wait till device is off
- pm.shutdown(false, true);
+ pm.shutdown(false, null, true);
} catch (RemoteException e) {
System.err.println("Failed to shutdown.");
}
diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java
index c6ffef6..ad22523 100644
--- a/core/java/android/app/ActivityManager.java
+++ b/core/java/android/app/ActivityManager.java
@@ -200,6 +200,13 @@
public static final int START_FLAG_OPENGL_TRACES = 1<<2;
/**
+ * Flag for IActivityManaqer.startActivity: launch the app for
+ * allocation tracking.
+ * @hide
+ */
+ public static final int START_FLAG_TRACK_ALLOCATION = 1<<3;
+
+ /**
* Result for IActivityManaqer.broadcastIntent: success!
* @hide
*/
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java
index b063209..0d71ea3 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -133,6 +133,7 @@
import dalvik.system.CloseGuard;
import dalvik.system.VMDebug;
import dalvik.system.VMRuntime;
+import org.apache.harmony.dalvik.ddmc.DdmVmInternal;
final class RemoteServiceException extends AndroidRuntimeException {
public RemoteServiceException(String msg) {
@@ -257,23 +258,18 @@
}
}
- static final class AcquiringProviderRecord {
- IActivityManager.ContentProviderHolder holder;
- boolean acquiring = true;
- int requests = 1;
- // Set if there was a runtime exception when trying to acquire the provider.
- RuntimeException runtimeException = null;
- }
-
// The lock of mProviderMap protects the following variables.
- final ArrayMap<ProviderKey, ProviderClientRecord> mProviderMap = new ArrayMap<>();
- final ArrayMap<ProviderKey, AcquiringProviderRecord> mAcquiringProviderMap = new ArrayMap<>();
- final ArrayMap<IBinder, ProviderRefCount> mProviderRefCountMap = new ArrayMap<>();
- final ArrayMap<IBinder, ProviderClientRecord> mLocalProviders = new ArrayMap<>();
- final ArrayMap<ComponentName, ProviderClientRecord> mLocalProvidersByName = new ArrayMap<>();
+ final ArrayMap<ProviderKey, ProviderClientRecord> mProviderMap
+ = new ArrayMap<ProviderKey, ProviderClientRecord>();
+ final ArrayMap<IBinder, ProviderRefCount> mProviderRefCountMap
+ = new ArrayMap<IBinder, ProviderRefCount>();
+ final ArrayMap<IBinder, ProviderClientRecord> mLocalProviders
+ = new ArrayMap<IBinder, ProviderClientRecord>();
+ final ArrayMap<ComponentName, ProviderClientRecord> mLocalProvidersByName
+ = new ArrayMap<ComponentName, ProviderClientRecord>();
final ArrayMap<Activity, ArrayList<OnActivityPausedListener>> mOnPauseListeners
- = new ArrayMap<>();
+ = new ArrayMap<Activity, ArrayList<OnActivityPausedListener>>();
final GcIdler mGcIdler = new GcIdler();
boolean mGcIdlerScheduled = false;
@@ -350,7 +346,7 @@
}
}
- static final class ProviderClientRecord {
+ final class ProviderClientRecord {
final String[] mNames;
final IContentProvider mProvider;
final ContentProvider mLocalProvider;
@@ -448,6 +444,7 @@
IUiAutomationConnection instrumentationUiAutomationConnection;
int debugMode;
boolean enableOpenGlTrace;
+ boolean trackAllocation;
boolean restrictedBackupMode;
boolean persistent;
Configuration config;
@@ -761,9 +758,9 @@
ProfilerInfo profilerInfo, Bundle instrumentationArgs,
IInstrumentationWatcher instrumentationWatcher,
IUiAutomationConnection instrumentationUiConnection, int debugMode,
- boolean enableOpenGlTrace, boolean isRestrictedBackupMode, boolean persistent,
- Configuration config, CompatibilityInfo compatInfo, Map<String, IBinder> services,
- Bundle coreSettings) {
+ boolean enableOpenGlTrace, boolean trackAllocation, boolean isRestrictedBackupMode,
+ boolean persistent, Configuration config, CompatibilityInfo compatInfo,
+ Map<String, IBinder> services, Bundle coreSettings) {
if (services != null) {
// Setup the service cache in the ServiceManager
@@ -819,6 +816,7 @@
data.instrumentationUiAutomationConnection = instrumentationUiConnection;
data.debugMode = debugMode;
data.enableOpenGlTrace = enableOpenGlTrace;
+ data.trackAllocation = trackAllocation;
data.restrictedBackupMode = isRestrictedBackupMode;
data.persistent = persistent;
data.config = config;
@@ -975,7 +973,7 @@
long nativeFree = Debug.getNativeHeapFreeSize() / 1024;
Runtime runtime = Runtime.getRuntime();
-
+ runtime.gc(); // Do GC since countInstancesOfClass counts unreachable objects.
long dalvikMax = runtime.totalMemory() / 1024;
long dalvikFree = runtime.freeMemory() / 1024;
long dalvikAllocated = dalvikMax - dalvikFree;
@@ -4319,6 +4317,10 @@
}
private void handleBindApplication(AppBindData data) {
+ if (data.trackAllocation) {
+ DdmVmInternal.enableRecentAllocations(true);
+ }
+
mBoundApplication = data;
mConfiguration = new Configuration(data.config);
mCompatConfiguration = new Configuration(data.config);
@@ -4653,74 +4655,23 @@
public final IContentProvider acquireProvider(
Context c, String auth, int userId, boolean stable) {
- final ProviderKey key = new ProviderKey(auth, userId);
- final IContentProvider provider = acquireExistingProvider(c, key, stable);
+ final IContentProvider provider = acquireExistingProvider(c, auth, userId, stable);
if (provider != null) {
return provider;
}
- AcquiringProviderRecord r;
- boolean first = false;
- synchronized (mAcquiringProviderMap) {
- r = mAcquiringProviderMap.get(key);
- if (r == null) {
- r = new AcquiringProviderRecord();
- mAcquiringProviderMap.put(key, r);
- first = true;
- } else {
- r.requests++;
- }
- }
+ // There is a possible race here. Another thread may try to acquire
+ // the same provider at the same time. When this happens, we want to ensure
+ // that the first one wins.
+ // Note that we cannot hold the lock while acquiring and installing the
+ // provider since it might take a long time to run and it could also potentially
+ // be re-entrant in the case where the provider is in the same process.
IActivityManager.ContentProviderHolder holder = null;
try {
- if (first) {
- // Multiple threads may try to acquire the same provider at the same time.
- // When this happens, we only let the first one really gets provider.
- // Other threads just wait for its result.
- // Note that we cannot hold the lock while acquiring and installing the
- // provider since it might take a long time to run and it could also potentially
- // be re-entrant in the case where the provider is in the same process.
- holder = ActivityManagerNative.getDefault().getContentProvider(
- getApplicationThread(), auth, userId, stable);
- } else {
- synchronized (r) {
- while (r.acquiring) {
- try {
- r.wait();
- } catch (InterruptedException e) {
- }
- }
- holder = r.holder;
- }
- }
+ holder = ActivityManagerNative.getDefault().getContentProvider(
+ getApplicationThread(), auth, userId, stable);
} catch (RemoteException ex) {
- } catch (RuntimeException e) {
- synchronized (r) {
- r.runtimeException = e;
- }
- } finally {
- if (first) {
- synchronized (r) {
- r.holder = holder;
- r.acquiring = false;
- r.notifyAll();
- }
- }
-
- synchronized (mAcquiringProviderMap) {
- if (--r.requests == 0) {
- mAcquiringProviderMap.remove(key);
- }
- }
-
- if (r.runtimeException != null) {
- // Was set when the first thread tried to acquire the provider,
- // but we should make sure it is thrown for all threads trying to
- // acquire the provider.
- throw r.runtimeException;
- }
}
-
if (holder == null) {
Slog.e(TAG, "Failed to find provider info for " + auth);
return null;
@@ -4803,12 +4754,8 @@
public final IContentProvider acquireExistingProvider(
Context c, String auth, int userId, boolean stable) {
- return acquireExistingProvider(c, new ProviderKey(auth, userId), stable);
- }
-
- final IContentProvider acquireExistingProvider(
- Context c, ProviderKey key, boolean stable) {
synchronized (mProviderMap) {
+ final ProviderKey key = new ProviderKey(auth, userId);
final ProviderClientRecord pr = mProviderMap.get(key);
if (pr == null) {
return null;
@@ -4819,7 +4766,7 @@
if (!jBinder.isBinderAlive()) {
// The hosting process of the provider has died; we can't
// use this one.
- Log.i(TAG, "Acquiring provider " + key.authority + " for user " + key.userId
+ Log.i(TAG, "Acquiring provider " + auth + " for user " + userId
+ ": existing object's process dead");
handleUnstableProviderDiedLocked(jBinder, true);
return null;
@@ -5141,12 +5088,18 @@
if (DEBUG_PROVIDER) {
Slog.v(TAG, "installProvider: lost the race, updating ref count");
}
- // The provider has already been installed, so we need
- // to increase reference count to the existing one, but
- // only if release is needed (that is, it is not running
- // in the system process or local to the process).
+ // We need to transfer our new reference to the existing
+ // ref count, releasing the old one... but only if
+ // release is needed (that is, it is not running in the
+ // system process).
if (!noReleaseNeeded) {
incProviderRefLocked(prc, stable);
+ try {
+ ActivityManagerNative.getDefault().removeContentProvider(
+ holder.connection, stable);
+ } catch (RemoteException e) {
+ //do nothing content provider object is dead any way
+ }
}
} else {
ProviderClientRecord client = installProviderAuthoritiesLocked(
diff --git a/core/java/android/app/AlarmManager.java b/core/java/android/app/AlarmManager.java
index 2c596e5..8dec110 100644
--- a/core/java/android/app/AlarmManager.java
+++ b/core/java/android/app/AlarmManager.java
@@ -629,7 +629,7 @@
}
/**
- * Returns an intent intent that can be used to show or edit details of the alarm clock in
+ * Returns an intent that can be used to show or edit details of the alarm clock in
* the application that scheduled it.
*
* <p class="note">Beware that any application can retrieve and send this intent,
diff --git a/core/java/android/app/ApplicationThreadNative.java b/core/java/android/app/ApplicationThreadNative.java
index eb3ddb2..6c8b182 100644
--- a/core/java/android/app/ApplicationThreadNative.java
+++ b/core/java/android/app/ApplicationThreadNative.java
@@ -284,6 +284,7 @@
IUiAutomationConnection.Stub.asInterface(binder);
int testMode = data.readInt();
boolean openGlTrace = data.readInt() != 0;
+ boolean trackAllocation = data.readInt() != 0;
boolean restrictedBackupMode = (data.readInt() != 0);
boolean persistent = (data.readInt() != 0);
Configuration config = Configuration.CREATOR.createFromParcel(data);
@@ -291,7 +292,7 @@
HashMap<String, IBinder> services = data.readHashMap(null);
Bundle coreSettings = data.readBundle();
bindApplication(packageName, info, providers, testName, profilerInfo, testArgs,
- testWatcher, uiAutomationConnection, testMode, openGlTrace,
+ testWatcher, uiAutomationConnection, testMode, openGlTrace, trackAllocation,
restrictedBackupMode, persistent, config, compatInfo, services, coreSettings);
return true;
}
@@ -961,13 +962,14 @@
data.recycle();
}
+ @Override
public final void bindApplication(String packageName, ApplicationInfo info,
List<ProviderInfo> providers, ComponentName testName, ProfilerInfo profilerInfo,
Bundle testArgs, IInstrumentationWatcher testWatcher,
IUiAutomationConnection uiAutomationConnection, int debugMode,
- boolean openGlTrace, boolean restrictedBackupMode, boolean persistent,
- Configuration config, CompatibilityInfo compatInfo, Map<String, IBinder> services,
- Bundle coreSettings) throws RemoteException {
+ boolean openGlTrace, boolean trackAllocation, boolean restrictedBackupMode,
+ boolean persistent, Configuration config, CompatibilityInfo compatInfo,
+ Map<String, IBinder> services, Bundle coreSettings) throws RemoteException {
Parcel data = Parcel.obtain();
data.writeInterfaceToken(IApplicationThread.descriptor);
data.writeString(packageName);
@@ -990,6 +992,7 @@
data.writeStrongInterface(uiAutomationConnection);
data.writeInt(debugMode);
data.writeInt(openGlTrace ? 1 : 0);
+ data.writeInt(trackAllocation ? 1 : 0);
data.writeInt(restrictedBackupMode ? 1 : 0);
data.writeInt(persistent ? 1 : 0);
config.writeToParcel(data, 0);
diff --git a/core/java/android/app/IApplicationThread.java b/core/java/android/app/IApplicationThread.java
index 8bf8cd7..121d8ad 100644
--- a/core/java/android/app/IApplicationThread.java
+++ b/core/java/android/app/IApplicationThread.java
@@ -96,8 +96,9 @@
void bindApplication(String packageName, ApplicationInfo info, List<ProviderInfo> providers,
ComponentName testName, ProfilerInfo profilerInfo, Bundle testArguments,
IInstrumentationWatcher testWatcher, IUiAutomationConnection uiAutomationConnection,
- int debugMode, boolean openGlTrace, boolean restrictedBackupMode, boolean persistent,
- Configuration config, CompatibilityInfo compatInfo, Map<String, IBinder> services,
+ int debugMode, boolean openGlTrace, boolean trackAllocation,
+ boolean restrictedBackupMode, boolean persistent, Configuration config,
+ CompatibilityInfo compatInfo, Map<String, IBinder> services,
Bundle coreSettings) throws RemoteException;
void scheduleExit() throws RemoteException;
void scheduleSuicide() throws RemoteException;
diff --git a/core/java/android/app/LoadedApk.java b/core/java/android/app/LoadedApk.java
index 83c6c2b..7789200 100644
--- a/core/java/android/app/LoadedApk.java
+++ b/core/java/android/app/LoadedApk.java
@@ -55,6 +55,7 @@
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.net.URL;
+import java.util.List;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;
@@ -170,6 +171,7 @@
if (runtimeIsa.equals(secondaryIsa)) {
final ApplicationInfo modified = new ApplicationInfo(info);
modified.nativeLibraryDir = modified.secondaryNativeLibraryDir;
+ modified.primaryCpuAbi = modified.secondaryCpuAbi;
return modified;
}
}
@@ -276,8 +278,9 @@
}
}
- final ArrayList<String> zipPaths = new ArrayList<>();
- final ArrayList<String> libPaths = new ArrayList<>();
+ final List<String> zipPaths = new ArrayList<>();
+ final List<String> apkPaths = new ArrayList<>();
+ final List<String> libPaths = new ArrayList<>();
if (mRegisterPackage) {
try {
@@ -333,6 +336,8 @@
}
}
+ apkPaths.addAll(zipPaths);
+
if (mSharedLibraries != null) {
for (String lib : mSharedLibraries) {
if (!zipPaths.contains(lib)) {
@@ -350,6 +355,14 @@
}
final String zip = TextUtils.join(File.pathSeparator, zipPaths);
+
+ // Add path to libraries in apk for current abi
+ if (mApplicationInfo.primaryCpuAbi != null) {
+ for (String apk : apkPaths) {
+ libPaths.add(apk + "!/lib/" + mApplicationInfo.primaryCpuAbi);
+ }
+ }
+
final String lib = TextUtils.join(File.pathSeparator, libPaths);
/*
diff --git a/core/java/android/bluetooth/IBluetooth.aidl b/core/java/android/bluetooth/IBluetooth.aidl
index dabb1ce..c6f238e 100644
--- a/core/java/android/bluetooth/IBluetooth.aidl
+++ b/core/java/android/bluetooth/IBluetooth.aidl
@@ -99,6 +99,6 @@
void getActivityEnergyInfoFromController();
BluetoothActivityEnergyInfo reportActivityInfo();
- // for dumpsys support
- String dump();
+ // For dumpsys support
+ void dump(in ParcelFileDescriptor fd);
}
diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java
index 2fe727c..cafccbf 100644
--- a/core/java/android/content/Intent.java
+++ b/core/java/android/content/Intent.java
@@ -2018,7 +2018,9 @@
/**
* Activity Action: Start this activity to request system shutdown.
* The optional boolean extra field {@link #EXTRA_KEY_CONFIRM} can be set to true
- * to request confirmation from the user before shutting down.
+ * to request confirmation from the user before shutting down. The optional boolean
+ * extra field {@link #EXTRA_USER_REQUESTED_SHUTDOWN} can be set to true to
+ * indicate that the shutdown is requested by the user.
*
* <p class="note">This is a protected intent that can only be sent
* by the system.
@@ -3229,6 +3231,15 @@
public static final String EXTRA_KEY_CONFIRM = "android.intent.extra.KEY_CONFIRM";
/**
+ * Set to true in {@link #ACTION_REQUEST_SHUTDOWN} to indicate that the shutdown is
+ * requested by the user.
+ *
+ * {@hide}
+ */
+ public static final String EXTRA_USER_REQUESTED_SHUTDOWN =
+ "android.intent.extra.USER_REQUESTED_SHUTDOWN";
+
+ /**
* Used as a boolean extra field in {@link android.content.Intent#ACTION_PACKAGE_REMOVED} or
* {@link android.content.Intent#ACTION_PACKAGE_CHANGED} intents to override the default action
* of restarting the application.
diff --git a/core/java/android/content/pm/ApplicationInfo.java b/core/java/android/content/pm/ApplicationInfo.java
index 4a087da..3b6c9bd 100644
--- a/core/java/android/content/pm/ApplicationInfo.java
+++ b/core/java/android/content/pm/ApplicationInfo.java
@@ -916,6 +916,11 @@
return (flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0;
}
+ /** @hide */
+ public boolean isInternal() {
+ return (flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) == 0;
+ }
+
/**
* @hide
*/
diff --git a/core/java/android/content/pm/RegisteredServicesCache.java b/core/java/android/content/pm/RegisteredServicesCache.java
index 391ef22..96f0df8 100644
--- a/core/java/android/content/pm/RegisteredServicesCache.java
+++ b/core/java/android/content/pm/RegisteredServicesCache.java
@@ -50,6 +50,7 @@
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
+import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
@@ -541,7 +542,7 @@
}
fis = mPersistentServicesFile.openRead();
XmlPullParser parser = Xml.newPullParser();
- parser.setInput(fis, null);
+ parser.setInput(fis, StandardCharsets.UTF_8.name());
int eventType = parser.getEventType();
while (eventType != XmlPullParser.START_TAG
&& eventType != XmlPullParser.END_DOCUMENT) {
@@ -591,7 +592,7 @@
try {
fos = mPersistentServicesFile.startWrite();
XmlSerializer out = new FastXmlSerializer();
- out.setOutput(fos, "utf-8");
+ out.setOutput(fos, StandardCharsets.UTF_8.name());
out.startDocument(null, true);
out.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true);
out.startTag(null, "services");
diff --git a/core/java/android/content/res/Resources.java b/core/java/android/content/res/Resources.java
index 73913b6..71b365d 100644
--- a/core/java/android/content/res/Resources.java
+++ b/core/java/android/content/res/Resources.java
@@ -19,6 +19,7 @@
import android.animation.Animator;
import android.animation.StateListAnimator;
import android.annotation.NonNull;
+import android.icu.text.PluralRules;
import android.util.Pools.SynchronizedPool;
import android.view.ViewDebug;
import com.android.internal.util.XmlUtils;
@@ -49,8 +50,6 @@
import java.lang.ref.WeakReference;
import java.util.Locale;
-import libcore.icu.NativePluralRules;
-
/**
* Class for accessing an application's resources. This sits on top of the
* asset manager of the application (accessible through {@link #getAssets}) and
@@ -136,7 +135,7 @@
final DisplayMetrics mMetrics = new DisplayMetrics();
private final Configuration mConfiguration = new Configuration();
- private NativePluralRules mPluralRule;
+ private PluralRules mPluralRule;
private CompatibilityInfo mCompatibilityInfo = CompatibilityInfo.DEFAULT_COMPATIBILITY_INFO;
@@ -321,9 +320,9 @@
* possibly styled text information.
*/
public CharSequence getQuantityText(int id, int quantity) throws NotFoundException {
- NativePluralRules rule = getPluralRule();
+ PluralRules rule = getPluralRule();
CharSequence res = mAssets.getResourceBagText(id,
- attrForQuantityCode(rule.quantityForInt(quantity)));
+ attrForQuantityCode(rule.select(quantity)));
if (res != null) {
return res;
}
@@ -333,40 +332,29 @@
}
throw new NotFoundException("Plural resource ID #0x" + Integer.toHexString(id)
+ " quantity=" + quantity
- + " item=" + stringForQuantityCode(rule.quantityForInt(quantity)));
+ + " item=" + rule.select(quantity));
}
- private NativePluralRules getPluralRule() {
+ private PluralRules getPluralRule() {
synchronized (sSync) {
if (mPluralRule == null) {
- mPluralRule = NativePluralRules.forLocale(mConfiguration.locale);
+ mPluralRule = PluralRules.forLocale(mConfiguration.locale);
}
return mPluralRule;
}
}
- private static int attrForQuantityCode(int quantityCode) {
+ private static int attrForQuantityCode(String quantityCode) {
switch (quantityCode) {
- case NativePluralRules.ZERO: return 0x01000005;
- case NativePluralRules.ONE: return 0x01000006;
- case NativePluralRules.TWO: return 0x01000007;
- case NativePluralRules.FEW: return 0x01000008;
- case NativePluralRules.MANY: return 0x01000009;
+ case PluralRules.KEYWORD_ZERO: return 0x01000005;
+ case PluralRules.KEYWORD_ONE: return 0x01000006;
+ case PluralRules.KEYWORD_TWO: return 0x01000007;
+ case PluralRules.KEYWORD_FEW: return 0x01000008;
+ case PluralRules.KEYWORD_MANY: return 0x01000009;
default: return ID_OTHER;
}
}
- private static String stringForQuantityCode(int quantityCode) {
- switch (quantityCode) {
- case NativePluralRules.ZERO: return "zero";
- case NativePluralRules.ONE: return "one";
- case NativePluralRules.TWO: return "two";
- case NativePluralRules.FEW: return "few";
- case NativePluralRules.MANY: return "many";
- default: return "other";
- }
- }
-
/**
* Return the string value associated with a particular resource ID. It
* will be stripped of any styled text information.
@@ -1852,7 +1840,7 @@
}
synchronized (sSync) {
if (mPluralRule != null) {
- mPluralRule = NativePluralRules.forLocale(config.locale);
+ mPluralRule = PluralRules.forLocale(config.locale);
}
}
}
diff --git a/core/java/android/database/sqlite/SQLiteConnection.java b/core/java/android/database/sqlite/SQLiteConnection.java
index 24a7d33..3cda39a 100644
--- a/core/java/android/database/sqlite/SQLiteConnection.java
+++ b/core/java/android/database/sqlite/SQLiteConnection.java
@@ -91,8 +91,6 @@
private static final String[] EMPTY_STRING_ARRAY = new String[0];
private static final byte[] EMPTY_BYTE_ARRAY = new byte[0];
- private static final Pattern TRIM_SQL_PATTERN = Pattern.compile("[\\s]*\\n+[\\s]*");
-
private final CloseGuard mCloseGuard = CloseGuard.get();
private final SQLiteConnectionPool mPool;
@@ -1203,7 +1201,11 @@
}
private static String trimSqlForDisplay(String sql) {
- return TRIM_SQL_PATTERN.matcher(sql).replaceAll(" ");
+ // Note: Creating and caching a regular expression is expensive at preload-time
+ // and stops compile-time initialization. This pattern is only used when
+ // dumping the connection, which is a rare (mainly error) case. So:
+ // DO NOT CACHE.
+ return sql.replaceAll("[\\s]*\\n+[\\s]*", " ");
}
/**
@@ -1437,9 +1439,6 @@
}
private static final class Operation {
- private static final SimpleDateFormat sDateFormat =
- new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
-
public long mStartTime;
public long mEndTime;
public String mKind;
@@ -1494,7 +1493,11 @@
}
private String getFormattedStartTime() {
- return sDateFormat.format(new Date(mStartTime));
+ // Note: SimpleDateFormat is not thread-safe, cannot be compile-time created, and is
+ // relatively expensive to create during preloading. This method is only used
+ // when dumping a connection, which is a rare (mainly error) case. So:
+ // DO NOT CACHE.
+ return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date(mStartTime));
}
}
}
diff --git a/core/java/android/net/IpPrefix.java b/core/java/android/net/IpPrefix.java
index b268986..6b4f2d5 100644
--- a/core/java/android/net/IpPrefix.java
+++ b/core/java/android/net/IpPrefix.java
@@ -170,6 +170,21 @@
}
/**
+ * Determines whether the prefix contains the specified address.
+ *
+ * @param address An {@link InetAddress} to test.
+ * @return {@code true} if the prefix covers the given address.
+ */
+ public boolean contains(InetAddress address) {
+ byte[] addrBytes = (address == null) ? null : address.getAddress();
+ if (addrBytes == null || addrBytes.length != this.address.length) {
+ return false;
+ }
+ NetworkUtils.maskRawAddress(addrBytes, prefixLength);
+ return Arrays.equals(this.address, addrBytes);
+ }
+
+ /**
* Returns a string representation of this {@code IpPrefix}.
*
* @return a string such as {@code "192.0.2.0/24"} or {@code "2001:db8:1:2::/64"}.
diff --git a/core/java/android/net/LocalSocketImpl.java b/core/java/android/net/LocalSocketImpl.java
index fa9f479..b83fb26 100644
--- a/core/java/android/net/LocalSocketImpl.java
+++ b/core/java/android/net/LocalSocketImpl.java
@@ -25,6 +25,9 @@
import android.system.ErrnoException;
import android.system.Os;
import android.system.OsConstants;
+import android.system.StructLinger;
+import android.system.StructTimeval;
+import android.util.MutableInt;
/**
* Socket implementation used for android.net.LocalSocket and
@@ -59,7 +62,13 @@
FileDescriptor myFd = fd;
if (myFd == null) throw new IOException("socket closed");
- return available_native(myFd);
+ MutableInt avail = new MutableInt(0);
+ try {
+ Os.ioctlInt(myFd, OsConstants.FIONREAD, avail);
+ } catch (ErrnoException e) {
+ throw e.rethrowAsIOException();
+ }
+ return avail.value;
}
/** {@inheritDoc} */
@@ -156,18 +165,31 @@
public void flush() throws IOException {
FileDescriptor myFd = fd;
if (myFd == null) throw new IOException("socket closed");
- while(pending_native(myFd) > 0) {
+
+ // Loop until the output buffer is empty.
+ MutableInt pending = new MutableInt(0);
+ while (true) {
+ try {
+ // See linux/net/unix/af_unix.c
+ Os.ioctlInt(myFd, OsConstants.TIOCOUTQ, pending);
+ } catch (ErrnoException e) {
+ throw e.rethrowAsIOException();
+ }
+
+ if (pending.value <= 0) {
+ // The output buffer is empty.
+ break;
+ }
+
try {
Thread.sleep(10);
} catch (InterruptedException ie) {
- return;
+ break;
}
}
}
}
- private native int pending_native(FileDescriptor fd) throws IOException;
- private native int available_native(FileDescriptor fd) throws IOException;
private native int read_native(FileDescriptor fd) throws IOException;
private native int readba_native(byte[] b, int off, int len,
FileDescriptor fd) throws IOException;
@@ -179,28 +201,8 @@
int namespace) throws IOException;
private native void bindLocal(FileDescriptor fd, String name, int namespace)
throws IOException;
- private native void listen_native(FileDescriptor fd, int backlog)
- throws IOException;
- private native void shutdown(FileDescriptor fd, boolean shutdownInput);
private native Credentials getPeerCredentials_native(
FileDescriptor fd) throws IOException;
- private native int getOption_native(FileDescriptor fd, int optID)
- throws IOException;
- private native void setOption_native(FileDescriptor fd, int optID,
- int b, int value) throws IOException;
-
-// private native LocalSocketAddress getSockName_native
-// (FileDescriptor fd) throws IOException;
-
- /**
- * Accepts a connection on a server socket.
- *
- * @param fd file descriptor of server socket
- * @param s socket implementation that will become the new socket
- * @return file descriptor of new socket
- */
- private native FileDescriptor accept
- (FileDescriptor fd, LocalSocketImpl s) throws IOException;
/**
* Create a new instance.
@@ -232,7 +234,7 @@
* or {@link LocalSocket#SOCKET_SEQPACKET}
* @throws IOException
*/
- public void create (int sockType) throws IOException {
+ public void create(int sockType) throws IOException {
// no error if socket already created
// need this for LocalServerSocket.accept()
if (fd == null) {
@@ -311,8 +313,11 @@
if (fd == null) {
throw new IOException("socket not created");
}
-
- listen_native(fd, backlog);
+ try {
+ Os.listen(fd, backlog);
+ } catch (ErrnoException e) {
+ throw e.rethrowAsIOException();
+ }
}
/**
@@ -322,14 +327,17 @@
* @param s a socket that will be used to represent the new connection.
* @throws IOException
*/
- protected void accept(LocalSocketImpl s) throws IOException
- {
+ protected void accept(LocalSocketImpl s) throws IOException {
if (fd == null) {
throw new IOException("socket not created");
}
- s.fd = accept(fd, s);
- s.mFdCreatedInternally = true;
+ try {
+ s.fd = Os.accept(fd, null /* address */);
+ s.mFdCreatedInternally = true;
+ } catch (ErrnoException e) {
+ throw e.rethrowAsIOException();
+ }
}
/**
@@ -396,7 +404,11 @@
throw new IOException("socket not created");
}
- shutdown(fd, true);
+ try {
+ Os.shutdown(fd, OsConstants.SHUT_RD);
+ } catch (ErrnoException e) {
+ throw e.rethrowAsIOException();
+ }
}
/**
@@ -410,7 +422,11 @@
throw new IOException("socket not created");
}
- shutdown(fd, false);
+ try {
+ Os.shutdown(fd, OsConstants.SHUT_WR);
+ } catch (ErrnoException e) {
+ throw e.rethrowAsIOException();
+ }
}
protected FileDescriptor getFileDescriptor()
@@ -434,24 +450,49 @@
throw new IOException("socket not created");
}
- if (optID == SocketOptions.SO_TIMEOUT) {
- return 0;
- }
-
- int value = getOption_native(fd, optID);
- switch (optID)
- {
- case SocketOptions.SO_RCVBUF:
- case SocketOptions.SO_SNDBUF:
- return value;
- case SocketOptions.SO_REUSEADDR:
- default:
- return value;
+ try {
+ Object toReturn;
+ switch (optID) {
+ case SocketOptions.SO_TIMEOUT:
+ StructTimeval timeval = Os.getsockoptTimeval(fd, OsConstants.SOL_SOCKET,
+ OsConstants.SO_SNDTIMEO);
+ toReturn = (int) timeval.toMillis();
+ break;
+ case SocketOptions.SO_RCVBUF:
+ case SocketOptions.SO_SNDBUF:
+ case SocketOptions.SO_REUSEADDR:
+ int osOpt = javaSoToOsOpt(optID);
+ toReturn = Os.getsockoptInt(fd, OsConstants.SOL_SOCKET, osOpt);
+ break;
+ case SocketOptions.SO_LINGER:
+ StructLinger linger=
+ Os.getsockoptLinger(fd, OsConstants.SOL_SOCKET, OsConstants.SO_LINGER);
+ if (!linger.isOn()) {
+ toReturn = -1;
+ } else {
+ toReturn = linger.l_linger;
+ }
+ break;
+ case SocketOptions.TCP_NODELAY:
+ toReturn = Os.getsockoptInt(fd, OsConstants.IPPROTO_TCP,
+ OsConstants.TCP_NODELAY);
+ break;
+ default:
+ throw new IOException("Unknown option: " + optID);
+ }
+ return toReturn;
+ } catch (ErrnoException e) {
+ throw e.rethrowAsIOException();
}
}
public void setOption(int optID, Object value)
throws IOException {
+
+ if (fd == null) {
+ throw new IOException("socket not created");
+ }
+
/*
* Boolean.FALSE is used to disable some options, so it
* is important to distinguish between FALSE and unset.
@@ -460,11 +501,6 @@
*/
int boolValue = -1;
int intValue = 0;
-
- if (fd == null) {
- throw new IOException("socket not created");
- }
-
if (value instanceof Integer) {
intValue = (Integer)value;
} else if (value instanceof Boolean) {
@@ -473,7 +509,39 @@
throw new IOException("bad value: " + value);
}
- setOption_native(fd, optID, boolValue, intValue);
+ try {
+ switch (optID) {
+ case SocketOptions.SO_LINGER:
+ StructLinger linger = new StructLinger(boolValue, intValue);
+ Os.setsockoptLinger(fd, OsConstants.SOL_SOCKET, OsConstants.SO_LINGER, linger);
+ break;
+ case SocketOptions.SO_TIMEOUT:
+ /*
+ * SO_TIMEOUT from the core library gets converted to
+ * SO_SNDTIMEO, but the option is supposed to set both
+ * send and receive timeouts. Note: The incoming timeout
+ * value is in milliseconds.
+ */
+ StructTimeval timeval = StructTimeval.fromMillis(intValue);
+ Os.setsockoptTimeval(fd, OsConstants.SOL_SOCKET, OsConstants.SO_SNDTIMEO,
+ timeval);
+ break;
+ case SocketOptions.SO_RCVBUF:
+ case SocketOptions.SO_SNDBUF:
+ case SocketOptions.SO_REUSEADDR:
+ int osOpt = javaSoToOsOpt(optID);
+ Os.setsockoptInt(fd, OsConstants.SOL_SOCKET, osOpt, intValue);
+ break;
+ case SocketOptions.TCP_NODELAY:
+ Os.setsockoptInt(fd, OsConstants.IPPROTO_TCP, OsConstants.TCP_NODELAY,
+ intValue);
+ break;
+ default:
+ throw new IOException("Unknown option: " + optID);
+ }
+ } catch (ErrnoException e) {
+ throw e.rethrowAsIOException();
+ }
}
/**
@@ -517,8 +585,7 @@
* @return non-null; peer credentials
* @throws IOException
*/
- public Credentials getPeerCredentials() throws IOException
- {
+ public Credentials getPeerCredentials() throws IOException {
return getPeerCredentials_native(fd);
}
@@ -528,15 +595,26 @@
* @return non-null; socket name
* @throws IOException on failure
*/
- public LocalSocketAddress getSockAddress() throws IOException
- {
+ public LocalSocketAddress getSockAddress() throws IOException {
+ // This method has never been implemented.
return null;
- //TODO implement this
- //return getSockName_native(fd);
}
@Override
protected void finalize() throws IOException {
close();
}
+
+ private static int javaSoToOsOpt(int optID) {
+ switch (optID) {
+ case SocketOptions.SO_SNDBUF:
+ return OsConstants.SO_SNDBUF;
+ case SocketOptions.SO_RCVBUF:
+ return OsConstants.SO_RCVBUF;
+ case SocketOptions.SO_REUSEADDR:
+ return OsConstants.SO_REUSEADDR;
+ default:
+ throw new UnsupportedOperationException("Unknown option: " + optID);
+ }
+ }
}
diff --git a/core/java/android/net/RouteInfo.java b/core/java/android/net/RouteInfo.java
index cfd20a0..90a2460 100644
--- a/core/java/android/net/RouteInfo.java
+++ b/core/java/android/net/RouteInfo.java
@@ -367,13 +367,7 @@
* @return {@code true} if the destination and prefix length cover the given address.
*/
public boolean matches(InetAddress destination) {
- if (destination == null) return false;
-
- // match the route destination and destination with prefix length
- InetAddress dstNet = NetworkUtils.getNetworkPart(destination,
- mDestination.getPrefixLength());
-
- return mDestination.getAddress().equals(dstNet);
+ return mDestination.contains(destination);
}
/**
diff --git a/core/java/android/net/Uri.java b/core/java/android/net/Uri.java
index fb2f445..5453283 100644
--- a/core/java/android/net/Uri.java
+++ b/core/java/android/net/Uri.java
@@ -1657,7 +1657,7 @@
/**
* Searches the query string for the first value with the given key.
*
- * <p><strong>Warning:</strong> Prior to Ice Cream Sandwich, this decoded
+ * <p><strong>Warning:</strong> Prior to Jelly Bean, this decoded
* the '+' character as '+' rather than ' '.
*
* @param key which will be encoded
diff --git a/core/java/android/nfc/IAppCallback.aidl b/core/java/android/nfc/IAppCallback.aidl
index 9599308..c027d54 100644
--- a/core/java/android/nfc/IAppCallback.aidl
+++ b/core/java/android/nfc/IAppCallback.aidl
@@ -24,7 +24,7 @@
*/
interface IAppCallback
{
- BeamShareData createBeamShareData();
- void onNdefPushComplete();
+ BeamShareData createBeamShareData(byte peerLlcpVersion);
+ void onNdefPushComplete(byte peerLlcpVersion);
void onTagDiscovered(in Tag tag);
}
diff --git a/core/java/android/nfc/NfcActivityManager.java b/core/java/android/nfc/NfcActivityManager.java
index d009295..76bd0ec 100644
--- a/core/java/android/nfc/NfcActivityManager.java
+++ b/core/java/android/nfc/NfcActivityManager.java
@@ -46,7 +46,6 @@
static final Boolean DBG = false;
final NfcAdapter mAdapter;
- final NfcEvent mDefaultEvent; // cached NfcEvent (its currently always the same)
// All objects in the lists are protected by this
final List<NfcApplicationState> mApps; // Application(s) that have NFC state. Usually one
@@ -200,7 +199,6 @@
mAdapter = adapter;
mActivities = new LinkedList<NfcActivityState>();
mApps = new ArrayList<NfcApplicationState>(1); // Android VM usually has 1 app
- mDefaultEvent = new NfcEvent(mAdapter);
}
public void enableReaderMode(Activity activity, ReaderCallback callback, int flags,
@@ -354,13 +352,14 @@
/** Callback from NFC service, usually on binder thread */
@Override
- public BeamShareData createBeamShareData() {
+ public BeamShareData createBeamShareData(byte peerLlcpVersion) {
NfcAdapter.CreateNdefMessageCallback ndefCallback;
NfcAdapter.CreateBeamUrisCallback urisCallback;
NdefMessage message;
Activity activity;
Uri[] uris;
int flags;
+ NfcEvent event = new NfcEvent(mAdapter, peerLlcpVersion);
synchronized (NfcActivityManager.this) {
NfcActivityState state = findResumedActivityState();
if (state == null) return null;
@@ -375,10 +374,10 @@
// Make callbacks without lock
if (ndefCallback != null) {
- message = ndefCallback.createNdefMessage(mDefaultEvent);
+ message = ndefCallback.createNdefMessage(event);
}
if (urisCallback != null) {
- uris = urisCallback.createBeamUris(mDefaultEvent);
+ uris = urisCallback.createBeamUris(event);
if (uris != null) {
ArrayList<Uri> validUris = new ArrayList<Uri>();
for (Uri uri : uris) {
@@ -412,7 +411,7 @@
/** Callback from NFC service, usually on binder thread */
@Override
- public void onNdefPushComplete() {
+ public void onNdefPushComplete(byte peerLlcpVersion) {
NfcAdapter.OnNdefPushCompleteCallback callback;
synchronized (NfcActivityManager.this) {
NfcActivityState state = findResumedActivityState();
@@ -420,10 +419,10 @@
callback = state.onNdefPushCompleteCallback;
}
-
+ NfcEvent event = new NfcEvent(mAdapter, peerLlcpVersion);
// Make callback without lock
if (callback != null) {
- callback.onNdefPushComplete(mDefaultEvent);
+ callback.onNdefPushComplete(event);
}
}
diff --git a/core/java/android/nfc/NfcEvent.java b/core/java/android/nfc/NfcEvent.java
index 860700a..cf1d71a 100644
--- a/core/java/android/nfc/NfcEvent.java
+++ b/core/java/android/nfc/NfcEvent.java
@@ -38,7 +38,14 @@
*/
public final NfcAdapter nfcAdapter;
- NfcEvent(NfcAdapter nfcAdapter) {
+ /**
+ * The LLCP version of the peer associated with the NFC event.
+ * The major version is in the top nibble, the minor version is in the bottom nibble.
+ */
+ public final byte peerLlcpVersion;
+
+ NfcEvent(NfcAdapter nfcAdapter, byte peerLlcpVersion) {
this.nfcAdapter = nfcAdapter;
+ this.peerLlcpVersion = peerLlcpVersion;
}
}
diff --git a/core/java/android/nfc/cardemulation/ApduServiceInfo.java b/core/java/android/nfc/cardemulation/ApduServiceInfo.java
index 00b2ee3..f10e530 100644
--- a/core/java/android/nfc/cardemulation/ApduServiceInfo.java
+++ b/core/java/android/nfc/cardemulation/ApduServiceInfo.java
@@ -40,6 +40,7 @@
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
/**
@@ -262,7 +263,7 @@
* for that category.
* @return List of AIDs registered by the service
*/
- public ArrayList<String> getAids() {
+ public List<String> getAids() {
final ArrayList<String> aids = new ArrayList<String>();
for (AidGroup group : getAidGroups()) {
aids.addAll(group.aids);
@@ -270,6 +271,18 @@
return aids;
}
+ public List<String> getPrefixAids() {
+ final ArrayList<String> prefixAids = new ArrayList<String>();
+ for (AidGroup group : getAidGroups()) {
+ for (String aid : group.aids) {
+ if (aid.endsWith("*")) {
+ prefixAids.add(aid);
+ }
+ }
+ }
+ return prefixAids;
+ }
+
/**
* Returns the registered AID group for this category.
*/
diff --git a/core/java/android/os/Bundle.java b/core/java/android/os/Bundle.java
index c5c5372..cb3e22b 100644
--- a/core/java/android/os/Bundle.java
+++ b/core/java/android/os/Bundle.java
@@ -211,8 +211,9 @@
} else if (obj instanceof Parcelable[]) {
Parcelable[] array = (Parcelable[]) obj;
for (int n = array.length - 1; n >= 0; n--) {
- if ((array[n].describeContents()
- & Parcelable.CONTENTS_FILE_DESCRIPTOR) != 0) {
+ Parcelable p = array[n];
+ if (p != null && ((p.describeContents()
+ & Parcelable.CONTENTS_FILE_DESCRIPTOR) != 0)) {
fdFound = true;
break;
}
@@ -221,7 +222,8 @@
SparseArray<? extends Parcelable> array =
(SparseArray<? extends Parcelable>) obj;
for (int n = array.size() - 1; n >= 0; n--) {
- if ((array.valueAt(n).describeContents()
+ Parcelable p = array.valueAt(n);
+ if (p != null && (p.describeContents()
& Parcelable.CONTENTS_FILE_DESCRIPTOR) != 0) {
fdFound = true;
break;
diff --git a/core/java/android/os/Debug.java b/core/java/android/os/Debug.java
index 2d92c7b..a435267 100644
--- a/core/java/android/os/Debug.java
+++ b/core/java/android/os/Debug.java
@@ -34,6 +34,7 @@
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
+import java.util.Map;
import org.apache.harmony.dalvik.ddmc.Chunk;
import org.apache.harmony.dalvik.ddmc.ChunkHandler;
@@ -1035,6 +1036,112 @@
}
/**
+ * Returns the value of a particular runtime statistic or {@code null} if no
+ * such runtime statistic exists.
+ *
+ * <p>The following table lists the runtime statistics that the runtime supports.
+ * Note runtime statistics may be added or removed in a future API level.</p>
+ *
+ * <table>
+ * <thead>
+ * <tr>
+ * <th>Runtime statistic name</th>
+ * <th>Meaning</th>
+ * <th>Example</th>
+ * <th>Supported (API Levels)</th>
+ * </tr>
+ * </thead>
+ * <tbody>
+ * <tr>
+ * <td>art.gc.gc-count</td>
+ * <td>The number of garbage collection runs.</td>
+ * <td>{@code 164}</td>
+ * <td>23</td>
+ * </tr>
+ * <tr>
+ * <td>art.gc.gc-time</td>
+ * <td>The total duration of garbage collection runs in ms.</td>
+ * <td>{@code 62364}</td>
+ * <td>23</td>
+ * </tr>
+ * <tr>
+ * <td>art.gc.bytes-allocated</td>
+ * <td>The total number of bytes that the application allocated.</td>
+ * <td>{@code 1463948408}</td>
+ * <td>23</td>
+ * </tr>
+ * <tr>
+ * <td>art.gc.bytes-freed</td>
+ * <td>The total number of bytes that garbage collection reclaimed.</td>
+ * <td>{@code 1313493084}</td>
+ * <td>23</td>
+ * </tr>
+ * <tr>
+ * <td>art.gc.blocking-gc-count</td>
+ * <td>The number of blocking garbage collection runs.</td>
+ * <td>{@code 2}</td>
+ * <td>23</td>
+ * </tr>
+ * <tr>
+ * <td>art.gc.blocking-gc-time</td>
+ * <td>The total duration of blocking garbage collection runs in ms.</td>
+ * <td>{@code 804}</td>
+ * <td>23</td>
+ * </tr>
+ * <tr>
+ * <td>art.gc.gc-count-rate-histogram</td>
+ * <td>Every 10 seconds, the gc-count-rate is computed as the number of garbage
+ * collection runs that have occurred over the last 10
+ * seconds. art.gc.gc-count-rate-histogram is a histogram of the gc-count-rate
+ * samples taken since the process began. The histogram can be used to identify
+ * instances of high rates of garbage collection runs. For example, a histogram
+ * of "0:34503,1:45350,2:11281,3:8088,4:43,5:8" shows that most of the time
+ * there are between 0 and 2 garbage collection runs every 10 seconds, but there
+ * were 8 distinct 10-second intervals in which 5 garbage collection runs
+ * occurred.</td>
+ * <td>{@code 0:34503,1:45350,2:11281,3:8088,4:43,5:8}</td>
+ * <td>23</td>
+ * </tr>
+ * <tr>
+ * <td>art.gc.blocking-gc-count-rate-histogram</td>
+ * <td>Every 10 seconds, the blocking-gc-count-rate is computed as the number of
+ * blocking garbage collection runs that have occurred over the last 10
+ * seconds. art.gc.blocking-gc-count-rate-histogram is a histogram of the
+ * blocking-gc-count-rate samples taken since the process began. The histogram
+ * can be used to identify instances of high rates of blocking garbage
+ * collection runs. For example, a histogram of "0:99269,1:1,2:1" shows that
+ * most of the time there are zero blocking garbage collection runs every 10
+ * seconds, but there was one 10-second interval in which one blocking garbage
+ * collection run occurred, and there was one interval in which two blocking
+ * garbage collection runs occurred.</td>
+ * <td>{@code 0:99269,1:1,2:1}</td>
+ * <td>23</td>
+ * </tr>
+ * </tbody>
+ * </table>
+ *
+ * @param statName
+ * the name of the runtime statistic to look up.
+ * @return the value of the specified runtime statistic or {@code null} if the
+ * runtime statistic doesn't exist.
+ * @hide
+ */
+ public static String getRuntimeStat(String statName) {
+ return VMDebug.getRuntimeStat(statName);
+ }
+
+ /**
+ * Returns a map of the names/values of the runtime statistics
+ * that {@link #getRuntimeStat(String)} supports.
+ *
+ * @return a map of the names/values of the supported runtime statistics.
+ * @hide
+ */
+ public static Map<String, String> getRuntimeStats() {
+ return VMDebug.getRuntimeStats();
+ }
+
+ /**
* Returns the size of the native heap.
* @return The size of the native heap in bytes.
*/
diff --git a/core/java/android/os/IPowerManager.aidl b/core/java/android/os/IPowerManager.aidl
index 16dac7d..4d6241b 100644
--- a/core/java/android/os/IPowerManager.aidl
+++ b/core/java/android/os/IPowerManager.aidl
@@ -45,7 +45,7 @@
boolean setPowerSaveMode(boolean mode);
void reboot(boolean confirm, String reason, boolean wait);
- void shutdown(boolean confirm, boolean wait);
+ void shutdown(boolean confirm, String reason, boolean wait);
void crash(String message);
void setStayOnSetting(int val);
diff --git a/core/java/android/os/IUserManager.aidl b/core/java/android/os/IUserManager.aidl
index b5295fb..66c40f7 100644
--- a/core/java/android/os/IUserManager.aidl
+++ b/core/java/android/os/IUserManager.aidl
@@ -35,6 +35,7 @@
Bitmap getUserIcon(int userHandle);
List<UserInfo> getUsers(boolean excludeDying);
List<UserInfo> getProfiles(int userHandle, boolean enabledOnly);
+ boolean canAddMoreManagedProfiles();
UserInfo getProfileParent(int userHandle);
UserInfo getUserInfo(int userHandle);
boolean isRestricted();
diff --git a/core/java/android/os/PowerManager.java b/core/java/android/os/PowerManager.java
index d52dd30..4b284ce 100644
--- a/core/java/android/os/PowerManager.java
+++ b/core/java/android/os/PowerManager.java
@@ -367,7 +367,13 @@
* @hide
*/
public static final String REBOOT_RECOVERY = "recovery";
-
+
+ /**
+ * The value to pass as the 'reason' argument to android_reboot().
+ * @hide
+ */
+ public static final String SHUTDOWN_USER_REQUESTED = "userrequested";
+
final Context mContext;
final IPowerManager mService;
final Handler mHandler;
@@ -838,13 +844,14 @@
* Turn off the device.
*
* @param confirm If true, shows a shutdown confirmation dialog.
+ * @param reason code to pass to android_reboot() (e.g. "userrequested"), or null.
* @param wait If true, this call waits for the shutdown to complete and does not return.
*
* @hide
*/
- public void shutdown(boolean confirm, boolean wait) {
+ public void shutdown(boolean confirm, String reason, boolean wait) {
try {
- mService.shutdown(confirm, wait);
+ mService.shutdown(confirm, reason, wait);
} catch (RemoteException e) {
}
}
diff --git a/core/java/android/os/Process.java b/core/java/android/os/Process.java
index 0de9c70..61ead8f 100644
--- a/core/java/android/os/Process.java
+++ b/core/java/android/os/Process.java
@@ -634,6 +634,9 @@
if ((debugFlags & Zygote.DEBUG_ENABLE_JIT) != 0) {
argsForZygote.add("--enable-jit");
}
+ if ((debugFlags & Zygote.DEBUG_GENERATE_DEBUG_INFO) != 0) {
+ argsForZygote.add("--generate-debug-info");
+ }
if ((debugFlags & Zygote.DEBUG_ENABLE_ASSERT) != 0) {
argsForZygote.add("--enable-assert");
}
diff --git a/core/java/android/os/RecoverySystem.java b/core/java/android/os/RecoverySystem.java
index b879c83..52b10be 100644
--- a/core/java/android/os/RecoverySystem.java
+++ b/core/java/android/os/RecoverySystem.java
@@ -71,6 +71,7 @@
/** Used to communicate with recovery. See bootable/recovery/recovery.c. */
private static File RECOVERY_DIR = new File("/cache/recovery");
private static File COMMAND_FILE = new File(RECOVERY_DIR, "command");
+ private static File UNCRYPT_FILE = new File(RECOVERY_DIR, "uncrypt_file");
private static File LOG_FILE = new File(RECOVERY_DIR, "log");
private static String LAST_PREFIX = "last_";
@@ -333,8 +334,21 @@
public static void installPackage(Context context, File packageFile)
throws IOException {
String filename = packageFile.getCanonicalPath();
+
+ FileWriter uncryptFile = new FileWriter(UNCRYPT_FILE);
+ try {
+ uncryptFile.write(filename + "\n");
+ } finally {
+ uncryptFile.close();
+ }
Log.w(TAG, "!!! REBOOTING TO INSTALL " + filename + " !!!");
+ // If the package is on the /data partition, write the block map file
+ // into COMMAND_FILE instead.
+ if (filename.startsWith("/data/")) {
+ filename = "@/cache/recovery/block.map";
+ }
+
final String filenameArg = "--update_package=" + filename;
final String localeArg = "--locale=" + Locale.getDefault().toString();
bootCommand(context, filenameArg, localeArg);
diff --git a/core/java/android/os/StrictMode.java b/core/java/android/os/StrictMode.java
index 5018711..44f4ab1 100644
--- a/core/java/android/os/StrictMode.java
+++ b/core/java/android/os/StrictMode.java
@@ -1520,7 +1520,8 @@
*/
public static void conditionallyCheckInstanceCounts() {
VmPolicy policy = getVmPolicy();
- if (policy.classInstanceLimit.size() == 0) {
+ int policySize = policy.classInstanceLimit.size();
+ if (policySize == 0) {
return;
}
@@ -1529,15 +1530,17 @@
System.gc();
// Note: classInstanceLimit is immutable, so this is lock-free
- for (Map.Entry<Class, Integer> entry : policy.classInstanceLimit.entrySet()) {
- Class klass = entry.getKey();
- int limit = entry.getValue();
- long instances = VMDebug.countInstancesOfClass(klass, false);
- if (instances <= limit) {
- continue;
+ // Create the classes array.
+ Class[] classes = policy.classInstanceLimit.keySet().toArray(new Class[policySize]);
+ long[] instanceCounts = VMDebug.countInstancesOfClasses(classes, false);
+ for (int i = 0; i < classes.length; ++i) {
+ Class klass = classes[i];
+ int limit = policy.classInstanceLimit.get(klass);
+ long instances = instanceCounts[i];
+ if (instances > limit) {
+ Throwable tr = new InstanceCountViolation(klass, instances, limit);
+ onVmPolicyViolation(tr.getMessage(), tr);
}
- Throwable tr = new InstanceCountViolation(klass, instances, limit);
- onVmPolicyViolation(tr.getMessage(), tr);
}
}
diff --git a/core/java/android/os/Trace.java b/core/java/android/os/Trace.java
index 31b5849..4da88ee 100644
--- a/core/java/android/os/Trace.java
+++ b/core/java/android/os/Trace.java
@@ -75,6 +75,8 @@
public static final long TRACE_TAG_BIONIC = 1L << 16;
/** @hide */
public static final long TRACE_TAG_POWER = 1L << 17;
+ /** @hide */
+ public static final long TRACE_TAG_PACKAGE_MANAGER = 1L << 18;
private static final long TRACE_TAG_NOT_READY = 1L << 63;
private static final int MAX_SECTION_NAME_LEN = 127;
diff --git a/core/java/android/os/UserManager.java b/core/java/android/os/UserManager.java
index d124a49..b36624d 100644
--- a/core/java/android/os/UserManager.java
+++ b/core/java/android/os/UserManager.java
@@ -886,6 +886,22 @@
}
/**
+ * Checks whether it's possible to add more managed profiles. Caller must hold the MANAGE_USERS
+ * permission.
+ *
+ * @return true if more managed profiles can be added, false if limit has been reached.
+ * @hide
+ */
+ public boolean canAddMoreManagedProfiles() {
+ try {
+ return mService.canAddMoreManagedProfiles();
+ } catch (RemoteException re) {
+ Log.w(TAG, "Could not check if we can add more managed profiles", re);
+ return false;
+ }
+ }
+
+ /**
* Returns list of the profiles of userHandle including
* userHandle itself.
* Note that this returns both enabled and not enabled profiles. See
diff --git a/core/java/android/security/IKeystoreService.aidl b/core/java/android/security/IKeystoreService.aidl
index 579cdbe..4a0107d 100644
--- a/core/java/android/security/IKeystoreService.aidl
+++ b/core/java/android/security/IKeystoreService.aidl
@@ -30,33 +30,29 @@
* @hide
*/
interface IKeystoreService {
- int test();
+ int getState(int userId);
byte[] get(String name);
int insert(String name, in byte[] item, int uid, int flags);
int del(String name, int uid);
int exist(String name, int uid);
- String[] saw(String namePrefix, int uid);
+ String[] list(String namePrefix, int uid);
int reset();
- int password(String password);
- int lock();
- int unlock(String password);
- int zero();
+ int onUserPasswordChanged(int userId, String newPassword);
+ int lock(int userId);
+ int unlock(int userId, String userPassword);
+ int isEmpty(int userId);
int generate(String name, int uid, int keyType, int keySize, int flags,
in KeystoreArguments args);
int import_key(String name, in byte[] data, int uid, int flags);
byte[] sign(String name, in byte[] data);
int verify(String name, in byte[] data, in byte[] signature);
byte[] get_pubkey(String name);
- int del_key(String name, int uid);
int grant(String name, int granteeUid);
int ungrant(String name, int granteeUid);
long getmtime(String name);
int duplicate(String srcKey, int srcUid, String destKey, int destUid);
int is_hardware_backed(String string);
int clear_uid(long uid);
- int reset_uid(int uid);
- int sync_uid(int sourceUid, int targetUid);
- int password_uid(String password, int uid);
// Keymaster 0.4 methods
int addRngEntropy(in byte[] data);
@@ -71,8 +67,11 @@
OperationResult begin(IBinder appToken, String alias, int purpose, boolean pruneable,
in KeymasterArguments params, in byte[] entropy, out KeymasterArguments operationParams);
OperationResult update(IBinder token, in KeymasterArguments params, in byte[] input);
- OperationResult finish(IBinder token, in KeymasterArguments params, in byte[] signature);
+ OperationResult finish(IBinder token, in KeymasterArguments params, in byte[] signature,
+ in byte[] entropy);
int abort(IBinder handle);
boolean isOperationAuthorized(IBinder token);
int addAuthToken(in byte[] authToken);
+ int onUserAdded(int userId, int parentId);
+ int onUserRemoved(int userId);
}
diff --git a/core/java/android/security/keymaster/KeyCharacteristics.java b/core/java/android/security/keymaster/KeyCharacteristics.java
index b803a1b..b3a3aad 100644
--- a/core/java/android/security/keymaster/KeyCharacteristics.java
+++ b/core/java/android/security/keymaster/KeyCharacteristics.java
@@ -19,6 +19,8 @@
import android.os.Parcel;
import android.os.Parcelable;
+import java.util.ArrayList;
+import java.util.Date;
import java.util.List;
/**
@@ -30,10 +32,12 @@
public static final Parcelable.Creator<KeyCharacteristics> CREATOR = new
Parcelable.Creator<KeyCharacteristics>() {
+ @Override
public KeyCharacteristics createFromParcel(Parcel in) {
return new KeyCharacteristics(in);
}
+ @Override
public KeyCharacteristics[] newArray(int length) {
return new KeyCharacteristics[length];
}
@@ -50,6 +54,7 @@
return 0;
}
+ @Override
public void writeToParcel(Parcel out, int flags) {
swEnforced.writeToParcel(out, flags);
hwEnforced.writeToParcel(out, flags);
@@ -59,5 +64,53 @@
swEnforced = KeymasterArguments.CREATOR.createFromParcel(in);
hwEnforced = KeymasterArguments.CREATOR.createFromParcel(in);
}
+
+ public Integer getInteger(int tag) {
+ if (hwEnforced.containsTag(tag)) {
+ return hwEnforced.getInt(tag, -1);
+ } else if (swEnforced.containsTag(tag)) {
+ return swEnforced.getInt(tag, -1);
+ } else {
+ return null;
+ }
+ }
+
+ public int getInt(int tag, int defaultValue) {
+ Integer result = getInteger(tag);
+ return (result != null) ? result : defaultValue;
+ }
+
+ public List<Integer> getInts(int tag) {
+ List<Integer> result = new ArrayList<Integer>();
+ result.addAll(hwEnforced.getInts(tag));
+ result.addAll(swEnforced.getInts(tag));
+ return result;
+ }
+
+ public Date getDate(int tag) {
+ Date result = hwEnforced.getDate(tag, null);
+ if (result == null) {
+ result = swEnforced.getDate(tag, null);
+ }
+ return result;
+ }
+
+ public Date getDate(int tag, Date defaultValue) {
+ if (hwEnforced.containsTag(tag)) {
+ return hwEnforced.getDate(tag, null);
+ } else if (hwEnforced.containsTag(tag)) {
+ return swEnforced.getDate(tag, null);
+ } else {
+ return defaultValue;
+ }
+ }
+
+ public boolean getBoolean(KeyCharacteristics keyCharacteristics, int tag) {
+ if (keyCharacteristics.hwEnforced.containsTag(tag)) {
+ return keyCharacteristics.hwEnforced.getBoolean(tag, false);
+ } else {
+ return keyCharacteristics.swEnforced.getBoolean(tag, false);
+ }
+ }
}
diff --git a/core/java/android/security/keymaster/KeymasterArgument.java b/core/java/android/security/keymaster/KeymasterArgument.java
index 9a1c894..9adde35 100644
--- a/core/java/android/security/keymaster/KeymasterArgument.java
+++ b/core/java/android/security/keymaster/KeymasterArgument.java
@@ -42,6 +42,7 @@
case KeymasterDefs.KM_INT_REP:
return new KeymasterIntArgument(tag, in);
case KeymasterDefs.KM_LONG:
+ case KeymasterDefs.KM_LONG_REP:
return new KeymasterLongArgument(tag, in);
case KeymasterDefs.KM_DATE:
return new KeymasterDateArgument(tag, in);
diff --git a/core/java/android/security/keymaster/KeymasterArguments.java b/core/java/android/security/keymaster/KeymasterArguments.java
index b5fd4bd..82f65c7 100644
--- a/core/java/android/security/keymaster/KeymasterArguments.java
+++ b/core/java/android/security/keymaster/KeymasterArguments.java
@@ -34,9 +34,12 @@
public static final Parcelable.Creator<KeymasterArguments> CREATOR = new
Parcelable.Creator<KeymasterArguments>() {
+ @Override
public KeymasterArguments createFromParcel(Parcel in) {
return new KeymasterArguments(in);
}
+
+ @Override
public KeymasterArguments[] newArray(int size) {
return new KeymasterArguments[size];
}
@@ -54,6 +57,18 @@
mArguments.add(new KeymasterIntArgument(tag, value));
}
+ public void addInts(int tag, int... values) {
+ for (int value : values) {
+ addInt(tag, value);
+ }
+ }
+
+ public void addLongs(int tag, long... values) {
+ for (long value : values) {
+ addLong(tag, value);
+ }
+ }
+
public void addBoolean(int tag) {
mArguments.add(new KeymasterBooleanArgument(tag));
}
@@ -102,8 +117,13 @@
}
public long getLong(int tag, long defaultValue) {
- if (KeymasterDefs.getTagType(tag) != KeymasterDefs.KM_LONG) {
- throw new IllegalArgumentException("Tag is not a long type: " + tag);
+ switch (KeymasterDefs.getTagType(tag)) {
+ case KeymasterDefs.KM_LONG:
+ break; // Accepted type
+ case KeymasterDefs.KM_LONG_REP:
+ throw new IllegalArgumentException("Repeatable tags must use getLongs: " + tag);
+ default:
+ throw new IllegalArgumentException("Tag is not a long type: " + tag);
}
KeymasterArgument arg = getArgumentByTag(tag);
if (arg == null) {
@@ -166,6 +186,19 @@
return values;
}
+ public List<Long> getLongs(int tag) {
+ if (KeymasterDefs.getTagType(tag) != KeymasterDefs.KM_LONG_REP) {
+ throw new IllegalArgumentException("Tag is not a repeating long: " + tag);
+ }
+ List<Long> values = new ArrayList<Long>();
+ for (KeymasterArgument arg : mArguments) {
+ if (arg.tag == tag) {
+ values.add(((KeymasterLongArgument) arg).value);
+ }
+ }
+ return values;
+ }
+
public int size() {
return mArguments.size();
}
diff --git a/core/java/android/security/keymaster/KeymasterDefs.java b/core/java/android/security/keymaster/KeymasterDefs.java
index d3953b3..574b208 100644
--- a/core/java/android/security/keymaster/KeymasterDefs.java
+++ b/core/java/android/security/keymaster/KeymasterDefs.java
@@ -118,9 +118,9 @@
public static final int KM_DIGEST_SHA_2_512 = 6;
// Key origins.
- public static final int KM_ORIGIN_HARDWARE = 0;
- public static final int KM_ORIGIN_SOFTWARE = 1;
+ public static final int KM_ORIGIN_GENERATED = 0;
public static final int KM_ORIGIN_IMPORTED = 2;
+ public static final int KM_ORIGIN_UNKNOWN = 3;
// Key usability requirements.
public static final int KM_BLOB_STANDALONE = 0;
@@ -191,6 +191,11 @@
public static final int KM_ERROR_SECURE_HW_BUSY = -48;
public static final int KM_ERROR_SECURE_HW_COMMUNICATION_FAILED = -49;
public static final int KM_ERROR_UNSUPPORTED_EC_FIELD = -50;
+ public static final int KM_ERROR_MISSING_NONCE = -51;
+ public static final int KM_ERROR_INVALID_NONCE = -52;
+ public static final int KM_ERROR_UNSUPPORTED_CHUNK_LENGTH = -53;
+ public static final int KM_ERROR_RESCOPABLE_KEY_NOT_USABLE = -54;
+ public static final int KM_ERROR_CALLER_NONCE_PROHIBITED = -55;
public static final int KM_ERROR_UNIMPLEMENTED = -100;
public static final int KM_ERROR_VERSION_MISMATCH = -101;
public static final int KM_ERROR_UNKNOWN_ERROR = -1000;
@@ -230,6 +235,8 @@
sErrorCodeToString.put(KM_ERROR_INVALID_TAG, "Invalid tag");
sErrorCodeToString.put(KM_ERROR_MEMORY_ALLOCATION_FAILED, "Memory allocation failed");
sErrorCodeToString.put(KM_ERROR_UNSUPPORTED_EC_FIELD, "Unsupported EC field");
+ sErrorCodeToString.put(KM_ERROR_MISSING_NONCE, "Required IV missing");
+ sErrorCodeToString.put(KM_ERROR_INVALID_NONCE, "Invalid IV");
sErrorCodeToString.put(KM_ERROR_UNIMPLEMENTED, "Not implemented");
sErrorCodeToString.put(KM_ERROR_UNKNOWN_ERROR, "Unknown error");
}
diff --git a/core/java/android/security/keymaster/KeymasterLongArgument.java b/core/java/android/security/keymaster/KeymasterLongArgument.java
index d51d7e6..e04ce5d 100644
--- a/core/java/android/security/keymaster/KeymasterLongArgument.java
+++ b/core/java/android/security/keymaster/KeymasterLongArgument.java
@@ -29,6 +29,7 @@
super(tag);
switch (KeymasterDefs.getTagType(tag)) {
case KeymasterDefs.KM_LONG:
+ case KeymasterDefs.KM_LONG_REP:
break; // OK.
default:
throw new IllegalArgumentException("Bad long tag " + tag);
diff --git a/core/java/android/speech/srec/MicrophoneInputStream.java b/core/java/android/speech/srec/MicrophoneInputStream.java
deleted file mode 100644
index 94db176..0000000
--- a/core/java/android/speech/srec/MicrophoneInputStream.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*---------------------------------------------------------------------------*
- * MicrophoneInputStream.java *
- * *
- * Copyright 2007 Nuance Communciations, Inc. *
- * *
- * Licensed under the Apache License, Version 2.0 (the 'License'); *
- * you may not use this file except in compliance with the License. *
- * *
- * You may obtain a copy of the License at *
- * http://www.apache.org/licenses/LICENSE-2.0 *
- * *
- * Unless required by applicable law or agreed to in writing, software *
- * distributed under the License is distributed on an 'AS IS' BASIS, *
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
- * See the License for the specific language governing permissions and *
- * limitations under the License. *
- * *
- *---------------------------------------------------------------------------*/
-
-
-package android.speech.srec;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.lang.IllegalStateException;
-
-
-/**
- * PCM input stream from the microphone, 16 bits per sample.
- */
-public final class MicrophoneInputStream extends InputStream {
- static {
- System.loadLibrary("srec_jni");
- }
-
- private final static String TAG = "MicrophoneInputStream";
- private long mAudioRecord = 0;
- private byte[] mOneByte = new byte[1];
-
- /**
- * MicrophoneInputStream constructor.
- * @param sampleRate sample rate of the microphone, typically 11025 or 8000.
- * @param fifoDepth depth of the real time fifo, measured in sampleRate clock ticks.
- * This determines how long an application may delay before losing data.
- */
- public MicrophoneInputStream(int sampleRate, int fifoDepth) throws IOException {
- mAudioRecord = AudioRecordNew(sampleRate, fifoDepth);
- if (mAudioRecord == 0) throw new IOException("AudioRecord constructor failed - busy?");
- int status = AudioRecordStart(mAudioRecord);
- if (status != 0) {
- close();
- throw new IOException("AudioRecord start failed: " + status);
- }
- }
-
- @Override
- public int read() throws IOException {
- if (mAudioRecord == 0) throw new IllegalStateException("not open");
- int rtn = AudioRecordRead(mAudioRecord, mOneByte, 0, 1);
- return rtn == 1 ? ((int)mOneByte[0] & 0xff) : -1;
- }
-
- @Override
- public int read(byte[] b) throws IOException {
- if (mAudioRecord == 0) throw new IllegalStateException("not open");
- return AudioRecordRead(mAudioRecord, b, 0, b.length);
- }
-
- @Override
- public int read(byte[] b, int offset, int length) throws IOException {
- if (mAudioRecord == 0) throw new IllegalStateException("not open");
- // TODO: should we force all reads to be a multiple of the sample size?
- return AudioRecordRead(mAudioRecord, b, offset, length);
- }
-
- /**
- * Closes this stream.
- */
- @Override
- public void close() throws IOException {
- if (mAudioRecord != 0) {
- try {
- AudioRecordStop(mAudioRecord);
- } finally {
- try {
- AudioRecordDelete(mAudioRecord);
- } finally {
- mAudioRecord = 0;
- }
- }
- }
- }
-
- @Override
- protected void finalize() throws Throwable {
- if (mAudioRecord != 0) {
- close();
- throw new IOException("someone forgot to close MicrophoneInputStream");
- }
- }
-
- //
- // AudioRecord JNI interface
- //
- private static native long AudioRecordNew(int sampleRate, int fifoDepth);
- private static native int AudioRecordStart(long audioRecord);
- private static native int AudioRecordRead(long audioRecord, byte[] b, int offset, int length) throws IOException;
- private static native void AudioRecordStop(long audioRecord) throws IOException;
- private static native void AudioRecordDelete(long audioRecord) throws IOException;
-}
diff --git a/core/java/android/speech/srec/Recognizer.java b/core/java/android/speech/srec/Recognizer.java
deleted file mode 100644
index 6c491a0..0000000
--- a/core/java/android/speech/srec/Recognizer.java
+++ /dev/null
@@ -1,716 +0,0 @@
-/*
- * ---------------------------------------------------------------------------
- * Recognizer.java
- *
- * Copyright 2007 Nuance Communciations, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the 'License'); you may not
- * use this file except in compliance with the License.
- *
- * You may obtain a copy of the License at
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an 'AS IS' BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- *
- * ---------------------------------------------------------------------------
- */
-
-
-package android.speech.srec;
-
-import java.io.File;
-import java.io.InputStream;
-import java.io.IOException;
-import java.util.Locale;
-
-/**
- * Simple, synchronous speech recognizer, using the Nuance SREC package.
- * Usages proceeds as follows:
- *
- * <ul>
- * <li>Create a <code>Recognizer</code>.
- * <li>Create a <code>Recognizer.Grammar</code>.
- * <li>Setup the <code>Recognizer.Grammar</code>.
- * <li>Reset the <code>Recognizer.Grammar</code> slots, if needed.
- * <li>Fill the <code>Recognizer.Grammar</code> slots, if needed.
- * <li>Compile the <code>Recognizer.Grammar</code>, if needed.
- * <li>Save the filled <code>Recognizer.Grammar</code>, if needed.
- * <li>Start the <code>Recognizer</code>.
- * <li>Loop over <code>advance</code> and <code>putAudio</code> until recognition complete.
- * <li>Fetch and process results, or notify of failure.
- * <li>Stop the <code>Recognizer</code>.
- * <li>Destroy the <code>Recognizer</code>.
- * </ul>
- *
- * <p>Below is example code</p>
- *
- * <pre class="prettyprint">
- *
- * // create and start audio input
- * InputStream audio = new MicrophoneInputStream(11025, 11025*5);
- * // create a Recognizer
- * String cdir = Recognizer.getConfigDir(null);
- * Recognizer recognizer = new Recognizer(cdir + "/baseline11k.par");
- * // create and load a Grammar
- * Recognizer.Grammar grammar = recognizer.new Grammar(cdir + "/grammars/VoiceDialer.g2g");
- * // setup the Grammar to work with the Recognizer
- * grammar.setupRecognizer();
- * // fill the Grammar slots with names and save, if required
- * grammar.resetAllSlots();
- * for (String name : names) grammar.addWordToSlot("@Names", name, null, 1, "V=1");
- * grammar.compile();
- * grammar.save(".../foo.g2g");
- * // start the Recognizer
- * recognizer.start();
- * // loop over Recognizer events
- * while (true) {
- * switch (recognizer.advance()) {
- * case Recognizer.EVENT_INCOMPLETE:
- * case Recognizer.EVENT_STARTED:
- * case Recognizer.EVENT_START_OF_VOICING:
- * case Recognizer.EVENT_END_OF_VOICING:
- * // let the Recognizer continue to run
- * continue;
- * case Recognizer.EVENT_RECOGNITION_RESULT:
- * // success, so fetch results here!
- * for (int i = 0; i < recognizer.getResultCount(); i++) {
- * String result = recognizer.getResult(i, Recognizer.KEY_LITERAL);
- * }
- * break;
- * case Recognizer.EVENT_NEED_MORE_AUDIO:
- * // put more audio in the Recognizer
- * recognizer.putAudio(audio);
- * continue;
- * default:
- * notifyFailure();
- * break;
- * }
- * break;
- * }
- * // stop the Recognizer
- * recognizer.stop();
- * // destroy the Recognizer
- * recognizer.destroy();
- * // stop the audio device
- * audio.close();
- *
- * </pre>
- */
-public final class Recognizer {
- static {
- System.loadLibrary("srec_jni");
- }
-
- private static String TAG = "Recognizer";
-
- /**
- * Result key corresponding to confidence score.
- */
- public static final String KEY_CONFIDENCE = "conf";
-
- /**
- * Result key corresponding to literal text.
- */
- public static final String KEY_LITERAL = "literal";
-
- /**
- * Result key corresponding to semantic meaning text.
- */
- public static final String KEY_MEANING = "meaning";
-
- // handle to SR_Vocabulary object
- private long mVocabulary = 0;
-
- // handle to SR_Recognizer object
- private long mRecognizer = 0;
-
- // Grammar currently associated with Recognizer via SR_GrammarSetupRecognizer
- private Grammar mActiveGrammar = null;
-
- /**
- * Get the pathname of the SREC configuration directory corresponding to the
- * language indicated by the Locale.
- * This directory contains dictionaries, speech models,
- * configuration files, and other data needed by the Recognizer.
- * @param locale <code>Locale</code> corresponding to the desired language,
- * or null for default, currently <code>Locale.US</code>.
- * @return Pathname of the configuration directory.
- */
- public static String getConfigDir(Locale locale) {
- if (locale == null) locale = Locale.US;
- String dir = "/system/usr/srec/config/" +
- locale.toString().replace('_', '.').toLowerCase(Locale.ROOT);
- if ((new File(dir)).isDirectory()) return dir;
- return null;
- }
-
- /**
- * Create an instance of a SREC speech recognizer.
- *
- * @param configFile pathname of the baseline*.par configuration file,
- * which in turn contains references to dictionaries, speech models,
- * and other data needed to configure and operate the recognizer.
- * A separate config file is needed for each audio sample rate.
- * Two files, baseline11k.par and baseline8k.par, which correspond to
- * 11025 and 8000 hz, are present in the directory indicated by
- * {@link #getConfigDir}.
- * @throws IOException
- */
- public Recognizer(String configFile) throws IOException {
- PMemInit();
- SR_SessionCreate(configFile);
- mRecognizer = SR_RecognizerCreate();
- SR_RecognizerSetup(mRecognizer);
- mVocabulary = SR_VocabularyLoad();
- }
-
- /**
- * Represents a grammar loaded into the Recognizer.
- */
- public class Grammar {
- private long mGrammar = 0;
-
- /**
- * Create a <code>Grammar</code> instance.
- * @param g2gFileName pathname of g2g file.
- */
- public Grammar(String g2gFileName) throws IOException {
- mGrammar = SR_GrammarLoad(g2gFileName);
- SR_GrammarSetupVocabulary(mGrammar, mVocabulary);
- }
-
- /**
- * Reset all slots.
- */
- public void resetAllSlots() {
- SR_GrammarResetAllSlots(mGrammar);
- }
-
- /**
- * Add a word to a slot.
- *
- * @param slot slot name.
- * @param word word to insert.
- * @param pron pronunciation, or null to derive from word.
- * @param weight weight to give the word. One is normal, 50 is low.
- * @param tag semantic meaning tag string.
- */
- public void addWordToSlot(String slot, String word, String pron, int weight, String tag) {
- SR_GrammarAddWordToSlot(mGrammar, slot, word, pron, weight, tag);
- }
-
- /**
- * Compile all slots.
- */
- public void compile() {
- SR_GrammarCompile(mGrammar);
- }
-
- /**
- * Setup <code>Grammar</code> with <code>Recognizer</code>.
- */
- public void setupRecognizer() {
- SR_GrammarSetupRecognizer(mGrammar, mRecognizer);
- mActiveGrammar = this;
- }
-
- /**
- * Save <code>Grammar</code> to g2g file.
- *
- * @param g2gFileName
- * @throws IOException
- */
- public void save(String g2gFileName) throws IOException {
- SR_GrammarSave(mGrammar, g2gFileName);
- }
-
- /**
- * Release resources associated with this <code>Grammar</code>.
- */
- public void destroy() {
- // TODO: need to do cleanup and disassociation with Recognizer
- if (mGrammar != 0) {
- SR_GrammarDestroy(mGrammar);
- mGrammar = 0;
- }
- }
-
- /**
- * Clean up resources.
- */
- protected void finalize() {
- if (mGrammar != 0) {
- destroy();
- throw new IllegalStateException("someone forgot to destroy Grammar");
- }
- }
- }
-
- /**
- * Start recognition
- */
- public void start() {
- // TODO: shouldn't be here?
- SR_RecognizerActivateRule(mRecognizer, mActiveGrammar.mGrammar, "trash", 1);
- SR_RecognizerStart(mRecognizer);
- }
-
- /**
- * Process some audio and return the current status.
- * @return recognition event, one of:
- * <ul>
- * <li><code>EVENT_INVALID</code>
- * <li><code>EVENT_NO_MATCH</code>
- * <li><code>EVENT_INCOMPLETE</code>
- * <li><code>EVENT_STARTED</code>
- * <li><code>EVENT_STOPPED</code>
- * <li><code>EVENT_START_OF_VOICING</code>
- * <li><code>EVENT_END_OF_VOICING</code>
- * <li><code>EVENT_SPOKE_TOO_SOON</code>
- * <li><code>EVENT_RECOGNITION_RESULT</code>
- * <li><code>EVENT_START_OF_UTTERANCE_TIMEOUT</code>
- * <li><code>EVENT_RECOGNITION_TIMEOUT</code>
- * <li><code>EVENT_NEED_MORE_AUDIO</code>
- * <li><code>EVENT_MAX_SPEECH</code>
- * </ul>
- */
- public int advance() {
- return SR_RecognizerAdvance(mRecognizer);
- }
-
- /**
- * Put audio samples into the <code>Recognizer</code>.
- * @param buf holds the audio samples.
- * @param offset offset of the first sample.
- * @param length number of bytes containing samples.
- * @param isLast indicates no more audio data, normally false.
- * @return number of bytes accepted.
- */
- public int putAudio(byte[] buf, int offset, int length, boolean isLast) {
- return SR_RecognizerPutAudio(mRecognizer, buf, offset, length, isLast);
- }
-
- /**
- * Read audio samples from an <code>InputStream</code> and put them in the
- * <code>Recognizer</code>.
- * @param audio <code>InputStream</code> containing PCM audio samples.
- */
- public void putAudio(InputStream audio) throws IOException {
- // make sure the audio buffer is allocated
- if (mPutAudioBuffer == null) mPutAudioBuffer = new byte[512];
- // read some data
- int nbytes = audio.read(mPutAudioBuffer);
- // eof, so signal Recognizer
- if (nbytes == -1) {
- SR_RecognizerPutAudio(mRecognizer, mPutAudioBuffer, 0, 0, true);
- }
- // put it into the Recognizer
- else if (nbytes != SR_RecognizerPutAudio(mRecognizer, mPutAudioBuffer, 0, nbytes, false)) {
- throw new IOException("SR_RecognizerPutAudio failed nbytes=" + nbytes);
- }
- }
-
- // audio buffer for putAudio(InputStream)
- private byte[] mPutAudioBuffer = null;
-
- /**
- * Get the number of recognition results. Must be called after
- * <code>EVENT_RECOGNITION_RESULT</code> is returned by
- * <code>advance</code>, but before <code>stop</code>.
- *
- * @return number of results in nbest list.
- */
- public int getResultCount() {
- return SR_RecognizerResultGetSize(mRecognizer);
- }
-
- /**
- * Get a set of keys for the result. Must be called after
- * <code>EVENT_RECOGNITION_RESULT</code> is returned by
- * <code>advance</code>, but before <code>stop</code>.
- *
- * @param index index of result.
- * @return array of keys.
- */
- public String[] getResultKeys(int index) {
- return SR_RecognizerResultGetKeyList(mRecognizer, index);
- }
-
- /**
- * Get a result value. Must be called after
- * <code>EVENT_RECOGNITION_RESULT</code> is returned by
- * <code>advance</code>, but before <code>stop</code>.
- *
- * @param index index of the result.
- * @param key key of the result. This is typically one of
- * <code>KEY_CONFIDENCE</code>, <code>KEY_LITERAL</code>, or
- * <code>KEY_MEANING</code>, but the user can also define their own keys
- * in a grxml file, or in the <code>tag</code> slot of
- * <code>Grammar.addWordToSlot</code>.
- * @return the result.
- */
- public String getResult(int index, String key) {
- return SR_RecognizerResultGetValue(mRecognizer, index, key);
- }
-
- /**
- * Stop the <code>Recognizer</code>.
- */
- public void stop() {
- SR_RecognizerStop(mRecognizer);
- SR_RecognizerDeactivateRule(mRecognizer, mActiveGrammar.mGrammar, "trash");
- }
-
- /**
- * Reset the acoustic state vectorto it's default value.
- *
- * @hide
- */
- public void resetAcousticState() {
- SR_AcousticStateReset(mRecognizer);
- }
-
- /**
- * Set the acoustic state vector.
- * @param state String containing the acoustic state vector.
- *
- * @hide
- */
- public void setAcousticState(String state) {
- SR_AcousticStateSet(mRecognizer, state);
- }
-
- /**
- * Get the acoustic state vector.
- * @return String containing the acoustic state vector.
- *
- * @hide
- */
- public String getAcousticState() {
- return SR_AcousticStateGet(mRecognizer);
- }
-
- /**
- * Clean up resources.
- */
- public void destroy() {
- try {
- if (mVocabulary != 0) SR_VocabularyDestroy(mVocabulary);
- } finally {
- mVocabulary = 0;
- try {
- if (mRecognizer != 0) SR_RecognizerUnsetup(mRecognizer);
- } finally {
- try {
- if (mRecognizer != 0) SR_RecognizerDestroy(mRecognizer);
- } finally {
- mRecognizer = 0;
- try {
- SR_SessionDestroy();
- } finally {
- PMemShutdown();
- }
- }
- }
- }
- }
-
- /**
- * Clean up resources.
- */
- protected void finalize() throws Throwable {
- if (mVocabulary != 0 || mRecognizer != 0) {
- destroy();
- throw new IllegalStateException("someone forgot to destroy Recognizer");
- }
- }
-
- /* an example session captured, for reference
- void doall() {
- if (PMemInit ( )
- || lhs_audioinOpen ( WAVE_MAPPER, SREC_TEST_DEFAULT_AUDIO_FREQUENCY, &audio_in_handle )
- || srec_test_init_application_data ( &applicationData, argc, argv )
- || SR_SessionCreate ( "/system/usr/srec/config/en.us/baseline11k.par" )
- || SR_RecognizerCreate ( &applicationData.recognizer )
- || SR_RecognizerSetup ( applicationData.recognizer)
- || ESR_SessionGetLCHAR ( L("cmdline.vocabulary"), filename, &flen )
- || SR_VocabularyLoad ( filename, &applicationData.vocabulary )
- || SR_VocabularyGetLanguage ( applicationData.vocabulary, &applicationData.locale )
- || (applicationData.nametag = NULL)
- || SR_NametagsCreate ( &applicationData.nametags )
- || (LSTRCPY ( applicationData.grammars [0].grammar_path, "/system/usr/srec/config/en.us/grammars/VoiceDialer.g2g" ), 0)
- || (LSTRCPY ( applicationData.grammars [0].grammarID, "BothTags" ), 0)
- || (LSTRCPY ( applicationData.grammars [0].ruleName, "trash" ), 0)
- || (applicationData.grammars [0].is_ve_grammar = ESR_FALSE, 0)
- || SR_GrammarLoad (applicationData.grammars [0].grammar_path, &applicationData.grammars [applicationData.grammarCount].grammar )
- || SR_GrammarSetupVocabulary ( applicationData.grammars [0].grammar, applicationData.vocabulary )
- || SR_GrammarSetupRecognizer( applicationData.grammars [0].grammar, applicationData.recognizer )
- || SR_GrammarSetDispatchFunction ( applicationData.grammars [0].grammar, L("myDSMCallback"), NULL, myDSMCallback )
- || (applicationData.grammarCount++, 0)
- || SR_RecognizerActivateRule ( applicationData.recognizer, applicationData.grammars [0].grammar,
- applicationData.grammars [0].ruleName, 1 )
- || (applicationData.active_grammar_num = 0, 0)
- || lhs_audioinStart ( audio_in_handle )
- || SR_RecognizerStart ( applicationData.recognizer )
- || strl ( applicationData.grammars [0].grammar, &applicationData, audio_in_handle, &recognition_count )
- || SR_RecognizerStop ( applicationData.recognizer )
- || lhs_audioinStop ( audio_in_handle )
- || SR_RecognizerDeactivateRule ( applicationData.recognizer, applicationData.grammars [0].grammar, applicationData.grammars [0].ruleName )
- || (applicationData.active_grammar_num = -1, 0)
- || SR_GrammarDestroy ( applicationData.grammars [0].grammar )
- || (applicationData.grammarCount--, 0)
- || SR_NametagsDestroy ( applicationData.nametags )
- || (applicationData.nametags = NULL, 0)
- || SR_VocabularyDestroy ( applicationData.vocabulary )
- || (applicationData.vocabulary = NULL)
- || SR_RecognizerUnsetup ( applicationData.recognizer) // releases acoustic models
- || SR_RecognizerDestroy ( applicationData.recognizer )
- || (applicationData.recognizer = NULL)
- || SR_SessionDestroy ( )
- || srec_test_shutdown_application_data ( &applicationData )
- || lhs_audioinClose ( &audio_in_handle )
- || PMemShutdown ( )
- }
- */
-
-
- //
- // PMem native methods
- //
- private static native void PMemInit();
- private static native void PMemShutdown();
-
-
- //
- // SR_Session native methods
- //
- private static native void SR_SessionCreate(String filename);
- private static native void SR_SessionDestroy();
-
-
- //
- // SR_Recognizer native methods
- //
-
- /**
- * Reserved value.
- */
- public final static int EVENT_INVALID = 0;
-
- /**
- * <code>Recognizer</code> could not find a match for the utterance.
- */
- public final static int EVENT_NO_MATCH = 1;
-
- /**
- * <code>Recognizer</code> processed one frame of audio.
- */
- public final static int EVENT_INCOMPLETE = 2;
-
- /**
- * <code>Recognizer</code> has just been started.
- */
- public final static int EVENT_STARTED = 3;
-
- /**
- * <code>Recognizer</code> is stopped.
- */
- public final static int EVENT_STOPPED = 4;
-
- /**
- * Beginning of speech detected.
- */
- public final static int EVENT_START_OF_VOICING = 5;
-
- /**
- * End of speech detected.
- */
- public final static int EVENT_END_OF_VOICING = 6;
-
- /**
- * Beginning of utterance occured too soon.
- */
- public final static int EVENT_SPOKE_TOO_SOON = 7;
-
- /**
- * Recognition match detected.
- */
- public final static int EVENT_RECOGNITION_RESULT = 8;
-
- /**
- * Timeout occured before beginning of utterance.
- */
- public final static int EVENT_START_OF_UTTERANCE_TIMEOUT = 9;
-
- /**
- * Timeout occured before speech recognition could complete.
- */
- public final static int EVENT_RECOGNITION_TIMEOUT = 10;
-
- /**
- * Not enough samples to process one frame.
- */
- public final static int EVENT_NEED_MORE_AUDIO = 11;
-
- /**
- * More audio encountered than is allowed by 'swirec_max_speech_duration'.
- */
- public final static int EVENT_MAX_SPEECH = 12;
-
- /**
- * Produce a displayable string from an <code>advance</code> event.
- * @param event
- * @return String representing the event.
- */
- public static String eventToString(int event) {
- switch (event) {
- case EVENT_INVALID:
- return "EVENT_INVALID";
- case EVENT_NO_MATCH:
- return "EVENT_NO_MATCH";
- case EVENT_INCOMPLETE:
- return "EVENT_INCOMPLETE";
- case EVENT_STARTED:
- return "EVENT_STARTED";
- case EVENT_STOPPED:
- return "EVENT_STOPPED";
- case EVENT_START_OF_VOICING:
- return "EVENT_START_OF_VOICING";
- case EVENT_END_OF_VOICING:
- return "EVENT_END_OF_VOICING";
- case EVENT_SPOKE_TOO_SOON:
- return "EVENT_SPOKE_TOO_SOON";
- case EVENT_RECOGNITION_RESULT:
- return "EVENT_RECOGNITION_RESULT";
- case EVENT_START_OF_UTTERANCE_TIMEOUT:
- return "EVENT_START_OF_UTTERANCE_TIMEOUT";
- case EVENT_RECOGNITION_TIMEOUT:
- return "EVENT_RECOGNITION_TIMEOUT";
- case EVENT_NEED_MORE_AUDIO:
- return "EVENT_NEED_MORE_AUDIO";
- case EVENT_MAX_SPEECH:
- return "EVENT_MAX_SPEECH";
- }
- return "EVENT_" + event;
- }
-
- //
- // SR_Recognizer methods
- //
- private static native void SR_RecognizerStart(long recognizer);
- private static native void SR_RecognizerStop(long recognizer);
- private static native long SR_RecognizerCreate();
- private static native void SR_RecognizerDestroy(long recognizer);
- private static native void SR_RecognizerSetup(long recognizer);
- private static native void SR_RecognizerUnsetup(long recognizer);
- private static native boolean SR_RecognizerIsSetup(long recognizer);
- private static native String SR_RecognizerGetParameter(long recognizer, String key);
- private static native int SR_RecognizerGetSize_tParameter(long recognizer, String key);
- private static native boolean SR_RecognizerGetBoolParameter(long recognizer, String key);
- private static native void SR_RecognizerSetParameter(long recognizer, String key, String value);
- private static native void SR_RecognizerSetSize_tParameter(long recognizer,
- String key, int value);
- private static native void SR_RecognizerSetBoolParameter(long recognizer, String key,
- boolean value);
- private static native void SR_RecognizerSetupRule(long recognizer, long grammar,
- String ruleName);
- private static native boolean SR_RecognizerHasSetupRules(long recognizer);
- private static native void SR_RecognizerActivateRule(long recognizer, long grammar,
- String ruleName, int weight);
- private static native void SR_RecognizerDeactivateRule(long recognizer, long grammar,
- String ruleName);
- private static native void SR_RecognizerDeactivateAllRules(long recognizer);
- private static native boolean SR_RecognizerIsActiveRule(long recognizer, long grammar,
- String ruleName);
- private static native boolean SR_RecognizerCheckGrammarConsistency(long recognizer,
- long grammar);
- private static native int SR_RecognizerPutAudio(long recognizer, byte[] buffer, int offset,
- int length, boolean isLast);
- private static native int SR_RecognizerAdvance(long recognizer);
- // private static native void SR_RecognizerLoadUtterance(long recognizer,
- // const LCHAR* filename);
- // private static native void SR_RecognizerLoadWaveFile(long recognizer,
- // const LCHAR* filename);
- // private static native void SR_RecognizerSetLockFunction(long recognizer,
- // SR_RecognizerLockFunction function, void* data);
- private static native boolean SR_RecognizerIsSignalClipping(long recognizer);
- private static native boolean SR_RecognizerIsSignalDCOffset(long recognizer);
- private static native boolean SR_RecognizerIsSignalNoisy(long recognizer);
- private static native boolean SR_RecognizerIsSignalTooQuiet(long recognizer);
- private static native boolean SR_RecognizerIsSignalTooFewSamples(long recognizer);
- private static native boolean SR_RecognizerIsSignalTooManySamples(long recognizer);
- // private static native void SR_Recognizer_Change_Sample_Rate (size_t new_sample_rate);
-
-
- //
- // SR_AcousticState native methods
- //
- private static native void SR_AcousticStateReset(long recognizer);
- private static native void SR_AcousticStateSet(long recognizer, String state);
- private static native String SR_AcousticStateGet(long recognizer);
-
-
- //
- // SR_Grammar native methods
- //
- private static native void SR_GrammarCompile(long grammar);
- private static native void SR_GrammarAddWordToSlot(long grammar, String slot,
- String word, String pronunciation, int weight, String tag);
- private static native void SR_GrammarResetAllSlots(long grammar);
- // private static native void SR_GrammarAddNametagToSlot(long grammar, String slot,
- // const struct SR_Nametag_t* nametag, int weight, String tag);
- private static native void SR_GrammarSetupVocabulary(long grammar, long vocabulary);
- // private static native void SR_GrammarSetupModels(long grammar, SR_AcousticModels* models);
- private static native void SR_GrammarSetupRecognizer(long grammar, long recognizer);
- private static native void SR_GrammarUnsetupRecognizer(long grammar);
- // private static native void SR_GrammarGetModels(long grammar,SR_AcousticModels** models);
- private static native long SR_GrammarCreate();
- private static native void SR_GrammarDestroy(long grammar);
- private static native long SR_GrammarLoad(String filename);
- private static native void SR_GrammarSave(long grammar, String filename);
- // private static native void SR_GrammarSetDispatchFunction(long grammar,
- // const LCHAR* name, void* userData, SR_GrammarDispatchFunction function);
- // private static native void SR_GrammarSetParameter(long grammar, const
- // LCHAR* key, void* value);
- // private static native void SR_GrammarSetSize_tParameter(long grammar,
- // const LCHAR* key, size_t value);
- // private static native void SR_GrammarGetParameter(long grammar, const
- // LCHAR* key, void** value);
- // private static native void SR_GrammarGetSize_tParameter(long grammar,
- // const LCHAR* key, size_t* value);
- // private static native void SR_GrammarCheckParse(long grammar, const LCHAR*
- // transcription, SR_SemanticResult** result, size_t* resultCount);
- private static native void SR_GrammarAllowOnly(long grammar, String transcription);
- private static native void SR_GrammarAllowAll(long grammar);
-
-
- //
- // SR_Vocabulary native methods
- //
- // private static native int SR_VocabularyCreate();
- private static native long SR_VocabularyLoad();
- // private static native void SR_VocabularySave(SR_Vocabulary* self,
- // const LCHAR* filename);
- // private static native void SR_VocabularyAddWord(SR_Vocabulary* self,
- // const LCHAR* word);
- // private static native void SR_VocabularyGetLanguage(SR_Vocabulary* self,
- // ESR_Locale* locale);
- private static native void SR_VocabularyDestroy(long vocabulary);
- private static native String SR_VocabularyGetPronunciation(long vocabulary, String word);
-
-
- //
- // SR_RecognizerResult native methods
- //
- private static native byte[] SR_RecognizerResultGetWaveform(long recognizer);
- private static native int SR_RecognizerResultGetSize(long recognizer);
- private static native int SR_RecognizerResultGetKeyCount(long recognizer, int nbest);
- private static native String[] SR_RecognizerResultGetKeyList(long recognizer, int nbest);
- private static native String SR_RecognizerResultGetValue(long recognizer,
- int nbest, String key);
- // private static native void SR_RecognizerResultGetLocale(long recognizer, ESR_Locale* locale);
-}
diff --git a/core/java/android/speech/srec/UlawEncoderInputStream.java b/core/java/android/speech/srec/UlawEncoderInputStream.java
deleted file mode 100644
index a488ead..0000000
--- a/core/java/android/speech/srec/UlawEncoderInputStream.java
+++ /dev/null
@@ -1,187 +0,0 @@
-/*
- * ---------------------------------------------------------------------------
- * UlawEncoderInputStream.java
- *
- * Copyright 2008 Nuance Communciations, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the 'License'); you may not
- * use this file except in compliance with the License.
- *
- * You may obtain a copy of the License at
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an 'AS IS' BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- *
- * ---------------------------------------------------------------------------
- */
-
-package android.speech.srec;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-/**
- * InputStream which transforms 16 bit pcm data to ulaw data.
- *
- * Not yet ready to be supported, so
- * @hide
- */
-public final class UlawEncoderInputStream extends InputStream {
- private final static String TAG = "UlawEncoderInputStream";
-
- private final static int MAX_ULAW = 8192;
- private final static int SCALE_BITS = 16;
-
- private InputStream mIn;
-
- private int mMax = 0;
-
- private final byte[] mBuf = new byte[1024];
- private int mBufCount = 0; // should be 0 or 1
-
- private final byte[] mOneByte = new byte[1];
-
-
- public static void encode(byte[] pcmBuf, int pcmOffset,
- byte[] ulawBuf, int ulawOffset, int length, int max) {
-
- // from 'ulaw' in wikipedia
- // +8191 to +8159 0x80
- // +8158 to +4063 in 16 intervals of 256 0x80 + interval number
- // +4062 to +2015 in 16 intervals of 128 0x90 + interval number
- // +2014 to +991 in 16 intervals of 64 0xA0 + interval number
- // +990 to +479 in 16 intervals of 32 0xB0 + interval number
- // +478 to +223 in 16 intervals of 16 0xC0 + interval number
- // +222 to +95 in 16 intervals of 8 0xD0 + interval number
- // +94 to +31 in 16 intervals of 4 0xE0 + interval number
- // +30 to +1 in 15 intervals of 2 0xF0 + interval number
- // 0 0xFF
-
- // -1 0x7F
- // -31 to -2 in 15 intervals of 2 0x70 + interval number
- // -95 to -32 in 16 intervals of 4 0x60 + interval number
- // -223 to -96 in 16 intervals of 8 0x50 + interval number
- // -479 to -224 in 16 intervals of 16 0x40 + interval number
- // -991 to -480 in 16 intervals of 32 0x30 + interval number
- // -2015 to -992 in 16 intervals of 64 0x20 + interval number
- // -4063 to -2016 in 16 intervals of 128 0x10 + interval number
- // -8159 to -4064 in 16 intervals of 256 0x00 + interval number
- // -8192 to -8160 0x00
-
- // set scale factors
- if (max <= 0) max = MAX_ULAW;
-
- int coef = MAX_ULAW * (1 << SCALE_BITS) / max;
-
- for (int i = 0; i < length; i++) {
- int pcm = (0xff & pcmBuf[pcmOffset++]) + (pcmBuf[pcmOffset++] << 8);
- pcm = (pcm * coef) >> SCALE_BITS;
-
- int ulaw;
- if (pcm >= 0) {
- ulaw = pcm <= 0 ? 0xff :
- pcm <= 30 ? 0xf0 + (( 30 - pcm) >> 1) :
- pcm <= 94 ? 0xe0 + (( 94 - pcm) >> 2) :
- pcm <= 222 ? 0xd0 + (( 222 - pcm) >> 3) :
- pcm <= 478 ? 0xc0 + (( 478 - pcm) >> 4) :
- pcm <= 990 ? 0xb0 + (( 990 - pcm) >> 5) :
- pcm <= 2014 ? 0xa0 + ((2014 - pcm) >> 6) :
- pcm <= 4062 ? 0x90 + ((4062 - pcm) >> 7) :
- pcm <= 8158 ? 0x80 + ((8158 - pcm) >> 8) :
- 0x80;
- } else {
- ulaw = -1 <= pcm ? 0x7f :
- -31 <= pcm ? 0x70 + ((pcm - -31) >> 1) :
- -95 <= pcm ? 0x60 + ((pcm - -95) >> 2) :
- -223 <= pcm ? 0x50 + ((pcm - -223) >> 3) :
- -479 <= pcm ? 0x40 + ((pcm - -479) >> 4) :
- -991 <= pcm ? 0x30 + ((pcm - -991) >> 5) :
- -2015 <= pcm ? 0x20 + ((pcm - -2015) >> 6) :
- -4063 <= pcm ? 0x10 + ((pcm - -4063) >> 7) :
- -8159 <= pcm ? 0x00 + ((pcm - -8159) >> 8) :
- 0x00;
- }
- ulawBuf[ulawOffset++] = (byte)ulaw;
- }
- }
-
- /**
- * Compute the maximum of the absolute value of the pcm samples.
- * The return value can be used to set ulaw encoder scaling.
- * @param pcmBuf array containing 16 bit pcm data.
- * @param offset offset of start of 16 bit pcm data.
- * @param length number of pcm samples (not number of input bytes)
- * @return maximum abs of pcm data values
- */
- public static int maxAbsPcm(byte[] pcmBuf, int offset, int length) {
- int max = 0;
- for (int i = 0; i < length; i++) {
- int pcm = (0xff & pcmBuf[offset++]) + (pcmBuf[offset++] << 8);
- if (pcm < 0) pcm = -pcm;
- if (pcm > max) max = pcm;
- }
- return max;
- }
-
- /**
- * Create an InputStream which takes 16 bit pcm data and produces ulaw data.
- * @param in InputStream containing 16 bit pcm data.
- * @param max pcm value corresponding to maximum ulaw value.
- */
- public UlawEncoderInputStream(InputStream in, int max) {
- mIn = in;
- mMax = max;
- }
-
- @Override
- public int read(byte[] buf, int offset, int length) throws IOException {
- if (mIn == null) throw new IllegalStateException("not open");
-
- // return at least one byte, but try to fill 'length'
- while (mBufCount < 2) {
- int n = mIn.read(mBuf, mBufCount, Math.min(length * 2, mBuf.length - mBufCount));
- if (n == -1) return -1;
- mBufCount += n;
- }
-
- // compand data
- int n = Math.min(mBufCount / 2, length);
- encode(mBuf, 0, buf, offset, n, mMax);
-
- // move data to bottom of mBuf
- mBufCount -= n * 2;
- for (int i = 0; i < mBufCount; i++) mBuf[i] = mBuf[i + n * 2];
-
- return n;
- }
-
- @Override
- public int read(byte[] buf) throws IOException {
- return read(buf, 0, buf.length);
- }
-
- @Override
- public int read() throws IOException {
- int n = read(mOneByte, 0, 1);
- if (n == -1) return -1;
- return 0xff & (int)mOneByte[0];
- }
-
- @Override
- public void close() throws IOException {
- if (mIn != null) {
- InputStream in = mIn;
- mIn = null;
- in.close();
- }
- }
-
- @Override
- public int available() throws IOException {
- return (mIn.available() + mBufCount) / 2;
- }
-}
diff --git a/core/java/android/speech/srec/WaveHeader.java b/core/java/android/speech/srec/WaveHeader.java
deleted file mode 100644
index 4c3b172..0000000
--- a/core/java/android/speech/srec/WaveHeader.java
+++ /dev/null
@@ -1,276 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.speech.srec;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-
-/**
- * This class represents the header of a WAVE format audio file, which usually
- * have a .wav suffix. The following integer valued fields are contained:
- * <ul>
- * <li> format - usually PCM, ALAW or ULAW.
- * <li> numChannels - 1 for mono, 2 for stereo.
- * <li> sampleRate - usually 8000, 11025, 16000, 22050, or 44100 hz.
- * <li> bitsPerSample - usually 16 for PCM, 8 for ALAW, or 8 for ULAW.
- * <li> numBytes - size of audio data after this header, in bytes.
- * </ul>
- *
- * Not yet ready to be supported, so
- * @hide
- */
-public class WaveHeader {
-
- // follows WAVE format in http://ccrma.stanford.edu/courses/422/projects/WaveFormat
-
- private static final String TAG = "WaveHeader";
-
- private static final int HEADER_LENGTH = 44;
-
- /** Indicates PCM format. */
- public static final short FORMAT_PCM = 1;
- /** Indicates ALAW format. */
- public static final short FORMAT_ALAW = 6;
- /** Indicates ULAW format. */
- public static final short FORMAT_ULAW = 7;
-
- private short mFormat;
- private short mNumChannels;
- private int mSampleRate;
- private short mBitsPerSample;
- private int mNumBytes;
-
- /**
- * Construct a WaveHeader, with all fields defaulting to zero.
- */
- public WaveHeader() {
- }
-
- /**
- * Construct a WaveHeader, with fields initialized.
- * @param format format of audio data,
- * one of {@link #FORMAT_PCM}, {@link #FORMAT_ULAW}, or {@link #FORMAT_ALAW}.
- * @param numChannels 1 for mono, 2 for stereo.
- * @param sampleRate typically 8000, 11025, 16000, 22050, or 44100 hz.
- * @param bitsPerSample usually 16 for PCM, 8 for ULAW or 8 for ALAW.
- * @param numBytes size of audio data after this header, in bytes.
- */
- public WaveHeader(short format, short numChannels, int sampleRate, short bitsPerSample, int numBytes) {
- mFormat = format;
- mSampleRate = sampleRate;
- mNumChannels = numChannels;
- mBitsPerSample = bitsPerSample;
- mNumBytes = numBytes;
- }
-
- /**
- * Get the format field.
- * @return format field,
- * one of {@link #FORMAT_PCM}, {@link #FORMAT_ULAW}, or {@link #FORMAT_ALAW}.
- */
- public short getFormat() {
- return mFormat;
- }
-
- /**
- * Set the format field.
- * @param format
- * one of {@link #FORMAT_PCM}, {@link #FORMAT_ULAW}, or {@link #FORMAT_ALAW}.
- * @return reference to this WaveHeader instance.
- */
- public WaveHeader setFormat(short format) {
- mFormat = format;
- return this;
- }
-
- /**
- * Get the number of channels.
- * @return number of channels, 1 for mono, 2 for stereo.
- */
- public short getNumChannels() {
- return mNumChannels;
- }
-
- /**
- * Set the number of channels.
- * @param numChannels 1 for mono, 2 for stereo.
- * @return reference to this WaveHeader instance.
- */
- public WaveHeader setNumChannels(short numChannels) {
- mNumChannels = numChannels;
- return this;
- }
-
- /**
- * Get the sample rate.
- * @return sample rate, typically 8000, 11025, 16000, 22050, or 44100 hz.
- */
- public int getSampleRate() {
- return mSampleRate;
- }
-
- /**
- * Set the sample rate.
- * @param sampleRate sample rate, typically 8000, 11025, 16000, 22050, or 44100 hz.
- * @return reference to this WaveHeader instance.
- */
- public WaveHeader setSampleRate(int sampleRate) {
- mSampleRate = sampleRate;
- return this;
- }
-
- /**
- * Get the number of bits per sample.
- * @return number of bits per sample,
- * usually 16 for PCM, 8 for ULAW or 8 for ALAW.
- */
- public short getBitsPerSample() {
- return mBitsPerSample;
- }
-
- /**
- * Set the number of bits per sample.
- * @param bitsPerSample number of bits per sample,
- * usually 16 for PCM, 8 for ULAW or 8 for ALAW.
- * @return reference to this WaveHeader instance.
- */
- public WaveHeader setBitsPerSample(short bitsPerSample) {
- mBitsPerSample = bitsPerSample;
- return this;
- }
-
- /**
- * Get the size of audio data after this header, in bytes.
- * @return size of audio data after this header, in bytes.
- */
- public int getNumBytes() {
- return mNumBytes;
- }
-
- /**
- * Set the size of audio data after this header, in bytes.
- * @param numBytes size of audio data after this header, in bytes.
- * @return reference to this WaveHeader instance.
- */
- public WaveHeader setNumBytes(int numBytes) {
- mNumBytes = numBytes;
- return this;
- }
-
- /**
- * Read and initialize a WaveHeader.
- * @param in {@link java.io.InputStream} to read from.
- * @return number of bytes consumed.
- * @throws IOException
- */
- public int read(InputStream in) throws IOException {
- /* RIFF header */
- readId(in, "RIFF");
- int numBytes = readInt(in) - 36;
- readId(in, "WAVE");
-
- /* fmt chunk */
- readId(in, "fmt ");
- if (16 != readInt(in)) throw new IOException("fmt chunk length not 16");
- mFormat = readShort(in);
- mNumChannels = readShort(in);
- mSampleRate = readInt(in);
- int byteRate = readInt(in);
- short blockAlign = readShort(in);
- mBitsPerSample = readShort(in);
- if (byteRate != mNumChannels * mSampleRate * mBitsPerSample / 8) {
- throw new IOException("fmt.ByteRate field inconsistent");
- }
- if (blockAlign != mNumChannels * mBitsPerSample / 8) {
- throw new IOException("fmt.BlockAlign field inconsistent");
- }
-
- /* data chunk */
- readId(in, "data");
- mNumBytes = readInt(in);
-
- return HEADER_LENGTH;
- }
-
- private static void readId(InputStream in, String id) throws IOException {
- for (int i = 0; i < id.length(); i++) {
- if (id.charAt(i) != in.read()) throw new IOException( id + " tag not present");
- }
- }
-
- private static int readInt(InputStream in) throws IOException {
- return in.read() | (in.read() << 8) | (in.read() << 16) | (in.read() << 24);
- }
-
- private static short readShort(InputStream in) throws IOException {
- return (short)(in.read() | (in.read() << 8));
- }
-
- /**
- * Write a WAVE file header.
- * @param out {@link java.io.OutputStream} to receive the header.
- * @return number of bytes written.
- * @throws IOException
- */
- public int write(OutputStream out) throws IOException {
- /* RIFF header */
- writeId(out, "RIFF");
- writeInt(out, 36 + mNumBytes);
- writeId(out, "WAVE");
-
- /* fmt chunk */
- writeId(out, "fmt ");
- writeInt(out, 16);
- writeShort(out, mFormat);
- writeShort(out, mNumChannels);
- writeInt(out, mSampleRate);
- writeInt(out, mNumChannels * mSampleRate * mBitsPerSample / 8);
- writeShort(out, (short)(mNumChannels * mBitsPerSample / 8));
- writeShort(out, mBitsPerSample);
-
- /* data chunk */
- writeId(out, "data");
- writeInt(out, mNumBytes);
-
- return HEADER_LENGTH;
- }
-
- private static void writeId(OutputStream out, String id) throws IOException {
- for (int i = 0; i < id.length(); i++) out.write(id.charAt(i));
- }
-
- private static void writeInt(OutputStream out, int val) throws IOException {
- out.write(val >> 0);
- out.write(val >> 8);
- out.write(val >> 16);
- out.write(val >> 24);
- }
-
- private static void writeShort(OutputStream out, short val) throws IOException {
- out.write(val >> 0);
- out.write(val >> 8);
- }
-
- @Override
- public String toString() {
- return String.format(
- "WaveHeader format=%d numChannels=%d sampleRate=%d bitsPerSample=%d numBytes=%d",
- mFormat, mNumChannels, mSampleRate, mBitsPerSample, mNumBytes);
- }
-
-}
diff --git a/core/java/android/speech/srec/package.html b/core/java/android/speech/srec/package.html
deleted file mode 100644
index 9a99df8..0000000
--- a/core/java/android/speech/srec/package.html
+++ /dev/null
@@ -1,6 +0,0 @@
-<HTML>
-<BODY>
-Simple, synchronous SREC speech recognition API.
-@hide
-</BODY>
-</HTML>
diff --git a/core/java/android/text/format/DateUtils.java b/core/java/android/text/format/DateUtils.java
index ac98e8a..14ebec7 100644
--- a/core/java/android/text/format/DateUtils.java
+++ b/core/java/android/text/format/DateUtils.java
@@ -258,7 +258,7 @@
* Returns a string describing 'time' as a time relative to 'now'.
* <p>
* Time spans in the past are formatted like "42 minutes ago".
- * Time spans in the future are formatted like "in 42 minutes".
+ * Time spans in the future are formatted like "In 42 minutes".
*
* @param time the time to describe, in milliseconds
* @param now the current time in milliseconds
@@ -275,7 +275,7 @@
* Returns a string describing 'time' as a time relative to 'now'.
* <p>
* Time spans in the past are formatted like "42 minutes ago". Time spans in
- * the future are formatted like "in 42 minutes".
+ * the future are formatted like "In 42 minutes".
* <p>
* Can use {@link #FORMAT_ABBREV_RELATIVE} flag to use abbreviated relative
* times, like "42 mins ago".
diff --git a/core/java/android/util/Log.java b/core/java/android/util/Log.java
index 121485a..fe41932 100644
--- a/core/java/android/util/Log.java
+++ b/core/java/android/util/Log.java
@@ -289,7 +289,10 @@
static int wtf(int logId, String tag, String msg, Throwable tr, boolean localStack,
boolean system) {
TerribleFailure what = new TerribleFailure(msg, tr);
- int bytes = println_native(logId, ASSERT, tag, msg + '\n'
+ // Only mark this as ERROR, do not use ASSERT since that should be
+ // reserved for cases where the system is guaranteed to abort.
+ // The onTerribleFailure call does not always cause a crash.
+ int bytes = println_native(logId, ERROR, tag, msg + '\n'
+ getStackTraceString(localStack ? what : tr));
sWtfHandler.onTerribleFailure(tag, what, system);
return bytes;
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index 3c05872..9176d9e 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -17765,7 +17765,7 @@
/**
* Returns the suggested minimum width that the view should use. This
- * returns the maximum of the view's minimum width)
+ * returns the maximum of the view's minimum width
* and the background's minimum width
* ({@link android.graphics.drawable.Drawable#getMinimumWidth()}).
* <p>
diff --git a/core/java/android/view/ViewDebug.java b/core/java/android/view/ViewDebug.java
index a237afd..27304f5 100644
--- a/core/java/android/view/ViewDebug.java
+++ b/core/java/android/view/ViewDebug.java
@@ -1040,14 +1040,10 @@
return methods;
}
- final ArrayList<Method> declaredMethods = new ArrayList();
- klass.getDeclaredMethodsUnchecked(false, declaredMethods);
+ methods = klass.getDeclaredMethodsUnchecked(false);
final ArrayList<Method> foundMethods = new ArrayList<Method>();
- final int count = declaredMethods.size();
- for (int i = 0; i < count; i++) {
- final Method method = declaredMethods.get(i);
-
+ for (final Method method : methods) {
// Ensure the method return and parameter types can be resolved.
try {
method.getReturnType();
diff --git a/core/java/android/view/accessibility/AccessibilityEvent.java b/core/java/android/view/accessibility/AccessibilityEvent.java
index 417e22c..dd272e1 100644
--- a/core/java/android/view/accessibility/AccessibilityEvent.java
+++ b/core/java/android/view/accessibility/AccessibilityEvent.java
@@ -372,7 +372,6 @@
* <li>{@link #getClassName()} - The class name of the source.</li>
* <li>{@link #getPackageName()} - The package name of the source.</li>
* <li>{@link #getEventTime()} - The event time.</li>
- * <li>{@link #getText()} - The text of the source's sub-tree.</li>
* <li>{@link #getParcelableData()} - The posted {@link android.app.Notification}.</li>
* <li>{@link #getText()} - Text for providing more context.</li>
* </ul>
diff --git a/core/java/android/webkit/WebViewClient.java b/core/java/android/webkit/WebViewClient.java
index d52dd60..0a6bba8 100644
--- a/core/java/android/webkit/WebViewClient.java
+++ b/core/java/android/webkit/WebViewClient.java
@@ -338,7 +338,7 @@
* Notify the host application that the scale applied to the WebView has
* changed.
*
- * @param view he WebView that is initiating the callback.
+ * @param view The WebView that is initiating the callback.
* @param oldScale The old scale factor
* @param newScale The new scale factor
*/
diff --git a/core/java/android/widget/ActivityChooserModel.java b/core/java/android/widget/ActivityChooserModel.java
index 51174c3..75c857c 100644
--- a/core/java/android/widget/ActivityChooserModel.java
+++ b/core/java/android/widget/ActivityChooserModel.java
@@ -40,6 +40,7 @@
import java.io.FileOutputStream;
import java.io.IOException;
import java.math.BigDecimal;
+import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
@@ -991,7 +992,7 @@
}
try {
XmlPullParser parser = Xml.newPullParser();
- parser.setInput(fis, null);
+ parser.setInput(fis, StandardCharsets.UTF_8.name());
int type = XmlPullParser.START_DOCUMENT;
while (type != XmlPullParser.END_DOCUMENT && type != XmlPullParser.START_TAG) {
@@ -1074,7 +1075,7 @@
try {
serializer.setOutput(fos, null);
- serializer.startDocument("UTF-8", true);
+ serializer.startDocument(StandardCharsets.UTF_8.name(), true);
serializer.startTag(null, TAG_HISTORICAL_RECORDS);
final int recordCount = historicalRecords.size();
diff --git a/core/java/android/widget/Adapter.java b/core/java/android/widget/Adapter.java
index 88b54bf..518718f 100644
--- a/core/java/android/widget/Adapter.java
+++ b/core/java/android/widget/Adapter.java
@@ -130,8 +130,7 @@
* type of View for all items, this method should return 1.
* </p>
* <p>
- * This method will only be called when when the adapter is set on the
- * the {@link AdapterView}.
+ * This method will only be called when the adapter is set on the {@link AdapterView}.
* </p>
*
* @return The number of types of Views that will be created by this adapter
@@ -148,4 +147,3 @@
*/
boolean isEmpty();
}
-
diff --git a/core/java/android/widget/Editor.java b/core/java/android/widget/Editor.java
index 2aaad7a..47fd957 100644
--- a/core/java/android/widget/Editor.java
+++ b/core/java/android/widget/Editor.java
@@ -256,6 +256,7 @@
}
getPositionListener().addSubscriber(mCursorAnchorInfoNotifier, true);
+ resumeBlink();
}
void onDetachedFromWindow() {
@@ -265,9 +266,7 @@
hideError();
}
- if (mBlink != null) {
- mBlink.removeCallbacks(mBlink);
- }
+ suspendBlink();
if (mInsertionPointCursorController != null) {
mInsertionPointCursorController.onDetached();
diff --git a/core/java/android/widget/RemoteViewsAdapter.java b/core/java/android/widget/RemoteViewsAdapter.java
index 5eaf20c..ab34064 100644
--- a/core/java/android/widget/RemoteViewsAdapter.java
+++ b/core/java/android/widget/RemoteViewsAdapter.java
@@ -620,7 +620,15 @@
// remove based on both its position as well as it's current memory usage, as well
// as whether it was directly requested vs. whether it was preloaded by our caching
// mechanism.
- mIndexRemoteViews.remove(getFarthestPositionFrom(pruneFromPosition, visibleWindow));
+ int trimIndex = getFarthestPositionFrom(pruneFromPosition, visibleWindow);
+
+ // Need to check that this is a valid index, to cover the case where you have only
+ // a single view in the cache, but it's larger than the max memory limit
+ if (trimIndex < 0) {
+ break;
+ }
+
+ mIndexRemoteViews.remove(trimIndex);
}
// Update the metadata cache
diff --git a/core/java/com/android/internal/app/ProcessStats.java b/core/java/com/android/internal/app/ProcessStats.java
index 70fb510..7999014 100644
--- a/core/java/com/android/internal/app/ProcessStats.java
+++ b/core/java/com/android/internal/app/ProcessStats.java
@@ -3399,10 +3399,11 @@
+ pkgList.keyAt(index) + "/" + proc.mUid
+ " for multi-proc " + proc.mName + " version " + proc.mVersion);
}
+ String savedName = proc.mName;
proc = pkg.mProcesses.get(proc.mName);
if (proc == null) {
throw new IllegalStateException("Didn't create per-package process "
- + proc.mName + " in pkg " + pkg.mPackageName + "/" + pkg.mUid);
+ + savedName + " in pkg " + pkg.mPackageName + "/" + pkg.mUid);
}
holder.state = proc;
}
diff --git a/core/java/com/android/internal/app/ShutdownActivity.java b/core/java/com/android/internal/app/ShutdownActivity.java
index 97521cf..745d28f 100644
--- a/core/java/com/android/internal/app/ShutdownActivity.java
+++ b/core/java/com/android/internal/app/ShutdownActivity.java
@@ -21,6 +21,7 @@
import android.content.Intent;
import android.os.Bundle;
import android.os.IPowerManager;
+import android.os.PowerManager;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.util.Slog;
@@ -30,6 +31,7 @@
private static final String TAG = "ShutdownActivity";
private boolean mReboot;
private boolean mConfirm;
+ private boolean mUserRequested;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -38,6 +40,7 @@
Intent intent = getIntent();
mReboot = Intent.ACTION_REBOOT.equals(intent.getAction());
mConfirm = intent.getBooleanExtra(Intent.EXTRA_KEY_CONFIRM, false);
+ mUserRequested = intent.getBooleanExtra(Intent.EXTRA_USER_REQUESTED_SHUTDOWN, false);
Slog.i(TAG, "onCreate(): confirm=" + mConfirm);
Thread thr = new Thread("ShutdownActivity") {
@@ -49,7 +52,9 @@
if (mReboot) {
pm.reboot(mConfirm, null, false);
} else {
- pm.shutdown(mConfirm, false);
+ pm.shutdown(mConfirm,
+ mUserRequested ? PowerManager.SHUTDOWN_USER_REQUESTED : null,
+ false);
}
} catch (RemoteException e) {
}
diff --git a/core/java/com/android/internal/os/BinderInternal.java b/core/java/com/android/internal/os/BinderInternal.java
index 240d9df..d77b998 100644
--- a/core/java/com/android/internal/os/BinderInternal.java
+++ b/core/java/com/android/internal/os/BinderInternal.java
@@ -20,6 +20,8 @@
import android.os.SystemClock;
import android.util.EventLog;
+import dalvik.system.VMRuntime;
+
import java.lang.ref.WeakReference;
import java.util.ArrayList;
@@ -96,7 +98,7 @@
public static void forceGc(String reason) {
EventLog.writeEvent(2741, reason);
- Runtime.getRuntime().gc();
+ VMRuntime.getRuntime().requestConcurrentGC();
}
static void forceBinderGc() {
diff --git a/core/java/com/android/internal/os/PowerProfile.java b/core/java/com/android/internal/os/PowerProfile.java
index b3bafa1..1038acf4 100644
--- a/core/java/com/android/internal/os/PowerProfile.java
+++ b/core/java/com/android/internal/os/PowerProfile.java
@@ -256,7 +256,7 @@
final Double[] values = (Double[]) data;
if (values.length > level && level >= 0) {
return values[level];
- } else if (level < 0) {
+ } else if (level < 0 || values.length == 0) {
return 0;
} else {
return values[values.length - 1];
diff --git a/core/java/com/android/internal/os/Zygote.java b/core/java/com/android/internal/os/Zygote.java
index 8674a21..822117c 100644
--- a/core/java/com/android/internal/os/Zygote.java
+++ b/core/java/com/android/internal/os/Zygote.java
@@ -40,6 +40,8 @@
public static final int DEBUG_ENABLE_JNI_LOGGING = 1 << 4;
/** enable the JIT compiler */
public static final int DEBUG_ENABLE_JIT = 1 << 5;
+ /** Force generation of native debugging information. */
+ public static final int DEBUG_GENERATE_DEBUG_INFO = 1 << 6;
/** No external storage should be mounted. */
diff --git a/core/java/com/android/internal/os/ZygoteConnection.java b/core/java/com/android/internal/os/ZygoteConnection.java
index 0dc242d..8a0e1be 100644
--- a/core/java/com/android/internal/os/ZygoteConnection.java
+++ b/core/java/com/android/internal/os/ZygoteConnection.java
@@ -322,7 +322,7 @@
/**
* From --enable-debugger, --enable-checkjni, --enable-assert,
- * --enable-safemode, --enable-jit, and --enable-jni-logging.
+ * --enable-safemode, --enable-jit, --generate-debug-info and --enable-jni-logging.
*/
int debugFlags;
@@ -434,6 +434,8 @@
debugFlags |= Zygote.DEBUG_ENABLE_CHECKJNI;
} else if (arg.equals("--enable-jit")) {
debugFlags |= Zygote.DEBUG_ENABLE_JIT;
+ } else if (arg.equals("--generate-debug-info")) {
+ debugFlags |= Zygote.DEBUG_GENERATE_DEBUG_INFO;
} else if (arg.equals("--enable-jni-logging")) {
debugFlags |= Zygote.DEBUG_ENABLE_JNI_LOGGING;
} else if (arg.equals("--enable-assert")) {
diff --git a/core/java/com/android/internal/os/ZygoteInit.java b/core/java/com/android/internal/os/ZygoteInit.java
index 50ddbd1..d44959b 100644
--- a/core/java/com/android/internal/os/ZygoteInit.java
+++ b/core/java/com/android/internal/os/ZygoteInit.java
@@ -267,7 +267,12 @@
if (false) {
Log.v(TAG, "Preloading " + line + "...");
}
- Class.forName(line);
+ // Load and explicitly initialize the given class. Use
+ // Class.forName(String, boolean, ClassLoader) to avoid repeated stack lookups
+ // (to derive the caller's class-loader). Use true to force initialization, and
+ // null for the boot classpath class-loader (could as well cache the
+ // class-loader of this class in a variable).
+ Class.forName(line, true, null);
count++;
} catch (ClassNotFoundException e) {
Log.w(TAG, "Class not found for preloading: " + line);
diff --git a/core/java/com/android/internal/util/WithFramework.java b/core/java/com/android/internal/util/WithFramework.java
deleted file mode 100644
index 7d8596f..0000000
--- a/core/java/com/android/internal/util/WithFramework.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.internal.util;
-
-import java.lang.reflect.Method;
-
-/**
- * Binds native framework methods and then invokes a main class with the
- * remaining arguments.
- */
-class WithFramework {
-
- /**
- * Invokes main(String[]) method on class in args[0] with args[1..n].
- */
- public static void main(String[] args) throws Exception {
- if (args.length == 0) {
- printUsage();
- return;
- }
-
- Class<?> mainClass = Class.forName(args[0]);
-
- System.loadLibrary("android_runtime");
- if (registerNatives() < 0) {
- throw new RuntimeException("Error registering natives.");
- }
-
- String[] newArgs = new String[args.length - 1];
- System.arraycopy(args, 1, newArgs, 0, newArgs.length);
- Method mainMethod = mainClass.getMethod("main", String[].class);
- mainMethod.invoke(null, new Object[] { newArgs });
- }
-
- private static void printUsage() {
- System.err.println("Usage: dalvikvm " + WithFramework.class.getName()
- + " [main class] [args]");
- }
-
- /**
- * Registers native functions. See AndroidRuntime.cpp.
- */
- static native int registerNatives();
-}
diff --git a/core/java/com/android/internal/util/XmlUtils.java b/core/java/com/android/internal/util/XmlUtils.java
index 2bd607c..42caf86 100644
--- a/core/java/com/android/internal/util/XmlUtils.java
+++ b/core/java/com/android/internal/util/XmlUtils.java
@@ -32,6 +32,7 @@
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ProtocolException;
+import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
@@ -181,7 +182,7 @@
public static final void writeMapXml(Map val, OutputStream out)
throws XmlPullParserException, java.io.IOException {
XmlSerializer serializer = new FastXmlSerializer();
- serializer.setOutput(out, "utf-8");
+ serializer.setOutput(out, StandardCharsets.UTF_8.name());
serializer.startDocument(null, true);
serializer.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true);
writeMapXml(val, null, serializer);
@@ -204,7 +205,7 @@
throws XmlPullParserException, java.io.IOException
{
XmlSerializer serializer = Xml.newSerializer();
- serializer.setOutput(out, "utf-8");
+ serializer.setOutput(out, StandardCharsets.UTF_8.name());
serializer.startDocument(null, true);
serializer.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true);
writeListXml(val, null, serializer);
@@ -731,7 +732,7 @@
throws XmlPullParserException, java.io.IOException
{
XmlPullParser parser = Xml.newPullParser();
- parser.setInput(in, null);
+ parser.setInput(in, StandardCharsets.UTF_8.name());
return (HashMap<String, ?>) readValueXml(parser, new String[1]);
}
@@ -752,7 +753,7 @@
throws XmlPullParserException, java.io.IOException
{
XmlPullParser parser = Xml.newPullParser();
- parser.setInput(in, null);
+ parser.setInput(in, StandardCharsets.UTF_8.name());
return (ArrayList)readValueXml(parser, new String[1]);
}
diff --git a/core/java/com/android/server/BootReceiver.java b/core/java/com/android/server/BootReceiver.java
index 155f5d3..92d5aea 100644
--- a/core/java/com/android/server/BootReceiver.java
+++ b/core/java/com/android/server/BootReceiver.java
@@ -144,10 +144,6 @@
-LOG_SIZE, "SYSTEM_RECOVERY_LOG");
addFileToDropBox(db, prefs, headers, "/cache/recovery/last_kmsg",
-LOG_SIZE, "SYSTEM_RECOVERY_KMSG");
- addFileToDropBox(db, prefs, headers, "/data/dontpanic/apanic_console",
- -LOG_SIZE, "APANIC_CONSOLE");
- addFileToDropBox(db, prefs, headers, "/data/dontpanic/apanic_threads",
- -LOG_SIZE, "APANIC_THREADS");
addAuditErrorsToDropBox(db, prefs, headers, -LOG_SIZE, "SYSTEM_AUDIT");
addFsckErrorsToDropBox(db, prefs, headers, -LOG_SIZE, "SYSTEM_FSCK");
} else {
diff --git a/core/jni/AndroidRuntime.cpp b/core/jni/AndroidRuntime.cpp
index 0bfc0c9..7e7b74a 100644
--- a/core/jni/AndroidRuntime.cpp
+++ b/core/jni/AndroidRuntime.cpp
@@ -587,6 +587,9 @@
char lockProfThresholdBuf[sizeof("-Xlockprofthreshold:")-1 + PROPERTY_VALUE_MAX];
char nativeBridgeLibrary[sizeof("-XX:NativeBridge=") + PROPERTY_VALUE_MAX];
char cpuAbiListBuf[sizeof("--cpu-abilist=") + PROPERTY_VALUE_MAX];
+ char methodTraceFileBuf[sizeof("-Xmethod-trace-file:") + PROPERTY_VALUE_MAX];
+ char methodTraceFileSizeBuf[sizeof("-Xmethod-trace-file-size:") + PROPERTY_VALUE_MAX];
+ char fingerprintBuf[sizeof("-Xfingerprint:") + PROPERTY_VALUE_MAX];
bool checkJni = false;
property_get("dalvik.vm.checkjni", propBuf, "");
@@ -847,6 +850,24 @@
profileMaxStackDepth,
"-Xprofile-max-stack-depth:");
+ /*
+ * Tracing options.
+ */
+ property_get("dalvik.vm.method-trace", propBuf, "false");
+ if (strcmp(propBuf, "true") == 0) {
+ addOption("-Xmethod-trace");
+ parseRuntimeOption("dalvik.vm.method-trace-file",
+ methodTraceFileBuf,
+ "-Xmethod-trace-file:");
+ parseRuntimeOption("dalvik.vm.method-trace-file-siz",
+ methodTraceFileSizeBuf,
+ "-Xmethod-trace-file-size:");
+ property_get("dalvik.vm.method-trace-stream", propBuf, "false");
+ if (strcmp(propBuf, "true") == 0) {
+ addOption("-Xmethod-trace-stream");
+ }
+ }
+
// Native bridge library. "0" means that native bridge is disabled.
property_get("ro.dalvik.vm.native.bridge", propBuf, "");
if (propBuf[0] == '\0') {
@@ -873,6 +894,25 @@
snprintf(cpuAbiListBuf, sizeof(cpuAbiListBuf), "--cpu-abilist=%s", propBuf);
addOption(cpuAbiListBuf);
+ /*
+ * When running with debug.generate-debug-info, add --generate-debug-info to
+ * the compiler options so that the boot image, if it is compiled on device,
+ * will include native debugging information.
+ */
+ property_get("debug.generate-debug-info", propBuf, "");
+ if (strcmp(propBuf, "true") == 0) {
+ addOption("-Xcompiler-option");
+ addOption("--generate-debug-info");
+ addOption("-Ximage-compiler-option");
+ addOption("--generate-debug-info");
+ }
+
+ /*
+ * Retrieve the build fingerprint and provide it to the runtime. That way, ANR dumps will
+ * contain the fingerprint and can be parsed.
+ */
+ parseRuntimeOption("ro.build.fingerprint", fingerprintBuf, "-Xfingerprint:");
+
initArgs.version = JNI_VERSION_1_4;
initArgs.options = mOptions.editArray();
initArgs.nOptions = mOptions.size();
@@ -1394,20 +1434,10 @@
}
/**
- * Used by WithFramework to register native functions.
+ * Used by surface flinger's DdmConnection to register native methods from
+ * the framework.
*/
-extern "C"
-jint Java_com_android_internal_util_WithFramework_registerNatives(
- JNIEnv* env, jclass clazz) {
+extern "C" jint registerFrameworkNatives(JNIEnv* env) {
return register_jni_procs(gRegJNI, NELEM(gRegJNI), env);
}
-
-/**
- * Used by LoadClass to register native functions.
- */
-extern "C"
-jint Java_LoadClass_registerNatives(JNIEnv* env, jclass clazz) {
- return register_jni_procs(gRegJNI, NELEM(gRegJNI), env);
-}
-
} // namespace android
diff --git a/core/jni/android/opengl/util.cpp b/core/jni/android/opengl/util.cpp
index da30044..11e9dcd 100644
--- a/core/jni/android/opengl/util.cpp
+++ b/core/jni/android/opengl/util.cpp
@@ -153,7 +153,105 @@
jniThrowException(env, "java/lang/IllegalArgumentException", msg);
}
-template<class JArray, class T>
+class ByteArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jbyteArray array, jboolean* is_copy) {
+ return _env->GetByteArrayElements(array, is_copy);
+ }
+};
+class BooleanArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jbooleanArray array, jboolean* is_copy) {
+ return _env->GetBooleanArrayElements(array, is_copy);
+ }
+};
+class CharArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jcharArray array, jboolean* is_copy) {
+ return _env->GetCharArrayElements(array, is_copy);
+ }
+};
+class ShortArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jshortArray array, jboolean* is_copy) {
+ return _env->GetShortArrayElements(array, is_copy);
+ }
+};
+class IntArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jintArray array, jboolean* is_copy) {
+ return _env->GetIntArrayElements(array, is_copy);
+ }
+};
+class LongArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jlongArray array, jboolean* is_copy) {
+ return _env->GetLongArrayElements(array, is_copy);
+ }
+};
+class FloatArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jfloatArray array, jboolean* is_copy) {
+ return _env->GetFloatArrayElements(array, is_copy);
+ }
+};
+class DoubleArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jdoubleArray array, jboolean* is_copy) {
+ return _env->GetDoubleArrayElements(array, is_copy);
+ }
+};
+
+class ByteArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jbyteArray array, jbyte* data, jint mode) {
+ _env->ReleaseByteArrayElements(array, data, mode);
+ }
+};
+class BooleanArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jbooleanArray array, jboolean* data, jint mode) {
+ _env->ReleaseBooleanArrayElements(array, data, mode);
+ }
+};
+class CharArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jcharArray array, jchar* data, jint mode) {
+ _env->ReleaseCharArrayElements(array, data, mode);
+ }
+};
+class ShortArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jshortArray array, jshort* data, jint mode) {
+ _env->ReleaseShortArrayElements(array, data, mode);
+ }
+};
+class IntArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jintArray array, jint* data, jint mode) {
+ _env->ReleaseIntArrayElements(array, data, mode);
+ }
+};
+class LongArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jlongArray array, jlong* data, jint mode) {
+ _env->ReleaseLongArrayElements(array, data, mode);
+ }
+};
+class FloatArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jfloatArray array, jfloat* data, jint mode) {
+ _env->ReleaseFloatArrayElements(array, data, mode);
+ }
+};
+class DoubleArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jdoubleArray array, jdouble* data, jint mode) {
+ _env->ReleaseDoubleArrayElements(array, data, mode);
+ }
+};
+
+template<class JArray, class T, class ArrayGetter, class ArrayReleaser>
class ArrayHelper {
public:
ArrayHelper(JNIEnv* env, JArray ref, jint offset, jint minSize) {
@@ -167,7 +265,7 @@
~ArrayHelper() {
if (mBase) {
- mEnv->ReleasePrimitiveArrayCritical(mRef, mBase, mReleaseParam);
+ ArrayReleaser::Release(mEnv, mRef, mBase, mReleaseParam);
}
}
@@ -198,7 +296,7 @@
// Bind the array.
void bind() {
- mBase = (T*) mEnv->GetPrimitiveArrayCritical(mRef, (jboolean *) 0);
+ mBase = (T*) ArrayGetter::Get(mEnv, mRef, (jboolean *) 0);
mData = mBase + mOffset;
}
@@ -218,10 +316,10 @@
int mReleaseParam;
};
-typedef ArrayHelper<jfloatArray, float> FloatArrayHelper;
-typedef ArrayHelper<jcharArray, unsigned short> UnsignedShortArrayHelper;
-typedef ArrayHelper<jintArray, int> IntArrayHelper;
-typedef ArrayHelper<jbyteArray, unsigned char> ByteArrayHelper;
+typedef ArrayHelper<jfloatArray, float, FloatArrayGetter, FloatArrayReleaser> FloatArrayHelper;
+typedef ArrayHelper<jcharArray, unsigned short, CharArrayGetter, CharArrayReleaser> UnsignedShortArrayHelper;
+typedef ArrayHelper<jintArray, int, IntArrayGetter, IntArrayReleaser> IntArrayHelper;
+typedef ArrayHelper<jbyteArray, unsigned char, ByteArrayGetter, ByteArrayReleaser> ByteArrayHelper;
inline float distance2(float x, float y, float z) {
return x * x + y * y + z * z;
diff --git a/core/jni/android_net_LocalSocketImpl.cpp b/core/jni/android_net_LocalSocketImpl.cpp
index 97abe6b..c137b17 100644
--- a/core/jni/android_net_LocalSocketImpl.cpp
+++ b/core/jni/android_net_LocalSocketImpl.cpp
@@ -112,317 +112,6 @@
}
}
-/* private native void listen_native(int fd, int backlog) throws IOException; */
-static void
-socket_listen (JNIEnv *env, jobject object, jobject fileDescriptor, jint backlog)
-{
- int ret;
- int fd;
-
- fd = jniGetFDFromFileDescriptor(env, fileDescriptor);
-
- if (env->ExceptionCheck()) {
- return;
- }
-
- ret = listen(fd, backlog);
-
- if (ret < 0) {
- jniThrowIOException(env, errno);
- return;
- }
-}
-
-/* private native FileDescriptor
-** accept (FileDescriptor fd, LocalSocketImpl s)
-** throws IOException;
-*/
-static jobject
-socket_accept (JNIEnv *env, jobject object, jobject fileDescriptor, jobject s)
-{
- union {
- struct sockaddr address;
- struct sockaddr_un un_address;
- } sa;
-
- int ret;
- int retFD;
- int fd;
- socklen_t addrlen;
-
- if (s == NULL) {
- jniThrowNullPointerException(env, NULL);
- return NULL;
- }
-
- fd = jniGetFDFromFileDescriptor(env, fileDescriptor);
-
- if (env->ExceptionCheck()) {
- return NULL;
- }
-
- do {
- addrlen = sizeof(sa);
- ret = accept(fd, &(sa.address), &addrlen);
- } while (ret < 0 && errno == EINTR);
-
- if (ret < 0) {
- jniThrowIOException(env, errno);
- return NULL;
- }
-
- retFD = ret;
-
- return jniCreateFileDescriptor(env, retFD);
-}
-
-/* private native void shutdown(FileDescriptor fd, boolean shutdownInput) */
-
-static void
-socket_shutdown (JNIEnv *env, jobject object, jobject fileDescriptor,
- jboolean shutdownInput)
-{
- int ret;
- int fd;
-
- fd = jniGetFDFromFileDescriptor(env, fileDescriptor);
-
- if (env->ExceptionCheck()) {
- return;
- }
-
- ret = shutdown(fd, shutdownInput ? SHUT_RD : SHUT_WR);
-
- if (ret < 0) {
- jniThrowIOException(env, errno);
- return;
- }
-}
-
-static bool
-java_opt_to_real(int optID, int* opt, int* level)
-{
- switch (optID)
- {
- case 4098:
- *opt = SO_RCVBUF;
- *level = SOL_SOCKET;
- return true;
- case 4097:
- *opt = SO_SNDBUF;
- *level = SOL_SOCKET;
- return true;
- case 4102:
- *opt = SO_SNDTIMEO;
- *level = SOL_SOCKET;
- return true;
- case 128:
- *opt = SO_LINGER;
- *level = SOL_SOCKET;
- return true;
- case 1:
- *opt = TCP_NODELAY;
- *level = IPPROTO_TCP;
- return true;
- case 4:
- *opt = SO_REUSEADDR;
- *level = SOL_SOCKET;
- return true;
-
- }
- return false;
-}
-
-static jint
-socket_getOption(JNIEnv *env, jobject object, jobject fileDescriptor, jint optID)
-{
- int ret, value;
- int opt, level;
- int fd;
-
- socklen_t size = sizeof(int);
-
- if (!java_opt_to_real(optID, &opt, &level)) {
- jniThrowIOException(env, -1);
- return 0;
- }
-
- fd = jniGetFDFromFileDescriptor(env, fileDescriptor);
-
- if (env->ExceptionCheck()) {
- return 0;
- }
-
- switch (opt)
- {
- case SO_LINGER:
- {
- struct linger lingr;
- size = sizeof(lingr);
- ret = getsockopt(fd, level, opt, &lingr, &size);
- if (!lingr.l_onoff) {
- value = -1;
- } else {
- value = lingr.l_linger;
- }
- break;
- }
- default:
- ret = getsockopt(fd, level, opt, &value, &size);
- break;
- }
-
-
- if (ret != 0) {
- jniThrowIOException(env, errno);
- return 0;
- }
-
- return value;
-}
-
-static void socket_setOption(
- JNIEnv *env, jobject object, jobject fileDescriptor, jint optID,
- jint boolValue, jint intValue) {
- int ret;
- int optname;
- int level;
- int fd;
-
- if (!java_opt_to_real(optID, &optname, &level)) {
- jniThrowIOException(env, -1);
- return;
- }
-
- fd = jniGetFDFromFileDescriptor(env, fileDescriptor);
-
- if (env->ExceptionCheck()) {
- return;
- }
-
- switch (optname) {
- case SO_LINGER: {
- /*
- * SO_LINGER is special because it needs to use a special
- * "linger" struct as well as use the incoming boolean
- * argument specially.
- */
- struct linger lingr;
- lingr.l_onoff = boolValue ? 1 : 0; // Force it to be 0 or 1.
- lingr.l_linger = intValue;
- ret = setsockopt(fd, level, optname, &lingr, sizeof(lingr));
- break;
- }
- case SO_SNDTIMEO: {
- /*
- * SO_TIMEOUT from the core library gets converted to
- * SO_SNDTIMEO, but the option is supposed to set both
- * send and receive timeouts. Note: The incoming timeout
- * value is in milliseconds.
- */
- struct timeval timeout;
- timeout.tv_sec = intValue / 1000;
- timeout.tv_usec = (intValue % 1000) * 1000;
-
- ret = setsockopt(fd, SOL_SOCKET, SO_RCVTIMEO,
- (void *)&timeout, sizeof(timeout));
-
- if (ret == 0) {
- ret = setsockopt(fd, SOL_SOCKET, SO_SNDTIMEO,
- (void *)&timeout, sizeof(timeout));
- }
-
- break;
- }
- default: {
- /*
- * In all other cases, the translated option level and
- * optname may be used directly for a call to setsockopt().
- */
- ret = setsockopt(fd, level, optname, &intValue, sizeof(intValue));
- break;
- }
- }
-
- if (ret != 0) {
- jniThrowIOException(env, errno);
- return;
- }
-}
-static jint socket_pending (JNIEnv *env, jobject object,
- jobject fileDescriptor)
-{
- int fd;
-
- fd = jniGetFDFromFileDescriptor(env, fileDescriptor);
-
- if (env->ExceptionCheck()) {
- return (jint)-1;
- }
-
- int pending;
- int ret = ioctl(fd, TIOCOUTQ, &pending);
-
- // If this were a non-socket fd, there would be other cases to worry
- // about...
-
- //ALOGD("socket_pending, ioctl ret:%d, pending:%d", ret, pending);
- if (ret < 0) {
- jniThrowIOException(env, errno);
- return (jint) 0;
- }
-
- return (jint)pending;
-}
-static jint socket_available (JNIEnv *env, jobject object,
- jobject fileDescriptor)
-{
- int fd;
-
- fd = jniGetFDFromFileDescriptor(env, fileDescriptor);
-
- if (env->ExceptionCheck()) {
- return (jint)-1;
- }
-
-#if 1
- int avail;
- int ret = ioctl(fd, FIONREAD, &avail);
-
- // If this were a non-socket fd, there would be other cases to worry
- // about...
-
- if (ret < 0) {
- jniThrowIOException(env, errno);
- return (jint) 0;
- }
-
- return (jint)avail;
-#else
-// there appears to be a bionic bug that prevents this version from working.
-
- ssize_t ret;
- struct msghdr msg;
-
- memset(&msg, 0, sizeof(msg));
-
- do {
- ret = recvmsg(fd, &msg, MSG_PEEK | MSG_DONTWAIT | MSG_NOSIGNAL);
- } while (ret < 0 && errno == EINTR);
-
-
- // MSG_PEEK returns 0 on EOF and EWOULDBLOCK on none available
- if (ret < 0 && errno == EWOULDBLOCK) {
- return 0;
- } if (ret < 0) {
- jniThrowIOException(env, errno);
- return -1;
- }
-
- return (jint)ret;
-#endif
-}
-
/**
* Processes ancillary data, handling only
* SCM_RIGHTS. Creates appropriate objects and sets appropriate
@@ -803,72 +492,14 @@
creds.pid, creds.uid, creds.gid);
}
-#if 0
-//TODO change this to return an instance of LocalSocketAddress
-static jobject socket_getSockName(JNIEnv *env,
- jobject object, jobject fileDescriptor)
-{
- int err;
- int fd;
-
- if (fileDescriptor == NULL) {
- jniThrowNullPointerException(env, NULL);
- return NULL;
- }
-
- fd = jniGetFDFromFileDescriptor(env, fileDescriptor);
-
- if (env->ExceptionCheck()) {
- return NULL;
- }
-
- union {
- struct sockaddr address;
- struct sockaddr_un un_address;
- } sa;
-
- memset(&sa, 0, sizeof(sa));
-
- socklen_t namelen = sizeof(sa);
- err = getsockname(fd, &(sa.address), &namelen);
-
- if (err < 0) {
- jniThrowIOException(env, errno);
- return NULL;
- }
-
- if (sa.address.sa_family != AF_UNIX) {
- // We think we're an impl only for AF_UNIX, so this should never happen.
-
- jniThrowIOException(env, EINVAL);
- return NULL;
- }
-
- if (sa.un_address.sun_path[0] == '\0') {
- } else {
- }
-
-
-
-
-}
-#endif
-
/*
* JNI registration.
*/
static JNINativeMethod gMethods[] = {
/* name, signature, funcPtr */
- {"getOption_native", "(Ljava/io/FileDescriptor;I)I", (void*)socket_getOption},
- {"setOption_native", "(Ljava/io/FileDescriptor;III)V", (void*)socket_setOption},
{"connectLocal", "(Ljava/io/FileDescriptor;Ljava/lang/String;I)V",
(void*)socket_connect_local},
{"bindLocal", "(Ljava/io/FileDescriptor;Ljava/lang/String;I)V", (void*)socket_bind_local},
- {"listen_native", "(Ljava/io/FileDescriptor;I)V", (void*)socket_listen},
- {"accept", "(Ljava/io/FileDescriptor;Landroid/net/LocalSocketImpl;)Ljava/io/FileDescriptor;", (void*)socket_accept},
- {"shutdown", "(Ljava/io/FileDescriptor;Z)V", (void*)socket_shutdown},
- {"available_native", "(Ljava/io/FileDescriptor;)I", (void*) socket_available},
- {"pending_native", "(Ljava/io/FileDescriptor;)I", (void*) socket_pending},
{"read_native", "(Ljava/io/FileDescriptor;)I", (void*) socket_read},
{"readba_native", "([BIILjava/io/FileDescriptor;)I", (void*) socket_readba},
{"writeba_native", "([BIILjava/io/FileDescriptor;)V", (void*) socket_writeba},
@@ -876,9 +507,6 @@
{"getPeerCredentials_native",
"(Ljava/io/FileDescriptor;)Landroid/net/Credentials;",
(void*) socket_get_peer_credentials}
- //,{"getSockName_native", "(Ljava/io/FileDescriptor;)Ljava/lang/String;",
- // (void *) socket_getSockName}
-
};
int register_android_net_LocalSocketImpl(JNIEnv *env)
diff --git a/core/jni/android_opengl_EGL14.cpp b/core/jni/android_opengl_EGL14.cpp
index 36f7963..9f5b3bc 100644
--- a/core/jni/android_opengl_EGL14.cpp
+++ b/core/jni/android_opengl_EGL14.cpp
@@ -204,7 +204,7 @@
goto exit;
}
major_base = (EGLint *)
- _env->GetPrimitiveArrayCritical(major_ref, (jboolean *)0);
+ _env->GetIntArrayElements(major_ref, (jboolean *)0);
major = major_base + majorOffset;
if (!minor_ref) {
@@ -227,7 +227,7 @@
goto exit;
}
minor_base = (EGLint *)
- _env->GetPrimitiveArrayCritical(minor_ref, (jboolean *)0);
+ _env->GetIntArrayElements(minor_ref, (jboolean *)0);
minor = minor_base + minorOffset;
_returnValue = eglInitialize(
@@ -238,11 +238,11 @@
exit:
if (minor_base) {
- _env->ReleasePrimitiveArrayCritical(minor_ref, minor_base,
+ _env->ReleaseIntArrayElements(minor_ref, (jint*)minor_base,
_exception ? JNI_ABORT: 0);
}
if (major_base) {
- _env->ReleasePrimitiveArrayCritical(major_ref, major_base,
+ _env->ReleaseIntArrayElements(major_ref, (jint*)major_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -324,7 +324,7 @@
}
_num_configRemaining = _env->GetArrayLength(num_config_ref) - num_configOffset;
num_config_base = (EGLint *)
- _env->GetPrimitiveArrayCritical(num_config_ref, (jboolean *)0);
+ _env->GetIntArrayElements(num_config_ref, (jboolean *)0);
num_config = num_config_base + num_configOffset;
_returnValue = eglGetConfigs(
@@ -336,7 +336,7 @@
exit:
if (num_config_base) {
- _env->ReleasePrimitiveArrayCritical(num_config_ref, num_config_base,
+ _env->ReleaseIntArrayElements(num_config_ref, (jint*)num_config_base,
_exception ? JNI_ABORT: 0);
}
if (configs) {
@@ -385,7 +385,7 @@
}
_attrib_listRemaining = _env->GetArrayLength(attrib_list_ref) - attrib_listOffset;
attrib_list_base = (EGLint *)
- _env->GetPrimitiveArrayCritical(attrib_list_ref, (jboolean *)0);
+ _env->GetIntArrayElements(attrib_list_ref, (jboolean *)0);
attrib_list = attrib_list_base + attrib_listOffset;
attrib_list_sentinel = false;
for (int i = _attrib_listRemaining - 1; i >= 0; i--) {
@@ -442,7 +442,7 @@
goto exit;
}
num_config_base = (EGLint *)
- _env->GetPrimitiveArrayCritical(num_config_ref, (jboolean *)0);
+ _env->GetIntArrayElements(num_config_ref, (jboolean *)0);
num_config = num_config_base + num_configOffset;
_returnValue = eglChooseConfig(
@@ -455,11 +455,11 @@
exit:
if (num_config_base) {
- _env->ReleasePrimitiveArrayCritical(num_config_ref, num_config_base,
+ _env->ReleaseIntArrayElements(num_config_ref, (jint*)num_config_base,
_exception ? JNI_ABORT: 0);
}
if (attrib_list_base) {
- _env->ReleasePrimitiveArrayCritical(attrib_list_ref, attrib_list_base,
+ _env->ReleaseIntArrayElements(attrib_list_ref, (jint*)attrib_list_base,
JNI_ABORT);
}
if (configs) {
@@ -509,7 +509,7 @@
goto exit;
}
value_base = (EGLint *)
- _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0);
+ _env->GetIntArrayElements(value_ref, (jboolean *)0);
value = value_base + offset;
_returnValue = eglGetConfigAttrib(
@@ -521,7 +521,7 @@
exit:
if (value_base) {
- _env->ReleasePrimitiveArrayCritical(value_ref, value_base,
+ _env->ReleaseIntArrayElements(value_ref, (jint*)value_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -573,7 +573,7 @@
_remaining = _env->GetArrayLength(attrib_list_ref) - offset;
attrib_list_base = (EGLint *)
- _env->GetPrimitiveArrayCritical(attrib_list_ref, (jboolean *)0);
+ _env->GetIntArrayElements(attrib_list_ref, (jboolean *)0);
attrib_list = attrib_list_base + offset;
attrib_list_sentinel = 0;
for (int i = _remaining - 1; i >= 0; i--) {
@@ -598,7 +598,7 @@
exit:
if (attrib_list_base) {
- _env->ReleasePrimitiveArrayCritical(attrib_list_ref, attrib_list_base,
+ _env->ReleaseIntArrayElements(attrib_list_ref, attrib_list_base,
JNI_ABORT);
}
if (_exception) {
@@ -655,7 +655,7 @@
_remaining = _env->GetArrayLength(attrib_list_ref) - offset;
attrib_list_base = (EGLint *)
- _env->GetPrimitiveArrayCritical(attrib_list_ref, (jboolean *)0);
+ _env->GetIntArrayElements(attrib_list_ref, (jboolean *)0);
attrib_list = attrib_list_base + offset;
attrib_list_sentinel = 0;
for (int i = _remaining - 1; i >= 0; i--) {
@@ -680,7 +680,7 @@
exit:
if (attrib_list_base) {
- _env->ReleasePrimitiveArrayCritical(attrib_list_ref, attrib_list_base,
+ _env->ReleaseIntArrayElements(attrib_list_ref, attrib_list_base,
JNI_ABORT);
}
if (_exception) {
@@ -717,7 +717,7 @@
}
_remaining = _env->GetArrayLength(attrib_list_ref) - offset;
attrib_list_base = (EGLint *)
- _env->GetPrimitiveArrayCritical(attrib_list_ref, (jboolean *)0);
+ _env->GetIntArrayElements(attrib_list_ref, (jboolean *)0);
attrib_list = attrib_list_base + offset;
attrib_list_sentinel = false;
for (int i = _remaining - 1; i >= 0; i--) {
@@ -741,7 +741,7 @@
exit:
if (attrib_list_base) {
- _env->ReleasePrimitiveArrayCritical(attrib_list_ref, attrib_list_base,
+ _env->ReleaseIntArrayElements(attrib_list_ref, (jint*)attrib_list_base,
JNI_ABORT);
}
if (_exception) {
@@ -808,7 +808,7 @@
goto exit;
}
value_base = (EGLint *)
- _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0);
+ _env->GetIntArrayElements(value_ref, (jboolean *)0);
value = value_base + offset;
_returnValue = eglQuerySurface(
@@ -820,7 +820,7 @@
exit:
if (value_base) {
- _env->ReleasePrimitiveArrayCritical(value_ref, value_base,
+ _env->ReleaseIntArrayElements(value_ref, (jint*)value_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -896,7 +896,7 @@
}
_remaining = _env->GetArrayLength(attrib_list_ref) - offset;
attrib_list_base = (EGLint *)
- _env->GetPrimitiveArrayCritical(attrib_list_ref, (jboolean *)0);
+ _env->GetIntArrayElements(attrib_list_ref, (jboolean *)0);
attrib_list = attrib_list_base + offset;
attrib_list_sentinel = false;
for (int i = _remaining - 1; i >= 0; i--) {
@@ -922,7 +922,7 @@
exit:
if (attrib_list_base) {
- _env->ReleasePrimitiveArrayCritical(attrib_list_ref, attrib_list_base,
+ _env->ReleaseIntArrayElements(attrib_list_ref, attrib_list_base,
JNI_ABORT);
}
if (_exception) {
@@ -940,7 +940,6 @@
}
return android_eglCreatePbufferFromClientBuffer(_env, _this, dpy, buftype, buffer, config, attrib_list_ref, offset);
}
-
/* EGLBoolean eglSurfaceAttrib ( EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint value ) */
static jboolean
android_eglSurfaceAttrib
@@ -1034,7 +1033,7 @@
}
_remaining = _env->GetArrayLength(attrib_list_ref) - offset;
attrib_list_base = (EGLint *)
- _env->GetPrimitiveArrayCritical(attrib_list_ref, (jboolean *)0);
+ _env->GetIntArrayElements(attrib_list_ref, (jboolean *)0);
attrib_list = attrib_list_base + offset;
attrib_list_sentinel = false;
for (int i = _remaining - 1; i >= 0; i--) {
@@ -1059,7 +1058,7 @@
exit:
if (attrib_list_base) {
- _env->ReleasePrimitiveArrayCritical(attrib_list_ref, attrib_list_base,
+ _env->ReleaseIntArrayElements(attrib_list_ref, (jint*)attrib_list_base,
JNI_ABORT);
}
if (_exception) {
@@ -1165,7 +1164,7 @@
goto exit;
}
value_base = (EGLint *)
- _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0);
+ _env->GetIntArrayElements(value_ref, (jboolean *)0);
value = value_base + offset;
_returnValue = eglQueryContext(
@@ -1177,7 +1176,7 @@
exit:
if (value_base) {
- _env->ReleasePrimitiveArrayCritical(value_ref, value_base,
+ _env->ReleaseIntArrayElements(value_ref, (jint*)value_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
diff --git a/core/jni/android_opengl_GLES10.cpp b/core/jni/android_opengl_GLES10.cpp
index c9b68bf..dac98de 100644
--- a/core/jni/android_opengl_GLES10.cpp
+++ b/core/jni/android_opengl_GLES10.cpp
@@ -126,6 +126,116 @@
return NULL;
}
+class ByteArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jbyteArray array, jboolean* is_copy) {
+ return _env->GetByteArrayElements(array, is_copy);
+ }
+};
+class BooleanArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jbooleanArray array, jboolean* is_copy) {
+ return _env->GetBooleanArrayElements(array, is_copy);
+ }
+};
+class CharArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jcharArray array, jboolean* is_copy) {
+ return _env->GetCharArrayElements(array, is_copy);
+ }
+};
+class ShortArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jshortArray array, jboolean* is_copy) {
+ return _env->GetShortArrayElements(array, is_copy);
+ }
+};
+class IntArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jintArray array, jboolean* is_copy) {
+ return _env->GetIntArrayElements(array, is_copy);
+ }
+};
+class LongArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jlongArray array, jboolean* is_copy) {
+ return _env->GetLongArrayElements(array, is_copy);
+ }
+};
+class FloatArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jfloatArray array, jboolean* is_copy) {
+ return _env->GetFloatArrayElements(array, is_copy);
+ }
+};
+class DoubleArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jdoubleArray array, jboolean* is_copy) {
+ return _env->GetDoubleArrayElements(array, is_copy);
+ }
+};
+
+template<typename JTYPEARRAY, typename ARRAYGETTER>
+static void*
+getArrayPointer(JNIEnv *_env, JTYPEARRAY array, jboolean* is_copy) {
+ return ARRAYGETTER::Get(_env, array, is_copy);
+}
+
+class ByteArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jbyteArray array, jbyte* data, jboolean commit) {
+ _env->ReleaseByteArrayElements(array, data, commit ? 0 : JNI_ABORT);
+ }
+};
+class BooleanArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jbooleanArray array, jboolean* data, jboolean commit) {
+ _env->ReleaseBooleanArrayElements(array, data, commit ? 0 : JNI_ABORT);
+ }
+};
+class CharArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jcharArray array, jchar* data, jboolean commit) {
+ _env->ReleaseCharArrayElements(array, data, commit ? 0 : JNI_ABORT);
+ }
+};
+class ShortArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jshortArray array, jshort* data, jboolean commit) {
+ _env->ReleaseShortArrayElements(array, data, commit ? 0 : JNI_ABORT);
+ }
+};
+class IntArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jintArray array, jint* data, jboolean commit) {
+ _env->ReleaseIntArrayElements(array, data, commit ? 0 : JNI_ABORT);
+ }
+};
+class LongArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jlongArray array, jlong* data, jboolean commit) {
+ _env->ReleaseLongArrayElements(array, data, commit ? 0 : JNI_ABORT);
+ }
+};
+class FloatArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jfloatArray array, jfloat* data, jboolean commit) {
+ _env->ReleaseFloatArrayElements(array, data, commit ? 0 : JNI_ABORT);
+ }
+};
+class DoubleArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jdoubleArray array, jdouble* data, jboolean commit) {
+ _env->ReleaseDoubleArrayElements(array, data, commit ? 0 : JNI_ABORT);
+ }
+};
+
+template<typename JTYPEARRAY, typename NTYPEARRAY, typename ARRAYRELEASER>
+static void
+releaseArrayPointer(JNIEnv *_env, JTYPEARRAY array, NTYPEARRAY data, jboolean commit) {
+ ARRAYRELEASER::Release(_env, array, data, commit);
+}
+
static void
releasePointer(JNIEnv *_env, jarray array, void *data, jboolean commit)
{
@@ -229,7 +339,8 @@
return needed;
}
-template <typename JTYPEARRAY, typename CTYPE, void GET(GLenum, CTYPE*)>
+template <typename JTYPEARRAY, typename ARRAYGETTER, typename NTYPEARRAY,
+ typename ARRAYRELEASER, typename CTYPE, void GET(GLenum, CTYPE*)>
static void
get
(JNIEnv *_env, jobject _this, jint pname, JTYPEARRAY params_ref, jint offset) {
@@ -264,8 +375,8 @@
_exceptionMessage = "length - offset < needed";
goto exit;
}
- params_base = (CTYPE *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ params_base = (CTYPE *) getArrayPointer<JTYPEARRAY, ARRAYGETTER>(
+ _env, params_ref, (jboolean *)0);
params = params_base + offset;
GET(
@@ -275,8 +386,8 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
- _exception ? JNI_ABORT: 0);
+ releaseArrayPointer<JTYPEARRAY, NTYPEARRAY, ARRAYRELEASER>(
+ _env, params_ref, params_base, !_exception);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -284,20 +395,21 @@
}
-template <typename CTYPE, void GET(GLenum, CTYPE*)>
+template <typename CTYPE, typename JTYPEARRAY, typename ARRAYGETTER, typename NTYPEARRAY,
+ typename ARRAYRELEASER, void GET(GLenum, CTYPE*)>
static void
getarray
(JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
jint _exception = 0;
const char * _exceptionType;
const char * _exceptionMessage;
- jarray _array = (jarray) 0;
+ JTYPEARRAY _array = (JTYPEARRAY) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
CTYPE *params = (CTYPE *) 0;
int _needed = 0;
- params = (CTYPE *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (CTYPE *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
_remaining /= sizeof(CTYPE); // convert from bytes to item count
_needed = getNeededCount(pname);
// if we didn't find this pname, we just assume the user passed
@@ -310,7 +422,8 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *) getArrayPointer<JTYPEARRAY, ARRAYGETTER>(
+ _env, _array, (jboolean *) 0);
params = (CTYPE *) (_paramsBase + _bufferOffset);
}
GET(
@@ -320,7 +433,8 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, _exception ? JNI_FALSE : JNI_TRUE);
+ releaseArrayPointer<JTYPEARRAY, NTYPEARRAY, ARRAYRELEASER>(
+ _env, _array, (NTYPEARRAY)params, _exception ? JNI_FALSE : JNI_TRUE);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -515,7 +629,7 @@
jint _remaining;
GLvoid *data = (GLvoid *) 0;
- data = (GLvoid *)getPointer(_env, data_buf, &_array, &_remaining, &_bufferOffset);
+ data = (GLvoid *)getPointer(_env, data_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (data == NULL) {
char * _dataBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
data = (GLvoid *) (_dataBase + _bufferOffset);
@@ -544,7 +658,7 @@
jint _remaining;
GLvoid *data = (GLvoid *) 0;
- data = (GLvoid *)getPointer(_env, data_buf, &_array, &_remaining, &_bufferOffset);
+ data = (GLvoid *)getPointer(_env, data_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (data == NULL) {
char * _dataBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
data = (GLvoid *) (_dataBase + _bufferOffset);
@@ -637,7 +751,7 @@
goto exit;
}
textures_base = (GLuint *)
- _env->GetPrimitiveArrayCritical(textures_ref, (jboolean *)0);
+ _env->GetIntArrayElements(textures_ref, (jboolean *)0);
textures = textures_base + offset;
glDeleteTextures(
@@ -647,7 +761,7 @@
exit:
if (textures_base) {
- _env->ReleasePrimitiveArrayCritical(textures_ref, textures_base,
+ _env->ReleaseIntArrayElements(textures_ref, (jint*)textures_base,
JNI_ABORT);
}
if (_exception) {
@@ -662,12 +776,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLuint *textures = (GLuint *) 0;
- textures = (GLuint *)getPointer(_env, textures_buf, &_array, &_remaining, &_bufferOffset);
+ textures = (GLuint *)getPointer(_env, textures_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < n) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -675,7 +789,7 @@
goto exit;
}
if (textures == NULL) {
- char * _texturesBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _texturesBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
textures = (GLuint *) (_texturesBase + _bufferOffset);
}
glDeleteTextures(
@@ -685,7 +799,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, textures, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)textures, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -771,7 +885,7 @@
jint _remaining;
GLvoid *indices = (GLvoid *) 0;
- indices = (GLvoid *)getPointer(_env, indices_buf, &_array, &_remaining, &_bufferOffset);
+ indices = (GLvoid *)getPointer(_env, indices_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < count) {
_exception = 1;
_exceptionType = "java/lang/ArrayIndexOutOfBoundsException";
@@ -882,7 +996,7 @@
goto exit;
}
params_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glFogfv(
@@ -892,7 +1006,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseFloatArrayElements(params_ref, (jfloat*)params_base,
JNI_ABORT);
}
if (_exception) {
@@ -907,12 +1021,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *params = (GLfloat *) 0;
- params = (GLfloat *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfloat *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
int _needed;
switch (pname) {
#if defined(GL_FOG_COLOR)
@@ -931,7 +1045,7 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
params = (GLfloat *) (_paramsBase + _bufferOffset);
}
glFogfv(
@@ -941,7 +1055,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, JNI_FALSE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)params, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -1000,7 +1114,7 @@
goto exit;
}
params_base = (GLfixed *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glFogxv(
@@ -1010,7 +1124,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
JNI_ABORT);
}
if (_exception) {
@@ -1025,12 +1139,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfixed *params = (GLfixed *) 0;
- params = (GLfixed *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfixed *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
int _needed;
switch (pname) {
#if defined(GL_FOG_COLOR)
@@ -1049,7 +1163,7 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLfixed *) (_paramsBase + _bufferOffset);
}
glFogxv(
@@ -1059,7 +1173,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -1134,7 +1248,7 @@
goto exit;
}
textures_base = (GLuint *)
- _env->GetPrimitiveArrayCritical(textures_ref, (jboolean *)0);
+ _env->GetIntArrayElements(textures_ref, (jboolean *)0);
textures = textures_base + offset;
glGenTextures(
@@ -1144,7 +1258,7 @@
exit:
if (textures_base) {
- _env->ReleasePrimitiveArrayCritical(textures_ref, textures_base,
+ _env->ReleaseIntArrayElements(textures_ref, (jint*)textures_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -1159,12 +1273,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLuint *textures = (GLuint *) 0;
- textures = (GLuint *)getPointer(_env, textures_buf, &_array, &_remaining, &_bufferOffset);
+ textures = (GLuint *)getPointer(_env, textures_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < n) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -1172,7 +1286,7 @@
goto exit;
}
if (textures == NULL) {
- char * _texturesBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _texturesBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
textures = (GLuint *) (_texturesBase + _bufferOffset);
}
glGenTextures(
@@ -1182,7 +1296,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, textures, _exception ? JNI_FALSE : JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)textures, _exception ? JNI_ABORT : 0);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -1202,16 +1316,17 @@
static void
android_glGetIntegerv__I_3II
(JNIEnv *_env, jobject _this, jint pname, jintArray params_ref, jint offset) {
- get<jintArray, GLint, glGetIntegerv>(_env, _this, pname, params_ref, offset);
+ get<jintArray, IntArrayGetter, jint*, IntArrayReleaser, GLint, glGetIntegerv>(
+ _env, _this, pname, params_ref, offset);
}
/* void glGetIntegerv ( GLenum pname, GLint *params ) */
static void
android_glGetIntegerv__ILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
- getarray<GLint, glGetIntegerv>(_env, _this, pname, params_buf);
+ getarray<GLint, jintArray, IntArrayGetter, jint*, IntArrayReleaser, glGetIntegerv>(
+ _env, _this, pname, params_buf);
}
-
/* const GLubyte * glGetString ( GLenum name ) */
static jstring android_glGetString(JNIEnv* _env, jobject, jint name) {
const char* chars = (const char*) glGetString((GLenum) name);
@@ -1279,7 +1394,7 @@
goto exit;
}
params_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glLightModelfv(
@@ -1289,7 +1404,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseFloatArrayElements(params_ref, (jfloat*)params_base,
JNI_ABORT);
}
if (_exception) {
@@ -1304,12 +1419,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *params = (GLfloat *) 0;
- params = (GLfloat *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfloat *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
int _needed;
switch (pname) {
#if defined(GL_LIGHT_MODEL_AMBIENT)
@@ -1328,7 +1443,7 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
params = (GLfloat *) (_paramsBase + _bufferOffset);
}
glLightModelfv(
@@ -1338,7 +1453,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, JNI_FALSE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)params, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -1397,7 +1512,7 @@
goto exit;
}
params_base = (GLfixed *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glLightModelxv(
@@ -1407,7 +1522,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
JNI_ABORT);
}
if (_exception) {
@@ -1422,12 +1537,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfixed *params = (GLfixed *) 0;
- params = (GLfixed *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfixed *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
int _needed;
switch (pname) {
#if defined(GL_LIGHT_MODEL_AMBIENT)
@@ -1446,7 +1561,7 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLfixed *) (_paramsBase + _bufferOffset);
}
glLightModelxv(
@@ -1456,7 +1571,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -1530,7 +1645,7 @@
goto exit;
}
params_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glLightfv(
@@ -1541,7 +1656,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseFloatArrayElements(params_ref, (jfloat*)params_base,
JNI_ABORT);
}
if (_exception) {
@@ -1556,12 +1671,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *params = (GLfloat *) 0;
- params = (GLfloat *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfloat *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
int _needed;
switch (pname) {
#if defined(GL_SPOT_DIRECTION)
@@ -1594,7 +1709,7 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
params = (GLfloat *) (_paramsBase + _bufferOffset);
}
glLightfv(
@@ -1605,7 +1720,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, JNI_FALSE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)params, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -1679,7 +1794,7 @@
goto exit;
}
params_base = (GLfixed *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glLightxv(
@@ -1690,7 +1805,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
JNI_ABORT);
}
if (_exception) {
@@ -1705,12 +1820,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfixed *params = (GLfixed *) 0;
- params = (GLfixed *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfixed *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
int _needed;
switch (pname) {
#if defined(GL_SPOT_DIRECTION)
@@ -1743,7 +1858,7 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLfixed *) (_paramsBase + _bufferOffset);
}
glLightxv(
@@ -1754,7 +1869,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -1811,7 +1926,7 @@
}
_remaining = _env->GetArrayLength(m_ref) - offset;
m_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(m_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(m_ref, (jboolean *)0);
m = m_base + offset;
glLoadMatrixf(
@@ -1820,7 +1935,7 @@
exit:
if (m_base) {
- _env->ReleasePrimitiveArrayCritical(m_ref, m_base,
+ _env->ReleaseFloatArrayElements(m_ref, (jfloat*)m_base,
JNI_ABORT);
}
if (_exception) {
@@ -1832,21 +1947,21 @@
static void
android_glLoadMatrixf__Ljava_nio_FloatBuffer_2
(JNIEnv *_env, jobject _this, jobject m_buf) {
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *m = (GLfloat *) 0;
- m = (GLfloat *)getPointer(_env, m_buf, &_array, &_remaining, &_bufferOffset);
+ m = (GLfloat *)getPointer(_env, m_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (m == NULL) {
- char * _mBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _mBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
m = (GLfloat *) (_mBase + _bufferOffset);
}
glLoadMatrixf(
(GLfloat *)m
);
if (_array) {
- releasePointer(_env, _array, m, JNI_FALSE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)m, JNI_ABORT);
}
}
@@ -1875,7 +1990,7 @@
}
_remaining = _env->GetArrayLength(m_ref) - offset;
m_base = (GLfixed *)
- _env->GetPrimitiveArrayCritical(m_ref, (jboolean *)0);
+ _env->GetIntArrayElements(m_ref, (jboolean *)0);
m = m_base + offset;
glLoadMatrixx(
@@ -1884,7 +1999,7 @@
exit:
if (m_base) {
- _env->ReleasePrimitiveArrayCritical(m_ref, m_base,
+ _env->ReleaseIntArrayElements(m_ref, (jint*)m_base,
JNI_ABORT);
}
if (_exception) {
@@ -1896,21 +2011,21 @@
static void
android_glLoadMatrixx__Ljava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jobject m_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfixed *m = (GLfixed *) 0;
- m = (GLfixed *)getPointer(_env, m_buf, &_array, &_remaining, &_bufferOffset);
+ m = (GLfixed *)getPointer(_env, m_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (m == NULL) {
- char * _mBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _mBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
m = (GLfixed *) (_mBase + _bufferOffset);
}
glLoadMatrixx(
(GLfixed *)m
);
if (_array) {
- releasePointer(_env, _array, m, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)m, JNI_ABORT);
}
}
@@ -1988,7 +2103,7 @@
goto exit;
}
params_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glMaterialfv(
@@ -1999,7 +2114,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseFloatArrayElements(params_ref, (jfloat*)params_base,
JNI_ABORT);
}
if (_exception) {
@@ -2014,12 +2129,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *params = (GLfloat *) 0;
- params = (GLfloat *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfloat *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
int _needed;
switch (pname) {
#if defined(GL_AMBIENT)
@@ -2050,7 +2165,7 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
params = (GLfloat *) (_paramsBase + _bufferOffset);
}
glMaterialfv(
@@ -2061,7 +2176,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, JNI_FALSE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)params, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -2133,7 +2248,7 @@
goto exit;
}
params_base = (GLfixed *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glMaterialxv(
@@ -2144,7 +2259,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
JNI_ABORT);
}
if (_exception) {
@@ -2159,12 +2274,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfixed *params = (GLfixed *) 0;
- params = (GLfixed *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfixed *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
int _needed;
switch (pname) {
#if defined(GL_AMBIENT)
@@ -2195,7 +2310,7 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLfixed *) (_paramsBase + _bufferOffset);
}
glMaterialxv(
@@ -2206,7 +2321,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -2247,7 +2362,7 @@
}
_remaining = _env->GetArrayLength(m_ref) - offset;
m_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(m_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(m_ref, (jboolean *)0);
m = m_base + offset;
glMultMatrixf(
@@ -2256,7 +2371,7 @@
exit:
if (m_base) {
- _env->ReleasePrimitiveArrayCritical(m_ref, m_base,
+ _env->ReleaseFloatArrayElements(m_ref, (jfloat*)m_base,
JNI_ABORT);
}
if (_exception) {
@@ -2268,21 +2383,21 @@
static void
android_glMultMatrixf__Ljava_nio_FloatBuffer_2
(JNIEnv *_env, jobject _this, jobject m_buf) {
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *m = (GLfloat *) 0;
- m = (GLfloat *)getPointer(_env, m_buf, &_array, &_remaining, &_bufferOffset);
+ m = (GLfloat *)getPointer(_env, m_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (m == NULL) {
- char * _mBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _mBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
m = (GLfloat *) (_mBase + _bufferOffset);
}
glMultMatrixf(
(GLfloat *)m
);
if (_array) {
- releasePointer(_env, _array, m, JNI_FALSE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)m, JNI_ABORT);
}
}
@@ -2311,7 +2426,7 @@
}
_remaining = _env->GetArrayLength(m_ref) - offset;
m_base = (GLfixed *)
- _env->GetPrimitiveArrayCritical(m_ref, (jboolean *)0);
+ _env->GetIntArrayElements(m_ref, (jboolean *)0);
m = m_base + offset;
glMultMatrixx(
@@ -2320,7 +2435,7 @@
exit:
if (m_base) {
- _env->ReleasePrimitiveArrayCritical(m_ref, m_base,
+ _env->ReleaseIntArrayElements(m_ref, (jint*)m_base,
JNI_ABORT);
}
if (_exception) {
@@ -2332,21 +2447,21 @@
static void
android_glMultMatrixx__Ljava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jobject m_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfixed *m = (GLfixed *) 0;
- m = (GLfixed *)getPointer(_env, m_buf, &_array, &_remaining, &_bufferOffset);
+ m = (GLfixed *)getPointer(_env, m_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (m == NULL) {
- char * _mBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _mBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
m = (GLfixed *) (_mBase + _bufferOffset);
}
glMultMatrixx(
(GLfixed *)m
);
if (_array) {
- releasePointer(_env, _array, m, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)m, JNI_ABORT);
}
}
@@ -2520,7 +2635,7 @@
jint _remaining;
GLvoid *pixels = (GLvoid *) 0;
- pixels = (GLvoid *)getPointer(_env, pixels_buf, &_array, &_remaining, &_bufferOffset);
+ pixels = (GLvoid *)getPointer(_env, pixels_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (pixels == NULL) {
char * _pixelsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
pixels = (GLvoid *) (_pixelsBase + _bufferOffset);
@@ -2734,7 +2849,7 @@
goto exit;
}
params_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glTexEnvfv(
@@ -2745,7 +2860,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseFloatArrayElements(params_ref, (jfloat*)params_base,
JNI_ABORT);
}
if (_exception) {
@@ -2760,12 +2875,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *params = (GLfloat *) 0;
- params = (GLfloat *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfloat *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
int _needed;
switch (pname) {
#if defined(GL_TEXTURE_ENV_COLOR)
@@ -2784,7 +2899,7 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
params = (GLfloat *) (_paramsBase + _bufferOffset);
}
glTexEnvfv(
@@ -2795,7 +2910,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, JNI_FALSE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)params, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -2855,7 +2970,7 @@
goto exit;
}
params_base = (GLfixed *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glTexEnvxv(
@@ -2866,7 +2981,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
JNI_ABORT);
}
if (_exception) {
@@ -2881,12 +2996,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfixed *params = (GLfixed *) 0;
- params = (GLfixed *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfixed *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
int _needed;
switch (pname) {
#if defined(GL_TEXTURE_ENV_COLOR)
@@ -2905,7 +3020,7 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLfixed *) (_paramsBase + _bufferOffset);
}
glTexEnvxv(
@@ -2916,7 +3031,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -2933,7 +3048,7 @@
GLvoid *pixels = (GLvoid *) 0;
if (pixels_buf) {
- pixels = (GLvoid *)getPointer(_env, pixels_buf, &_array, &_remaining, &_bufferOffset);
+ pixels = (GLvoid *)getPointer(_env, pixels_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
}
if (pixels_buf && pixels == NULL) {
char * _pixelsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
@@ -2987,7 +3102,7 @@
GLvoid *pixels = (GLvoid *) 0;
if (pixels_buf) {
- pixels = (GLvoid *)getPointer(_env, pixels_buf, &_array, &_remaining, &_bufferOffset);
+ pixels = (GLvoid *)getPointer(_env, pixels_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
}
if (pixels_buf && pixels == NULL) {
char * _pixelsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
diff --git a/core/jni/android_opengl_GLES10Ext.cpp b/core/jni/android_opengl_GLES10Ext.cpp
index 4f1eaa5..95be11b 100644
--- a/core/jni/android_opengl_GLES10Ext.cpp
+++ b/core/jni/android_opengl_GLES10Ext.cpp
@@ -126,6 +126,116 @@
return NULL;
}
+class ByteArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jbyteArray array, jboolean* is_copy) {
+ return _env->GetByteArrayElements(array, is_copy);
+ }
+};
+class BooleanArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jbooleanArray array, jboolean* is_copy) {
+ return _env->GetBooleanArrayElements(array, is_copy);
+ }
+};
+class CharArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jcharArray array, jboolean* is_copy) {
+ return _env->GetCharArrayElements(array, is_copy);
+ }
+};
+class ShortArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jshortArray array, jboolean* is_copy) {
+ return _env->GetShortArrayElements(array, is_copy);
+ }
+};
+class IntArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jintArray array, jboolean* is_copy) {
+ return _env->GetIntArrayElements(array, is_copy);
+ }
+};
+class LongArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jlongArray array, jboolean* is_copy) {
+ return _env->GetLongArrayElements(array, is_copy);
+ }
+};
+class FloatArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jfloatArray array, jboolean* is_copy) {
+ return _env->GetFloatArrayElements(array, is_copy);
+ }
+};
+class DoubleArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jdoubleArray array, jboolean* is_copy) {
+ return _env->GetDoubleArrayElements(array, is_copy);
+ }
+};
+
+template<typename JTYPEARRAY, typename ARRAYGETTER>
+static void*
+getArrayPointer(JNIEnv *_env, JTYPEARRAY array, jboolean* is_copy) {
+ return ARRAYGETTER::Get(_env, array, is_copy);
+}
+
+class ByteArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jbyteArray array, jbyte* data, jboolean commit) {
+ _env->ReleaseByteArrayElements(array, data, commit ? 0 : JNI_ABORT);
+ }
+};
+class BooleanArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jbooleanArray array, jboolean* data, jboolean commit) {
+ _env->ReleaseBooleanArrayElements(array, data, commit ? 0 : JNI_ABORT);
+ }
+};
+class CharArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jcharArray array, jchar* data, jboolean commit) {
+ _env->ReleaseCharArrayElements(array, data, commit ? 0 : JNI_ABORT);
+ }
+};
+class ShortArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jshortArray array, jshort* data, jboolean commit) {
+ _env->ReleaseShortArrayElements(array, data, commit ? 0 : JNI_ABORT);
+ }
+};
+class IntArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jintArray array, jint* data, jboolean commit) {
+ _env->ReleaseIntArrayElements(array, data, commit ? 0 : JNI_ABORT);
+ }
+};
+class LongArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jlongArray array, jlong* data, jboolean commit) {
+ _env->ReleaseLongArrayElements(array, data, commit ? 0 : JNI_ABORT);
+ }
+};
+class FloatArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jfloatArray array, jfloat* data, jboolean commit) {
+ _env->ReleaseFloatArrayElements(array, data, commit ? 0 : JNI_ABORT);
+ }
+};
+class DoubleArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jdoubleArray array, jdouble* data, jboolean commit) {
+ _env->ReleaseDoubleArrayElements(array, data, commit ? 0 : JNI_ABORT);
+ }
+};
+
+template<typename JTYPEARRAY, typename NTYPEARRAY, typename ARRAYRELEASER>
+static void
+releaseArrayPointer(JNIEnv *_env, JTYPEARRAY array, NTYPEARRAY data, jboolean commit) {
+ ARRAYRELEASER::Release(_env, array, data, commit);
+}
+
static void
releasePointer(JNIEnv *_env, jarray array, void *data, jboolean commit)
{
@@ -229,7 +339,8 @@
return needed;
}
-template <typename JTYPEARRAY, typename CTYPE, void GET(GLenum, CTYPE*)>
+template <typename JTYPEARRAY, typename ARRAYGETTER, typename NTYPEARRAY,
+ typename ARRAYRELEASER, typename CTYPE, void GET(GLenum, CTYPE*)>
static void
get
(JNIEnv *_env, jobject _this, jint pname, JTYPEARRAY params_ref, jint offset) {
@@ -264,8 +375,8 @@
_exceptionMessage = "length - offset < needed";
goto exit;
}
- params_base = (CTYPE *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ params_base = (CTYPE *) getArrayPointer<JTYPEARRAY, ARRAYGETTER>(
+ _env, params_ref, (jboolean *)0);
params = params_base + offset;
GET(
@@ -275,8 +386,8 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
- _exception ? JNI_ABORT: 0);
+ releaseArrayPointer<JTYPEARRAY, NTYPEARRAY, ARRAYRELEASER>(
+ _env, params_ref, params_base, !_exception);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -284,20 +395,21 @@
}
-template <typename CTYPE, void GET(GLenum, CTYPE*)>
+template <typename CTYPE, typename JTYPEARRAY, typename ARRAYGETTER, typename NTYPEARRAY,
+ typename ARRAYRELEASER, void GET(GLenum, CTYPE*)>
static void
getarray
(JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
jint _exception = 0;
const char * _exceptionType;
const char * _exceptionMessage;
- jarray _array = (jarray) 0;
+ JTYPEARRAY _array = (JTYPEARRAY) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
CTYPE *params = (CTYPE *) 0;
int _needed = 0;
- params = (CTYPE *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (CTYPE *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
_remaining /= sizeof(CTYPE); // convert from bytes to item count
_needed = getNeededCount(pname);
// if we didn't find this pname, we just assume the user passed
@@ -310,7 +422,8 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *) getArrayPointer<JTYPEARRAY, ARRAYGETTER>(
+ _env, _array, (jboolean *) 0);
params = (CTYPE *) (_paramsBase + _bufferOffset);
}
GET(
@@ -320,7 +433,8 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, _exception ? JNI_FALSE : JNI_TRUE);
+ releaseArrayPointer<JTYPEARRAY, NTYPEARRAY, ARRAYRELEASER>(
+ _env, _array, (NTYPEARRAY)params, _exception ? JNI_FALSE : JNI_TRUE);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -363,7 +477,7 @@
goto exit;
}
mantissa_base = (GLfixed *)
- _env->GetPrimitiveArrayCritical(mantissa_ref, (jboolean *)0);
+ _env->GetIntArrayElements(mantissa_ref, (jboolean *)0);
mantissa = mantissa_base + mantissaOffset;
if (!exponent_ref) {
@@ -386,7 +500,7 @@
goto exit;
}
exponent_base = (GLint *)
- _env->GetPrimitiveArrayCritical(exponent_ref, (jboolean *)0);
+ _env->GetIntArrayElements(exponent_ref, (jboolean *)0);
exponent = exponent_base + exponentOffset;
_returnValue = glQueryMatrixxOES(
@@ -396,11 +510,11 @@
exit:
if (exponent_base) {
- _env->ReleasePrimitiveArrayCritical(exponent_ref, exponent_base,
+ _env->ReleaseIntArrayElements(exponent_ref, (jint*)exponent_base,
_exception ? JNI_ABORT: 0);
}
if (mantissa_base) {
- _env->ReleasePrimitiveArrayCritical(mantissa_ref, mantissa_base,
+ _env->ReleaseIntArrayElements(mantissa_ref, (jint*)mantissa_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -416,9 +530,9 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _mantissaArray = (jarray) 0;
+ jintArray _mantissaArray = (jintArray) 0;
jint _mantissaBufferOffset = (jint) 0;
- jarray _exponentArray = (jarray) 0;
+ jintArray _exponentArray = (jintArray) 0;
jint _exponentBufferOffset = (jint) 0;
GLbitfield _returnValue = -1;
jint _mantissaRemaining;
@@ -426,14 +540,14 @@
jint _exponentRemaining;
GLint *exponent = (GLint *) 0;
- mantissa = (GLfixed *)getPointer(_env, mantissa_buf, &_mantissaArray, &_mantissaRemaining, &_mantissaBufferOffset);
+ mantissa = (GLfixed *)getPointer(_env, mantissa_buf, (jarray*)&_mantissaArray, &_mantissaRemaining, &_mantissaBufferOffset);
if (_mantissaRemaining < 16) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
_exceptionMessage = "remaining() < 16 < needed";
goto exit;
}
- exponent = (GLint *)getPointer(_env, exponent_buf, &_exponentArray, &_exponentRemaining, &_exponentBufferOffset);
+ exponent = (GLint *)getPointer(_env, exponent_buf, (jarray*)&_exponentArray, &_exponentRemaining, &_exponentBufferOffset);
if (_exponentRemaining < 16) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -441,11 +555,11 @@
goto exit;
}
if (mantissa == NULL) {
- char * _mantissaBase = (char *)_env->GetPrimitiveArrayCritical(_mantissaArray, (jboolean *) 0);
+ char * _mantissaBase = (char *)_env->GetIntArrayElements(_mantissaArray, (jboolean *) 0);
mantissa = (GLfixed *) (_mantissaBase + _mantissaBufferOffset);
}
if (exponent == NULL) {
- char * _exponentBase = (char *)_env->GetPrimitiveArrayCritical(_exponentArray, (jboolean *) 0);
+ char * _exponentBase = (char *)_env->GetIntArrayElements(_exponentArray, (jboolean *) 0);
exponent = (GLint *) (_exponentBase + _exponentBufferOffset);
}
_returnValue = glQueryMatrixxOES(
@@ -455,10 +569,10 @@
exit:
if (_exponentArray) {
- releasePointer(_env, _exponentArray, exponent, _exception ? JNI_FALSE : JNI_TRUE);
+ _env->ReleaseIntArrayElements(_exponentArray, (jint*)exponent, _exception ? JNI_ABORT : 0);
}
if (_mantissaArray) {
- releasePointer(_env, _mantissaArray, mantissa, _exception ? JNI_FALSE : JNI_TRUE);
+ _env->ReleaseIntArrayElements(_mantissaArray, (jint*)mantissa, _exception ? JNI_ABORT : 0);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
diff --git a/core/jni/android_opengl_GLES11.cpp b/core/jni/android_opengl_GLES11.cpp
index 08c4740..6970a3c 100644
--- a/core/jni/android_opengl_GLES11.cpp
+++ b/core/jni/android_opengl_GLES11.cpp
@@ -126,6 +126,116 @@
return NULL;
}
+class ByteArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jbyteArray array, jboolean* is_copy) {
+ return _env->GetByteArrayElements(array, is_copy);
+ }
+};
+class BooleanArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jbooleanArray array, jboolean* is_copy) {
+ return _env->GetBooleanArrayElements(array, is_copy);
+ }
+};
+class CharArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jcharArray array, jboolean* is_copy) {
+ return _env->GetCharArrayElements(array, is_copy);
+ }
+};
+class ShortArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jshortArray array, jboolean* is_copy) {
+ return _env->GetShortArrayElements(array, is_copy);
+ }
+};
+class IntArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jintArray array, jboolean* is_copy) {
+ return _env->GetIntArrayElements(array, is_copy);
+ }
+};
+class LongArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jlongArray array, jboolean* is_copy) {
+ return _env->GetLongArrayElements(array, is_copy);
+ }
+};
+class FloatArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jfloatArray array, jboolean* is_copy) {
+ return _env->GetFloatArrayElements(array, is_copy);
+ }
+};
+class DoubleArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jdoubleArray array, jboolean* is_copy) {
+ return _env->GetDoubleArrayElements(array, is_copy);
+ }
+};
+
+template<typename JTYPEARRAY, typename ARRAYGETTER>
+static void*
+getArrayPointer(JNIEnv *_env, JTYPEARRAY array, jboolean* is_copy) {
+ return ARRAYGETTER::Get(_env, array, is_copy);
+}
+
+class ByteArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jbyteArray array, jbyte* data, jboolean commit) {
+ _env->ReleaseByteArrayElements(array, data, commit ? 0 : JNI_ABORT);
+ }
+};
+class BooleanArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jbooleanArray array, jboolean* data, jboolean commit) {
+ _env->ReleaseBooleanArrayElements(array, data, commit ? 0 : JNI_ABORT);
+ }
+};
+class CharArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jcharArray array, jchar* data, jboolean commit) {
+ _env->ReleaseCharArrayElements(array, data, commit ? 0 : JNI_ABORT);
+ }
+};
+class ShortArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jshortArray array, jshort* data, jboolean commit) {
+ _env->ReleaseShortArrayElements(array, data, commit ? 0 : JNI_ABORT);
+ }
+};
+class IntArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jintArray array, jint* data, jboolean commit) {
+ _env->ReleaseIntArrayElements(array, data, commit ? 0 : JNI_ABORT);
+ }
+};
+class LongArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jlongArray array, jlong* data, jboolean commit) {
+ _env->ReleaseLongArrayElements(array, data, commit ? 0 : JNI_ABORT);
+ }
+};
+class FloatArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jfloatArray array, jfloat* data, jboolean commit) {
+ _env->ReleaseFloatArrayElements(array, data, commit ? 0 : JNI_ABORT);
+ }
+};
+class DoubleArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jdoubleArray array, jdouble* data, jboolean commit) {
+ _env->ReleaseDoubleArrayElements(array, data, commit ? 0 : JNI_ABORT);
+ }
+};
+
+template<typename JTYPEARRAY, typename NTYPEARRAY, typename ARRAYRELEASER>
+static void
+releaseArrayPointer(JNIEnv *_env, JTYPEARRAY array, NTYPEARRAY data, jboolean commit) {
+ ARRAYRELEASER::Release(_env, array, data, commit);
+}
+
static void
releasePointer(JNIEnv *_env, jarray array, void *data, jboolean commit)
{
@@ -229,7 +339,8 @@
return needed;
}
-template <typename JTYPEARRAY, typename CTYPE, void GET(GLenum, CTYPE*)>
+template <typename JTYPEARRAY, typename ARRAYGETTER, typename NTYPEARRAY,
+ typename ARRAYRELEASER, typename CTYPE, void GET(GLenum, CTYPE*)>
static void
get
(JNIEnv *_env, jobject _this, jint pname, JTYPEARRAY params_ref, jint offset) {
@@ -264,8 +375,8 @@
_exceptionMessage = "length - offset < needed";
goto exit;
}
- params_base = (CTYPE *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ params_base = (CTYPE *) getArrayPointer<JTYPEARRAY, ARRAYGETTER>(
+ _env, params_ref, (jboolean *)0);
params = params_base + offset;
GET(
@@ -275,8 +386,8 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
- _exception ? JNI_ABORT: 0);
+ releaseArrayPointer<JTYPEARRAY, NTYPEARRAY, ARRAYRELEASER>(
+ _env, params_ref, params_base, !_exception);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -284,20 +395,21 @@
}
-template <typename CTYPE, void GET(GLenum, CTYPE*)>
+template <typename CTYPE, typename JTYPEARRAY, typename ARRAYGETTER, typename NTYPEARRAY,
+ typename ARRAYRELEASER, void GET(GLenum, CTYPE*)>
static void
getarray
(JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
jint _exception = 0;
const char * _exceptionType;
const char * _exceptionMessage;
- jarray _array = (jarray) 0;
+ JTYPEARRAY _array = (JTYPEARRAY) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
CTYPE *params = (CTYPE *) 0;
int _needed = 0;
- params = (CTYPE *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (CTYPE *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
_remaining /= sizeof(CTYPE); // convert from bytes to item count
_needed = getNeededCount(pname);
// if we didn't find this pname, we just assume the user passed
@@ -310,7 +422,8 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *) getArrayPointer<JTYPEARRAY, ARRAYGETTER>(
+ _env, _array, (jboolean *) 0);
params = (CTYPE *) (_paramsBase + _bufferOffset);
}
GET(
@@ -320,7 +433,8 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, _exception ? JNI_FALSE : JNI_TRUE);
+ releaseArrayPointer<JTYPEARRAY, NTYPEARRAY, ARRAYRELEASER>(
+ _env, _array, (NTYPEARRAY)params, _exception ? JNI_FALSE : JNI_TRUE);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -351,7 +465,7 @@
GLvoid *data = (GLvoid *) 0;
if (data_buf) {
- data = (GLvoid *)getPointer(_env, data_buf, &_array, &_remaining, &_bufferOffset);
+ data = (GLvoid *)getPointer(_env, data_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < size) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -391,7 +505,7 @@
jint _remaining;
GLvoid *data = (GLvoid *) 0;
- data = (GLvoid *)getPointer(_env, data_buf, &_array, &_remaining, &_bufferOffset);
+ data = (GLvoid *)getPointer(_env, data_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < size) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -443,7 +557,7 @@
}
_remaining = _env->GetArrayLength(equation_ref) - offset;
equation_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(equation_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(equation_ref, (jboolean *)0);
equation = equation_base + offset;
glClipPlanef(
@@ -453,7 +567,7 @@
exit:
if (equation_base) {
- _env->ReleasePrimitiveArrayCritical(equation_ref, equation_base,
+ _env->ReleaseFloatArrayElements(equation_ref, (jfloat*)equation_base,
JNI_ABORT);
}
if (_exception) {
@@ -468,14 +582,14 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *equation = (GLfloat *) 0;
- equation = (GLfloat *)getPointer(_env, equation_buf, &_array, &_remaining, &_bufferOffset);
+ equation = (GLfloat *)getPointer(_env, equation_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (equation == NULL) {
- char * _equationBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _equationBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
equation = (GLfloat *) (_equationBase + _bufferOffset);
}
glClipPlanef(
@@ -483,7 +597,7 @@
(GLfloat *)equation
);
if (_array) {
- releasePointer(_env, _array, equation, JNI_FALSE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)equation, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -515,7 +629,7 @@
}
_remaining = _env->GetArrayLength(equation_ref) - offset;
equation_base = (GLfixed *)
- _env->GetPrimitiveArrayCritical(equation_ref, (jboolean *)0);
+ _env->GetIntArrayElements(equation_ref, (jboolean *)0);
equation = equation_base + offset;
glClipPlanex(
@@ -525,7 +639,7 @@
exit:
if (equation_base) {
- _env->ReleasePrimitiveArrayCritical(equation_ref, equation_base,
+ _env->ReleaseIntArrayElements(equation_ref, (jint*)equation_base,
JNI_ABORT);
}
if (_exception) {
@@ -540,14 +654,14 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfixed *equation = (GLfixed *) 0;
- equation = (GLfixed *)getPointer(_env, equation_buf, &_array, &_remaining, &_bufferOffset);
+ equation = (GLfixed *)getPointer(_env, equation_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (equation == NULL) {
- char * _equationBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _equationBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
equation = (GLfixed *) (_equationBase + _bufferOffset);
}
glClipPlanex(
@@ -555,7 +669,7 @@
(GLfixed *)equation
);
if (_array) {
- releasePointer(_env, _array, equation, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)equation, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -617,7 +731,7 @@
goto exit;
}
buffers_base = (GLuint *)
- _env->GetPrimitiveArrayCritical(buffers_ref, (jboolean *)0);
+ _env->GetIntArrayElements(buffers_ref, (jboolean *)0);
buffers = buffers_base + offset;
glDeleteBuffers(
@@ -627,7 +741,7 @@
exit:
if (buffers_base) {
- _env->ReleasePrimitiveArrayCritical(buffers_ref, buffers_base,
+ _env->ReleaseIntArrayElements(buffers_ref, (jint*)buffers_base,
JNI_ABORT);
}
if (_exception) {
@@ -642,12 +756,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLuint *buffers = (GLuint *) 0;
- buffers = (GLuint *)getPointer(_env, buffers_buf, &_array, &_remaining, &_bufferOffset);
+ buffers = (GLuint *)getPointer(_env, buffers_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < n) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -655,7 +769,7 @@
goto exit;
}
if (buffers == NULL) {
- char * _buffersBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _buffersBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
buffers = (GLuint *) (_buffersBase + _bufferOffset);
}
glDeleteBuffers(
@@ -665,7 +779,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, buffers, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)buffers, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -721,7 +835,7 @@
goto exit;
}
buffers_base = (GLuint *)
- _env->GetPrimitiveArrayCritical(buffers_ref, (jboolean *)0);
+ _env->GetIntArrayElements(buffers_ref, (jboolean *)0);
buffers = buffers_base + offset;
glGenBuffers(
@@ -731,7 +845,7 @@
exit:
if (buffers_base) {
- _env->ReleasePrimitiveArrayCritical(buffers_ref, buffers_base,
+ _env->ReleaseIntArrayElements(buffers_ref, (jint*)buffers_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -746,12 +860,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLuint *buffers = (GLuint *) 0;
- buffers = (GLuint *)getPointer(_env, buffers_buf, &_array, &_remaining, &_bufferOffset);
+ buffers = (GLuint *)getPointer(_env, buffers_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < n) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -759,7 +873,7 @@
goto exit;
}
if (buffers == NULL) {
- char * _buffersBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _buffersBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
buffers = (GLuint *) (_buffersBase + _bufferOffset);
}
glGenBuffers(
@@ -769,7 +883,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, buffers, _exception ? JNI_FALSE : JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)buffers, _exception ? JNI_ABORT : 0);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -780,14 +894,16 @@
static void
android_glGetBooleanv__I_3ZI
(JNIEnv *_env, jobject _this, jint pname, jbooleanArray params_ref, jint offset) {
- get<jbooleanArray, GLboolean, glGetBooleanv>(_env, _this, pname, params_ref, offset);
+ get<jbooleanArray, BooleanArrayGetter, jboolean*, BooleanArrayReleaser, GLboolean, glGetBooleanv>(
+ _env, _this, pname, params_ref, offset);
}
/* void glGetBooleanv ( GLenum pname, GLboolean *params ) */
static void
android_glGetBooleanv__ILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
- getarray<GLboolean, glGetBooleanv>(_env, _this, pname, params_buf);
+ getarray<GLboolean, jintArray, IntArrayGetter, jint*, IntArrayReleaser, glGetBooleanv>(
+ _env, _this, pname, params_buf);
}
/* void glGetBufferParameteriv ( GLenum target, GLenum pname, GLint *params ) */
static void
@@ -820,7 +936,7 @@
goto exit;
}
params_base = (GLint *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetBufferParameteriv(
@@ -831,7 +947,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -846,12 +962,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLint *params = (GLint *) 0;
- params = (GLint *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < 1) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -859,7 +975,7 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLint *) (_paramsBase + _bufferOffset);
}
glGetBufferParameteriv(
@@ -870,7 +986,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, _exception ? JNI_FALSE : JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, _exception ? JNI_ABORT : 0);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -908,7 +1024,7 @@
goto exit;
}
eqn_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(eqn_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(eqn_ref, (jboolean *)0);
eqn = eqn_base + offset;
glGetClipPlanef(
@@ -918,7 +1034,7 @@
exit:
if (eqn_base) {
- _env->ReleasePrimitiveArrayCritical(eqn_ref, eqn_base,
+ _env->ReleaseFloatArrayElements(eqn_ref, (jfloat*)eqn_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -933,12 +1049,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *eqn = (GLfloat *) 0;
- eqn = (GLfloat *)getPointer(_env, eqn_buf, &_array, &_remaining, &_bufferOffset);
+ eqn = (GLfloat *)getPointer(_env, eqn_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < 4) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -946,7 +1062,7 @@
goto exit;
}
if (eqn == NULL) {
- char * _eqnBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _eqnBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
eqn = (GLfloat *) (_eqnBase + _bufferOffset);
}
glGetClipPlanef(
@@ -956,7 +1072,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, eqn, _exception ? JNI_FALSE : JNI_TRUE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)eqn, _exception ? JNI_ABORT : 0);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -994,7 +1110,7 @@
goto exit;
}
eqn_base = (GLfixed *)
- _env->GetPrimitiveArrayCritical(eqn_ref, (jboolean *)0);
+ _env->GetIntArrayElements(eqn_ref, (jboolean *)0);
eqn = eqn_base + offset;
glGetClipPlanex(
@@ -1004,7 +1120,7 @@
exit:
if (eqn_base) {
- _env->ReleasePrimitiveArrayCritical(eqn_ref, eqn_base,
+ _env->ReleaseIntArrayElements(eqn_ref, (jint*)eqn_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -1019,12 +1135,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfixed *eqn = (GLfixed *) 0;
- eqn = (GLfixed *)getPointer(_env, eqn_buf, &_array, &_remaining, &_bufferOffset);
+ eqn = (GLfixed *)getPointer(_env, eqn_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < 4) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -1032,7 +1148,7 @@
goto exit;
}
if (eqn == NULL) {
- char * _eqnBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _eqnBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
eqn = (GLfixed *) (_eqnBase + _bufferOffset);
}
glGetClipPlanex(
@@ -1042,7 +1158,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, eqn, _exception ? JNI_FALSE : JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)eqn, _exception ? JNI_ABORT : 0);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -1074,7 +1190,7 @@
}
_remaining = _env->GetArrayLength(params_ref) - offset;
params_base = (GLfixed *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetFixedv(
@@ -1084,7 +1200,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -1096,14 +1212,14 @@
static void
android_glGetFixedv__ILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfixed *params = (GLfixed *) 0;
- params = (GLfixed *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfixed *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLfixed *) (_paramsBase + _bufferOffset);
}
glGetFixedv(
@@ -1111,7 +1227,7 @@
(GLfixed *)params
);
if (_array) {
- releasePointer(_env, _array, params, JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, 0);
}
}
@@ -1119,14 +1235,16 @@
static void
android_glGetFloatv__I_3FI
(JNIEnv *_env, jobject _this, jint pname, jfloatArray params_ref, jint offset) {
- get<jfloatArray, GLfloat, glGetFloatv>(_env, _this, pname, params_ref, offset);
+ get<jfloatArray, FloatArrayGetter, jfloat*, FloatArrayReleaser, GLfloat, glGetFloatv>(
+ _env, _this, pname, params_ref, offset);
}
/* void glGetFloatv ( GLenum pname, GLfloat *params ) */
static void
android_glGetFloatv__ILjava_nio_FloatBuffer_2
(JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
- getarray<GLfloat, glGetFloatv>(_env, _this, pname, params_buf);
+ getarray<GLfloat, jfloatArray, FloatArrayGetter, jfloat*, FloatArrayReleaser, glGetFloatv>(
+ _env, _this, pname, params_buf);
}
/* void glGetLightfv ( GLenum light, GLenum pname, GLfloat *params ) */
static void
@@ -1184,7 +1302,7 @@
goto exit;
}
params_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetLightfv(
@@ -1195,7 +1313,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseFloatArrayElements(params_ref, (jfloat*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -1210,12 +1328,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *params = (GLfloat *) 0;
- params = (GLfloat *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfloat *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
int _needed;
switch (pname) {
#if defined(GL_SPOT_DIRECTION)
@@ -1248,7 +1366,7 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
params = (GLfloat *) (_paramsBase + _bufferOffset);
}
glGetLightfv(
@@ -1259,7 +1377,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, _exception ? JNI_FALSE : JNI_TRUE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)params, _exception ? JNI_ABORT : 0);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -1322,7 +1440,7 @@
goto exit;
}
params_base = (GLfixed *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetLightxv(
@@ -1333,7 +1451,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -1348,12 +1466,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfixed *params = (GLfixed *) 0;
- params = (GLfixed *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfixed *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
int _needed;
switch (pname) {
#if defined(GL_SPOT_DIRECTION)
@@ -1386,7 +1504,7 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLfixed *) (_paramsBase + _bufferOffset);
}
glGetLightxv(
@@ -1397,7 +1515,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, _exception ? JNI_FALSE : JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, _exception ? JNI_ABORT : 0);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -1458,7 +1576,7 @@
goto exit;
}
params_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetMaterialfv(
@@ -1469,7 +1587,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseFloatArrayElements(params_ref, (jfloat*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -1484,12 +1602,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *params = (GLfloat *) 0;
- params = (GLfloat *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfloat *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
int _needed;
switch (pname) {
#if defined(GL_AMBIENT)
@@ -1520,7 +1638,7 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
params = (GLfloat *) (_paramsBase + _bufferOffset);
}
glGetMaterialfv(
@@ -1531,7 +1649,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, _exception ? JNI_FALSE : JNI_TRUE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)params, _exception ? JNI_ABORT : 0);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -1592,7 +1710,7 @@
goto exit;
}
params_base = (GLfixed *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetMaterialxv(
@@ -1603,7 +1721,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -1618,12 +1736,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfixed *params = (GLfixed *) 0;
- params = (GLfixed *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfixed *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
int _needed;
switch (pname) {
#if defined(GL_AMBIENT)
@@ -1654,7 +1772,7 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLfixed *) (_paramsBase + _bufferOffset);
}
glGetMaterialxv(
@@ -1665,7 +1783,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, _exception ? JNI_FALSE : JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, _exception ? JNI_ABORT : 0);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -1714,7 +1832,7 @@
goto exit;
}
params_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetTexEnvfv(
@@ -1725,7 +1843,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseFloatArrayElements(params_ref, (jfloat*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -1740,12 +1858,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *params = (GLfloat *) 0;
- params = (GLfloat *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfloat *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
int _needed;
switch (pname) {
#if defined(GL_TEXTURE_ENV_COLOR)
@@ -1764,7 +1882,7 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
params = (GLfloat *) (_paramsBase + _bufferOffset);
}
glGetTexEnvfv(
@@ -1775,7 +1893,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, _exception ? JNI_FALSE : JNI_TRUE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)params, _exception ? JNI_ABORT : 0);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -1824,7 +1942,7 @@
goto exit;
}
params_base = (GLint *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetTexEnviv(
@@ -1835,7 +1953,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -1850,12 +1968,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLint *params = (GLint *) 0;
- params = (GLint *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
int _needed;
switch (pname) {
#if defined(GL_TEXTURE_ENV_COLOR)
@@ -1874,7 +1992,7 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLint *) (_paramsBase + _bufferOffset);
}
glGetTexEnviv(
@@ -1885,7 +2003,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, _exception ? JNI_FALSE : JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, _exception ? JNI_ABORT : 0);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -1934,7 +2052,7 @@
goto exit;
}
params_base = (GLfixed *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetTexEnvxv(
@@ -1945,7 +2063,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -1960,12 +2078,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfixed *params = (GLfixed *) 0;
- params = (GLfixed *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfixed *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
int _needed;
switch (pname) {
#if defined(GL_TEXTURE_ENV_COLOR)
@@ -1984,7 +2102,7 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLfixed *) (_paramsBase + _bufferOffset);
}
glGetTexEnvxv(
@@ -1995,7 +2113,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, _exception ? JNI_FALSE : JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, _exception ? JNI_ABORT : 0);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -2033,7 +2151,7 @@
goto exit;
}
params_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetTexParameterfv(
@@ -2044,7 +2162,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseFloatArrayElements(params_ref, (jfloat*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -2059,12 +2177,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *params = (GLfloat *) 0;
- params = (GLfloat *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfloat *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < 1) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -2072,7 +2190,7 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
params = (GLfloat *) (_paramsBase + _bufferOffset);
}
glGetTexParameterfv(
@@ -2083,7 +2201,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, _exception ? JNI_FALSE : JNI_TRUE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)params, _exception ? JNI_ABORT : 0);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -2121,7 +2239,7 @@
goto exit;
}
params_base = (GLint *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetTexParameteriv(
@@ -2132,7 +2250,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -2147,12 +2265,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLint *params = (GLint *) 0;
- params = (GLint *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < 1) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -2160,7 +2278,7 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLint *) (_paramsBase + _bufferOffset);
}
glGetTexParameteriv(
@@ -2171,7 +2289,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, _exception ? JNI_FALSE : JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, _exception ? JNI_ABORT : 0);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -2209,7 +2327,7 @@
goto exit;
}
params_base = (GLfixed *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetTexParameterxv(
@@ -2220,7 +2338,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -2235,12 +2353,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfixed *params = (GLfixed *) 0;
- params = (GLfixed *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfixed *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < 1) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -2248,7 +2366,7 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLfixed *) (_paramsBase + _bufferOffset);
}
glGetTexParameterxv(
@@ -2259,7 +2377,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, _exception ? JNI_FALSE : JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, _exception ? JNI_ABORT : 0);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -2351,7 +2469,7 @@
goto exit;
}
params_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glPointParameterfv(
@@ -2361,7 +2479,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseFloatArrayElements(params_ref, (jfloat*)params_base,
JNI_ABORT);
}
if (_exception) {
@@ -2376,12 +2494,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *params = (GLfloat *) 0;
- params = (GLfloat *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfloat *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < 1) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -2389,7 +2507,7 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
params = (GLfloat *) (_paramsBase + _bufferOffset);
}
glPointParameterfv(
@@ -2399,7 +2517,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, JNI_FALSE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)params, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -2447,7 +2565,7 @@
goto exit;
}
params_base = (GLfixed *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glPointParameterxv(
@@ -2457,7 +2575,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
JNI_ABORT);
}
if (_exception) {
@@ -2472,12 +2590,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfixed *params = (GLfixed *) 0;
- params = (GLfixed *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfixed *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < 1) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -2485,7 +2603,7 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLfixed *) (_paramsBase + _bufferOffset);
}
glPointParameterxv(
@@ -2495,7 +2613,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -2590,7 +2708,7 @@
goto exit;
}
params_base = (GLint *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glTexEnviv(
@@ -2601,7 +2719,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
JNI_ABORT);
}
if (_exception) {
@@ -2616,12 +2734,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLint *params = (GLint *) 0;
- params = (GLint *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
int _needed;
switch (pname) {
#if defined(GL_TEXTURE_ENV_COLOR)
@@ -2640,7 +2758,7 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLint *) (_paramsBase + _bufferOffset);
}
glTexEnviv(
@@ -2651,7 +2769,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -2689,7 +2807,7 @@
goto exit;
}
params_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glTexParameterfv(
@@ -2700,7 +2818,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseFloatArrayElements(params_ref, (jfloat*)params_base,
JNI_ABORT);
}
if (_exception) {
@@ -2715,12 +2833,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *params = (GLfloat *) 0;
- params = (GLfloat *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfloat *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < 1) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -2728,7 +2846,7 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
params = (GLfloat *) (_paramsBase + _bufferOffset);
}
glTexParameterfv(
@@ -2739,7 +2857,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, JNI_FALSE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)params, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -2788,7 +2906,7 @@
goto exit;
}
params_base = (GLint *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glTexParameteriv(
@@ -2799,7 +2917,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
JNI_ABORT);
}
if (_exception) {
@@ -2814,12 +2932,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLint *params = (GLint *) 0;
- params = (GLint *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < 1) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -2827,7 +2945,7 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLint *) (_paramsBase + _bufferOffset);
}
glTexParameteriv(
@@ -2838,7 +2956,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -2876,7 +2994,7 @@
goto exit;
}
params_base = (GLfixed *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glTexParameterxv(
@@ -2887,7 +3005,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
JNI_ABORT);
}
if (_exception) {
@@ -2902,12 +3020,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfixed *params = (GLfixed *) 0;
- params = (GLfixed *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfixed *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < 1) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -2915,7 +3033,7 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLfixed *) (_paramsBase + _bufferOffset);
}
glTexParameterxv(
@@ -2926,7 +3044,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
diff --git a/core/jni/android_opengl_GLES11Ext.cpp b/core/jni/android_opengl_GLES11Ext.cpp
index 21e5670f..6422ff2 100644
--- a/core/jni/android_opengl_GLES11Ext.cpp
+++ b/core/jni/android_opengl_GLES11Ext.cpp
@@ -126,6 +126,116 @@
return NULL;
}
+class ByteArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jbyteArray array, jboolean* is_copy) {
+ return _env->GetByteArrayElements(array, is_copy);
+ }
+};
+class BooleanArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jbooleanArray array, jboolean* is_copy) {
+ return _env->GetBooleanArrayElements(array, is_copy);
+ }
+};
+class CharArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jcharArray array, jboolean* is_copy) {
+ return _env->GetCharArrayElements(array, is_copy);
+ }
+};
+class ShortArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jshortArray array, jboolean* is_copy) {
+ return _env->GetShortArrayElements(array, is_copy);
+ }
+};
+class IntArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jintArray array, jboolean* is_copy) {
+ return _env->GetIntArrayElements(array, is_copy);
+ }
+};
+class LongArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jlongArray array, jboolean* is_copy) {
+ return _env->GetLongArrayElements(array, is_copy);
+ }
+};
+class FloatArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jfloatArray array, jboolean* is_copy) {
+ return _env->GetFloatArrayElements(array, is_copy);
+ }
+};
+class DoubleArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jdoubleArray array, jboolean* is_copy) {
+ return _env->GetDoubleArrayElements(array, is_copy);
+ }
+};
+
+template<typename JTYPEARRAY, typename ARRAYGETTER>
+static void*
+getArrayPointer(JNIEnv *_env, JTYPEARRAY array, jboolean* is_copy) {
+ return ARRAYGETTER::Get(_env, array, is_copy);
+}
+
+class ByteArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jbyteArray array, jbyte* data, jboolean commit) {
+ _env->ReleaseByteArrayElements(array, data, commit ? 0 : JNI_ABORT);
+ }
+};
+class BooleanArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jbooleanArray array, jboolean* data, jboolean commit) {
+ _env->ReleaseBooleanArrayElements(array, data, commit ? 0 : JNI_ABORT);
+ }
+};
+class CharArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jcharArray array, jchar* data, jboolean commit) {
+ _env->ReleaseCharArrayElements(array, data, commit ? 0 : JNI_ABORT);
+ }
+};
+class ShortArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jshortArray array, jshort* data, jboolean commit) {
+ _env->ReleaseShortArrayElements(array, data, commit ? 0 : JNI_ABORT);
+ }
+};
+class IntArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jintArray array, jint* data, jboolean commit) {
+ _env->ReleaseIntArrayElements(array, data, commit ? 0 : JNI_ABORT);
+ }
+};
+class LongArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jlongArray array, jlong* data, jboolean commit) {
+ _env->ReleaseLongArrayElements(array, data, commit ? 0 : JNI_ABORT);
+ }
+};
+class FloatArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jfloatArray array, jfloat* data, jboolean commit) {
+ _env->ReleaseFloatArrayElements(array, data, commit ? 0 : JNI_ABORT);
+ }
+};
+class DoubleArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jdoubleArray array, jdouble* data, jboolean commit) {
+ _env->ReleaseDoubleArrayElements(array, data, commit ? 0 : JNI_ABORT);
+ }
+};
+
+template<typename JTYPEARRAY, typename NTYPEARRAY, typename ARRAYRELEASER>
+static void
+releaseArrayPointer(JNIEnv *_env, JTYPEARRAY array, NTYPEARRAY data, jboolean commit) {
+ ARRAYRELEASER::Release(_env, array, data, commit);
+}
+
static void
releasePointer(JNIEnv *_env, jarray array, void *data, jboolean commit)
{
@@ -229,7 +339,8 @@
return needed;
}
-template <typename JTYPEARRAY, typename CTYPE, void GET(GLenum, CTYPE*)>
+template <typename JTYPEARRAY, typename ARRAYGETTER, typename NTYPEARRAY,
+ typename ARRAYRELEASER, typename CTYPE, void GET(GLenum, CTYPE*)>
static void
get
(JNIEnv *_env, jobject _this, jint pname, JTYPEARRAY params_ref, jint offset) {
@@ -264,8 +375,8 @@
_exceptionMessage = "length - offset < needed";
goto exit;
}
- params_base = (CTYPE *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ params_base = (CTYPE *) getArrayPointer<JTYPEARRAY, ARRAYGETTER>(
+ _env, params_ref, (jboolean *)0);
params = params_base + offset;
GET(
@@ -275,8 +386,8 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
- _exception ? JNI_ABORT: 0);
+ releaseArrayPointer<JTYPEARRAY, NTYPEARRAY, ARRAYRELEASER>(
+ _env, params_ref, params_base, !_exception);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -284,20 +395,21 @@
}
-template <typename CTYPE, void GET(GLenum, CTYPE*)>
+template <typename CTYPE, typename JTYPEARRAY, typename ARRAYGETTER, typename NTYPEARRAY,
+ typename ARRAYRELEASER, void GET(GLenum, CTYPE*)>
static void
getarray
(JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
jint _exception = 0;
const char * _exceptionType;
const char * _exceptionMessage;
- jarray _array = (jarray) 0;
+ JTYPEARRAY _array = (JTYPEARRAY) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
CTYPE *params = (CTYPE *) 0;
int _needed = 0;
- params = (CTYPE *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (CTYPE *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
_remaining /= sizeof(CTYPE); // convert from bytes to item count
_needed = getNeededCount(pname);
// if we didn't find this pname, we just assume the user passed
@@ -310,7 +422,8 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *) getArrayPointer<JTYPEARRAY, ARRAYGETTER>(
+ _env, _array, (jboolean *) 0);
params = (CTYPE *) (_paramsBase + _bufferOffset);
}
GET(
@@ -320,7 +433,8 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, _exception ? JNI_FALSE : JNI_TRUE);
+ releaseArrayPointer<JTYPEARRAY, NTYPEARRAY, ARRAYRELEASER>(
+ _env, _array, (NTYPEARRAY)params, _exception ? JNI_FALSE : JNI_TRUE);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -429,7 +543,7 @@
goto exit;
}
coords_base = (GLshort *)
- _env->GetPrimitiveArrayCritical(coords_ref, (jboolean *)0);
+ _env->GetShortArrayElements(coords_ref, (jboolean *)0);
coords = coords_base + offset;
glDrawTexsvOES(
@@ -438,7 +552,7 @@
exit:
if (coords_base) {
- _env->ReleasePrimitiveArrayCritical(coords_ref, coords_base,
+ _env->ReleaseShortArrayElements(coords_ref, (jshort*)coords_base,
JNI_ABORT);
}
if (_exception) {
@@ -453,12 +567,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jshortArray _array = (jshortArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLshort *coords = (GLshort *) 0;
- coords = (GLshort *)getPointer(_env, coords_buf, &_array, &_remaining, &_bufferOffset);
+ coords = (GLshort *)getPointer(_env, coords_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < 5) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -466,7 +580,7 @@
goto exit;
}
if (coords == NULL) {
- char * _coordsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _coordsBase = (char *)_env->GetShortArrayElements(_array, (jboolean *) 0);
coords = (GLshort *) (_coordsBase + _bufferOffset);
}
glDrawTexsvOES(
@@ -475,7 +589,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, coords, JNI_FALSE);
+ _env->ReleaseShortArrayElements(_array, (jshort*)coords, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -513,7 +627,7 @@
goto exit;
}
coords_base = (GLint *)
- _env->GetPrimitiveArrayCritical(coords_ref, (jboolean *)0);
+ _env->GetIntArrayElements(coords_ref, (jboolean *)0);
coords = coords_base + offset;
glDrawTexivOES(
@@ -522,7 +636,7 @@
exit:
if (coords_base) {
- _env->ReleasePrimitiveArrayCritical(coords_ref, coords_base,
+ _env->ReleaseIntArrayElements(coords_ref, (jint*)coords_base,
JNI_ABORT);
}
if (_exception) {
@@ -537,12 +651,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLint *coords = (GLint *) 0;
- coords = (GLint *)getPointer(_env, coords_buf, &_array, &_remaining, &_bufferOffset);
+ coords = (GLint *)getPointer(_env, coords_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < 5) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -550,7 +664,7 @@
goto exit;
}
if (coords == NULL) {
- char * _coordsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _coordsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
coords = (GLint *) (_coordsBase + _bufferOffset);
}
glDrawTexivOES(
@@ -559,7 +673,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, coords, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)coords, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -597,7 +711,7 @@
goto exit;
}
coords_base = (GLfixed *)
- _env->GetPrimitiveArrayCritical(coords_ref, (jboolean *)0);
+ _env->GetIntArrayElements(coords_ref, (jboolean *)0);
coords = coords_base + offset;
glDrawTexxvOES(
@@ -606,7 +720,7 @@
exit:
if (coords_base) {
- _env->ReleasePrimitiveArrayCritical(coords_ref, coords_base,
+ _env->ReleaseIntArrayElements(coords_ref, (jint*)coords_base,
JNI_ABORT);
}
if (_exception) {
@@ -621,12 +735,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfixed *coords = (GLfixed *) 0;
- coords = (GLfixed *)getPointer(_env, coords_buf, &_array, &_remaining, &_bufferOffset);
+ coords = (GLfixed *)getPointer(_env, coords_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < 5) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -634,7 +748,7 @@
goto exit;
}
if (coords == NULL) {
- char * _coordsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _coordsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
coords = (GLfixed *) (_coordsBase + _bufferOffset);
}
glDrawTexxvOES(
@@ -643,7 +757,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, coords, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)coords, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -694,7 +808,7 @@
goto exit;
}
coords_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(coords_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(coords_ref, (jboolean *)0);
coords = coords_base + offset;
glDrawTexfvOES(
@@ -703,7 +817,7 @@
exit:
if (coords_base) {
- _env->ReleasePrimitiveArrayCritical(coords_ref, coords_base,
+ _env->ReleaseFloatArrayElements(coords_ref, (jfloat*)coords_base,
JNI_ABORT);
}
if (_exception) {
@@ -718,12 +832,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *coords = (GLfloat *) 0;
- coords = (GLfloat *)getPointer(_env, coords_buf, &_array, &_remaining, &_bufferOffset);
+ coords = (GLfloat *)getPointer(_env, coords_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < 5) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -731,7 +845,7 @@
goto exit;
}
if (coords == NULL) {
- char * _coordsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _coordsBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
coords = (GLfloat *) (_coordsBase + _bufferOffset);
}
glDrawTexfvOES(
@@ -740,7 +854,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, coords, JNI_FALSE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)coords, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -756,7 +870,7 @@
jint _remaining;
GLeglImageOES image = (GLeglImageOES) 0;
- image = (GLeglImageOES)getPointer(_env, image_buf, &_array, &_remaining, &_bufferOffset);
+ image = (GLeglImageOES)getPointer(_env, image_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (image == NULL) {
char * _imageBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
image = (GLeglImageOES) (_imageBase + _bufferOffset);
@@ -779,7 +893,7 @@
jint _remaining;
GLeglImageOES image = (GLeglImageOES) 0;
- image = (GLeglImageOES)getPointer(_env, image_buf, &_array, &_remaining, &_bufferOffset);
+ image = (GLeglImageOES)getPointer(_env, image_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (image == NULL) {
char * _imageBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
image = (GLeglImageOES) (_imageBase + _bufferOffset);
@@ -849,7 +963,7 @@
}
_remaining = _env->GetArrayLength(equation_ref) - offset;
equation_base = (GLfixed *)
- _env->GetPrimitiveArrayCritical(equation_ref, (jboolean *)0);
+ _env->GetIntArrayElements(equation_ref, (jboolean *)0);
equation = equation_base + offset;
glClipPlanexOES(
@@ -859,7 +973,7 @@
exit:
if (equation_base) {
- _env->ReleasePrimitiveArrayCritical(equation_ref, equation_base,
+ _env->ReleaseIntArrayElements(equation_ref, (jint*)equation_base,
JNI_ABORT);
}
if (_exception) {
@@ -871,14 +985,14 @@
static void
android_glClipPlanexOES__ILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint plane, jobject equation_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfixed *equation = (GLfixed *) 0;
- equation = (GLfixed *)getPointer(_env, equation_buf, &_array, &_remaining, &_bufferOffset);
+ equation = (GLfixed *)getPointer(_env, equation_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (equation == NULL) {
- char * _equationBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _equationBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
equation = (GLfixed *) (_equationBase + _bufferOffset);
}
glClipPlanexOES(
@@ -886,7 +1000,7 @@
(GLfixed *)equation
);
if (_array) {
- releasePointer(_env, _array, equation, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)equation, JNI_ABORT);
}
}
@@ -947,7 +1061,7 @@
}
_remaining = _env->GetArrayLength(params_ref) - offset;
params_base = (GLfixed *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glFogxvOES(
@@ -957,7 +1071,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
JNI_ABORT);
}
if (_exception) {
@@ -969,14 +1083,14 @@
static void
android_glFogxvOES__ILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfixed *params = (GLfixed *) 0;
- params = (GLfixed *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfixed *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLfixed *) (_paramsBase + _bufferOffset);
}
glFogxvOES(
@@ -984,7 +1098,7 @@
(GLfixed *)params
);
if (_array) {
- releasePointer(_env, _array, params, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, JNI_ABORT);
}
}
@@ -1033,7 +1147,7 @@
goto exit;
}
eqn_base = (GLfixed *)
- _env->GetPrimitiveArrayCritical(eqn_ref, (jboolean *)0);
+ _env->GetIntArrayElements(eqn_ref, (jboolean *)0);
eqn = eqn_base + offset;
glGetClipPlanexOES(
@@ -1043,7 +1157,7 @@
exit:
if (eqn_base) {
- _env->ReleasePrimitiveArrayCritical(eqn_ref, eqn_base,
+ _env->ReleaseIntArrayElements(eqn_ref, (jint*)eqn_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -1058,12 +1172,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfixed *eqn = (GLfixed *) 0;
- eqn = (GLfixed *)getPointer(_env, eqn_buf, &_array, &_remaining, &_bufferOffset);
+ eqn = (GLfixed *)getPointer(_env, eqn_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < 4) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -1071,7 +1185,7 @@
goto exit;
}
if (eqn == NULL) {
- char * _eqnBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _eqnBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
eqn = (GLfixed *) (_eqnBase + _bufferOffset);
}
glGetClipPlanexOES(
@@ -1081,7 +1195,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, eqn, _exception ? JNI_FALSE : JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)eqn, _exception ? JNI_ABORT : 0);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -1113,7 +1227,7 @@
}
_remaining = _env->GetArrayLength(params_ref) - offset;
params_base = (GLfixed *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetFixedvOES(
@@ -1123,7 +1237,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -1135,14 +1249,14 @@
static void
android_glGetFixedvOES__ILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfixed *params = (GLfixed *) 0;
- params = (GLfixed *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfixed *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLfixed *) (_paramsBase + _bufferOffset);
}
glGetFixedvOES(
@@ -1150,7 +1264,7 @@
(GLfixed *)params
);
if (_array) {
- releasePointer(_env, _array, params, JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, 0);
}
}
@@ -1179,7 +1293,7 @@
}
_remaining = _env->GetArrayLength(params_ref) - offset;
params_base = (GLfixed *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetLightxvOES(
@@ -1190,7 +1304,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -1202,14 +1316,14 @@
static void
android_glGetLightxvOES__IILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint light, jint pname, jobject params_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfixed *params = (GLfixed *) 0;
- params = (GLfixed *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfixed *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLfixed *) (_paramsBase + _bufferOffset);
}
glGetLightxvOES(
@@ -1218,7 +1332,7 @@
(GLfixed *)params
);
if (_array) {
- releasePointer(_env, _array, params, JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, 0);
}
}
@@ -1247,7 +1361,7 @@
}
_remaining = _env->GetArrayLength(params_ref) - offset;
params_base = (GLfixed *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetMaterialxvOES(
@@ -1258,7 +1372,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -1270,14 +1384,14 @@
static void
android_glGetMaterialxvOES__IILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint face, jint pname, jobject params_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfixed *params = (GLfixed *) 0;
- params = (GLfixed *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfixed *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLfixed *) (_paramsBase + _bufferOffset);
}
glGetMaterialxvOES(
@@ -1286,7 +1400,7 @@
(GLfixed *)params
);
if (_array) {
- releasePointer(_env, _array, params, JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, 0);
}
}
@@ -1315,7 +1429,7 @@
}
_remaining = _env->GetArrayLength(params_ref) - offset;
params_base = (GLfixed *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetTexEnvxvOES(
@@ -1326,7 +1440,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -1338,14 +1452,14 @@
static void
android_glGetTexEnvxvOES__IILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint env, jint pname, jobject params_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfixed *params = (GLfixed *) 0;
- params = (GLfixed *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfixed *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLfixed *) (_paramsBase + _bufferOffset);
}
glGetTexEnvxvOES(
@@ -1354,7 +1468,7 @@
(GLfixed *)params
);
if (_array) {
- releasePointer(_env, _array, params, JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, 0);
}
}
@@ -1383,7 +1497,7 @@
}
_remaining = _env->GetArrayLength(params_ref) - offset;
params_base = (GLfixed *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetTexParameterxvOES(
@@ -1394,7 +1508,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -1406,14 +1520,14 @@
static void
android_glGetTexParameterxvOES__IILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint target, jint pname, jobject params_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfixed *params = (GLfixed *) 0;
- params = (GLfixed *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfixed *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLfixed *) (_paramsBase + _bufferOffset);
}
glGetTexParameterxvOES(
@@ -1422,7 +1536,7 @@
(GLfixed *)params
);
if (_array) {
- releasePointer(_env, _array, params, JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, 0);
}
}
@@ -1461,7 +1575,7 @@
}
_remaining = _env->GetArrayLength(params_ref) - offset;
params_base = (GLfixed *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glLightModelxvOES(
@@ -1471,7 +1585,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
JNI_ABORT);
}
if (_exception) {
@@ -1483,14 +1597,14 @@
static void
android_glLightModelxvOES__ILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfixed *params = (GLfixed *) 0;
- params = (GLfixed *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfixed *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLfixed *) (_paramsBase + _bufferOffset);
}
glLightModelxvOES(
@@ -1498,7 +1612,7 @@
(GLfixed *)params
);
if (_array) {
- releasePointer(_env, _array, params, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, JNI_ABORT);
}
}
@@ -1538,7 +1652,7 @@
}
_remaining = _env->GetArrayLength(params_ref) - offset;
params_base = (GLfixed *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glLightxvOES(
@@ -1549,7 +1663,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
JNI_ABORT);
}
if (_exception) {
@@ -1561,14 +1675,14 @@
static void
android_glLightxvOES__IILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint light, jint pname, jobject params_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfixed *params = (GLfixed *) 0;
- params = (GLfixed *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfixed *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLfixed *) (_paramsBase + _bufferOffset);
}
glLightxvOES(
@@ -1577,7 +1691,7 @@
(GLfixed *)params
);
if (_array) {
- releasePointer(_env, _array, params, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, JNI_ABORT);
}
}
@@ -1615,7 +1729,7 @@
}
_remaining = _env->GetArrayLength(m_ref) - offset;
m_base = (GLfixed *)
- _env->GetPrimitiveArrayCritical(m_ref, (jboolean *)0);
+ _env->GetIntArrayElements(m_ref, (jboolean *)0);
m = m_base + offset;
glLoadMatrixxOES(
@@ -1624,7 +1738,7 @@
exit:
if (m_base) {
- _env->ReleasePrimitiveArrayCritical(m_ref, m_base,
+ _env->ReleaseIntArrayElements(m_ref, (jint*)m_base,
JNI_ABORT);
}
if (_exception) {
@@ -1636,21 +1750,21 @@
static void
android_glLoadMatrixxOES__Ljava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jobject m_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfixed *m = (GLfixed *) 0;
- m = (GLfixed *)getPointer(_env, m_buf, &_array, &_remaining, &_bufferOffset);
+ m = (GLfixed *)getPointer(_env, m_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (m == NULL) {
- char * _mBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _mBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
m = (GLfixed *) (_mBase + _bufferOffset);
}
glLoadMatrixxOES(
(GLfixed *)m
);
if (_array) {
- releasePointer(_env, _array, m, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)m, JNI_ABORT);
}
}
@@ -1690,7 +1804,7 @@
}
_remaining = _env->GetArrayLength(params_ref) - offset;
params_base = (GLfixed *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glMaterialxvOES(
@@ -1701,7 +1815,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
JNI_ABORT);
}
if (_exception) {
@@ -1713,14 +1827,14 @@
static void
android_glMaterialxvOES__IILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint face, jint pname, jobject params_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfixed *params = (GLfixed *) 0;
- params = (GLfixed *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfixed *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLfixed *) (_paramsBase + _bufferOffset);
}
glMaterialxvOES(
@@ -1729,7 +1843,7 @@
(GLfixed *)params
);
if (_array) {
- releasePointer(_env, _array, params, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, JNI_ABORT);
}
}
@@ -1758,7 +1872,7 @@
}
_remaining = _env->GetArrayLength(m_ref) - offset;
m_base = (GLfixed *)
- _env->GetPrimitiveArrayCritical(m_ref, (jboolean *)0);
+ _env->GetIntArrayElements(m_ref, (jboolean *)0);
m = m_base + offset;
glMultMatrixxOES(
@@ -1767,7 +1881,7 @@
exit:
if (m_base) {
- _env->ReleasePrimitiveArrayCritical(m_ref, m_base,
+ _env->ReleaseIntArrayElements(m_ref, (jint*)m_base,
JNI_ABORT);
}
if (_exception) {
@@ -1779,21 +1893,21 @@
static void
android_glMultMatrixxOES__Ljava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jobject m_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfixed *m = (GLfixed *) 0;
- m = (GLfixed *)getPointer(_env, m_buf, &_array, &_remaining, &_bufferOffset);
+ m = (GLfixed *)getPointer(_env, m_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (m == NULL) {
- char * _mBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _mBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
m = (GLfixed *) (_mBase + _bufferOffset);
}
glMultMatrixxOES(
(GLfixed *)m
);
if (_array) {
- releasePointer(_env, _array, m, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)m, JNI_ABORT);
}
}
@@ -1870,7 +1984,7 @@
}
_remaining = _env->GetArrayLength(params_ref) - offset;
params_base = (GLfixed *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glPointParameterxvOES(
@@ -1880,7 +1994,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
JNI_ABORT);
}
if (_exception) {
@@ -1892,14 +2006,14 @@
static void
android_glPointParameterxvOES__ILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfixed *params = (GLfixed *) 0;
- params = (GLfixed *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfixed *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLfixed *) (_paramsBase + _bufferOffset);
}
glPointParameterxvOES(
@@ -1907,7 +2021,7 @@
(GLfixed *)params
);
if (_array) {
- releasePointer(_env, _array, params, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, JNI_ABORT);
}
}
@@ -1999,7 +2113,7 @@
}
_remaining = _env->GetArrayLength(params_ref) - offset;
params_base = (GLfixed *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glTexEnvxvOES(
@@ -2010,7 +2124,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
JNI_ABORT);
}
if (_exception) {
@@ -2022,14 +2136,14 @@
static void
android_glTexEnvxvOES__IILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint target, jint pname, jobject params_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfixed *params = (GLfixed *) 0;
- params = (GLfixed *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfixed *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLfixed *) (_paramsBase + _bufferOffset);
}
glTexEnvxvOES(
@@ -2038,7 +2152,7 @@
(GLfixed *)params
);
if (_array) {
- releasePointer(_env, _array, params, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, JNI_ABORT);
}
}
@@ -2078,7 +2192,7 @@
}
_remaining = _env->GetArrayLength(params_ref) - offset;
params_base = (GLfixed *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glTexParameterxvOES(
@@ -2089,7 +2203,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
JNI_ABORT);
}
if (_exception) {
@@ -2101,14 +2215,14 @@
static void
android_glTexParameterxvOES__IILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint target, jint pname, jobject params_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfixed *params = (GLfixed *) 0;
- params = (GLfixed *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfixed *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLfixed *) (_paramsBase + _bufferOffset);
}
glTexParameterxvOES(
@@ -2117,7 +2231,7 @@
(GLfixed *)params
);
if (_array) {
- releasePointer(_env, _array, params, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, JNI_ABORT);
}
}
@@ -2184,7 +2298,7 @@
goto exit;
}
renderbuffers_base = (GLuint *)
- _env->GetPrimitiveArrayCritical(renderbuffers_ref, (jboolean *)0);
+ _env->GetIntArrayElements(renderbuffers_ref, (jboolean *)0);
renderbuffers = renderbuffers_base + offset;
glDeleteRenderbuffersOES(
@@ -2194,7 +2308,7 @@
exit:
if (renderbuffers_base) {
- _env->ReleasePrimitiveArrayCritical(renderbuffers_ref, renderbuffers_base,
+ _env->ReleaseIntArrayElements(renderbuffers_ref, (jint*)renderbuffers_base,
JNI_ABORT);
}
if (_exception) {
@@ -2209,12 +2323,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLuint *renderbuffers = (GLuint *) 0;
- renderbuffers = (GLuint *)getPointer(_env, renderbuffers_buf, &_array, &_remaining, &_bufferOffset);
+ renderbuffers = (GLuint *)getPointer(_env, renderbuffers_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < n) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -2222,7 +2336,7 @@
goto exit;
}
if (renderbuffers == NULL) {
- char * _renderbuffersBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _renderbuffersBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
renderbuffers = (GLuint *) (_renderbuffersBase + _bufferOffset);
}
glDeleteRenderbuffersOES(
@@ -2232,7 +2346,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, renderbuffers, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)renderbuffers, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -2270,7 +2384,7 @@
goto exit;
}
renderbuffers_base = (GLuint *)
- _env->GetPrimitiveArrayCritical(renderbuffers_ref, (jboolean *)0);
+ _env->GetIntArrayElements(renderbuffers_ref, (jboolean *)0);
renderbuffers = renderbuffers_base + offset;
glGenRenderbuffersOES(
@@ -2280,7 +2394,7 @@
exit:
if (renderbuffers_base) {
- _env->ReleasePrimitiveArrayCritical(renderbuffers_ref, renderbuffers_base,
+ _env->ReleaseIntArrayElements(renderbuffers_ref, (jint*)renderbuffers_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -2295,12 +2409,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLuint *renderbuffers = (GLuint *) 0;
- renderbuffers = (GLuint *)getPointer(_env, renderbuffers_buf, &_array, &_remaining, &_bufferOffset);
+ renderbuffers = (GLuint *)getPointer(_env, renderbuffers_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < n) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -2308,7 +2422,7 @@
goto exit;
}
if (renderbuffers == NULL) {
- char * _renderbuffersBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _renderbuffersBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
renderbuffers = (GLuint *) (_renderbuffersBase + _bufferOffset);
}
glGenRenderbuffersOES(
@@ -2318,7 +2432,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, renderbuffers, _exception ? JNI_FALSE : JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)renderbuffers, _exception ? JNI_ABORT : 0);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -2368,7 +2482,7 @@
goto exit;
}
params_base = (GLint *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetRenderbufferParameterivOES(
@@ -2379,7 +2493,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -2394,12 +2508,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLint *params = (GLint *) 0;
- params = (GLint *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < 1) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -2407,7 +2521,7 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLint *) (_paramsBase + _bufferOffset);
}
glGetRenderbufferParameterivOES(
@@ -2418,7 +2532,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, _exception ? JNI_FALSE : JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, _exception ? JNI_ABORT : 0);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -2477,7 +2591,7 @@
goto exit;
}
framebuffers_base = (GLuint *)
- _env->GetPrimitiveArrayCritical(framebuffers_ref, (jboolean *)0);
+ _env->GetIntArrayElements(framebuffers_ref, (jboolean *)0);
framebuffers = framebuffers_base + offset;
glDeleteFramebuffersOES(
@@ -2487,7 +2601,7 @@
exit:
if (framebuffers_base) {
- _env->ReleasePrimitiveArrayCritical(framebuffers_ref, framebuffers_base,
+ _env->ReleaseIntArrayElements(framebuffers_ref, (jint*)framebuffers_base,
JNI_ABORT);
}
if (_exception) {
@@ -2502,12 +2616,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLuint *framebuffers = (GLuint *) 0;
- framebuffers = (GLuint *)getPointer(_env, framebuffers_buf, &_array, &_remaining, &_bufferOffset);
+ framebuffers = (GLuint *)getPointer(_env, framebuffers_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < n) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -2515,7 +2629,7 @@
goto exit;
}
if (framebuffers == NULL) {
- char * _framebuffersBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _framebuffersBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
framebuffers = (GLuint *) (_framebuffersBase + _bufferOffset);
}
glDeleteFramebuffersOES(
@@ -2525,7 +2639,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, framebuffers, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)framebuffers, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -2563,7 +2677,7 @@
goto exit;
}
framebuffers_base = (GLuint *)
- _env->GetPrimitiveArrayCritical(framebuffers_ref, (jboolean *)0);
+ _env->GetIntArrayElements(framebuffers_ref, (jboolean *)0);
framebuffers = framebuffers_base + offset;
glGenFramebuffersOES(
@@ -2573,7 +2687,7 @@
exit:
if (framebuffers_base) {
- _env->ReleasePrimitiveArrayCritical(framebuffers_ref, framebuffers_base,
+ _env->ReleaseIntArrayElements(framebuffers_ref, (jint*)framebuffers_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -2588,12 +2702,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLuint *framebuffers = (GLuint *) 0;
- framebuffers = (GLuint *)getPointer(_env, framebuffers_buf, &_array, &_remaining, &_bufferOffset);
+ framebuffers = (GLuint *)getPointer(_env, framebuffers_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < n) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -2601,7 +2715,7 @@
goto exit;
}
if (framebuffers == NULL) {
- char * _framebuffersBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _framebuffersBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
framebuffers = (GLuint *) (_framebuffersBase + _bufferOffset);
}
glGenFramebuffersOES(
@@ -2611,7 +2725,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, framebuffers, _exception ? JNI_FALSE : JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)framebuffers, _exception ? JNI_ABORT : 0);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -2685,7 +2799,7 @@
goto exit;
}
params_base = (GLint *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetFramebufferAttachmentParameterivOES(
@@ -2697,7 +2811,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -2712,12 +2826,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLint *params = (GLint *) 0;
- params = (GLint *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < 1) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -2725,7 +2839,7 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLint *) (_paramsBase + _bufferOffset);
}
glGetFramebufferAttachmentParameterivOES(
@@ -2737,7 +2851,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, _exception ? JNI_FALSE : JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, _exception ? JNI_ABORT : 0);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -2880,7 +2994,7 @@
}
_remaining = _env->GetArrayLength(equation_ref) - offset;
equation_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(equation_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(equation_ref, (jboolean *)0);
equation = equation_base + offset;
glClipPlanefOES(
@@ -2890,7 +3004,7 @@
exit:
if (equation_base) {
- _env->ReleasePrimitiveArrayCritical(equation_ref, equation_base,
+ _env->ReleaseFloatArrayElements(equation_ref, (jfloat*)equation_base,
JNI_ABORT);
}
if (_exception) {
@@ -2902,14 +3016,14 @@
static void
android_glClipPlanefOES__ILjava_nio_FloatBuffer_2
(JNIEnv *_env, jobject _this, jint plane, jobject equation_buf) {
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *equation = (GLfloat *) 0;
- equation = (GLfloat *)getPointer(_env, equation_buf, &_array, &_remaining, &_bufferOffset);
+ equation = (GLfloat *)getPointer(_env, equation_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (equation == NULL) {
- char * _equationBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _equationBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
equation = (GLfloat *) (_equationBase + _bufferOffset);
}
glClipPlanefOES(
@@ -2917,7 +3031,7 @@
(GLfloat *)equation
);
if (_array) {
- releasePointer(_env, _array, equation, JNI_FALSE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)equation, JNI_ABORT);
}
}
@@ -2952,7 +3066,7 @@
goto exit;
}
eqn_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(eqn_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(eqn_ref, (jboolean *)0);
eqn = eqn_base + offset;
glGetClipPlanefOES(
@@ -2962,7 +3076,7 @@
exit:
if (eqn_base) {
- _env->ReleasePrimitiveArrayCritical(eqn_ref, eqn_base,
+ _env->ReleaseFloatArrayElements(eqn_ref, (jfloat*)eqn_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -2977,12 +3091,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *eqn = (GLfloat *) 0;
- eqn = (GLfloat *)getPointer(_env, eqn_buf, &_array, &_remaining, &_bufferOffset);
+ eqn = (GLfloat *)getPointer(_env, eqn_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < 4) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -2990,7 +3104,7 @@
goto exit;
}
if (eqn == NULL) {
- char * _eqnBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _eqnBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
eqn = (GLfloat *) (_eqnBase + _bufferOffset);
}
glGetClipPlanefOES(
@@ -3000,7 +3114,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, eqn, _exception ? JNI_FALSE : JNI_TRUE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)eqn, _exception ? JNI_ABORT : 0);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -3052,7 +3166,7 @@
}
_remaining = _env->GetArrayLength(params_ref) - offset;
params_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glTexGenfvOES(
@@ -3063,7 +3177,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseFloatArrayElements(params_ref, (jfloat*)params_base,
JNI_ABORT);
}
if (_exception) {
@@ -3075,14 +3189,14 @@
static void
android_glTexGenfvOES__IILjava_nio_FloatBuffer_2
(JNIEnv *_env, jobject _this, jint coord, jint pname, jobject params_buf) {
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *params = (GLfloat *) 0;
- params = (GLfloat *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfloat *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
params = (GLfloat *) (_paramsBase + _bufferOffset);
}
glTexGenfvOES(
@@ -3091,7 +3205,7 @@
(GLfloat *)params
);
if (_array) {
- releasePointer(_env, _array, params, JNI_FALSE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)params, JNI_ABORT);
}
}
@@ -3131,7 +3245,7 @@
}
_remaining = _env->GetArrayLength(params_ref) - offset;
params_base = (GLint *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glTexGenivOES(
@@ -3142,7 +3256,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
JNI_ABORT);
}
if (_exception) {
@@ -3154,14 +3268,14 @@
static void
android_glTexGenivOES__IILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint coord, jint pname, jobject params_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLint *params = (GLint *) 0;
- params = (GLint *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLint *) (_paramsBase + _bufferOffset);
}
glTexGenivOES(
@@ -3170,7 +3284,7 @@
(GLint *)params
);
if (_array) {
- releasePointer(_env, _array, params, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, JNI_ABORT);
}
}
@@ -3210,7 +3324,7 @@
}
_remaining = _env->GetArrayLength(params_ref) - offset;
params_base = (GLfixed *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glTexGenxvOES(
@@ -3221,7 +3335,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
JNI_ABORT);
}
if (_exception) {
@@ -3233,14 +3347,14 @@
static void
android_glTexGenxvOES__IILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint coord, jint pname, jobject params_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfixed *params = (GLfixed *) 0;
- params = (GLfixed *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfixed *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLfixed *) (_paramsBase + _bufferOffset);
}
glTexGenxvOES(
@@ -3249,7 +3363,7 @@
(GLfixed *)params
);
if (_array) {
- releasePointer(_env, _array, params, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, JNI_ABORT);
}
}
@@ -3278,7 +3392,7 @@
}
_remaining = _env->GetArrayLength(params_ref) - offset;
params_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetTexGenfvOES(
@@ -3289,7 +3403,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseFloatArrayElements(params_ref, (jfloat*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -3301,14 +3415,14 @@
static void
android_glGetTexGenfvOES__IILjava_nio_FloatBuffer_2
(JNIEnv *_env, jobject _this, jint coord, jint pname, jobject params_buf) {
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *params = (GLfloat *) 0;
- params = (GLfloat *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfloat *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
params = (GLfloat *) (_paramsBase + _bufferOffset);
}
glGetTexGenfvOES(
@@ -3317,7 +3431,7 @@
(GLfloat *)params
);
if (_array) {
- releasePointer(_env, _array, params, JNI_TRUE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)params, 0);
}
}
@@ -3346,7 +3460,7 @@
}
_remaining = _env->GetArrayLength(params_ref) - offset;
params_base = (GLint *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetTexGenivOES(
@@ -3357,7 +3471,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -3369,14 +3483,14 @@
static void
android_glGetTexGenivOES__IILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint coord, jint pname, jobject params_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLint *params = (GLint *) 0;
- params = (GLint *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLint *) (_paramsBase + _bufferOffset);
}
glGetTexGenivOES(
@@ -3385,7 +3499,7 @@
(GLint *)params
);
if (_array) {
- releasePointer(_env, _array, params, JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, 0);
}
}
@@ -3414,7 +3528,7 @@
}
_remaining = _env->GetArrayLength(params_ref) - offset;
params_base = (GLfixed *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetTexGenxvOES(
@@ -3425,7 +3539,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -3437,14 +3551,14 @@
static void
android_glGetTexGenxvOES__IILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint coord, jint pname, jobject params_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfixed *params = (GLfixed *) 0;
- params = (GLfixed *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfixed *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLfixed *) (_paramsBase + _bufferOffset);
}
glGetTexGenxvOES(
@@ -3453,7 +3567,7 @@
(GLfixed *)params
);
if (_array) {
- releasePointer(_env, _array, params, JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, 0);
}
}
diff --git a/core/jni/android_opengl_GLES20.cpp b/core/jni/android_opengl_GLES20.cpp
index cd0c1354..f9a0dfe 100644
--- a/core/jni/android_opengl_GLES20.cpp
+++ b/core/jni/android_opengl_GLES20.cpp
@@ -126,6 +126,116 @@
return NULL;
}
+class ByteArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jbyteArray array, jboolean* is_copy) {
+ return _env->GetByteArrayElements(array, is_copy);
+ }
+};
+class BooleanArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jbooleanArray array, jboolean* is_copy) {
+ return _env->GetBooleanArrayElements(array, is_copy);
+ }
+};
+class CharArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jcharArray array, jboolean* is_copy) {
+ return _env->GetCharArrayElements(array, is_copy);
+ }
+};
+class ShortArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jshortArray array, jboolean* is_copy) {
+ return _env->GetShortArrayElements(array, is_copy);
+ }
+};
+class IntArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jintArray array, jboolean* is_copy) {
+ return _env->GetIntArrayElements(array, is_copy);
+ }
+};
+class LongArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jlongArray array, jboolean* is_copy) {
+ return _env->GetLongArrayElements(array, is_copy);
+ }
+};
+class FloatArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jfloatArray array, jboolean* is_copy) {
+ return _env->GetFloatArrayElements(array, is_copy);
+ }
+};
+class DoubleArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jdoubleArray array, jboolean* is_copy) {
+ return _env->GetDoubleArrayElements(array, is_copy);
+ }
+};
+
+template<typename JTYPEARRAY, typename ARRAYGETTER>
+static void*
+getArrayPointer(JNIEnv *_env, JTYPEARRAY array, jboolean* is_copy) {
+ return ARRAYGETTER::Get(_env, array, is_copy);
+}
+
+class ByteArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jbyteArray array, jbyte* data, jboolean commit) {
+ _env->ReleaseByteArrayElements(array, data, commit ? 0 : JNI_ABORT);
+ }
+};
+class BooleanArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jbooleanArray array, jboolean* data, jboolean commit) {
+ _env->ReleaseBooleanArrayElements(array, data, commit ? 0 : JNI_ABORT);
+ }
+};
+class CharArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jcharArray array, jchar* data, jboolean commit) {
+ _env->ReleaseCharArrayElements(array, data, commit ? 0 : JNI_ABORT);
+ }
+};
+class ShortArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jshortArray array, jshort* data, jboolean commit) {
+ _env->ReleaseShortArrayElements(array, data, commit ? 0 : JNI_ABORT);
+ }
+};
+class IntArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jintArray array, jint* data, jboolean commit) {
+ _env->ReleaseIntArrayElements(array, data, commit ? 0 : JNI_ABORT);
+ }
+};
+class LongArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jlongArray array, jlong* data, jboolean commit) {
+ _env->ReleaseLongArrayElements(array, data, commit ? 0 : JNI_ABORT);
+ }
+};
+class FloatArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jfloatArray array, jfloat* data, jboolean commit) {
+ _env->ReleaseFloatArrayElements(array, data, commit ? 0 : JNI_ABORT);
+ }
+};
+class DoubleArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jdoubleArray array, jdouble* data, jboolean commit) {
+ _env->ReleaseDoubleArrayElements(array, data, commit ? 0 : JNI_ABORT);
+ }
+};
+
+template<typename JTYPEARRAY, typename NTYPEARRAY, typename ARRAYRELEASER>
+static void
+releaseArrayPointer(JNIEnv *_env, JTYPEARRAY array, NTYPEARRAY data, jboolean commit) {
+ ARRAYRELEASER::Release(_env, array, data, commit);
+}
+
static void
releasePointer(JNIEnv *_env, jarray array, void *data, jboolean commit)
{
@@ -229,7 +339,8 @@
return needed;
}
-template <typename JTYPEARRAY, typename CTYPE, void GET(GLenum, CTYPE*)>
+template <typename JTYPEARRAY, typename ARRAYGETTER, typename NTYPEARRAY,
+ typename ARRAYRELEASER, typename CTYPE, void GET(GLenum, CTYPE*)>
static void
get
(JNIEnv *_env, jobject _this, jint pname, JTYPEARRAY params_ref, jint offset) {
@@ -264,8 +375,8 @@
_exceptionMessage = "length - offset < needed";
goto exit;
}
- params_base = (CTYPE *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ params_base = (CTYPE *) getArrayPointer<JTYPEARRAY, ARRAYGETTER>(
+ _env, params_ref, (jboolean *)0);
params = params_base + offset;
GET(
@@ -275,8 +386,8 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
- _exception ? JNI_ABORT: 0);
+ releaseArrayPointer<JTYPEARRAY, NTYPEARRAY, ARRAYRELEASER>(
+ _env, params_ref, params_base, !_exception);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -284,20 +395,21 @@
}
-template <typename CTYPE, void GET(GLenum, CTYPE*)>
+template <typename CTYPE, typename JTYPEARRAY, typename ARRAYGETTER, typename NTYPEARRAY,
+ typename ARRAYRELEASER, void GET(GLenum, CTYPE*)>
static void
getarray
(JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
jint _exception = 0;
const char * _exceptionType;
const char * _exceptionMessage;
- jarray _array = (jarray) 0;
+ JTYPEARRAY _array = (JTYPEARRAY) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
CTYPE *params = (CTYPE *) 0;
int _needed = 0;
- params = (CTYPE *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (CTYPE *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
_remaining /= sizeof(CTYPE); // convert from bytes to item count
_needed = getNeededCount(pname);
// if we didn't find this pname, we just assume the user passed
@@ -310,7 +422,8 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *) getArrayPointer<JTYPEARRAY, ARRAYGETTER>(
+ _env, _array, (jboolean *) 0);
params = (CTYPE *) (_paramsBase + _bufferOffset);
}
GET(
@@ -320,7 +433,8 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, _exception ? JNI_FALSE : JNI_TRUE);
+ releaseArrayPointer<JTYPEARRAY, NTYPEARRAY, ARRAYRELEASER>(
+ _env, _array, (NTYPEARRAY)params, _exception ? JNI_FALSE : JNI_TRUE);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -486,7 +600,7 @@
GLvoid *data = (GLvoid *) 0;
if (data_buf) {
- data = (GLvoid *)getPointer(_env, data_buf, &_array, &_remaining, &_bufferOffset);
+ data = (GLvoid *)getPointer(_env, data_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < size) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -526,7 +640,7 @@
jint _remaining;
GLvoid *data = (GLvoid *) 0;
- data = (GLvoid *)getPointer(_env, data_buf, &_array, &_remaining, &_bufferOffset);
+ data = (GLvoid *)getPointer(_env, data_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < size) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -633,7 +747,7 @@
jint _remaining;
GLvoid *data = (GLvoid *) 0;
- data = (GLvoid *)getPointer(_env, data_buf, &_array, &_remaining, &_bufferOffset);
+ data = (GLvoid *)getPointer(_env, data_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (data == NULL) {
char * _dataBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
data = (GLvoid *) (_dataBase + _bufferOffset);
@@ -662,7 +776,7 @@
jint _remaining;
GLvoid *data = (GLvoid *) 0;
- data = (GLvoid *)getPointer(_env, data_buf, &_array, &_remaining, &_bufferOffset);
+ data = (GLvoid *)getPointer(_env, data_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (data == NULL) {
char * _dataBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
data = (GLvoid *) (_dataBase + _bufferOffset);
@@ -775,7 +889,7 @@
goto exit;
}
buffers_base = (GLuint *)
- _env->GetPrimitiveArrayCritical(buffers_ref, (jboolean *)0);
+ _env->GetIntArrayElements(buffers_ref, (jboolean *)0);
buffers = buffers_base + offset;
glDeleteBuffers(
@@ -785,7 +899,7 @@
exit:
if (buffers_base) {
- _env->ReleasePrimitiveArrayCritical(buffers_ref, buffers_base,
+ _env->ReleaseIntArrayElements(buffers_ref, (jint*)buffers_base,
JNI_ABORT);
}
if (_exception) {
@@ -800,12 +914,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLuint *buffers = (GLuint *) 0;
- buffers = (GLuint *)getPointer(_env, buffers_buf, &_array, &_remaining, &_bufferOffset);
+ buffers = (GLuint *)getPointer(_env, buffers_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < n) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -813,7 +927,7 @@
goto exit;
}
if (buffers == NULL) {
- char * _buffersBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _buffersBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
buffers = (GLuint *) (_buffersBase + _bufferOffset);
}
glDeleteBuffers(
@@ -823,7 +937,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, buffers, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)buffers, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -861,7 +975,7 @@
goto exit;
}
framebuffers_base = (GLuint *)
- _env->GetPrimitiveArrayCritical(framebuffers_ref, (jboolean *)0);
+ _env->GetIntArrayElements(framebuffers_ref, (jboolean *)0);
framebuffers = framebuffers_base + offset;
glDeleteFramebuffers(
@@ -871,7 +985,7 @@
exit:
if (framebuffers_base) {
- _env->ReleasePrimitiveArrayCritical(framebuffers_ref, framebuffers_base,
+ _env->ReleaseIntArrayElements(framebuffers_ref, (jint*)framebuffers_base,
JNI_ABORT);
}
if (_exception) {
@@ -886,12 +1000,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLuint *framebuffers = (GLuint *) 0;
- framebuffers = (GLuint *)getPointer(_env, framebuffers_buf, &_array, &_remaining, &_bufferOffset);
+ framebuffers = (GLuint *)getPointer(_env, framebuffers_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < n) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -899,7 +1013,7 @@
goto exit;
}
if (framebuffers == NULL) {
- char * _framebuffersBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _framebuffersBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
framebuffers = (GLuint *) (_framebuffersBase + _bufferOffset);
}
glDeleteFramebuffers(
@@ -909,7 +1023,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, framebuffers, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)framebuffers, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -956,7 +1070,7 @@
goto exit;
}
renderbuffers_base = (GLuint *)
- _env->GetPrimitiveArrayCritical(renderbuffers_ref, (jboolean *)0);
+ _env->GetIntArrayElements(renderbuffers_ref, (jboolean *)0);
renderbuffers = renderbuffers_base + offset;
glDeleteRenderbuffers(
@@ -966,7 +1080,7 @@
exit:
if (renderbuffers_base) {
- _env->ReleasePrimitiveArrayCritical(renderbuffers_ref, renderbuffers_base,
+ _env->ReleaseIntArrayElements(renderbuffers_ref, (jint*)renderbuffers_base,
JNI_ABORT);
}
if (_exception) {
@@ -981,12 +1095,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLuint *renderbuffers = (GLuint *) 0;
- renderbuffers = (GLuint *)getPointer(_env, renderbuffers_buf, &_array, &_remaining, &_bufferOffset);
+ renderbuffers = (GLuint *)getPointer(_env, renderbuffers_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < n) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -994,7 +1108,7 @@
goto exit;
}
if (renderbuffers == NULL) {
- char * _renderbuffersBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _renderbuffersBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
renderbuffers = (GLuint *) (_renderbuffersBase + _bufferOffset);
}
glDeleteRenderbuffers(
@@ -1004,7 +1118,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, renderbuffers, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)renderbuffers, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -1051,7 +1165,7 @@
goto exit;
}
textures_base = (GLuint *)
- _env->GetPrimitiveArrayCritical(textures_ref, (jboolean *)0);
+ _env->GetIntArrayElements(textures_ref, (jboolean *)0);
textures = textures_base + offset;
glDeleteTextures(
@@ -1061,7 +1175,7 @@
exit:
if (textures_base) {
- _env->ReleasePrimitiveArrayCritical(textures_ref, textures_base,
+ _env->ReleaseIntArrayElements(textures_ref, (jint*)textures_base,
JNI_ABORT);
}
if (_exception) {
@@ -1076,12 +1190,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLuint *textures = (GLuint *) 0;
- textures = (GLuint *)getPointer(_env, textures_buf, &_array, &_remaining, &_bufferOffset);
+ textures = (GLuint *)getPointer(_env, textures_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < n) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -1089,7 +1203,7 @@
goto exit;
}
if (textures == NULL) {
- char * _texturesBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _texturesBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
textures = (GLuint *) (_texturesBase + _bufferOffset);
}
glDeleteTextures(
@@ -1099,7 +1213,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, textures, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)textures, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -1203,7 +1317,7 @@
jint _remaining;
GLvoid *indices = (GLvoid *) 0;
- indices = (GLvoid *)getPointer(_env, indices_buf, &_array, &_remaining, &_bufferOffset);
+ indices = (GLvoid *)getPointer(_env, indices_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < count) {
_exception = 1;
_exceptionType = "java/lang/ArrayIndexOutOfBoundsException";
@@ -1327,7 +1441,7 @@
goto exit;
}
buffers_base = (GLuint *)
- _env->GetPrimitiveArrayCritical(buffers_ref, (jboolean *)0);
+ _env->GetIntArrayElements(buffers_ref, (jboolean *)0);
buffers = buffers_base + offset;
glGenBuffers(
@@ -1337,7 +1451,7 @@
exit:
if (buffers_base) {
- _env->ReleasePrimitiveArrayCritical(buffers_ref, buffers_base,
+ _env->ReleaseIntArrayElements(buffers_ref, (jint*)buffers_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -1352,12 +1466,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLuint *buffers = (GLuint *) 0;
- buffers = (GLuint *)getPointer(_env, buffers_buf, &_array, &_remaining, &_bufferOffset);
+ buffers = (GLuint *)getPointer(_env, buffers_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < n) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -1365,7 +1479,7 @@
goto exit;
}
if (buffers == NULL) {
- char * _buffersBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _buffersBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
buffers = (GLuint *) (_buffersBase + _bufferOffset);
}
glGenBuffers(
@@ -1375,7 +1489,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, buffers, _exception ? JNI_FALSE : JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)buffers, _exception ? JNI_ABORT : 0);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -1422,7 +1536,7 @@
goto exit;
}
framebuffers_base = (GLuint *)
- _env->GetPrimitiveArrayCritical(framebuffers_ref, (jboolean *)0);
+ _env->GetIntArrayElements(framebuffers_ref, (jboolean *)0);
framebuffers = framebuffers_base + offset;
glGenFramebuffers(
@@ -1432,7 +1546,7 @@
exit:
if (framebuffers_base) {
- _env->ReleasePrimitiveArrayCritical(framebuffers_ref, framebuffers_base,
+ _env->ReleaseIntArrayElements(framebuffers_ref, (jint*)framebuffers_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -1447,12 +1561,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLuint *framebuffers = (GLuint *) 0;
- framebuffers = (GLuint *)getPointer(_env, framebuffers_buf, &_array, &_remaining, &_bufferOffset);
+ framebuffers = (GLuint *)getPointer(_env, framebuffers_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < n) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -1460,7 +1574,7 @@
goto exit;
}
if (framebuffers == NULL) {
- char * _framebuffersBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _framebuffersBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
framebuffers = (GLuint *) (_framebuffersBase + _bufferOffset);
}
glGenFramebuffers(
@@ -1470,7 +1584,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, framebuffers, _exception ? JNI_FALSE : JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)framebuffers, _exception ? JNI_ABORT : 0);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -1508,7 +1622,7 @@
goto exit;
}
renderbuffers_base = (GLuint *)
- _env->GetPrimitiveArrayCritical(renderbuffers_ref, (jboolean *)0);
+ _env->GetIntArrayElements(renderbuffers_ref, (jboolean *)0);
renderbuffers = renderbuffers_base + offset;
glGenRenderbuffers(
@@ -1518,7 +1632,7 @@
exit:
if (renderbuffers_base) {
- _env->ReleasePrimitiveArrayCritical(renderbuffers_ref, renderbuffers_base,
+ _env->ReleaseIntArrayElements(renderbuffers_ref, (jint*)renderbuffers_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -1533,12 +1647,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLuint *renderbuffers = (GLuint *) 0;
- renderbuffers = (GLuint *)getPointer(_env, renderbuffers_buf, &_array, &_remaining, &_bufferOffset);
+ renderbuffers = (GLuint *)getPointer(_env, renderbuffers_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < n) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -1546,7 +1660,7 @@
goto exit;
}
if (renderbuffers == NULL) {
- char * _renderbuffersBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _renderbuffersBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
renderbuffers = (GLuint *) (_renderbuffersBase + _bufferOffset);
}
glGenRenderbuffers(
@@ -1556,7 +1670,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, renderbuffers, _exception ? JNI_FALSE : JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)renderbuffers, _exception ? JNI_ABORT : 0);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -1594,7 +1708,7 @@
goto exit;
}
textures_base = (GLuint *)
- _env->GetPrimitiveArrayCritical(textures_ref, (jboolean *)0);
+ _env->GetIntArrayElements(textures_ref, (jboolean *)0);
textures = textures_base + offset;
glGenTextures(
@@ -1604,7 +1718,7 @@
exit:
if (textures_base) {
- _env->ReleasePrimitiveArrayCritical(textures_ref, textures_base,
+ _env->ReleaseIntArrayElements(textures_ref, (jint*)textures_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -1619,12 +1733,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLuint *textures = (GLuint *) 0;
- textures = (GLuint *)getPointer(_env, textures_buf, &_array, &_remaining, &_bufferOffset);
+ textures = (GLuint *)getPointer(_env, textures_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < n) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -1632,7 +1746,7 @@
goto exit;
}
if (textures == NULL) {
- char * _texturesBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _texturesBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
textures = (GLuint *) (_texturesBase + _bufferOffset);
}
glGenTextures(
@@ -1642,7 +1756,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, textures, _exception ? JNI_FALSE : JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)textures, _exception ? JNI_ABORT : 0);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -1683,7 +1797,7 @@
}
_lengthRemaining = _env->GetArrayLength(length_ref) - lengthOffset;
length_base = (GLsizei *)
- _env->GetPrimitiveArrayCritical(length_ref, (jboolean *)0);
+ _env->GetIntArrayElements(length_ref, (jboolean *)0);
length = length_base + lengthOffset;
if (!size_ref) {
@@ -1700,7 +1814,7 @@
}
_sizeRemaining = _env->GetArrayLength(size_ref) - sizeOffset;
size_base = (GLint *)
- _env->GetPrimitiveArrayCritical(size_ref, (jboolean *)0);
+ _env->GetIntArrayElements(size_ref, (jboolean *)0);
size = size_base + sizeOffset;
if (!type_ref) {
@@ -1717,7 +1831,7 @@
}
_typeRemaining = _env->GetArrayLength(type_ref) - typeOffset;
type_base = (GLenum *)
- _env->GetPrimitiveArrayCritical(type_ref, (jboolean *)0);
+ _env->GetIntArrayElements(type_ref, (jboolean *)0);
type = type_base + typeOffset;
if (!name_ref) {
@@ -1734,7 +1848,7 @@
}
_nameRemaining = _env->GetArrayLength(name_ref) - nameOffset;
name_base = (char *)
- _env->GetPrimitiveArrayCritical(name_ref, (jboolean *)0);
+ _env->GetByteArrayElements(name_ref, (jboolean *)0);
name = name_base + nameOffset;
glGetActiveAttrib(
@@ -1749,19 +1863,19 @@
exit:
if (name_base) {
- _env->ReleasePrimitiveArrayCritical(name_ref, name_base,
+ _env->ReleaseByteArrayElements(name_ref, (jbyte*)name_base,
_exception ? JNI_ABORT: 0);
}
if (type_base) {
- _env->ReleasePrimitiveArrayCritical(type_ref, type_base,
+ _env->ReleaseIntArrayElements(type_ref, (jint*)type_base,
_exception ? JNI_ABORT: 0);
}
if (size_base) {
- _env->ReleasePrimitiveArrayCritical(size_ref, size_base,
+ _env->ReleaseIntArrayElements(size_ref, (jint*)size_base,
_exception ? JNI_ABORT: 0);
}
if (length_base) {
- _env->ReleasePrimitiveArrayCritical(length_ref, length_base,
+ _env->ReleaseIntArrayElements(length_ref, (jint*)length_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -1773,11 +1887,11 @@
static void
android_glGetActiveAttrib__IIILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_IntBuffer_2B
(JNIEnv *_env, jobject _this, jint program, jint index, jint bufsize, jobject length_buf, jobject size_buf, jobject type_buf, jbyte name) {
- jarray _lengthArray = (jarray) 0;
+ jintArray _lengthArray = (jintArray) 0;
jint _lengthBufferOffset = (jint) 0;
- jarray _sizeArray = (jarray) 0;
+ jintArray _sizeArray = (jintArray) 0;
jint _sizeBufferOffset = (jint) 0;
- jarray _typeArray = (jarray) 0;
+ jintArray _typeArray = (jintArray) 0;
jint _typeBufferOffset = (jint) 0;
jint _lengthRemaining;
GLsizei *length = (GLsizei *) 0;
@@ -1786,19 +1900,19 @@
jint _typeRemaining;
GLenum *type = (GLenum *) 0;
- length = (GLsizei *)getPointer(_env, length_buf, &_lengthArray, &_lengthRemaining, &_lengthBufferOffset);
- size = (GLint *)getPointer(_env, size_buf, &_sizeArray, &_sizeRemaining, &_sizeBufferOffset);
- type = (GLenum *)getPointer(_env, type_buf, &_typeArray, &_typeRemaining, &_typeBufferOffset);
+ length = (GLsizei *)getPointer(_env, length_buf, (jarray*)&_lengthArray, &_lengthRemaining, &_lengthBufferOffset);
+ size = (GLint *)getPointer(_env, size_buf, (jarray*)&_sizeArray, &_sizeRemaining, &_sizeBufferOffset);
+ type = (GLenum *)getPointer(_env, type_buf, (jarray*)&_typeArray, &_typeRemaining, &_typeBufferOffset);
if (length == NULL) {
- char * _lengthBase = (char *)_env->GetPrimitiveArrayCritical(_lengthArray, (jboolean *) 0);
+ char * _lengthBase = (char *)_env->GetIntArrayElements(_lengthArray, (jboolean *) 0);
length = (GLsizei *) (_lengthBase + _lengthBufferOffset);
}
if (size == NULL) {
- char * _sizeBase = (char *)_env->GetPrimitiveArrayCritical(_sizeArray, (jboolean *) 0);
+ char * _sizeBase = (char *)_env->GetIntArrayElements(_sizeArray, (jboolean *) 0);
size = (GLint *) (_sizeBase + _sizeBufferOffset);
}
if (type == NULL) {
- char * _typeBase = (char *)_env->GetPrimitiveArrayCritical(_typeArray, (jboolean *) 0);
+ char * _typeBase = (char *)_env->GetIntArrayElements(_typeArray, (jboolean *) 0);
type = (GLenum *) (_typeBase + _typeBufferOffset);
}
glGetActiveAttrib(
@@ -1811,13 +1925,13 @@
reinterpret_cast<char *>(name)
);
if (_typeArray) {
- releasePointer(_env, _typeArray, type, JNI_TRUE);
+ releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _typeArray, (jint*)type, JNI_TRUE);
}
if (_sizeArray) {
- releasePointer(_env, _sizeArray, size, JNI_TRUE);
+ releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _sizeArray, (jint*)size, JNI_TRUE);
}
if (_lengthArray) {
- releasePointer(_env, _lengthArray, length, JNI_TRUE);
+ releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _lengthArray, (jint*)length, JNI_TRUE);
}
}
@@ -1862,7 +1976,7 @@
}
_sizeRemaining = _env->GetArrayLength(size_ref) - sizeOffset;
size_base = (GLint *)
- _env->GetPrimitiveArrayCritical(size_ref, (jboolean *)0);
+ _env->GetIntArrayElements(size_ref, (jboolean *)0);
size = size_base + sizeOffset;
if (!type_ref) {
@@ -1879,7 +1993,7 @@
}
_typeRemaining = _env->GetArrayLength(type_ref) - typeOffset;
type_base = (GLenum *)
- _env->GetPrimitiveArrayCritical(type_ref, (jboolean *)0);
+ _env->GetIntArrayElements(type_ref, (jboolean *)0);
type = type_base + typeOffset;
glGetActiveAttrib(
@@ -1893,11 +2007,11 @@
);
exit:
if (type_base) {
- _env->ReleasePrimitiveArrayCritical(type_ref, type_base,
+ _env->ReleaseIntArrayElements(type_ref, (jint*)type_base,
_exception ? JNI_ABORT: 0);
}
if (size_base) {
- _env->ReleasePrimitiveArrayCritical(size_ref, size_base,
+ _env->ReleaseIntArrayElements(size_ref, (jint*)size_base,
_exception ? JNI_ABORT: 0);
}
if (_exception != 1) {
@@ -1920,9 +2034,9 @@
static jstring
android_glGetActiveAttrib2
(JNIEnv *_env, jobject _this, jint program, jint index, jobject size_buf, jobject type_buf) {
- jarray _sizeArray = (jarray) 0;
+ jintArray _sizeArray = (jintArray) 0;
jint _sizeBufferOffset = (jint) 0;
- jarray _typeArray = (jarray) 0;
+ jintArray _typeArray = (jintArray) 0;
jint _typeBufferOffset = (jint) 0;
jint _lengthRemaining;
GLsizei *length = (GLsizei *) 0;
@@ -1945,14 +2059,14 @@
return NULL;
}
- size = (GLint *)getPointer(_env, size_buf, &_sizeArray, &_sizeRemaining, &_sizeBufferOffset);
- type = (GLenum *)getPointer(_env, type_buf, &_typeArray, &_typeRemaining, &_typeBufferOffset);
+ size = (GLint *)getPointer(_env, size_buf, (jarray*)&_sizeArray, &_sizeRemaining, &_sizeBufferOffset);
+ type = (GLenum *)getPointer(_env, type_buf, (jarray*)&_typeArray, &_typeRemaining, &_typeBufferOffset);
if (size == NULL) {
- char * _sizeBase = (char *)_env->GetPrimitiveArrayCritical(_sizeArray, (jboolean *) 0);
+ char * _sizeBase = (char *)_env->GetIntArrayElements(_sizeArray, (jboolean *) 0);
size = (GLint *) (_sizeBase + _sizeBufferOffset);
}
if (type == NULL) {
- char * _typeBase = (char *)_env->GetPrimitiveArrayCritical(_typeArray, (jboolean *) 0);
+ char * _typeBase = (char *)_env->GetIntArrayElements(_typeArray, (jboolean *) 0);
type = (GLenum *) (_typeBase + _typeBufferOffset);
}
glGetActiveAttrib(
@@ -1966,10 +2080,10 @@
);
if (_typeArray) {
- releasePointer(_env, _typeArray, type, JNI_TRUE);
+ releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _typeArray, (jint*)type, JNI_TRUE);
}
if (_sizeArray) {
- releasePointer(_env, _sizeArray, size, JNI_TRUE);
+ releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _sizeArray, (jint*)size, JNI_TRUE);
}
result = _env->NewStringUTF(buf);
if (buf) {
@@ -2011,7 +2125,7 @@
}
_lengthRemaining = _env->GetArrayLength(length_ref) - lengthOffset;
length_base = (GLsizei *)
- _env->GetPrimitiveArrayCritical(length_ref, (jboolean *)0);
+ _env->GetIntArrayElements(length_ref, (jboolean *)0);
length = length_base + lengthOffset;
if (!size_ref) {
@@ -2028,7 +2142,7 @@
}
_sizeRemaining = _env->GetArrayLength(size_ref) - sizeOffset;
size_base = (GLint *)
- _env->GetPrimitiveArrayCritical(size_ref, (jboolean *)0);
+ _env->GetIntArrayElements(size_ref, (jboolean *)0);
size = size_base + sizeOffset;
if (!type_ref) {
@@ -2045,7 +2159,7 @@
}
_typeRemaining = _env->GetArrayLength(type_ref) - typeOffset;
type_base = (GLenum *)
- _env->GetPrimitiveArrayCritical(type_ref, (jboolean *)0);
+ _env->GetIntArrayElements(type_ref, (jboolean *)0);
type = type_base + typeOffset;
if (!name_ref) {
@@ -2062,7 +2176,7 @@
}
_nameRemaining = _env->GetArrayLength(name_ref) - nameOffset;
name_base = (char *)
- _env->GetPrimitiveArrayCritical(name_ref, (jboolean *)0);
+ _env->GetByteArrayElements(name_ref, (jboolean *)0);
name = name_base + nameOffset;
glGetActiveUniform(
@@ -2077,19 +2191,19 @@
exit:
if (name_base) {
- _env->ReleasePrimitiveArrayCritical(name_ref, name_base,
+ _env->ReleaseByteArrayElements(name_ref, (jbyte*)name_base,
_exception ? JNI_ABORT: 0);
}
if (type_base) {
- _env->ReleasePrimitiveArrayCritical(type_ref, type_base,
+ _env->ReleaseIntArrayElements(type_ref, (jint*)type_base,
_exception ? JNI_ABORT: 0);
}
if (size_base) {
- _env->ReleasePrimitiveArrayCritical(size_ref, size_base,
+ _env->ReleaseIntArrayElements(size_ref, (jint*)size_base,
_exception ? JNI_ABORT: 0);
}
if (length_base) {
- _env->ReleasePrimitiveArrayCritical(length_ref, length_base,
+ _env->ReleaseIntArrayElements(length_ref, (jint*)length_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -2101,11 +2215,11 @@
static void
android_glGetActiveUniform__IIILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_IntBuffer_2B
(JNIEnv *_env, jobject _this, jint program, jint index, jint bufsize, jobject length_buf, jobject size_buf, jobject type_buf, jbyte name) {
- jarray _lengthArray = (jarray) 0;
+ jintArray _lengthArray = (jintArray) 0;
jint _lengthBufferOffset = (jint) 0;
- jarray _sizeArray = (jarray) 0;
+ jintArray _sizeArray = (jintArray) 0;
jint _sizeBufferOffset = (jint) 0;
- jarray _typeArray = (jarray) 0;
+ jintArray _typeArray = (jintArray) 0;
jint _typeBufferOffset = (jint) 0;
jint _lengthRemaining;
GLsizei *length = (GLsizei *) 0;
@@ -2114,19 +2228,19 @@
jint _typeRemaining;
GLenum *type = (GLenum *) 0;
- length = (GLsizei *)getPointer(_env, length_buf, &_lengthArray, &_lengthRemaining, &_lengthBufferOffset);
- size = (GLint *)getPointer(_env, size_buf, &_sizeArray, &_sizeRemaining, &_sizeBufferOffset);
- type = (GLenum *)getPointer(_env, type_buf, &_typeArray, &_typeRemaining, &_typeBufferOffset);
+ length = (GLsizei *)getPointer(_env, length_buf, (jarray*)&_lengthArray, &_lengthRemaining, &_lengthBufferOffset);
+ size = (GLint *)getPointer(_env, size_buf, (jarray*)&_sizeArray, &_sizeRemaining, &_sizeBufferOffset);
+ type = (GLenum *)getPointer(_env, type_buf, (jarray*)&_typeArray, &_typeRemaining, &_typeBufferOffset);
if (length == NULL) {
- char * _lengthBase = (char *)_env->GetPrimitiveArrayCritical(_lengthArray, (jboolean *) 0);
+ char * _lengthBase = (char *)_env->GetIntArrayElements(_lengthArray, (jboolean *) 0);
length = (GLsizei *) (_lengthBase + _lengthBufferOffset);
}
if (size == NULL) {
- char * _sizeBase = (char *)_env->GetPrimitiveArrayCritical(_sizeArray, (jboolean *) 0);
+ char * _sizeBase = (char *)_env->GetIntArrayElements(_sizeArray, (jboolean *) 0);
size = (GLint *) (_sizeBase + _sizeBufferOffset);
}
if (type == NULL) {
- char * _typeBase = (char *)_env->GetPrimitiveArrayCritical(_typeArray, (jboolean *) 0);
+ char * _typeBase = (char *)_env->GetIntArrayElements(_typeArray, (jboolean *) 0);
type = (GLenum *) (_typeBase + _typeBufferOffset);
}
glGetActiveUniform(
@@ -2139,13 +2253,13 @@
reinterpret_cast<char *>(name)
);
if (_typeArray) {
- releasePointer(_env, _typeArray, type, JNI_TRUE);
+ releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _typeArray, (jint*)type, JNI_TRUE);
}
if (_sizeArray) {
- releasePointer(_env, _sizeArray, size, JNI_TRUE);
+ releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _sizeArray, (jint*)size, JNI_TRUE);
}
if (_lengthArray) {
- releasePointer(_env, _lengthArray, length, JNI_TRUE);
+ releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _lengthArray, (jint*)length, JNI_TRUE);
}
}
@@ -2193,7 +2307,7 @@
}
_sizeRemaining = _env->GetArrayLength(size_ref) - sizeOffset;
size_base = (GLint *)
- _env->GetPrimitiveArrayCritical(size_ref, (jboolean *)0);
+ _env->GetIntArrayElements(size_ref, (jboolean *)0);
size = size_base + sizeOffset;
if (!type_ref) {
@@ -2210,7 +2324,7 @@
}
_typeRemaining = _env->GetArrayLength(type_ref) - typeOffset;
type_base = (GLenum *)
- _env->GetPrimitiveArrayCritical(type_ref, (jboolean *)0);
+ _env->GetIntArrayElements(type_ref, (jboolean *)0);
type = type_base + typeOffset;
glGetActiveUniform(
@@ -2225,11 +2339,11 @@
exit:
if (type_base) {
- _env->ReleasePrimitiveArrayCritical(type_ref, type_base,
+ _env->ReleaseIntArrayElements(type_ref, (jint*)type_base,
_exception ? JNI_ABORT: 0);
}
if (size_base) {
- _env->ReleasePrimitiveArrayCritical(size_ref, size_base,
+ _env->ReleaseIntArrayElements(size_ref, (jint*)size_base,
_exception ? JNI_ABORT: 0);
}
if (_exception != 1) {
@@ -2251,9 +2365,9 @@
static jstring
android_glGetActiveUniform2
(JNIEnv *_env, jobject _this, jint program, jint index, jobject size_buf, jobject type_buf) {
- jarray _sizeArray = (jarray) 0;
+ jintArray _sizeArray = (jintArray) 0;
jint _sizeBufferOffset = (jint) 0;
- jarray _typeArray = (jarray) 0;
+ jintArray _typeArray = (jintArray) 0;
jint _typeBufferOffset = (jint) 0;
jint _sizeRemaining;
GLint *size = (GLint *) 0;
@@ -2273,15 +2387,15 @@
return NULL;
}
- size = (GLint *)getPointer(_env, size_buf, &_sizeArray, &_sizeRemaining, &_sizeBufferOffset);
- type = (GLenum *)getPointer(_env, type_buf, &_typeArray, &_typeRemaining, &_typeBufferOffset);
+ size = (GLint *)getPointer(_env, size_buf, (jarray*)&_sizeArray, &_sizeRemaining, &_sizeBufferOffset);
+ type = (GLenum *)getPointer(_env, type_buf, (jarray*)&_typeArray, &_typeRemaining, &_typeBufferOffset);
if (size == NULL) {
- char * _sizeBase = (char *)_env->GetPrimitiveArrayCritical(_sizeArray, (jboolean *) 0);
+ char * _sizeBase = (char *)_env->GetIntArrayElements(_sizeArray, (jboolean *) 0);
size = (GLint *) (_sizeBase + _sizeBufferOffset);
}
if (type == NULL) {
- char * _typeBase = (char *)_env->GetPrimitiveArrayCritical(_typeArray, (jboolean *) 0);
+ char * _typeBase = (char *)_env->GetIntArrayElements(_typeArray, (jboolean *) 0);
type = (GLenum *) (_typeBase + _typeBufferOffset);
}
glGetActiveUniform(
@@ -2295,10 +2409,10 @@
);
if (_typeArray) {
- releasePointer(_env, _typeArray, type, JNI_TRUE);
+ releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _typeArray, (jint*)type, JNI_TRUE);
}
if (_sizeArray) {
- releasePointer(_env, _sizeArray, size, JNI_TRUE);
+ releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _sizeArray, (jint*)size, JNI_TRUE);
}
result = _env->NewStringUTF(buf);
if (buf) {
@@ -2340,7 +2454,7 @@
goto exit;
}
count_base = (GLsizei *)
- _env->GetPrimitiveArrayCritical(count_ref, (jboolean *)0);
+ _env->GetIntArrayElements(count_ref, (jboolean *)0);
count = count_base + countOffset;
if (!shaders_ref) {
@@ -2363,7 +2477,7 @@
goto exit;
}
shaders_base = (GLuint *)
- _env->GetPrimitiveArrayCritical(shaders_ref, (jboolean *)0);
+ _env->GetIntArrayElements(shaders_ref, (jboolean *)0);
shaders = shaders_base + shadersOffset;
glGetAttachedShaders(
@@ -2375,11 +2489,11 @@
exit:
if (shaders_base) {
- _env->ReleasePrimitiveArrayCritical(shaders_ref, shaders_base,
+ _env->ReleaseIntArrayElements(shaders_ref, (jint*)shaders_base,
_exception ? JNI_ABORT: 0);
}
if (count_base) {
- _env->ReleasePrimitiveArrayCritical(count_ref, count_base,
+ _env->ReleaseIntArrayElements(count_ref, (jint*)count_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -2394,9 +2508,9 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _countArray = (jarray) 0;
+ jintArray _countArray = (jintArray) 0;
jint _countBufferOffset = (jint) 0;
- jarray _shadersArray = (jarray) 0;
+ jintArray _shadersArray = (jintArray) 0;
jint _shadersBufferOffset = (jint) 0;
jint _countRemaining;
GLsizei *count = (GLsizei *) 0;
@@ -2404,7 +2518,7 @@
GLuint *shaders = (GLuint *) 0;
if (count_buf) {
- count = (GLsizei *)getPointer(_env, count_buf, &_countArray, &_countRemaining, &_countBufferOffset);
+ count = (GLsizei *)getPointer(_env, count_buf, (jarray*)&_countArray, &_countRemaining, &_countBufferOffset);
if (_countRemaining < 1) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -2413,7 +2527,7 @@
}
}
if (shaders_buf) {
- shaders = (GLuint *)getPointer(_env, shaders_buf, &_shadersArray, &_shadersRemaining, &_shadersBufferOffset);
+ shaders = (GLuint *)getPointer(_env, shaders_buf, (jarray*)&_shadersArray, &_shadersRemaining, &_shadersBufferOffset);
if (_shadersRemaining < maxcount) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -2422,11 +2536,11 @@
}
}
if (count_buf && count == NULL) {
- char * _countBase = (char *)_env->GetPrimitiveArrayCritical(_countArray, (jboolean *) 0);
+ char * _countBase = (char *)_env->GetIntArrayElements(_countArray, (jboolean *) 0);
count = (GLsizei *) (_countBase + _countBufferOffset);
}
if (shaders_buf && shaders == NULL) {
- char * _shadersBase = (char *)_env->GetPrimitiveArrayCritical(_shadersArray, (jboolean *) 0);
+ char * _shadersBase = (char *)_env->GetIntArrayElements(_shadersArray, (jboolean *) 0);
shaders = (GLuint *) (_shadersBase + _shadersBufferOffset);
}
glGetAttachedShaders(
@@ -2438,10 +2552,10 @@
exit:
if (_shadersArray) {
- releasePointer(_env, _shadersArray, shaders, _exception ? JNI_FALSE : JNI_TRUE);
+ _env->ReleaseIntArrayElements(_shadersArray, (jint*)shaders, _exception ? JNI_ABORT : 0);
}
if (_countArray) {
- releasePointer(_env, _countArray, count, _exception ? JNI_FALSE : JNI_TRUE);
+ _env->ReleaseIntArrayElements(_countArray, (jint*)count, _exception ? JNI_ABORT : 0);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -2486,14 +2600,16 @@
static void
android_glGetBooleanv__I_3ZI
(JNIEnv *_env, jobject _this, jint pname, jbooleanArray params_ref, jint offset) {
- get<jbooleanArray, GLboolean, glGetBooleanv>(_env, _this, pname, params_ref, offset);
+ get<jbooleanArray, BooleanArrayGetter, jboolean*, BooleanArrayReleaser, GLboolean, glGetBooleanv>(
+ _env, _this, pname, params_ref, offset);
}
/* void glGetBooleanv ( GLenum pname, GLboolean *params ) */
static void
android_glGetBooleanv__ILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
- getarray<GLboolean, glGetBooleanv>(_env, _this, pname, params_buf);
+ getarray<GLboolean, jintArray, IntArrayGetter, jint*, IntArrayReleaser, glGetBooleanv>(
+ _env, _this, pname, params_buf);
}
/* void glGetBufferParameteriv ( GLenum target, GLenum pname, GLint *params ) */
static void
@@ -2526,7 +2642,7 @@
goto exit;
}
params_base = (GLint *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetBufferParameteriv(
@@ -2537,7 +2653,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -2552,12 +2668,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLint *params = (GLint *) 0;
- params = (GLint *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < 1) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -2565,7 +2681,7 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLint *) (_paramsBase + _bufferOffset);
}
glGetBufferParameteriv(
@@ -2576,7 +2692,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, _exception ? JNI_FALSE : JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, _exception ? JNI_ABORT : 0);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -2596,14 +2712,16 @@
static void
android_glGetFloatv__I_3FI
(JNIEnv *_env, jobject _this, jint pname, jfloatArray params_ref, jint offset) {
- get<jfloatArray, GLfloat, glGetFloatv>(_env, _this, pname, params_ref, offset);
+ get<jfloatArray, FloatArrayGetter, jfloat*, FloatArrayReleaser, GLfloat, glGetFloatv>(
+ _env, _this, pname, params_ref, offset);
}
/* void glGetFloatv ( GLenum pname, GLfloat *params ) */
static void
android_glGetFloatv__ILjava_nio_FloatBuffer_2
(JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
- getarray<GLfloat, glGetFloatv>(_env, _this, pname, params_buf);
+ getarray<GLfloat, jfloatArray, FloatArrayGetter, jfloat*, FloatArrayReleaser, glGetFloatv>(
+ _env, _this, pname, params_buf);
}
/* void glGetFramebufferAttachmentParameteriv ( GLenum target, GLenum attachment, GLenum pname, GLint *params ) */
static void
@@ -2630,7 +2748,7 @@
}
_remaining = _env->GetArrayLength(params_ref) - offset;
params_base = (GLint *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetFramebufferAttachmentParameteriv(
@@ -2642,7 +2760,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -2654,14 +2772,14 @@
static void
android_glGetFramebufferAttachmentParameteriv__IIILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint target, jint attachment, jint pname, jobject params_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLint *params = (GLint *) 0;
- params = (GLint *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLint *) (_paramsBase + _bufferOffset);
}
glGetFramebufferAttachmentParameteriv(
@@ -2671,7 +2789,7 @@
(GLint *)params
);
if (_array) {
- releasePointer(_env, _array, params, JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, 0);
}
}
@@ -2679,16 +2797,17 @@
static void
android_glGetIntegerv__I_3II
(JNIEnv *_env, jobject _this, jint pname, jintArray params_ref, jint offset) {
- get<jintArray, GLint, glGetIntegerv>(_env, _this, pname, params_ref, offset);
+ get<jintArray, IntArrayGetter, jint*, IntArrayReleaser, GLint, glGetIntegerv>(
+ _env, _this, pname, params_ref, offset);
}
/* void glGetIntegerv ( GLenum pname, GLint *params ) */
static void
android_glGetIntegerv__ILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
- getarray<GLint, glGetIntegerv>(_env, _this, pname, params_buf);
+ getarray<GLint, jintArray, IntArrayGetter, jint*, IntArrayReleaser, glGetIntegerv>(
+ _env, _this, pname, params_buf);
}
-
/* void glGetProgramiv ( GLuint program, GLenum pname, GLint *params ) */
static void
android_glGetProgramiv__II_3II
@@ -2720,7 +2839,7 @@
goto exit;
}
params_base = (GLint *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetProgramiv(
@@ -2731,7 +2850,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -2746,12 +2865,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLint *params = (GLint *) 0;
- params = (GLint *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < 1) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -2759,7 +2878,7 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLint *) (_paramsBase + _bufferOffset);
}
glGetProgramiv(
@@ -2770,7 +2889,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, _exception ? JNI_FALSE : JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, _exception ? JNI_ABORT : 0);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -2827,7 +2946,7 @@
goto exit;
}
params_base = (GLint *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetRenderbufferParameteriv(
@@ -2838,7 +2957,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -2853,12 +2972,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLint *params = (GLint *) 0;
- params = (GLint *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < 1) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -2866,7 +2985,7 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLint *) (_paramsBase + _bufferOffset);
}
glGetRenderbufferParameteriv(
@@ -2877,7 +2996,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, _exception ? JNI_FALSE : JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, _exception ? JNI_ABORT : 0);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -2915,7 +3034,7 @@
goto exit;
}
params_base = (GLint *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetShaderiv(
@@ -2926,7 +3045,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -2941,12 +3060,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLint *params = (GLint *) 0;
- params = (GLint *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < 1) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -2954,7 +3073,7 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLint *) (_paramsBase + _bufferOffset);
}
glGetShaderiv(
@@ -2965,7 +3084,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, _exception ? JNI_FALSE : JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, _exception ? JNI_ABORT : 0);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -3025,7 +3144,7 @@
goto exit;
}
range_base = (GLint *)
- _env->GetPrimitiveArrayCritical(range_ref, (jboolean *)0);
+ _env->GetIntArrayElements(range_ref, (jboolean *)0);
range = range_base + rangeOffset;
if (!precision_ref) {
@@ -3048,7 +3167,7 @@
goto exit;
}
precision_base = (GLint *)
- _env->GetPrimitiveArrayCritical(precision_ref, (jboolean *)0);
+ _env->GetIntArrayElements(precision_ref, (jboolean *)0);
precision = precision_base + precisionOffset;
glGetShaderPrecisionFormat(
@@ -3060,11 +3179,11 @@
exit:
if (precision_base) {
- _env->ReleasePrimitiveArrayCritical(precision_ref, precision_base,
+ _env->ReleaseIntArrayElements(precision_ref, (jint*)precision_base,
_exception ? JNI_ABORT: 0);
}
if (range_base) {
- _env->ReleasePrimitiveArrayCritical(range_ref, range_base,
+ _env->ReleaseIntArrayElements(range_ref, (jint*)range_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -3079,23 +3198,23 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _rangeArray = (jarray) 0;
+ jintArray _rangeArray = (jintArray) 0;
jint _rangeBufferOffset = (jint) 0;
- jarray _precisionArray = (jarray) 0;
+ jintArray _precisionArray = (jintArray) 0;
jint _precisionBufferOffset = (jint) 0;
jint _rangeRemaining;
GLint *range = (GLint *) 0;
jint _precisionRemaining;
GLint *precision = (GLint *) 0;
- range = (GLint *)getPointer(_env, range_buf, &_rangeArray, &_rangeRemaining, &_rangeBufferOffset);
+ range = (GLint *)getPointer(_env, range_buf, (jarray*)&_rangeArray, &_rangeRemaining, &_rangeBufferOffset);
if (_rangeRemaining < 1) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
_exceptionMessage = "remaining() < 1 < needed";
goto exit;
}
- precision = (GLint *)getPointer(_env, precision_buf, &_precisionArray, &_precisionRemaining, &_precisionBufferOffset);
+ precision = (GLint *)getPointer(_env, precision_buf, (jarray*)&_precisionArray, &_precisionRemaining, &_precisionBufferOffset);
if (_precisionRemaining < 1) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -3103,11 +3222,11 @@
goto exit;
}
if (range == NULL) {
- char * _rangeBase = (char *)_env->GetPrimitiveArrayCritical(_rangeArray, (jboolean *) 0);
+ char * _rangeBase = (char *)_env->GetIntArrayElements(_rangeArray, (jboolean *) 0);
range = (GLint *) (_rangeBase + _rangeBufferOffset);
}
if (precision == NULL) {
- char * _precisionBase = (char *)_env->GetPrimitiveArrayCritical(_precisionArray, (jboolean *) 0);
+ char * _precisionBase = (char *)_env->GetIntArrayElements(_precisionArray, (jboolean *) 0);
precision = (GLint *) (_precisionBase + _precisionBufferOffset);
}
glGetShaderPrecisionFormat(
@@ -3119,10 +3238,10 @@
exit:
if (_precisionArray) {
- releasePointer(_env, _precisionArray, precision, _exception ? JNI_FALSE : JNI_TRUE);
+ _env->ReleaseIntArrayElements(_precisionArray, (jint*)precision, _exception ? JNI_ABORT : 0);
}
if (_rangeArray) {
- releasePointer(_env, _rangeArray, range, _exception ? JNI_FALSE : JNI_TRUE);
+ _env->ReleaseIntArrayElements(_rangeArray, (jint*)range, _exception ? JNI_ABORT : 0);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -3157,7 +3276,7 @@
}
_lengthRemaining = _env->GetArrayLength(length_ref) - lengthOffset;
length_base = (GLsizei *)
- _env->GetPrimitiveArrayCritical(length_ref, (jboolean *)0);
+ _env->GetIntArrayElements(length_ref, (jboolean *)0);
length = length_base + lengthOffset;
if (!source_ref) {
@@ -3174,7 +3293,7 @@
}
_sourceRemaining = _env->GetArrayLength(source_ref) - sourceOffset;
source_base = (char *)
- _env->GetPrimitiveArrayCritical(source_ref, (jboolean *)0);
+ _env->GetByteArrayElements(source_ref, (jboolean *)0);
source = source_base + sourceOffset;
glGetShaderSource(
@@ -3186,11 +3305,11 @@
exit:
if (source_base) {
- _env->ReleasePrimitiveArrayCritical(source_ref, source_base,
+ _env->ReleaseByteArrayElements(source_ref, (jbyte*)source_base,
_exception ? JNI_ABORT: 0);
}
if (length_base) {
- _env->ReleasePrimitiveArrayCritical(length_ref, length_base,
+ _env->ReleaseIntArrayElements(length_ref, (jint*)length_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -3202,14 +3321,14 @@
static void
android_glGetShaderSource__IILjava_nio_IntBuffer_2B
(JNIEnv *_env, jobject _this, jint shader, jint bufsize, jobject length_buf, jbyte source) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLsizei *length = (GLsizei *) 0;
- length = (GLsizei *)getPointer(_env, length_buf, &_array, &_remaining, &_bufferOffset);
+ length = (GLsizei *)getPointer(_env, length_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (length == NULL) {
- char * _lengthBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _lengthBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
length = (GLsizei *) (_lengthBase + _bufferOffset);
}
glGetShaderSource(
@@ -3219,7 +3338,7 @@
reinterpret_cast<char *>(source)
);
if (_array) {
- releasePointer(_env, _array, length, JNI_TRUE);
+ releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _array, (jint*)length, JNI_TRUE);
}
}
@@ -3276,7 +3395,7 @@
goto exit;
}
params_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetTexParameterfv(
@@ -3287,7 +3406,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseFloatArrayElements(params_ref, (jfloat*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -3302,12 +3421,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *params = (GLfloat *) 0;
- params = (GLfloat *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfloat *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < 1) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -3315,7 +3434,7 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
params = (GLfloat *) (_paramsBase + _bufferOffset);
}
glGetTexParameterfv(
@@ -3326,7 +3445,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, _exception ? JNI_FALSE : JNI_TRUE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)params, _exception ? JNI_ABORT : 0);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -3364,7 +3483,7 @@
goto exit;
}
params_base = (GLint *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetTexParameteriv(
@@ -3375,7 +3494,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -3390,12 +3509,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLint *params = (GLint *) 0;
- params = (GLint *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < 1) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -3403,7 +3522,7 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLint *) (_paramsBase + _bufferOffset);
}
glGetTexParameteriv(
@@ -3414,7 +3533,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, _exception ? JNI_FALSE : JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, _exception ? JNI_ABORT : 0);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -3452,7 +3571,7 @@
goto exit;
}
params_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetUniformfv(
@@ -3463,7 +3582,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseFloatArrayElements(params_ref, (jfloat*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -3478,12 +3597,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *params = (GLfloat *) 0;
- params = (GLfloat *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfloat *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < 1) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -3491,7 +3610,7 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
params = (GLfloat *) (_paramsBase + _bufferOffset);
}
glGetUniformfv(
@@ -3502,7 +3621,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, _exception ? JNI_FALSE : JNI_TRUE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)params, _exception ? JNI_ABORT : 0);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -3540,7 +3659,7 @@
goto exit;
}
params_base = (GLint *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetUniformiv(
@@ -3551,7 +3670,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -3566,12 +3685,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLint *params = (GLint *) 0;
- params = (GLint *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < 1) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -3579,7 +3698,7 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLint *) (_paramsBase + _bufferOffset);
}
glGetUniformiv(
@@ -3590,7 +3709,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, _exception ? JNI_FALSE : JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, _exception ? JNI_ABORT : 0);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -3673,7 +3792,7 @@
goto exit;
}
params_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetVertexAttribfv(
@@ -3684,7 +3803,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseFloatArrayElements(params_ref, (jfloat*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -3699,12 +3818,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *params = (GLfloat *) 0;
- params = (GLfloat *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfloat *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
int _needed;
switch (pname) {
#if defined(GL_CURRENT_VERTEX_ATTRIB)
@@ -3723,7 +3842,7 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
params = (GLfloat *) (_paramsBase + _bufferOffset);
}
glGetVertexAttribfv(
@@ -3734,7 +3853,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, _exception ? JNI_FALSE : JNI_TRUE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)params, _exception ? JNI_ABORT : 0);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -3783,7 +3902,7 @@
goto exit;
}
params_base = (GLint *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetVertexAttribiv(
@@ -3794,7 +3913,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -3809,12 +3928,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLint *params = (GLint *) 0;
- params = (GLint *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
int _needed;
switch (pname) {
#if defined(GL_CURRENT_VERTEX_ATTRIB)
@@ -3833,7 +3952,7 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLint *) (_paramsBase + _bufferOffset);
}
glGetVertexAttribiv(
@@ -3844,7 +3963,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, _exception ? JNI_FALSE : JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, _exception ? JNI_ABORT : 0);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -3985,7 +4104,7 @@
jint _remaining;
GLvoid *pixels = (GLvoid *) 0;
- pixels = (GLvoid *)getPointer(_env, pixels_buf, &_array, &_remaining, &_bufferOffset);
+ pixels = (GLvoid *)getPointer(_env, pixels_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (pixels == NULL) {
char * _pixelsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
pixels = (GLvoid *) (_pixelsBase + _bufferOffset);
@@ -4074,10 +4193,10 @@
}
_shadersRemaining = _env->GetArrayLength(shaders_ref) - offset;
shaders_base = (GLuint *)
- _env->GetPrimitiveArrayCritical(shaders_ref, (jboolean *)0);
+ _env->GetIntArrayElements(shaders_ref, (jboolean *)0);
shaders = shaders_base + offset;
- binary = (GLvoid *)getPointer(_env, binary_buf, &_array, &_binaryRemaining, &_bufferOffset);
+ binary = (GLvoid *)getPointer(_env, binary_buf, (jarray*)&_array, &_binaryRemaining, &_bufferOffset);
if (_binaryRemaining < length) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -4101,7 +4220,7 @@
releasePointer(_env, _array, binary, JNI_FALSE);
}
if (shaders_base) {
- _env->ReleasePrimitiveArrayCritical(shaders_ref, shaders_base,
+ _env->ReleaseIntArrayElements(shaders_ref, (jint*)shaders_base,
JNI_ABORT);
}
if (_exception) {
@@ -4116,17 +4235,17 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _shadersArray = (jarray) 0;
+ jintArray _shadersArray = (jintArray) 0;
jint _shadersBufferOffset = (jint) 0;
- jarray _binaryArray = (jarray) 0;
+ jintArray _binaryArray = (jintArray) 0;
jint _binaryBufferOffset = (jint) 0;
jint _shadersRemaining;
GLuint *shaders = (GLuint *) 0;
jint _binaryRemaining;
GLvoid *binary = (GLvoid *) 0;
- shaders = (GLuint *)getPointer(_env, shaders_buf, &_shadersArray, &_shadersRemaining, &_shadersBufferOffset);
- binary = (GLvoid *)getPointer(_env, binary_buf, &_binaryArray, &_binaryRemaining, &_binaryBufferOffset);
+ shaders = (GLuint *)getPointer(_env, shaders_buf, (jarray*)&_shadersArray, &_shadersRemaining, &_shadersBufferOffset);
+ binary = (GLvoid *)getPointer(_env, binary_buf, (jarray*)&_binaryArray, &_binaryRemaining, &_binaryBufferOffset);
if (_binaryRemaining < length) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -4134,7 +4253,7 @@
goto exit;
}
if (shaders == NULL) {
- char * _shadersBase = (char *)_env->GetPrimitiveArrayCritical(_shadersArray, (jboolean *) 0);
+ char * _shadersBase = (char *)_env->GetIntArrayElements(_shadersArray, (jboolean *) 0);
shaders = (GLuint *) (_shadersBase + _shadersBufferOffset);
}
if (binary == NULL) {
@@ -4154,7 +4273,7 @@
releasePointer(_env, _binaryArray, binary, JNI_FALSE);
}
if (_shadersArray) {
- releasePointer(_env, _shadersArray, shaders, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_shadersArray, (jint*)shaders, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -4253,7 +4372,7 @@
GLvoid *pixels = (GLvoid *) 0;
if (pixels_buf) {
- pixels = (GLvoid *)getPointer(_env, pixels_buf, &_array, &_remaining, &_bufferOffset);
+ pixels = (GLvoid *)getPointer(_env, pixels_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
}
if (pixels_buf && pixels == NULL) {
char * _pixelsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
@@ -4317,7 +4436,7 @@
goto exit;
}
params_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glTexParameterfv(
@@ -4328,7 +4447,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseFloatArrayElements(params_ref, (jfloat*)params_base,
JNI_ABORT);
}
if (_exception) {
@@ -4343,12 +4462,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *params = (GLfloat *) 0;
- params = (GLfloat *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfloat *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < 1) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -4356,7 +4475,7 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
params = (GLfloat *) (_paramsBase + _bufferOffset);
}
glTexParameterfv(
@@ -4367,7 +4486,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, JNI_FALSE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)params, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -4416,7 +4535,7 @@
goto exit;
}
params_base = (GLint *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glTexParameteriv(
@@ -4427,7 +4546,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
JNI_ABORT);
}
if (_exception) {
@@ -4442,12 +4561,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLint *params = (GLint *) 0;
- params = (GLint *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < 1) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -4455,7 +4574,7 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLint *) (_paramsBase + _bufferOffset);
}
glTexParameteriv(
@@ -4466,7 +4585,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -4483,7 +4602,7 @@
GLvoid *pixels = (GLvoid *) 0;
if (pixels_buf) {
- pixels = (GLvoid *)getPointer(_env, pixels_buf, &_array, &_remaining, &_bufferOffset);
+ pixels = (GLvoid *)getPointer(_env, pixels_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
}
if (pixels_buf && pixels == NULL) {
char * _pixelsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
@@ -4546,7 +4665,7 @@
goto exit;
}
v_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(v_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(v_ref, (jboolean *)0);
v = v_base + offset;
glUniform1fv(
@@ -4557,7 +4676,7 @@
exit:
if (v_base) {
- _env->ReleasePrimitiveArrayCritical(v_ref, v_base,
+ _env->ReleaseFloatArrayElements(v_ref, (jfloat*)v_base,
JNI_ABORT);
}
if (_exception) {
@@ -4572,12 +4691,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *v = (GLfloat *) 0;
- v = (GLfloat *)getPointer(_env, v_buf, &_array, &_remaining, &_bufferOffset);
+ v = (GLfloat *)getPointer(_env, v_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < count) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -4585,7 +4704,7 @@
goto exit;
}
if (v == NULL) {
- char * _vBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _vBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
v = (GLfloat *) (_vBase + _bufferOffset);
}
glUniform1fv(
@@ -4596,7 +4715,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, v, JNI_FALSE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)v, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -4644,7 +4763,7 @@
goto exit;
}
v_base = (GLint *)
- _env->GetPrimitiveArrayCritical(v_ref, (jboolean *)0);
+ _env->GetIntArrayElements(v_ref, (jboolean *)0);
v = v_base + offset;
glUniform1iv(
@@ -4655,7 +4774,7 @@
exit:
if (v_base) {
- _env->ReleasePrimitiveArrayCritical(v_ref, v_base,
+ _env->ReleaseIntArrayElements(v_ref, (jint*)v_base,
JNI_ABORT);
}
if (_exception) {
@@ -4670,12 +4789,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLint *v = (GLint *) 0;
- v = (GLint *)getPointer(_env, v_buf, &_array, &_remaining, &_bufferOffset);
+ v = (GLint *)getPointer(_env, v_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < count) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -4683,7 +4802,7 @@
goto exit;
}
if (v == NULL) {
- char * _vBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _vBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
v = (GLint *) (_vBase + _bufferOffset);
}
glUniform1iv(
@@ -4694,7 +4813,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, v, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)v, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -4743,7 +4862,7 @@
goto exit;
}
v_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(v_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(v_ref, (jboolean *)0);
v = v_base + offset;
glUniform2fv(
@@ -4754,7 +4873,7 @@
exit:
if (v_base) {
- _env->ReleasePrimitiveArrayCritical(v_ref, v_base,
+ _env->ReleaseFloatArrayElements(v_ref, (jfloat*)v_base,
JNI_ABORT);
}
if (_exception) {
@@ -4769,12 +4888,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *v = (GLfloat *) 0;
- v = (GLfloat *)getPointer(_env, v_buf, &_array, &_remaining, &_bufferOffset);
+ v = (GLfloat *)getPointer(_env, v_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < count*2) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -4782,7 +4901,7 @@
goto exit;
}
if (v == NULL) {
- char * _vBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _vBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
v = (GLfloat *) (_vBase + _bufferOffset);
}
glUniform2fv(
@@ -4793,7 +4912,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, v, JNI_FALSE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)v, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -4842,7 +4961,7 @@
goto exit;
}
v_base = (GLint *)
- _env->GetPrimitiveArrayCritical(v_ref, (jboolean *)0);
+ _env->GetIntArrayElements(v_ref, (jboolean *)0);
v = v_base + offset;
glUniform2iv(
@@ -4853,7 +4972,7 @@
exit:
if (v_base) {
- _env->ReleasePrimitiveArrayCritical(v_ref, v_base,
+ _env->ReleaseIntArrayElements(v_ref, (jint*)v_base,
JNI_ABORT);
}
if (_exception) {
@@ -4868,12 +4987,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLint *v = (GLint *) 0;
- v = (GLint *)getPointer(_env, v_buf, &_array, &_remaining, &_bufferOffset);
+ v = (GLint *)getPointer(_env, v_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < count*2) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -4881,7 +5000,7 @@
goto exit;
}
if (v == NULL) {
- char * _vBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _vBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
v = (GLint *) (_vBase + _bufferOffset);
}
glUniform2iv(
@@ -4892,7 +5011,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, v, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)v, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -4942,7 +5061,7 @@
goto exit;
}
v_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(v_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(v_ref, (jboolean *)0);
v = v_base + offset;
glUniform3fv(
@@ -4953,7 +5072,7 @@
exit:
if (v_base) {
- _env->ReleasePrimitiveArrayCritical(v_ref, v_base,
+ _env->ReleaseFloatArrayElements(v_ref, (jfloat*)v_base,
JNI_ABORT);
}
if (_exception) {
@@ -4968,12 +5087,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *v = (GLfloat *) 0;
- v = (GLfloat *)getPointer(_env, v_buf, &_array, &_remaining, &_bufferOffset);
+ v = (GLfloat *)getPointer(_env, v_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < count*3) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -4981,7 +5100,7 @@
goto exit;
}
if (v == NULL) {
- char * _vBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _vBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
v = (GLfloat *) (_vBase + _bufferOffset);
}
glUniform3fv(
@@ -4992,7 +5111,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, v, JNI_FALSE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)v, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -5042,7 +5161,7 @@
goto exit;
}
v_base = (GLint *)
- _env->GetPrimitiveArrayCritical(v_ref, (jboolean *)0);
+ _env->GetIntArrayElements(v_ref, (jboolean *)0);
v = v_base + offset;
glUniform3iv(
@@ -5053,7 +5172,7 @@
exit:
if (v_base) {
- _env->ReleasePrimitiveArrayCritical(v_ref, v_base,
+ _env->ReleaseIntArrayElements(v_ref, (jint*)v_base,
JNI_ABORT);
}
if (_exception) {
@@ -5068,12 +5187,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLint *v = (GLint *) 0;
- v = (GLint *)getPointer(_env, v_buf, &_array, &_remaining, &_bufferOffset);
+ v = (GLint *)getPointer(_env, v_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < count*3) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -5081,7 +5200,7 @@
goto exit;
}
if (v == NULL) {
- char * _vBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _vBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
v = (GLint *) (_vBase + _bufferOffset);
}
glUniform3iv(
@@ -5092,7 +5211,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, v, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)v, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -5143,7 +5262,7 @@
goto exit;
}
v_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(v_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(v_ref, (jboolean *)0);
v = v_base + offset;
glUniform4fv(
@@ -5154,7 +5273,7 @@
exit:
if (v_base) {
- _env->ReleasePrimitiveArrayCritical(v_ref, v_base,
+ _env->ReleaseFloatArrayElements(v_ref, (jfloat*)v_base,
JNI_ABORT);
}
if (_exception) {
@@ -5169,12 +5288,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *v = (GLfloat *) 0;
- v = (GLfloat *)getPointer(_env, v_buf, &_array, &_remaining, &_bufferOffset);
+ v = (GLfloat *)getPointer(_env, v_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < count*4) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -5182,7 +5301,7 @@
goto exit;
}
if (v == NULL) {
- char * _vBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _vBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
v = (GLfloat *) (_vBase + _bufferOffset);
}
glUniform4fv(
@@ -5193,7 +5312,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, v, JNI_FALSE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)v, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -5244,7 +5363,7 @@
goto exit;
}
v_base = (GLint *)
- _env->GetPrimitiveArrayCritical(v_ref, (jboolean *)0);
+ _env->GetIntArrayElements(v_ref, (jboolean *)0);
v = v_base + offset;
glUniform4iv(
@@ -5255,7 +5374,7 @@
exit:
if (v_base) {
- _env->ReleasePrimitiveArrayCritical(v_ref, v_base,
+ _env->ReleaseIntArrayElements(v_ref, (jint*)v_base,
JNI_ABORT);
}
if (_exception) {
@@ -5270,12 +5389,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLint *v = (GLint *) 0;
- v = (GLint *)getPointer(_env, v_buf, &_array, &_remaining, &_bufferOffset);
+ v = (GLint *)getPointer(_env, v_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < count*4) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -5283,7 +5402,7 @@
goto exit;
}
if (v == NULL) {
- char * _vBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _vBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
v = (GLint *) (_vBase + _bufferOffset);
}
glUniform4iv(
@@ -5294,7 +5413,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, v, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)v, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -5332,7 +5451,7 @@
goto exit;
}
value_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(value_ref, (jboolean *)0);
value = value_base + offset;
glUniformMatrix2fv(
@@ -5344,7 +5463,7 @@
exit:
if (value_base) {
- _env->ReleasePrimitiveArrayCritical(value_ref, value_base,
+ _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
JNI_ABORT);
}
if (_exception) {
@@ -5359,12 +5478,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *value = (GLfloat *) 0;
- value = (GLfloat *)getPointer(_env, value_buf, &_array, &_remaining, &_bufferOffset);
+ value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < count*4) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -5372,7 +5491,7 @@
goto exit;
}
if (value == NULL) {
- char * _valueBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
value = (GLfloat *) (_valueBase + _bufferOffset);
}
glUniformMatrix2fv(
@@ -5384,7 +5503,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, value, JNI_FALSE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -5422,7 +5541,7 @@
goto exit;
}
value_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(value_ref, (jboolean *)0);
value = value_base + offset;
glUniformMatrix3fv(
@@ -5434,7 +5553,7 @@
exit:
if (value_base) {
- _env->ReleasePrimitiveArrayCritical(value_ref, value_base,
+ _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
JNI_ABORT);
}
if (_exception) {
@@ -5449,12 +5568,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *value = (GLfloat *) 0;
- value = (GLfloat *)getPointer(_env, value_buf, &_array, &_remaining, &_bufferOffset);
+ value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < count*9) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -5462,7 +5581,7 @@
goto exit;
}
if (value == NULL) {
- char * _valueBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
value = (GLfloat *) (_valueBase + _bufferOffset);
}
glUniformMatrix3fv(
@@ -5474,7 +5593,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, value, JNI_FALSE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -5512,7 +5631,7 @@
goto exit;
}
value_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(value_ref, (jboolean *)0);
value = value_base + offset;
glUniformMatrix4fv(
@@ -5524,7 +5643,7 @@
exit:
if (value_base) {
- _env->ReleasePrimitiveArrayCritical(value_ref, value_base,
+ _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
JNI_ABORT);
}
if (_exception) {
@@ -5539,12 +5658,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *value = (GLfloat *) 0;
- value = (GLfloat *)getPointer(_env, value_buf, &_array, &_remaining, &_bufferOffset);
+ value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < count*16) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -5552,7 +5671,7 @@
goto exit;
}
if (value == NULL) {
- char * _valueBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
value = (GLfloat *) (_valueBase + _bufferOffset);
}
glUniformMatrix4fv(
@@ -5564,7 +5683,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, value, JNI_FALSE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -5630,7 +5749,7 @@
goto exit;
}
values_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(values_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(values_ref, (jboolean *)0);
values = values_base + offset;
glVertexAttrib1fv(
@@ -5640,7 +5759,7 @@
exit:
if (values_base) {
- _env->ReleasePrimitiveArrayCritical(values_ref, values_base,
+ _env->ReleaseFloatArrayElements(values_ref, (jfloat*)values_base,
JNI_ABORT);
}
if (_exception) {
@@ -5655,12 +5774,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *values = (GLfloat *) 0;
- values = (GLfloat *)getPointer(_env, values_buf, &_array, &_remaining, &_bufferOffset);
+ values = (GLfloat *)getPointer(_env, values_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < 1) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -5668,7 +5787,7 @@
goto exit;
}
if (values == NULL) {
- char * _valuesBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _valuesBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
values = (GLfloat *) (_valuesBase + _bufferOffset);
}
glVertexAttrib1fv(
@@ -5678,7 +5797,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, values, JNI_FALSE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)values, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -5727,7 +5846,7 @@
goto exit;
}
values_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(values_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(values_ref, (jboolean *)0);
values = values_base + offset;
glVertexAttrib2fv(
@@ -5737,7 +5856,7 @@
exit:
if (values_base) {
- _env->ReleasePrimitiveArrayCritical(values_ref, values_base,
+ _env->ReleaseFloatArrayElements(values_ref, (jfloat*)values_base,
JNI_ABORT);
}
if (_exception) {
@@ -5752,12 +5871,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *values = (GLfloat *) 0;
- values = (GLfloat *)getPointer(_env, values_buf, &_array, &_remaining, &_bufferOffset);
+ values = (GLfloat *)getPointer(_env, values_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < 2) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -5765,7 +5884,7 @@
goto exit;
}
if (values == NULL) {
- char * _valuesBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _valuesBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
values = (GLfloat *) (_valuesBase + _bufferOffset);
}
glVertexAttrib2fv(
@@ -5775,7 +5894,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, values, JNI_FALSE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)values, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -5825,7 +5944,7 @@
goto exit;
}
values_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(values_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(values_ref, (jboolean *)0);
values = values_base + offset;
glVertexAttrib3fv(
@@ -5835,7 +5954,7 @@
exit:
if (values_base) {
- _env->ReleasePrimitiveArrayCritical(values_ref, values_base,
+ _env->ReleaseFloatArrayElements(values_ref, (jfloat*)values_base,
JNI_ABORT);
}
if (_exception) {
@@ -5850,12 +5969,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *values = (GLfloat *) 0;
- values = (GLfloat *)getPointer(_env, values_buf, &_array, &_remaining, &_bufferOffset);
+ values = (GLfloat *)getPointer(_env, values_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < 3) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -5863,7 +5982,7 @@
goto exit;
}
if (values == NULL) {
- char * _valuesBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _valuesBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
values = (GLfloat *) (_valuesBase + _bufferOffset);
}
glVertexAttrib3fv(
@@ -5873,7 +5992,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, values, JNI_FALSE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)values, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -5924,7 +6043,7 @@
goto exit;
}
values_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(values_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(values_ref, (jboolean *)0);
values = values_base + offset;
glVertexAttrib4fv(
@@ -5934,7 +6053,7 @@
exit:
if (values_base) {
- _env->ReleasePrimitiveArrayCritical(values_ref, values_base,
+ _env->ReleaseFloatArrayElements(values_ref, (jfloat*)values_base,
JNI_ABORT);
}
if (_exception) {
@@ -5949,12 +6068,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *values = (GLfloat *) 0;
- values = (GLfloat *)getPointer(_env, values_buf, &_array, &_remaining, &_bufferOffset);
+ values = (GLfloat *)getPointer(_env, values_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < 4) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -5962,7 +6081,7 @@
goto exit;
}
if (values == NULL) {
- char * _valuesBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _valuesBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
values = (GLfloat *) (_valuesBase + _bufferOffset);
}
glVertexAttrib4fv(
@@ -5972,7 +6091,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, values, JNI_FALSE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)values, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
diff --git a/core/jni/android_opengl_GLES30.cpp b/core/jni/android_opengl_GLES30.cpp
index 226162d..1d92cd4 100644
--- a/core/jni/android_opengl_GLES30.cpp
+++ b/core/jni/android_opengl_GLES30.cpp
@@ -126,6 +126,116 @@
return NULL;
}
+class ByteArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jbyteArray array, jboolean* is_copy) {
+ return _env->GetByteArrayElements(array, is_copy);
+ }
+};
+class BooleanArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jbooleanArray array, jboolean* is_copy) {
+ return _env->GetBooleanArrayElements(array, is_copy);
+ }
+};
+class CharArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jcharArray array, jboolean* is_copy) {
+ return _env->GetCharArrayElements(array, is_copy);
+ }
+};
+class ShortArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jshortArray array, jboolean* is_copy) {
+ return _env->GetShortArrayElements(array, is_copy);
+ }
+};
+class IntArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jintArray array, jboolean* is_copy) {
+ return _env->GetIntArrayElements(array, is_copy);
+ }
+};
+class LongArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jlongArray array, jboolean* is_copy) {
+ return _env->GetLongArrayElements(array, is_copy);
+ }
+};
+class FloatArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jfloatArray array, jboolean* is_copy) {
+ return _env->GetFloatArrayElements(array, is_copy);
+ }
+};
+class DoubleArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jdoubleArray array, jboolean* is_copy) {
+ return _env->GetDoubleArrayElements(array, is_copy);
+ }
+};
+
+template<typename JTYPEARRAY, typename ARRAYGETTER>
+static void*
+getArrayPointer(JNIEnv *_env, JTYPEARRAY array, jboolean* is_copy) {
+ return ARRAYGETTER::Get(_env, array, is_copy);
+}
+
+class ByteArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jbyteArray array, jbyte* data, jboolean commit) {
+ _env->ReleaseByteArrayElements(array, data, commit ? 0 : JNI_ABORT);
+ }
+};
+class BooleanArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jbooleanArray array, jboolean* data, jboolean commit) {
+ _env->ReleaseBooleanArrayElements(array, data, commit ? 0 : JNI_ABORT);
+ }
+};
+class CharArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jcharArray array, jchar* data, jboolean commit) {
+ _env->ReleaseCharArrayElements(array, data, commit ? 0 : JNI_ABORT);
+ }
+};
+class ShortArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jshortArray array, jshort* data, jboolean commit) {
+ _env->ReleaseShortArrayElements(array, data, commit ? 0 : JNI_ABORT);
+ }
+};
+class IntArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jintArray array, jint* data, jboolean commit) {
+ _env->ReleaseIntArrayElements(array, data, commit ? 0 : JNI_ABORT);
+ }
+};
+class LongArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jlongArray array, jlong* data, jboolean commit) {
+ _env->ReleaseLongArrayElements(array, data, commit ? 0 : JNI_ABORT);
+ }
+};
+class FloatArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jfloatArray array, jfloat* data, jboolean commit) {
+ _env->ReleaseFloatArrayElements(array, data, commit ? 0 : JNI_ABORT);
+ }
+};
+class DoubleArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jdoubleArray array, jdouble* data, jboolean commit) {
+ _env->ReleaseDoubleArrayElements(array, data, commit ? 0 : JNI_ABORT);
+ }
+};
+
+template<typename JTYPEARRAY, typename NTYPEARRAY, typename ARRAYRELEASER>
+static void
+releaseArrayPointer(JNIEnv *_env, JTYPEARRAY array, NTYPEARRAY data, jboolean commit) {
+ ARRAYRELEASER::Release(_env, array, data, commit);
+}
+
static void
releasePointer(JNIEnv *_env, jarray array, void *data, jboolean commit)
{
@@ -229,7 +339,8 @@
return needed;
}
-template <typename JTYPEARRAY, typename CTYPE, void GET(GLenum, CTYPE*)>
+template <typename JTYPEARRAY, typename ARRAYGETTER, typename NTYPEARRAY,
+ typename ARRAYRELEASER, typename CTYPE, void GET(GLenum, CTYPE*)>
static void
get
(JNIEnv *_env, jobject _this, jint pname, JTYPEARRAY params_ref, jint offset) {
@@ -264,8 +375,8 @@
_exceptionMessage = "length - offset < needed";
goto exit;
}
- params_base = (CTYPE *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ params_base = (CTYPE *) getArrayPointer<JTYPEARRAY, ARRAYGETTER>(
+ _env, params_ref, (jboolean *)0);
params = params_base + offset;
GET(
@@ -275,8 +386,8 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
- _exception ? JNI_ABORT: 0);
+ releaseArrayPointer<JTYPEARRAY, NTYPEARRAY, ARRAYRELEASER>(
+ _env, params_ref, params_base, !_exception);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -284,20 +395,21 @@
}
-template <typename CTYPE, void GET(GLenum, CTYPE*)>
+template <typename CTYPE, typename JTYPEARRAY, typename ARRAYGETTER, typename NTYPEARRAY,
+ typename ARRAYRELEASER, void GET(GLenum, CTYPE*)>
static void
getarray
(JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
jint _exception = 0;
const char * _exceptionType;
const char * _exceptionMessage;
- jarray _array = (jarray) 0;
+ JTYPEARRAY _array = (JTYPEARRAY) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
CTYPE *params = (CTYPE *) 0;
int _needed = 0;
- params = (CTYPE *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (CTYPE *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
_remaining /= sizeof(CTYPE); // convert from bytes to item count
_needed = getNeededCount(pname);
// if we didn't find this pname, we just assume the user passed
@@ -310,7 +422,8 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *) getArrayPointer<JTYPEARRAY, ARRAYGETTER>(
+ _env, _array, (jboolean *) 0);
params = (CTYPE *) (_paramsBase + _bufferOffset);
}
GET(
@@ -320,7 +433,8 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, _exception ? JNI_FALSE : JNI_TRUE);
+ releaseArrayPointer<JTYPEARRAY, NTYPEARRAY, ARRAYRELEASER>(
+ _env, _array, (NTYPEARRAY)params, _exception ? JNI_FALSE : JNI_TRUE);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -346,7 +460,7 @@
jint _remaining;
GLvoid *indices = (GLvoid *) 0;
- indices = (GLvoid *)getPointer(_env, indices_buf, &_array, &_remaining, &_bufferOffset);
+ indices = (GLvoid *)getPointer(_env, indices_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (indices == NULL) {
char * _indicesBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
indices = (GLvoid *) (_indicesBase + _bufferOffset);
@@ -387,7 +501,7 @@
jint _remaining;
GLvoid *pixels = (GLvoid *) 0;
- pixels = (GLvoid *)getPointer(_env, pixels_buf, &_array, &_remaining, &_bufferOffset);
+ pixels = (GLvoid *)getPointer(_env, pixels_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (pixels == NULL) {
char * _pixelsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
pixels = (GLvoid *) (_pixelsBase + _bufferOffset);
@@ -436,7 +550,7 @@
jint _remaining;
GLvoid *pixels = (GLvoid *) 0;
- pixels = (GLvoid *)getPointer(_env, pixels_buf, &_array, &_remaining, &_bufferOffset);
+ pixels = (GLvoid *)getPointer(_env, pixels_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (pixels == NULL) {
char * _pixelsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
pixels = (GLvoid *) (_pixelsBase + _bufferOffset);
@@ -504,7 +618,7 @@
jint _remaining;
GLvoid *data = (GLvoid *) 0;
- data = (GLvoid *)getPointer(_env, data_buf, &_array, &_remaining, &_bufferOffset);
+ data = (GLvoid *)getPointer(_env, data_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (data == NULL) {
char * _dataBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
data = (GLvoid *) (_dataBase + _bufferOffset);
@@ -551,7 +665,7 @@
jint _remaining;
GLvoid *data = (GLvoid *) 0;
- data = (GLvoid *)getPointer(_env, data_buf, &_array, &_remaining, &_bufferOffset);
+ data = (GLvoid *)getPointer(_env, data_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (data == NULL) {
char * _dataBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
data = (GLvoid *) (_dataBase + _bufferOffset);
@@ -618,7 +732,7 @@
}
_remaining = _env->GetArrayLength(ids_ref) - offset;
ids_base = (GLuint *)
- _env->GetPrimitiveArrayCritical(ids_ref, (jboolean *)0);
+ _env->GetIntArrayElements(ids_ref, (jboolean *)0);
ids = ids_base + offset;
glGenQueries(
@@ -628,7 +742,7 @@
exit:
if (ids_base) {
- _env->ReleasePrimitiveArrayCritical(ids_ref, ids_base,
+ _env->ReleaseIntArrayElements(ids_ref, (jint*)ids_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -640,14 +754,14 @@
static void
android_glGenQueries__ILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint n, jobject ids_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLuint *ids = (GLuint *) 0;
- ids = (GLuint *)getPointer(_env, ids_buf, &_array, &_remaining, &_bufferOffset);
+ ids = (GLuint *)getPointer(_env, ids_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (ids == NULL) {
- char * _idsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _idsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
ids = (GLuint *) (_idsBase + _bufferOffset);
}
glGenQueries(
@@ -655,7 +769,7 @@
(GLuint *)ids
);
if (_array) {
- releasePointer(_env, _array, ids, JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)ids, 0);
}
}
@@ -684,7 +798,7 @@
}
_remaining = _env->GetArrayLength(ids_ref) - offset;
ids_base = (GLuint *)
- _env->GetPrimitiveArrayCritical(ids_ref, (jboolean *)0);
+ _env->GetIntArrayElements(ids_ref, (jboolean *)0);
ids = ids_base + offset;
glDeleteQueries(
@@ -694,7 +808,7 @@
exit:
if (ids_base) {
- _env->ReleasePrimitiveArrayCritical(ids_ref, ids_base,
+ _env->ReleaseIntArrayElements(ids_ref, (jint*)ids_base,
JNI_ABORT);
}
if (_exception) {
@@ -706,14 +820,14 @@
static void
android_glDeleteQueries__ILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint n, jobject ids_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLuint *ids = (GLuint *) 0;
- ids = (GLuint *)getPointer(_env, ids_buf, &_array, &_remaining, &_bufferOffset);
+ ids = (GLuint *)getPointer(_env, ids_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (ids == NULL) {
- char * _idsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _idsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
ids = (GLuint *) (_idsBase + _bufferOffset);
}
glDeleteQueries(
@@ -721,7 +835,7 @@
(GLuint *)ids
);
if (_array) {
- releasePointer(_env, _array, ids, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)ids, JNI_ABORT);
}
}
@@ -780,7 +894,7 @@
}
_remaining = _env->GetArrayLength(params_ref) - offset;
params_base = (GLint *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetQueryiv(
@@ -791,7 +905,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -803,14 +917,14 @@
static void
android_glGetQueryiv__IILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint target, jint pname, jobject params_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLint *params = (GLint *) 0;
- params = (GLint *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLint *) (_paramsBase + _bufferOffset);
}
glGetQueryiv(
@@ -819,7 +933,7 @@
(GLint *)params
);
if (_array) {
- releasePointer(_env, _array, params, JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, 0);
}
}
@@ -848,7 +962,7 @@
}
_remaining = _env->GetArrayLength(params_ref) - offset;
params_base = (GLuint *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetQueryObjectuiv(
@@ -859,7 +973,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -871,14 +985,14 @@
static void
android_glGetQueryObjectuiv__IILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint id, jint pname, jobject params_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLuint *params = (GLuint *) 0;
- params = (GLuint *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLuint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLuint *) (_paramsBase + _bufferOffset);
}
glGetQueryObjectuiv(
@@ -887,7 +1001,7 @@
(GLuint *)params
);
if (_array) {
- releasePointer(_env, _array, params, JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, 0);
}
}
@@ -938,7 +1052,7 @@
}
_remaining = _env->GetArrayLength(bufs_ref) - offset;
bufs_base = (GLenum *)
- _env->GetPrimitiveArrayCritical(bufs_ref, (jboolean *)0);
+ _env->GetIntArrayElements(bufs_ref, (jboolean *)0);
bufs = bufs_base + offset;
glDrawBuffers(
@@ -948,7 +1062,7 @@
exit:
if (bufs_base) {
- _env->ReleasePrimitiveArrayCritical(bufs_ref, bufs_base,
+ _env->ReleaseIntArrayElements(bufs_ref, (jint*)bufs_base,
JNI_ABORT);
}
if (_exception) {
@@ -960,14 +1074,14 @@
static void
android_glDrawBuffers__ILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint n, jobject bufs_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLenum *bufs = (GLenum *) 0;
- bufs = (GLenum *)getPointer(_env, bufs_buf, &_array, &_remaining, &_bufferOffset);
+ bufs = (GLenum *)getPointer(_env, bufs_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (bufs == NULL) {
- char * _bufsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _bufsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
bufs = (GLenum *) (_bufsBase + _bufferOffset);
}
glDrawBuffers(
@@ -975,7 +1089,7 @@
(GLenum *)bufs
);
if (_array) {
- releasePointer(_env, _array, bufs, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)bufs, JNI_ABORT);
}
}
@@ -1004,7 +1118,7 @@
}
_remaining = _env->GetArrayLength(value_ref) - offset;
value_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(value_ref, (jboolean *)0);
value = value_base + offset;
glUniformMatrix2x3fv(
@@ -1016,7 +1130,7 @@
exit:
if (value_base) {
- _env->ReleasePrimitiveArrayCritical(value_ref, value_base,
+ _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
JNI_ABORT);
}
if (_exception) {
@@ -1028,14 +1142,14 @@
static void
android_glUniformMatrix2x3fv__IIZLjava_nio_FloatBuffer_2
(JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jobject value_buf) {
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *value = (GLfloat *) 0;
- value = (GLfloat *)getPointer(_env, value_buf, &_array, &_remaining, &_bufferOffset);
+ value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (value == NULL) {
- char * _valueBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
value = (GLfloat *) (_valueBase + _bufferOffset);
}
glUniformMatrix2x3fv(
@@ -1045,7 +1159,7 @@
(GLfloat *)value
);
if (_array) {
- releasePointer(_env, _array, value, JNI_FALSE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
}
}
@@ -1074,7 +1188,7 @@
}
_remaining = _env->GetArrayLength(value_ref) - offset;
value_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(value_ref, (jboolean *)0);
value = value_base + offset;
glUniformMatrix3x2fv(
@@ -1086,7 +1200,7 @@
exit:
if (value_base) {
- _env->ReleasePrimitiveArrayCritical(value_ref, value_base,
+ _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
JNI_ABORT);
}
if (_exception) {
@@ -1098,14 +1212,14 @@
static void
android_glUniformMatrix3x2fv__IIZLjava_nio_FloatBuffer_2
(JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jobject value_buf) {
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *value = (GLfloat *) 0;
- value = (GLfloat *)getPointer(_env, value_buf, &_array, &_remaining, &_bufferOffset);
+ value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (value == NULL) {
- char * _valueBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
value = (GLfloat *) (_valueBase + _bufferOffset);
}
glUniformMatrix3x2fv(
@@ -1115,7 +1229,7 @@
(GLfloat *)value
);
if (_array) {
- releasePointer(_env, _array, value, JNI_FALSE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
}
}
@@ -1144,7 +1258,7 @@
}
_remaining = _env->GetArrayLength(value_ref) - offset;
value_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(value_ref, (jboolean *)0);
value = value_base + offset;
glUniformMatrix2x4fv(
@@ -1156,7 +1270,7 @@
exit:
if (value_base) {
- _env->ReleasePrimitiveArrayCritical(value_ref, value_base,
+ _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
JNI_ABORT);
}
if (_exception) {
@@ -1168,14 +1282,14 @@
static void
android_glUniformMatrix2x4fv__IIZLjava_nio_FloatBuffer_2
(JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jobject value_buf) {
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *value = (GLfloat *) 0;
- value = (GLfloat *)getPointer(_env, value_buf, &_array, &_remaining, &_bufferOffset);
+ value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (value == NULL) {
- char * _valueBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
value = (GLfloat *) (_valueBase + _bufferOffset);
}
glUniformMatrix2x4fv(
@@ -1185,7 +1299,7 @@
(GLfloat *)value
);
if (_array) {
- releasePointer(_env, _array, value, JNI_FALSE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
}
}
@@ -1214,7 +1328,7 @@
}
_remaining = _env->GetArrayLength(value_ref) - offset;
value_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(value_ref, (jboolean *)0);
value = value_base + offset;
glUniformMatrix4x2fv(
@@ -1226,7 +1340,7 @@
exit:
if (value_base) {
- _env->ReleasePrimitiveArrayCritical(value_ref, value_base,
+ _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
JNI_ABORT);
}
if (_exception) {
@@ -1238,14 +1352,14 @@
static void
android_glUniformMatrix4x2fv__IIZLjava_nio_FloatBuffer_2
(JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jobject value_buf) {
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *value = (GLfloat *) 0;
- value = (GLfloat *)getPointer(_env, value_buf, &_array, &_remaining, &_bufferOffset);
+ value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (value == NULL) {
- char * _valueBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
value = (GLfloat *) (_valueBase + _bufferOffset);
}
glUniformMatrix4x2fv(
@@ -1255,7 +1369,7 @@
(GLfloat *)value
);
if (_array) {
- releasePointer(_env, _array, value, JNI_FALSE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
}
}
@@ -1284,7 +1398,7 @@
}
_remaining = _env->GetArrayLength(value_ref) - offset;
value_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(value_ref, (jboolean *)0);
value = value_base + offset;
glUniformMatrix3x4fv(
@@ -1296,7 +1410,7 @@
exit:
if (value_base) {
- _env->ReleasePrimitiveArrayCritical(value_ref, value_base,
+ _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
JNI_ABORT);
}
if (_exception) {
@@ -1308,14 +1422,14 @@
static void
android_glUniformMatrix3x4fv__IIZLjava_nio_FloatBuffer_2
(JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jobject value_buf) {
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *value = (GLfloat *) 0;
- value = (GLfloat *)getPointer(_env, value_buf, &_array, &_remaining, &_bufferOffset);
+ value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (value == NULL) {
- char * _valueBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
value = (GLfloat *) (_valueBase + _bufferOffset);
}
glUniformMatrix3x4fv(
@@ -1325,7 +1439,7 @@
(GLfloat *)value
);
if (_array) {
- releasePointer(_env, _array, value, JNI_FALSE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
}
}
@@ -1354,7 +1468,7 @@
}
_remaining = _env->GetArrayLength(value_ref) - offset;
value_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(value_ref, (jboolean *)0);
value = value_base + offset;
glUniformMatrix4x3fv(
@@ -1366,7 +1480,7 @@
exit:
if (value_base) {
- _env->ReleasePrimitiveArrayCritical(value_ref, value_base,
+ _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
JNI_ABORT);
}
if (_exception) {
@@ -1378,14 +1492,14 @@
static void
android_glUniformMatrix4x3fv__IIZLjava_nio_FloatBuffer_2
(JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jobject value_buf) {
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *value = (GLfloat *) 0;
- value = (GLfloat *)getPointer(_env, value_buf, &_array, &_remaining, &_bufferOffset);
+ value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (value == NULL) {
- char * _valueBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
value = (GLfloat *) (_valueBase + _bufferOffset);
}
glUniformMatrix4x3fv(
@@ -1395,7 +1509,7 @@
(GLfloat *)value
);
if (_array) {
- releasePointer(_env, _array, value, JNI_FALSE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
}
}
@@ -1501,7 +1615,7 @@
}
_remaining = _env->GetArrayLength(arrays_ref) - offset;
arrays_base = (GLuint *)
- _env->GetPrimitiveArrayCritical(arrays_ref, (jboolean *)0);
+ _env->GetIntArrayElements(arrays_ref, (jboolean *)0);
arrays = arrays_base + offset;
glDeleteVertexArrays(
@@ -1511,7 +1625,7 @@
exit:
if (arrays_base) {
- _env->ReleasePrimitiveArrayCritical(arrays_ref, arrays_base,
+ _env->ReleaseIntArrayElements(arrays_ref, (jint*)arrays_base,
JNI_ABORT);
}
if (_exception) {
@@ -1523,14 +1637,14 @@
static void
android_glDeleteVertexArrays__ILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint n, jobject arrays_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLuint *arrays = (GLuint *) 0;
- arrays = (GLuint *)getPointer(_env, arrays_buf, &_array, &_remaining, &_bufferOffset);
+ arrays = (GLuint *)getPointer(_env, arrays_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (arrays == NULL) {
- char * _arraysBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _arraysBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
arrays = (GLuint *) (_arraysBase + _bufferOffset);
}
glDeleteVertexArrays(
@@ -1538,7 +1652,7 @@
(GLuint *)arrays
);
if (_array) {
- releasePointer(_env, _array, arrays, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)arrays, JNI_ABORT);
}
}
@@ -1567,7 +1681,7 @@
}
_remaining = _env->GetArrayLength(arrays_ref) - offset;
arrays_base = (GLuint *)
- _env->GetPrimitiveArrayCritical(arrays_ref, (jboolean *)0);
+ _env->GetIntArrayElements(arrays_ref, (jboolean *)0);
arrays = arrays_base + offset;
glGenVertexArrays(
@@ -1577,7 +1691,7 @@
exit:
if (arrays_base) {
- _env->ReleasePrimitiveArrayCritical(arrays_ref, arrays_base,
+ _env->ReleaseIntArrayElements(arrays_ref, (jint*)arrays_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -1589,14 +1703,14 @@
static void
android_glGenVertexArrays__ILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint n, jobject arrays_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLuint *arrays = (GLuint *) 0;
- arrays = (GLuint *)getPointer(_env, arrays_buf, &_array, &_remaining, &_bufferOffset);
+ arrays = (GLuint *)getPointer(_env, arrays_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (arrays == NULL) {
- char * _arraysBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _arraysBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
arrays = (GLuint *) (_arraysBase + _bufferOffset);
}
glGenVertexArrays(
@@ -1604,7 +1718,7 @@
(GLuint *)arrays
);
if (_array) {
- releasePointer(_env, _array, arrays, JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)arrays, 0);
}
}
@@ -1644,7 +1758,7 @@
}
_remaining = _env->GetArrayLength(data_ref) - offset;
data_base = (GLint *)
- _env->GetPrimitiveArrayCritical(data_ref, (jboolean *)0);
+ _env->GetIntArrayElements(data_ref, (jboolean *)0);
data = data_base + offset;
glGetIntegeri_v(
@@ -1655,7 +1769,7 @@
exit:
if (data_base) {
- _env->ReleasePrimitiveArrayCritical(data_ref, data_base,
+ _env->ReleaseIntArrayElements(data_ref, (jint*)data_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -1667,14 +1781,14 @@
static void
android_glGetIntegeri_v__IILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint target, jint index, jobject data_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLint *data = (GLint *) 0;
- data = (GLint *)getPointer(_env, data_buf, &_array, &_remaining, &_bufferOffset);
+ data = (GLint *)getPointer(_env, data_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (data == NULL) {
- char * _dataBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _dataBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
data = (GLint *) (_dataBase + _bufferOffset);
}
glGetIntegeri_v(
@@ -1683,7 +1797,7 @@
(GLint *)data
);
if (_array) {
- releasePointer(_env, _array, data, JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)data, 0);
}
}
@@ -1810,7 +1924,7 @@
}
_lengthRemaining = _env->GetArrayLength(length_ref) - lengthOffset;
length_base = (GLsizei *)
- _env->GetPrimitiveArrayCritical(length_ref, (jboolean *)0);
+ _env->GetIntArrayElements(length_ref, (jboolean *)0);
length = length_base + lengthOffset;
if (!size_ref) {
@@ -1827,7 +1941,7 @@
}
_sizeRemaining = _env->GetArrayLength(size_ref) - sizeOffset;
size_base = (GLint *)
- _env->GetPrimitiveArrayCritical(size_ref, (jboolean *)0);
+ _env->GetIntArrayElements(size_ref, (jboolean *)0);
size = size_base + sizeOffset;
if (!type_ref) {
@@ -1844,7 +1958,7 @@
}
_typeRemaining = _env->GetArrayLength(type_ref) - typeOffset;
type_base = (GLenum *)
- _env->GetPrimitiveArrayCritical(type_ref, (jboolean *)0);
+ _env->GetIntArrayElements(type_ref, (jboolean *)0);
type = type_base + typeOffset;
if (!name_ref) {
@@ -1861,7 +1975,7 @@
}
_nameRemaining = _env->GetArrayLength(name_ref) - nameOffset;
name_base = (char *)
- _env->GetPrimitiveArrayCritical(name_ref, (jboolean *)0);
+ _env->GetByteArrayElements(name_ref, (jboolean *)0);
name = name_base + nameOffset;
glGetTransformFeedbackVarying(
@@ -1876,19 +1990,19 @@
exit:
if (name_base) {
- _env->ReleasePrimitiveArrayCritical(name_ref, name_base,
+ _env->ReleaseByteArrayElements(name_ref, (jbyte*)name_base,
_exception ? JNI_ABORT: 0);
}
if (type_base) {
- _env->ReleasePrimitiveArrayCritical(type_ref, type_base,
+ _env->ReleaseIntArrayElements(type_ref, (jint*)type_base,
_exception ? JNI_ABORT: 0);
}
if (size_base) {
- _env->ReleasePrimitiveArrayCritical(size_ref, size_base,
+ _env->ReleaseIntArrayElements(size_ref, (jint*)size_base,
_exception ? JNI_ABORT: 0);
}
if (length_base) {
- _env->ReleasePrimitiveArrayCritical(length_ref, length_base,
+ _env->ReleaseIntArrayElements(length_ref, (jint*)length_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -1900,11 +2014,11 @@
static void
android_glGetTransformFeedbackVarying__IIILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_IntBuffer_2B
(JNIEnv *_env, jobject _this, jint program, jint index, jint bufsize, jobject length_buf, jobject size_buf, jobject type_buf, jbyte name) {
- jarray _lengthArray = (jarray) 0;
+ jintArray _lengthArray = (jintArray) 0;
jint _lengthBufferOffset = (jint) 0;
- jarray _sizeArray = (jarray) 0;
+ jintArray _sizeArray = (jintArray) 0;
jint _sizeBufferOffset = (jint) 0;
- jarray _typeArray = (jarray) 0;
+ jintArray _typeArray = (jintArray) 0;
jint _typeBufferOffset = (jint) 0;
jint _lengthRemaining;
GLsizei *length = (GLsizei *) 0;
@@ -1913,19 +2027,19 @@
jint _typeRemaining;
GLenum *type = (GLenum *) 0;
- length = (GLsizei *)getPointer(_env, length_buf, &_lengthArray, &_lengthRemaining, &_lengthBufferOffset);
- size = (GLint *)getPointer(_env, size_buf, &_sizeArray, &_sizeRemaining, &_sizeBufferOffset);
- type = (GLenum *)getPointer(_env, type_buf, &_typeArray, &_typeRemaining, &_typeBufferOffset);
+ length = (GLsizei *)getPointer(_env, length_buf, (jarray*)&_lengthArray, &_lengthRemaining, &_lengthBufferOffset);
+ size = (GLint *)getPointer(_env, size_buf, (jarray*)&_sizeArray, &_sizeRemaining, &_sizeBufferOffset);
+ type = (GLenum *)getPointer(_env, type_buf, (jarray*)&_typeArray, &_typeRemaining, &_typeBufferOffset);
if (length == NULL) {
- char * _lengthBase = (char *)_env->GetPrimitiveArrayCritical(_lengthArray, (jboolean *) 0);
+ char * _lengthBase = (char *)_env->GetIntArrayElements(_lengthArray, (jboolean *) 0);
length = (GLsizei *) (_lengthBase + _lengthBufferOffset);
}
if (size == NULL) {
- char * _sizeBase = (char *)_env->GetPrimitiveArrayCritical(_sizeArray, (jboolean *) 0);
+ char * _sizeBase = (char *)_env->GetIntArrayElements(_sizeArray, (jboolean *) 0);
size = (GLint *) (_sizeBase + _sizeBufferOffset);
}
if (type == NULL) {
- char * _typeBase = (char *)_env->GetPrimitiveArrayCritical(_typeArray, (jboolean *) 0);
+ char * _typeBase = (char *)_env->GetIntArrayElements(_typeArray, (jboolean *) 0);
type = (GLenum *) (_typeBase + _typeBufferOffset);
}
glGetTransformFeedbackVarying(
@@ -1942,13 +2056,13 @@
(char *)static_cast<uintptr_t>(name)
);
if (_typeArray) {
- releasePointer(_env, _typeArray, type, JNI_TRUE);
+ releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _typeArray, (jint*)type, JNI_TRUE);
}
if (_sizeArray) {
- releasePointer(_env, _sizeArray, size, JNI_TRUE);
+ releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _sizeArray, (jint*)size, JNI_TRUE);
}
if (_lengthArray) {
- releasePointer(_env, _lengthArray, length, JNI_TRUE);
+ releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _lengthArray, (jint*)length, JNI_TRUE);
}
}
@@ -1993,7 +2107,7 @@
}
_sizeRemaining = _env->GetArrayLength(size_ref) - sizeOffset;
size_base = (GLint *)
- _env->GetPrimitiveArrayCritical(size_ref, (jboolean *)0);
+ _env->GetIntArrayElements(size_ref, (jboolean *)0);
size = size_base + sizeOffset;
if (!type_ref) {
@@ -2010,7 +2124,7 @@
}
_typeRemaining = _env->GetArrayLength(type_ref) - typeOffset;
type_base = (GLenum *)
- _env->GetPrimitiveArrayCritical(type_ref, (jboolean *)0);
+ _env->GetIntArrayElements(type_ref, (jboolean *)0);
type = type_base + typeOffset;
glGetTransformFeedbackVarying(
@@ -2024,11 +2138,11 @@
);
exit:
if (type_base) {
- _env->ReleasePrimitiveArrayCritical(type_ref, type_base,
+ _env->ReleaseIntArrayElements(type_ref, (jint*)type_base,
_exception ? JNI_ABORT: 0);
}
if (size_base) {
- _env->ReleasePrimitiveArrayCritical(size_ref, size_base,
+ _env->ReleaseIntArrayElements(size_ref, (jint*)size_base,
_exception ? JNI_ABORT: 0);
}
if (_exception != 1) {
@@ -2051,9 +2165,9 @@
static jstring
android_glGetTransformFeedbackVarying2
(JNIEnv *_env, jobject _this, jint program, jint index, jobject size_buf, jobject type_buf) {
- jarray _sizeArray = (jarray) 0;
+ jintArray _sizeArray = (jintArray) 0;
jint _sizeBufferOffset = (jint) 0;
- jarray _typeArray = (jarray) 0;
+ jintArray _typeArray = (jintArray) 0;
jint _typeBufferOffset = (jint) 0;
jint _lengthRemaining;
GLsizei *length = (GLsizei *) 0;
@@ -2076,14 +2190,14 @@
return NULL;
}
- size = (GLint *)getPointer(_env, size_buf, &_sizeArray, &_sizeRemaining, &_sizeBufferOffset);
- type = (GLenum *)getPointer(_env, type_buf, &_typeArray, &_typeRemaining, &_typeBufferOffset);
+ size = (GLint *)getPointer(_env, size_buf, (jarray*)&_sizeArray, &_sizeRemaining, &_sizeBufferOffset);
+ type = (GLenum *)getPointer(_env, type_buf, (jarray*)&_typeArray, &_typeRemaining, &_typeBufferOffset);
if (size == NULL) {
- char * _sizeBase = (char *)_env->GetPrimitiveArrayCritical(_sizeArray, (jboolean *) 0);
+ char * _sizeBase = (char *)_env->GetIntArrayElements(_sizeArray, (jboolean *) 0);
size = (GLint *) (_sizeBase + _sizeBufferOffset);
}
if (type == NULL) {
- char * _typeBase = (char *)_env->GetPrimitiveArrayCritical(_typeArray, (jboolean *) 0);
+ char * _typeBase = (char *)_env->GetIntArrayElements(_typeArray, (jboolean *) 0);
type = (GLenum *) (_typeBase + _typeBufferOffset);
}
glGetTransformFeedbackVarying(
@@ -2097,10 +2211,10 @@
);
if (_typeArray) {
- releasePointer(_env, _typeArray, type, JNI_TRUE);
+ releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _typeArray, (jint*)type, JNI_TRUE);
}
if (_sizeArray) {
- releasePointer(_env, _sizeArray, size, JNI_TRUE);
+ releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _sizeArray, (jint*)size, JNI_TRUE);
}
result = _env->NewStringUTF(buf);
if (buf) {
@@ -2171,7 +2285,7 @@
}
_remaining = _env->GetArrayLength(params_ref) - offset;
params_base = (GLint *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetVertexAttribIiv(
@@ -2182,7 +2296,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -2194,14 +2308,14 @@
static void
android_glGetVertexAttribIiv__IILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint index, jint pname, jobject params_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLint *params = (GLint *) 0;
- params = (GLint *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLint *) (_paramsBase + _bufferOffset);
}
glGetVertexAttribIiv(
@@ -2210,7 +2324,7 @@
(GLint *)params
);
if (_array) {
- releasePointer(_env, _array, params, JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, 0);
}
}
@@ -2239,7 +2353,7 @@
}
_remaining = _env->GetArrayLength(params_ref) - offset;
params_base = (GLuint *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetVertexAttribIuiv(
@@ -2250,7 +2364,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -2262,14 +2376,14 @@
static void
android_glGetVertexAttribIuiv__IILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint index, jint pname, jobject params_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLuint *params = (GLuint *) 0;
- params = (GLuint *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLuint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLuint *) (_paramsBase + _bufferOffset);
}
glGetVertexAttribIuiv(
@@ -2278,7 +2392,7 @@
(GLuint *)params
);
if (_array) {
- releasePointer(_env, _array, params, JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, 0);
}
}
@@ -2333,7 +2447,7 @@
}
_remaining = _env->GetArrayLength(v_ref) - offset;
v_base = (GLint *)
- _env->GetPrimitiveArrayCritical(v_ref, (jboolean *)0);
+ _env->GetIntArrayElements(v_ref, (jboolean *)0);
v = v_base + offset;
glVertexAttribI4iv(
@@ -2343,7 +2457,7 @@
exit:
if (v_base) {
- _env->ReleasePrimitiveArrayCritical(v_ref, v_base,
+ _env->ReleaseIntArrayElements(v_ref, (jint*)v_base,
JNI_ABORT);
}
if (_exception) {
@@ -2355,14 +2469,14 @@
static void
android_glVertexAttribI4iv__ILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint index, jobject v_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLint *v = (GLint *) 0;
- v = (GLint *)getPointer(_env, v_buf, &_array, &_remaining, &_bufferOffset);
+ v = (GLint *)getPointer(_env, v_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (v == NULL) {
- char * _vBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _vBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
v = (GLint *) (_vBase + _bufferOffset);
}
glVertexAttribI4iv(
@@ -2370,7 +2484,7 @@
(GLint *)v
);
if (_array) {
- releasePointer(_env, _array, v, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)v, JNI_ABORT);
}
}
@@ -2399,7 +2513,7 @@
}
_remaining = _env->GetArrayLength(v_ref) - offset;
v_base = (GLuint *)
- _env->GetPrimitiveArrayCritical(v_ref, (jboolean *)0);
+ _env->GetIntArrayElements(v_ref, (jboolean *)0);
v = v_base + offset;
glVertexAttribI4uiv(
@@ -2409,7 +2523,7 @@
exit:
if (v_base) {
- _env->ReleasePrimitiveArrayCritical(v_ref, v_base,
+ _env->ReleaseIntArrayElements(v_ref, (jint*)v_base,
JNI_ABORT);
}
if (_exception) {
@@ -2421,14 +2535,14 @@
static void
android_glVertexAttribI4uiv__ILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint index, jobject v_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLuint *v = (GLuint *) 0;
- v = (GLuint *)getPointer(_env, v_buf, &_array, &_remaining, &_bufferOffset);
+ v = (GLuint *)getPointer(_env, v_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (v == NULL) {
- char * _vBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _vBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
v = (GLuint *) (_vBase + _bufferOffset);
}
glVertexAttribI4uiv(
@@ -2436,7 +2550,7 @@
(GLuint *)v
);
if (_array) {
- releasePointer(_env, _array, v, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)v, JNI_ABORT);
}
}
@@ -2465,7 +2579,7 @@
}
_remaining = _env->GetArrayLength(params_ref) - offset;
params_base = (GLuint *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetUniformuiv(
@@ -2476,7 +2590,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -2488,14 +2602,14 @@
static void
android_glGetUniformuiv__IILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint program, jint location, jobject params_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLuint *params = (GLuint *) 0;
- params = (GLuint *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLuint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLuint *) (_paramsBase + _bufferOffset);
}
glGetUniformuiv(
@@ -2504,7 +2618,7 @@
(GLuint *)params
);
if (_array) {
- releasePointer(_env, _array, params, JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, 0);
}
}
@@ -2613,7 +2727,7 @@
}
_remaining = _env->GetArrayLength(value_ref) - offset;
value_base = (GLuint *)
- _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0);
+ _env->GetIntArrayElements(value_ref, (jboolean *)0);
value = value_base + offset;
glUniform1uiv(
@@ -2624,7 +2738,7 @@
exit:
if (value_base) {
- _env->ReleasePrimitiveArrayCritical(value_ref, value_base,
+ _env->ReleaseIntArrayElements(value_ref, (jint*)value_base,
JNI_ABORT);
}
if (_exception) {
@@ -2636,14 +2750,14 @@
static void
android_glUniform1uiv__IILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint location, jint count, jobject value_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLuint *value = (GLuint *) 0;
- value = (GLuint *)getPointer(_env, value_buf, &_array, &_remaining, &_bufferOffset);
+ value = (GLuint *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (value == NULL) {
- char * _valueBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _valueBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
value = (GLuint *) (_valueBase + _bufferOffset);
}
glUniform1uiv(
@@ -2652,7 +2766,7 @@
(GLuint *)value
);
if (_array) {
- releasePointer(_env, _array, value, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)value, JNI_ABORT);
}
}
@@ -2681,7 +2795,7 @@
}
_remaining = _env->GetArrayLength(value_ref) - offset;
value_base = (GLuint *)
- _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0);
+ _env->GetIntArrayElements(value_ref, (jboolean *)0);
value = value_base + offset;
glUniform2uiv(
@@ -2692,7 +2806,7 @@
exit:
if (value_base) {
- _env->ReleasePrimitiveArrayCritical(value_ref, value_base,
+ _env->ReleaseIntArrayElements(value_ref, (jint*)value_base,
JNI_ABORT);
}
if (_exception) {
@@ -2704,14 +2818,14 @@
static void
android_glUniform2uiv__IILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint location, jint count, jobject value_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLuint *value = (GLuint *) 0;
- value = (GLuint *)getPointer(_env, value_buf, &_array, &_remaining, &_bufferOffset);
+ value = (GLuint *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (value == NULL) {
- char * _valueBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _valueBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
value = (GLuint *) (_valueBase + _bufferOffset);
}
glUniform2uiv(
@@ -2720,7 +2834,7 @@
(GLuint *)value
);
if (_array) {
- releasePointer(_env, _array, value, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)value, JNI_ABORT);
}
}
@@ -2749,7 +2863,7 @@
}
_remaining = _env->GetArrayLength(value_ref) - offset;
value_base = (GLuint *)
- _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0);
+ _env->GetIntArrayElements(value_ref, (jboolean *)0);
value = value_base + offset;
glUniform3uiv(
@@ -2760,7 +2874,7 @@
exit:
if (value_base) {
- _env->ReleasePrimitiveArrayCritical(value_ref, value_base,
+ _env->ReleaseIntArrayElements(value_ref, (jint*)value_base,
JNI_ABORT);
}
if (_exception) {
@@ -2772,14 +2886,14 @@
static void
android_glUniform3uiv__IILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint location, jint count, jobject value_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLuint *value = (GLuint *) 0;
- value = (GLuint *)getPointer(_env, value_buf, &_array, &_remaining, &_bufferOffset);
+ value = (GLuint *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (value == NULL) {
- char * _valueBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _valueBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
value = (GLuint *) (_valueBase + _bufferOffset);
}
glUniform3uiv(
@@ -2788,7 +2902,7 @@
(GLuint *)value
);
if (_array) {
- releasePointer(_env, _array, value, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)value, JNI_ABORT);
}
}
@@ -2817,7 +2931,7 @@
}
_remaining = _env->GetArrayLength(value_ref) - offset;
value_base = (GLuint *)
- _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0);
+ _env->GetIntArrayElements(value_ref, (jboolean *)0);
value = value_base + offset;
glUniform4uiv(
@@ -2828,7 +2942,7 @@
exit:
if (value_base) {
- _env->ReleasePrimitiveArrayCritical(value_ref, value_base,
+ _env->ReleaseIntArrayElements(value_ref, (jint*)value_base,
JNI_ABORT);
}
if (_exception) {
@@ -2840,14 +2954,14 @@
static void
android_glUniform4uiv__IILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint location, jint count, jobject value_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLuint *value = (GLuint *) 0;
- value = (GLuint *)getPointer(_env, value_buf, &_array, &_remaining, &_bufferOffset);
+ value = (GLuint *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (value == NULL) {
- char * _valueBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _valueBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
value = (GLuint *) (_valueBase + _bufferOffset);
}
glUniform4uiv(
@@ -2856,7 +2970,7 @@
(GLuint *)value
);
if (_array) {
- releasePointer(_env, _array, value, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)value, JNI_ABORT);
}
}
@@ -2885,7 +2999,7 @@
}
_remaining = _env->GetArrayLength(value_ref) - offset;
value_base = (GLint *)
- _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0);
+ _env->GetIntArrayElements(value_ref, (jboolean *)0);
value = value_base + offset;
glClearBufferiv(
@@ -2896,7 +3010,7 @@
exit:
if (value_base) {
- _env->ReleasePrimitiveArrayCritical(value_ref, value_base,
+ _env->ReleaseIntArrayElements(value_ref, (jint*)value_base,
JNI_ABORT);
}
if (_exception) {
@@ -2908,14 +3022,14 @@
static void
android_glClearBufferiv__IILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint buffer, jint drawbuffer, jobject value_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLint *value = (GLint *) 0;
- value = (GLint *)getPointer(_env, value_buf, &_array, &_remaining, &_bufferOffset);
+ value = (GLint *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (value == NULL) {
- char * _valueBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _valueBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
value = (GLint *) (_valueBase + _bufferOffset);
}
glClearBufferiv(
@@ -2924,7 +3038,7 @@
(GLint *)value
);
if (_array) {
- releasePointer(_env, _array, value, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)value, JNI_ABORT);
}
}
@@ -2953,7 +3067,7 @@
}
_remaining = _env->GetArrayLength(value_ref) - offset;
value_base = (GLuint *)
- _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0);
+ _env->GetIntArrayElements(value_ref, (jboolean *)0);
value = value_base + offset;
glClearBufferuiv(
@@ -2964,7 +3078,7 @@
exit:
if (value_base) {
- _env->ReleasePrimitiveArrayCritical(value_ref, value_base,
+ _env->ReleaseIntArrayElements(value_ref, (jint*)value_base,
JNI_ABORT);
}
if (_exception) {
@@ -2976,14 +3090,14 @@
static void
android_glClearBufferuiv__IILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint buffer, jint drawbuffer, jobject value_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLuint *value = (GLuint *) 0;
- value = (GLuint *)getPointer(_env, value_buf, &_array, &_remaining, &_bufferOffset);
+ value = (GLuint *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (value == NULL) {
- char * _valueBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _valueBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
value = (GLuint *) (_valueBase + _bufferOffset);
}
glClearBufferuiv(
@@ -2992,7 +3106,7 @@
(GLuint *)value
);
if (_array) {
- releasePointer(_env, _array, value, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)value, JNI_ABORT);
}
}
@@ -3021,7 +3135,7 @@
}
_remaining = _env->GetArrayLength(value_ref) - offset;
value_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(value_ref, (jboolean *)0);
value = value_base + offset;
glClearBufferfv(
@@ -3032,7 +3146,7 @@
exit:
if (value_base) {
- _env->ReleasePrimitiveArrayCritical(value_ref, value_base,
+ _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
JNI_ABORT);
}
if (_exception) {
@@ -3044,14 +3158,14 @@
static void
android_glClearBufferfv__IILjava_nio_FloatBuffer_2
(JNIEnv *_env, jobject _this, jint buffer, jint drawbuffer, jobject value_buf) {
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *value = (GLfloat *) 0;
- value = (GLfloat *)getPointer(_env, value_buf, &_array, &_remaining, &_bufferOffset);
+ value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (value == NULL) {
- char * _valueBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
value = (GLfloat *) (_valueBase + _bufferOffset);
}
glClearBufferfv(
@@ -3060,7 +3174,7 @@
(GLfloat *)value
);
if (_array) {
- releasePointer(_env, _array, value, JNI_FALSE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
}
}
@@ -3148,7 +3262,7 @@
_exceptionMessage = "not enough space in uniformIndices";
goto exit;
}
- _indices_base = (GLuint*)_env->GetPrimitiveArrayCritical(
+ _indices_base = (GLuint*)_env->GetIntArrayElements(
uniformIndices_ref, 0);
_indices = _indices_base + uniformIndicesOffset;
@@ -3156,8 +3270,8 @@
exit:
if (_indices_base) {
- _env->ReleasePrimitiveArrayCritical(uniformIndices_ref, _indices_base,
- _exception ? JNI_ABORT : 0);
+ _env->ReleaseIntArrayElements(uniformIndices_ref, (jint*)_indices_base,
+ _exception ? JNI_ABORT : 0);
}
for (_i = _count - 1; _i >= 0; _i--) {
if (_names[_i]) {
@@ -3184,7 +3298,7 @@
jint _count = 0;
jint _i;
const char** _names = NULL;
- jarray _uniformIndicesArray = (jarray)0;
+ jintArray _uniformIndicesArray = (jintArray)0;
jint _uniformIndicesRemaining;
jint _uniformIndicesOffset = 0;
GLuint* _indices = NULL;
@@ -3217,11 +3331,11 @@
}
_indices = (GLuint*)getPointer(_env, uniformIndices_buf,
- &_uniformIndicesArray, &_uniformIndicesRemaining,
+ (jarray*)&_uniformIndicesArray, &_uniformIndicesRemaining,
&_uniformIndicesOffset);
if (!_indices) {
- _indicesBase = (char*)_env->GetPrimitiveArrayCritical(
- _uniformIndicesArray, 0);
+ _indicesBase = (char*)_env->GetIntArrayElements(
+ _uniformIndicesArray, 0);
_indices = (GLuint*)(_indicesBase + _uniformIndicesOffset);
}
if (_uniformIndicesRemaining < _count) {
@@ -3235,7 +3349,8 @@
exit:
if (_uniformIndicesArray) {
- releasePointer(_env, _uniformIndicesArray, _indicesBase, JNI_TRUE);
+ releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(
+ _env, _uniformIndicesArray, (jint*)_indicesBase, JNI_TRUE);
}
for (_i = _count - 1; _i >= 0; _i--) {
if (_names[_i]) {
@@ -3250,7 +3365,6 @@
jniThrowException(_env, _exceptionType, _exceptionMessage);
}
}
-
/* void glGetActiveUniformsiv ( GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params ) */
static void
android_glGetActiveUniformsiv__II_3III_3II
@@ -3279,7 +3393,7 @@
}
_uniformIndicesRemaining = _env->GetArrayLength(uniformIndices_ref) - uniformIndicesOffset;
uniformIndices_base = (GLuint *)
- _env->GetPrimitiveArrayCritical(uniformIndices_ref, (jboolean *)0);
+ _env->GetIntArrayElements(uniformIndices_ref, (jboolean *)0);
uniformIndices = uniformIndices_base + uniformIndicesOffset;
if (!params_ref) {
@@ -3296,7 +3410,7 @@
}
_paramsRemaining = _env->GetArrayLength(params_ref) - paramsOffset;
params_base = (GLint *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + paramsOffset;
glGetActiveUniformsiv(
@@ -3309,11 +3423,11 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
_exception ? JNI_ABORT: 0);
}
if (uniformIndices_base) {
- _env->ReleasePrimitiveArrayCritical(uniformIndices_ref, uniformIndices_base,
+ _env->ReleaseIntArrayElements(uniformIndices_ref, (jint*)uniformIndices_base,
JNI_ABORT);
}
if (_exception) {
@@ -3325,23 +3439,23 @@
static void
android_glGetActiveUniformsiv__IILjava_nio_IntBuffer_2ILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint program, jint uniformCount, jobject uniformIndices_buf, jint pname, jobject params_buf) {
- jarray _uniformIndicesArray = (jarray) 0;
+ jintArray _uniformIndicesArray = (jintArray) 0;
jint _uniformIndicesBufferOffset = (jint) 0;
- jarray _paramsArray = (jarray) 0;
+ jintArray _paramsArray = (jintArray) 0;
jint _paramsBufferOffset = (jint) 0;
jint _uniformIndicesRemaining;
GLuint *uniformIndices = (GLuint *) 0;
jint _paramsRemaining;
GLint *params = (GLint *) 0;
- uniformIndices = (GLuint *)getPointer(_env, uniformIndices_buf, &_uniformIndicesArray, &_uniformIndicesRemaining, &_uniformIndicesBufferOffset);
- params = (GLint *)getPointer(_env, params_buf, &_paramsArray, &_paramsRemaining, &_paramsBufferOffset);
+ uniformIndices = (GLuint *)getPointer(_env, uniformIndices_buf, (jarray*)&_uniformIndicesArray, &_uniformIndicesRemaining, &_uniformIndicesBufferOffset);
+ params = (GLint *)getPointer(_env, params_buf, (jarray*)&_paramsArray, &_paramsRemaining, &_paramsBufferOffset);
if (uniformIndices == NULL) {
- char * _uniformIndicesBase = (char *)_env->GetPrimitiveArrayCritical(_uniformIndicesArray, (jboolean *) 0);
+ char * _uniformIndicesBase = (char *)_env->GetIntArrayElements(_uniformIndicesArray, (jboolean *) 0);
uniformIndices = (GLuint *) (_uniformIndicesBase + _uniformIndicesBufferOffset);
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_paramsArray, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_paramsArray, (jboolean *) 0);
params = (GLint *) (_paramsBase + _paramsBufferOffset);
}
glGetActiveUniformsiv(
@@ -3352,10 +3466,10 @@
(GLint *)params
);
if (_paramsArray) {
- releasePointer(_env, _paramsArray, params, JNI_TRUE);
+ _env->ReleaseIntArrayElements(_paramsArray, (jint*)params, 0);
}
if (_uniformIndicesArray) {
- releasePointer(_env, _uniformIndicesArray, uniformIndices, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_uniformIndicesArray, (jint*)uniformIndices, JNI_ABORT);
}
}
@@ -3418,7 +3532,7 @@
}
_remaining = _env->GetArrayLength(params_ref) - offset;
params_base = (GLint *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetActiveUniformBlockiv(
@@ -3430,7 +3544,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -3442,14 +3556,14 @@
static void
android_glGetActiveUniformBlockiv__IIILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint program, jint uniformBlockIndex, jint pname, jobject params_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLint *params = (GLint *) 0;
- params = (GLint *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLint *) (_paramsBase + _bufferOffset);
}
glGetActiveUniformBlockiv(
@@ -3459,7 +3573,7 @@
(GLint *)params
);
if (_array) {
- releasePointer(_env, _array, params, JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, 0);
}
}
@@ -3490,7 +3604,7 @@
goto exit;
}
_lengthRemaining = _env->GetArrayLength(length_ref) - lengthOffset;
- _length_base = (GLsizei*)_env->GetPrimitiveArrayCritical(
+ _length_base = (GLsizei*)_env->GetIntArrayElements(
length_ref, (jboolean*)0);
_length = _length_base + lengthOffset;
@@ -3507,7 +3621,7 @@
goto exit;
}
_nameRemaining = _env->GetArrayLength(name_ref) - nameOffset;
- _name_base = (GLchar*)_env->GetPrimitiveArrayCritical(
+ _name_base = (GLchar*)_env->GetByteArrayElements(
name_ref, (jboolean*)0);
_name = _name_base + nameOffset;
@@ -3521,11 +3635,11 @@
exit:
if (_name_base) {
- _env->ReleasePrimitiveArrayCritical(name_ref, _name_base,
+ _env->ReleaseByteArrayElements(name_ref, (jbyte*)_name_base,
_exception ? JNI_ABORT: 0);
}
if (_length_base) {
- _env->ReleasePrimitiveArrayCritical(length_ref, _length_base,
+ _env->ReleaseIntArrayElements(length_ref, (jint*)_length_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -3589,7 +3703,6 @@
free(name);
return result;
}
-
/* void glUniformBlockBinding ( GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding ) */
static void
android_glUniformBlockBinding__III
@@ -3651,7 +3764,6 @@
(GLsizei)instanceCount
);
}
-
/* GLsync glFenceSync ( GLenum condition, GLbitfield flags ) */
static jlong
android_glFenceSync__II
@@ -3733,7 +3845,7 @@
}
_remaining = _env->GetArrayLength(params_ref) - offset;
params_base = (GLint64 *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetLongArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetInteger64v(
@@ -3743,7 +3855,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseLongArrayElements(params_ref, (jlong*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -3755,14 +3867,14 @@
static void
android_glGetInteger64v__ILjava_nio_LongBuffer_2
(JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
- jarray _array = (jarray) 0;
+ jlongArray _array = (jlongArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLint64 *params = (GLint64 *) 0;
- params = (GLint64 *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLint64 *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetLongArrayElements(_array, (jboolean *) 0);
params = (GLint64 *) (_paramsBase + _bufferOffset);
}
glGetInteger64v(
@@ -3770,7 +3882,7 @@
(GLint64 *)params
);
if (_array) {
- releasePointer(_env, _array, params, JNI_TRUE);
+ _env->ReleaseLongArrayElements(_array, (jlong*)params, 0);
}
}
@@ -3802,7 +3914,7 @@
}
_lengthRemaining = _env->GetArrayLength(length_ref) - lengthOffset;
length_base = (GLsizei *)
- _env->GetPrimitiveArrayCritical(length_ref, (jboolean *)0);
+ _env->GetIntArrayElements(length_ref, (jboolean *)0);
length = length_base + lengthOffset;
if (!values_ref) {
@@ -3819,7 +3931,7 @@
}
_valuesRemaining = _env->GetArrayLength(values_ref) - valuesOffset;
values_base = (GLint *)
- _env->GetPrimitiveArrayCritical(values_ref, (jboolean *)0);
+ _env->GetIntArrayElements(values_ref, (jboolean *)0);
values = values_base + valuesOffset;
glGetSynciv(
@@ -3832,11 +3944,11 @@
exit:
if (values_base) {
- _env->ReleasePrimitiveArrayCritical(values_ref, values_base,
+ _env->ReleaseIntArrayElements(values_ref, (jint*)values_base,
_exception ? JNI_ABORT: 0);
}
if (length_base) {
- _env->ReleasePrimitiveArrayCritical(length_ref, length_base,
+ _env->ReleaseIntArrayElements(length_ref, (jint*)length_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -3848,23 +3960,23 @@
static void
android_glGetSynciv__JIILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jlong sync, jint pname, jint bufSize, jobject length_buf, jobject values_buf) {
- jarray _lengthArray = (jarray) 0;
+ jintArray _lengthArray = (jintArray) 0;
jint _lengthBufferOffset = (jint) 0;
- jarray _valuesArray = (jarray) 0;
+ jintArray _valuesArray = (jintArray) 0;
jint _valuesBufferOffset = (jint) 0;
jint _lengthRemaining;
GLsizei *length = (GLsizei *) 0;
jint _valuesRemaining;
GLint *values = (GLint *) 0;
- length = (GLsizei *)getPointer(_env, length_buf, &_lengthArray, &_lengthRemaining, &_lengthBufferOffset);
- values = (GLint *)getPointer(_env, values_buf, &_valuesArray, &_valuesRemaining, &_valuesBufferOffset);
+ length = (GLsizei *)getPointer(_env, length_buf, (jarray*)&_lengthArray, &_lengthRemaining, &_lengthBufferOffset);
+ values = (GLint *)getPointer(_env, values_buf, (jarray*)&_valuesArray, &_valuesRemaining, &_valuesBufferOffset);
if (length == NULL) {
- char * _lengthBase = (char *)_env->GetPrimitiveArrayCritical(_lengthArray, (jboolean *) 0);
+ char * _lengthBase = (char *)_env->GetIntArrayElements(_lengthArray, (jboolean *) 0);
length = (GLsizei *) (_lengthBase + _lengthBufferOffset);
}
if (values == NULL) {
- char * _valuesBase = (char *)_env->GetPrimitiveArrayCritical(_valuesArray, (jboolean *) 0);
+ char * _valuesBase = (char *)_env->GetIntArrayElements(_valuesArray, (jboolean *) 0);
values = (GLint *) (_valuesBase + _valuesBufferOffset);
}
glGetSynciv(
@@ -3875,10 +3987,10 @@
(GLint *)values
);
if (_valuesArray) {
- releasePointer(_env, _valuesArray, values, JNI_TRUE);
+ _env->ReleaseIntArrayElements(_valuesArray, (jint*)values, 0);
}
if (_lengthArray) {
- releasePointer(_env, _lengthArray, length, JNI_TRUE);
+ _env->ReleaseIntArrayElements(_lengthArray, (jint*)length, 0);
}
}
@@ -3907,7 +4019,7 @@
}
_remaining = _env->GetArrayLength(data_ref) - offset;
data_base = (GLint64 *)
- _env->GetPrimitiveArrayCritical(data_ref, (jboolean *)0);
+ _env->GetLongArrayElements(data_ref, (jboolean *)0);
data = data_base + offset;
glGetInteger64i_v(
@@ -3918,7 +4030,7 @@
exit:
if (data_base) {
- _env->ReleasePrimitiveArrayCritical(data_ref, data_base,
+ _env->ReleaseLongArrayElements(data_ref, (jlong*)data_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -3930,14 +4042,14 @@
static void
android_glGetInteger64i_v__IILjava_nio_LongBuffer_2
(JNIEnv *_env, jobject _this, jint target, jint index, jobject data_buf) {
- jarray _array = (jarray) 0;
+ jlongArray _array = (jlongArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLint64 *data = (GLint64 *) 0;
- data = (GLint64 *)getPointer(_env, data_buf, &_array, &_remaining, &_bufferOffset);
+ data = (GLint64 *)getPointer(_env, data_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (data == NULL) {
- char * _dataBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _dataBase = (char *)_env->GetLongArrayElements(_array, (jboolean *) 0);
data = (GLint64 *) (_dataBase + _bufferOffset);
}
glGetInteger64i_v(
@@ -3946,7 +4058,7 @@
(GLint64 *)data
);
if (_array) {
- releasePointer(_env, _array, data, JNI_TRUE);
+ _env->ReleaseLongArrayElements(_array, (jlong*)data, 0);
}
}
@@ -3975,7 +4087,7 @@
}
_remaining = _env->GetArrayLength(params_ref) - offset;
params_base = (GLint64 *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetLongArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetBufferParameteri64v(
@@ -3986,7 +4098,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseLongArrayElements(params_ref, (jlong*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -3998,14 +4110,14 @@
static void
android_glGetBufferParameteri64v__IILjava_nio_LongBuffer_2
(JNIEnv *_env, jobject _this, jint target, jint pname, jobject params_buf) {
- jarray _array = (jarray) 0;
+ jlongArray _array = (jlongArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLint64 *params = (GLint64 *) 0;
- params = (GLint64 *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLint64 *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetLongArrayElements(_array, (jboolean *) 0);
params = (GLint64 *) (_paramsBase + _bufferOffset);
}
glGetBufferParameteri64v(
@@ -4014,7 +4126,7 @@
(GLint64 *)params
);
if (_array) {
- releasePointer(_env, _array, params, JNI_TRUE);
+ _env->ReleaseLongArrayElements(_array, (jlong*)params, 0);
}
}
@@ -4043,7 +4155,7 @@
}
_remaining = _env->GetArrayLength(samplers_ref) - offset;
samplers_base = (GLuint *)
- _env->GetPrimitiveArrayCritical(samplers_ref, (jboolean *)0);
+ _env->GetIntArrayElements(samplers_ref, (jboolean *)0);
samplers = samplers_base + offset;
glGenSamplers(
@@ -4053,7 +4165,7 @@
exit:
if (samplers_base) {
- _env->ReleasePrimitiveArrayCritical(samplers_ref, samplers_base,
+ _env->ReleaseIntArrayElements(samplers_ref, (jint*)samplers_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -4065,14 +4177,14 @@
static void
android_glGenSamplers__ILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint count, jobject samplers_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLuint *samplers = (GLuint *) 0;
- samplers = (GLuint *)getPointer(_env, samplers_buf, &_array, &_remaining, &_bufferOffset);
+ samplers = (GLuint *)getPointer(_env, samplers_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (samplers == NULL) {
- char * _samplersBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _samplersBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
samplers = (GLuint *) (_samplersBase + _bufferOffset);
}
glGenSamplers(
@@ -4080,7 +4192,7 @@
(GLuint *)samplers
);
if (_array) {
- releasePointer(_env, _array, samplers, JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)samplers, 0);
}
}
@@ -4109,7 +4221,7 @@
}
_remaining = _env->GetArrayLength(samplers_ref) - offset;
samplers_base = (GLuint *)
- _env->GetPrimitiveArrayCritical(samplers_ref, (jboolean *)0);
+ _env->GetIntArrayElements(samplers_ref, (jboolean *)0);
samplers = samplers_base + offset;
glDeleteSamplers(
@@ -4119,7 +4231,7 @@
exit:
if (samplers_base) {
- _env->ReleasePrimitiveArrayCritical(samplers_ref, samplers_base,
+ _env->ReleaseIntArrayElements(samplers_ref, (jint*)samplers_base,
JNI_ABORT);
}
if (_exception) {
@@ -4131,14 +4243,14 @@
static void
android_glDeleteSamplers__ILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint count, jobject samplers_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLuint *samplers = (GLuint *) 0;
- samplers = (GLuint *)getPointer(_env, samplers_buf, &_array, &_remaining, &_bufferOffset);
+ samplers = (GLuint *)getPointer(_env, samplers_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (samplers == NULL) {
- char * _samplersBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _samplersBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
samplers = (GLuint *) (_samplersBase + _bufferOffset);
}
glDeleteSamplers(
@@ -4146,7 +4258,7 @@
(GLuint *)samplers
);
if (_array) {
- releasePointer(_env, _array, samplers, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)samplers, JNI_ABORT);
}
}
@@ -4207,7 +4319,7 @@
}
_remaining = _env->GetArrayLength(param_ref) - offset;
param_base = (GLint *)
- _env->GetPrimitiveArrayCritical(param_ref, (jboolean *)0);
+ _env->GetIntArrayElements(param_ref, (jboolean *)0);
param = param_base + offset;
glSamplerParameteriv(
@@ -4218,7 +4330,7 @@
exit:
if (param_base) {
- _env->ReleasePrimitiveArrayCritical(param_ref, param_base,
+ _env->ReleaseIntArrayElements(param_ref, (jint*)param_base,
JNI_ABORT);
}
if (_exception) {
@@ -4230,14 +4342,14 @@
static void
android_glSamplerParameteriv__IILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint sampler, jint pname, jobject param_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLint *param = (GLint *) 0;
- param = (GLint *)getPointer(_env, param_buf, &_array, &_remaining, &_bufferOffset);
+ param = (GLint *)getPointer(_env, param_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (param == NULL) {
- char * _paramBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
param = (GLint *) (_paramBase + _bufferOffset);
}
glSamplerParameteriv(
@@ -4246,7 +4358,7 @@
(GLint *)param
);
if (_array) {
- releasePointer(_env, _array, param, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)param, JNI_ABORT);
}
}
@@ -4286,7 +4398,7 @@
}
_remaining = _env->GetArrayLength(param_ref) - offset;
param_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(param_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(param_ref, (jboolean *)0);
param = param_base + offset;
glSamplerParameterfv(
@@ -4297,7 +4409,7 @@
exit:
if (param_base) {
- _env->ReleasePrimitiveArrayCritical(param_ref, param_base,
+ _env->ReleaseFloatArrayElements(param_ref, (jfloat*)param_base,
JNI_ABORT);
}
if (_exception) {
@@ -4309,14 +4421,14 @@
static void
android_glSamplerParameterfv__IILjava_nio_FloatBuffer_2
(JNIEnv *_env, jobject _this, jint sampler, jint pname, jobject param_buf) {
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *param = (GLfloat *) 0;
- param = (GLfloat *)getPointer(_env, param_buf, &_array, &_remaining, &_bufferOffset);
+ param = (GLfloat *)getPointer(_env, param_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (param == NULL) {
- char * _paramBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
param = (GLfloat *) (_paramBase + _bufferOffset);
}
glSamplerParameterfv(
@@ -4325,7 +4437,7 @@
(GLfloat *)param
);
if (_array) {
- releasePointer(_env, _array, param, JNI_FALSE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)param, JNI_ABORT);
}
}
@@ -4354,7 +4466,7 @@
}
_remaining = _env->GetArrayLength(params_ref) - offset;
params_base = (GLint *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetSamplerParameteriv(
@@ -4365,7 +4477,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -4377,14 +4489,14 @@
static void
android_glGetSamplerParameteriv__IILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint sampler, jint pname, jobject params_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLint *params = (GLint *) 0;
- params = (GLint *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLint *) (_paramsBase + _bufferOffset);
}
glGetSamplerParameteriv(
@@ -4393,7 +4505,7 @@
(GLint *)params
);
if (_array) {
- releasePointer(_env, _array, params, JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, 0);
}
}
@@ -4422,7 +4534,7 @@
}
_remaining = _env->GetArrayLength(params_ref) - offset;
params_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetSamplerParameterfv(
@@ -4433,7 +4545,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseFloatArrayElements(params_ref, (jfloat*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -4445,14 +4557,14 @@
static void
android_glGetSamplerParameterfv__IILjava_nio_FloatBuffer_2
(JNIEnv *_env, jobject _this, jint sampler, jint pname, jobject params_buf) {
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *params = (GLfloat *) 0;
- params = (GLfloat *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfloat *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
params = (GLfloat *) (_paramsBase + _bufferOffset);
}
glGetSamplerParameterfv(
@@ -4461,7 +4573,7 @@
(GLfloat *)params
);
if (_array) {
- releasePointer(_env, _array, params, JNI_TRUE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)params, 0);
}
}
@@ -4510,7 +4622,7 @@
}
_remaining = _env->GetArrayLength(ids_ref) - offset;
ids_base = (GLuint *)
- _env->GetPrimitiveArrayCritical(ids_ref, (jboolean *)0);
+ _env->GetIntArrayElements(ids_ref, (jboolean *)0);
ids = ids_base + offset;
glDeleteTransformFeedbacks(
@@ -4520,7 +4632,7 @@
exit:
if (ids_base) {
- _env->ReleasePrimitiveArrayCritical(ids_ref, ids_base,
+ _env->ReleaseIntArrayElements(ids_ref, (jint*)ids_base,
JNI_ABORT);
}
if (_exception) {
@@ -4532,14 +4644,14 @@
static void
android_glDeleteTransformFeedbacks__ILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint n, jobject ids_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLuint *ids = (GLuint *) 0;
- ids = (GLuint *)getPointer(_env, ids_buf, &_array, &_remaining, &_bufferOffset);
+ ids = (GLuint *)getPointer(_env, ids_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (ids == NULL) {
- char * _idsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _idsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
ids = (GLuint *) (_idsBase + _bufferOffset);
}
glDeleteTransformFeedbacks(
@@ -4547,7 +4659,7 @@
(GLuint *)ids
);
if (_array) {
- releasePointer(_env, _array, ids, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)ids, JNI_ABORT);
}
}
@@ -4576,7 +4688,7 @@
}
_remaining = _env->GetArrayLength(ids_ref) - offset;
ids_base = (GLuint *)
- _env->GetPrimitiveArrayCritical(ids_ref, (jboolean *)0);
+ _env->GetIntArrayElements(ids_ref, (jboolean *)0);
ids = ids_base + offset;
glGenTransformFeedbacks(
@@ -4586,7 +4698,7 @@
exit:
if (ids_base) {
- _env->ReleasePrimitiveArrayCritical(ids_ref, ids_base,
+ _env->ReleaseIntArrayElements(ids_ref, (jint*)ids_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -4598,14 +4710,14 @@
static void
android_glGenTransformFeedbacks__ILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint n, jobject ids_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLuint *ids = (GLuint *) 0;
- ids = (GLuint *)getPointer(_env, ids_buf, &_array, &_remaining, &_bufferOffset);
+ ids = (GLuint *)getPointer(_env, ids_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (ids == NULL) {
- char * _idsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _idsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
ids = (GLuint *) (_idsBase + _bufferOffset);
}
glGenTransformFeedbacks(
@@ -4613,7 +4725,7 @@
(GLuint *)ids
);
if (_array) {
- releasePointer(_env, _array, ids, JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)ids, 0);
}
}
@@ -4674,7 +4786,7 @@
}
_lengthRemaining = _env->GetArrayLength(length_ref) - lengthOffset;
length_base = (GLsizei *)
- _env->GetPrimitiveArrayCritical(length_ref, (jboolean *)0);
+ _env->GetIntArrayElements(length_ref, (jboolean *)0);
length = length_base + lengthOffset;
if (!binaryFormat_ref) {
@@ -4691,10 +4803,10 @@
}
_binaryFormatRemaining = _env->GetArrayLength(binaryFormat_ref) - binaryFormatOffset;
binaryFormat_base = (GLenum *)
- _env->GetPrimitiveArrayCritical(binaryFormat_ref, (jboolean *)0);
+ _env->GetIntArrayElements(binaryFormat_ref, (jboolean *)0);
binaryFormat = binaryFormat_base + binaryFormatOffset;
- binary = (GLvoid *)getPointer(_env, binary_buf, &_array, &_binaryRemaining, &_bufferOffset);
+ binary = (GLvoid *)getPointer(_env, binary_buf, (jarray*)&_array, &_binaryRemaining, &_bufferOffset);
if (binary == NULL) {
char * _binaryBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
binary = (GLvoid *) (_binaryBase + _bufferOffset);
@@ -4712,11 +4824,11 @@
releasePointer(_env, _array, binary, _exception ? JNI_FALSE : JNI_TRUE);
}
if (binaryFormat_base) {
- _env->ReleasePrimitiveArrayCritical(binaryFormat_ref, binaryFormat_base,
+ _env->ReleaseIntArrayElements(binaryFormat_ref, (jint*)binaryFormat_base,
_exception ? JNI_ABORT: 0);
}
if (length_base) {
- _env->ReleasePrimitiveArrayCritical(length_ref, length_base,
+ _env->ReleaseIntArrayElements(length_ref, (jint*)length_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -4728,11 +4840,11 @@
static void
android_glGetProgramBinary__IILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_Buffer_2
(JNIEnv *_env, jobject _this, jint program, jint bufSize, jobject length_buf, jobject binaryFormat_buf, jobject binary_buf) {
- jarray _lengthArray = (jarray) 0;
+ jintArray _lengthArray = (jintArray) 0;
jint _lengthBufferOffset = (jint) 0;
- jarray _binaryFormatArray = (jarray) 0;
+ jintArray _binaryFormatArray = (jintArray) 0;
jint _binaryFormatBufferOffset = (jint) 0;
- jarray _binaryArray = (jarray) 0;
+ jintArray _binaryArray = (jintArray) 0;
jint _binaryBufferOffset = (jint) 0;
jint _lengthRemaining;
GLsizei *length = (GLsizei *) 0;
@@ -4741,15 +4853,15 @@
jint _binaryRemaining;
GLvoid *binary = (GLvoid *) 0;
- length = (GLsizei *)getPointer(_env, length_buf, &_lengthArray, &_lengthRemaining, &_lengthBufferOffset);
- binaryFormat = (GLenum *)getPointer(_env, binaryFormat_buf, &_binaryFormatArray, &_binaryFormatRemaining, &_binaryFormatBufferOffset);
- binary = (GLvoid *)getPointer(_env, binary_buf, &_binaryArray, &_binaryRemaining, &_binaryBufferOffset);
+ length = (GLsizei *)getPointer(_env, length_buf, (jarray*)&_lengthArray, &_lengthRemaining, &_lengthBufferOffset);
+ binaryFormat = (GLenum *)getPointer(_env, binaryFormat_buf, (jarray*)&_binaryFormatArray, &_binaryFormatRemaining, &_binaryFormatBufferOffset);
+ binary = (GLvoid *)getPointer(_env, binary_buf, (jarray*)&_binaryArray, &_binaryRemaining, &_binaryBufferOffset);
if (length == NULL) {
- char * _lengthBase = (char *)_env->GetPrimitiveArrayCritical(_lengthArray, (jboolean *) 0);
+ char * _lengthBase = (char *)_env->GetIntArrayElements(_lengthArray, (jboolean *) 0);
length = (GLsizei *) (_lengthBase + _lengthBufferOffset);
}
if (binaryFormat == NULL) {
- char * _binaryFormatBase = (char *)_env->GetPrimitiveArrayCritical(_binaryFormatArray, (jboolean *) 0);
+ char * _binaryFormatBase = (char *)_env->GetIntArrayElements(_binaryFormatArray, (jboolean *) 0);
binaryFormat = (GLenum *) (_binaryFormatBase + _binaryFormatBufferOffset);
}
if (binary == NULL) {
@@ -4767,10 +4879,10 @@
releasePointer(_env, _binaryArray, binary, JNI_TRUE);
}
if (_binaryFormatArray) {
- releasePointer(_env, _binaryFormatArray, binaryFormat, JNI_TRUE);
+ _env->ReleaseIntArrayElements(_binaryFormatArray, (jint*)binaryFormat, 0);
}
if (_lengthArray) {
- releasePointer(_env, _lengthArray, length, JNI_TRUE);
+ _env->ReleaseIntArrayElements(_lengthArray, (jint*)length, 0);
}
}
@@ -4783,7 +4895,7 @@
jint _remaining;
GLvoid *binary = (GLvoid *) 0;
- binary = (GLvoid *)getPointer(_env, binary_buf, &_array, &_remaining, &_bufferOffset);
+ binary = (GLvoid *)getPointer(_env, binary_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (binary == NULL) {
char * _binaryBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
binary = (GLvoid *) (_binaryBase + _bufferOffset);
@@ -4835,7 +4947,7 @@
}
_remaining = _env->GetArrayLength(attachments_ref) - offset;
attachments_base = (GLenum *)
- _env->GetPrimitiveArrayCritical(attachments_ref, (jboolean *)0);
+ _env->GetIntArrayElements(attachments_ref, (jboolean *)0);
attachments = attachments_base + offset;
glInvalidateFramebuffer(
@@ -4846,7 +4958,7 @@
exit:
if (attachments_base) {
- _env->ReleasePrimitiveArrayCritical(attachments_ref, attachments_base,
+ _env->ReleaseIntArrayElements(attachments_ref, (jint*)attachments_base,
JNI_ABORT);
}
if (_exception) {
@@ -4858,14 +4970,14 @@
static void
android_glInvalidateFramebuffer__IILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint target, jint numAttachments, jobject attachments_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLenum *attachments = (GLenum *) 0;
- attachments = (GLenum *)getPointer(_env, attachments_buf, &_array, &_remaining, &_bufferOffset);
+ attachments = (GLenum *)getPointer(_env, attachments_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (attachments == NULL) {
- char * _attachmentsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _attachmentsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
attachments = (GLenum *) (_attachmentsBase + _bufferOffset);
}
glInvalidateFramebuffer(
@@ -4874,7 +4986,7 @@
(GLenum *)attachments
);
if (_array) {
- releasePointer(_env, _array, attachments, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)attachments, JNI_ABORT);
}
}
@@ -4903,7 +5015,7 @@
}
_remaining = _env->GetArrayLength(attachments_ref) - offset;
attachments_base = (GLenum *)
- _env->GetPrimitiveArrayCritical(attachments_ref, (jboolean *)0);
+ _env->GetIntArrayElements(attachments_ref, (jboolean *)0);
attachments = attachments_base + offset;
glInvalidateSubFramebuffer(
@@ -4918,7 +5030,7 @@
exit:
if (attachments_base) {
- _env->ReleasePrimitiveArrayCritical(attachments_ref, attachments_base,
+ _env->ReleaseIntArrayElements(attachments_ref, (jint*)attachments_base,
JNI_ABORT);
}
if (_exception) {
@@ -4930,14 +5042,14 @@
static void
android_glInvalidateSubFramebuffer__IILjava_nio_IntBuffer_2IIII
(JNIEnv *_env, jobject _this, jint target, jint numAttachments, jobject attachments_buf, jint x, jint y, jint width, jint height) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLenum *attachments = (GLenum *) 0;
- attachments = (GLenum *)getPointer(_env, attachments_buf, &_array, &_remaining, &_bufferOffset);
+ attachments = (GLenum *)getPointer(_env, attachments_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (attachments == NULL) {
- char * _attachmentsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _attachmentsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
attachments = (GLenum *) (_attachmentsBase + _bufferOffset);
}
glInvalidateSubFramebuffer(
@@ -4950,7 +5062,7 @@
(GLsizei)height
);
if (_array) {
- releasePointer(_env, _array, attachments, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)attachments, JNI_ABORT);
}
}
@@ -5006,7 +5118,7 @@
}
_remaining = _env->GetArrayLength(params_ref) - offset;
params_base = (GLint *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetInternalformativ(
@@ -5019,7 +5131,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -5031,14 +5143,14 @@
static void
android_glGetInternalformativ__IIIILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint target, jint internalformat, jint pname, jint bufSize, jobject params_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLint *params = (GLint *) 0;
- params = (GLint *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLint *) (_paramsBase + _bufferOffset);
}
glGetInternalformativ(
@@ -5049,7 +5161,7 @@
(GLint *)params
);
if (_array) {
- releasePointer(_env, _array, params, JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, 0);
}
}
diff --git a/core/jni/android_opengl_GLES31.cpp b/core/jni/android_opengl_GLES31.cpp
index e5ea950..92ecbe0 100644
--- a/core/jni/android_opengl_GLES31.cpp
+++ b/core/jni/android_opengl_GLES31.cpp
@@ -124,6 +124,116 @@
return NULL;
}
+class ByteArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jbyteArray array, jboolean* is_copy) {
+ return _env->GetByteArrayElements(array, is_copy);
+ }
+};
+class BooleanArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jbooleanArray array, jboolean* is_copy) {
+ return _env->GetBooleanArrayElements(array, is_copy);
+ }
+};
+class CharArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jcharArray array, jboolean* is_copy) {
+ return _env->GetCharArrayElements(array, is_copy);
+ }
+};
+class ShortArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jshortArray array, jboolean* is_copy) {
+ return _env->GetShortArrayElements(array, is_copy);
+ }
+};
+class IntArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jintArray array, jboolean* is_copy) {
+ return _env->GetIntArrayElements(array, is_copy);
+ }
+};
+class LongArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jlongArray array, jboolean* is_copy) {
+ return _env->GetLongArrayElements(array, is_copy);
+ }
+};
+class FloatArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jfloatArray array, jboolean* is_copy) {
+ return _env->GetFloatArrayElements(array, is_copy);
+ }
+};
+class DoubleArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jdoubleArray array, jboolean* is_copy) {
+ return _env->GetDoubleArrayElements(array, is_copy);
+ }
+};
+
+template<typename JTYPEARRAY, typename ARRAYGETTER>
+static void*
+getArrayPointer(JNIEnv *_env, JTYPEARRAY array, jboolean* is_copy) {
+ return ARRAYGETTER::Get(_env, array, is_copy);
+}
+
+class ByteArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jbyteArray array, jbyte* data, jboolean commit) {
+ _env->ReleaseByteArrayElements(array, data, commit ? 0 : JNI_ABORT);
+ }
+};
+class BooleanArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jbooleanArray array, jboolean* data, jboolean commit) {
+ _env->ReleaseBooleanArrayElements(array, data, commit ? 0 : JNI_ABORT);
+ }
+};
+class CharArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jcharArray array, jchar* data, jboolean commit) {
+ _env->ReleaseCharArrayElements(array, data, commit ? 0 : JNI_ABORT);
+ }
+};
+class ShortArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jshortArray array, jshort* data, jboolean commit) {
+ _env->ReleaseShortArrayElements(array, data, commit ? 0 : JNI_ABORT);
+ }
+};
+class IntArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jintArray array, jint* data, jboolean commit) {
+ _env->ReleaseIntArrayElements(array, data, commit ? 0 : JNI_ABORT);
+ }
+};
+class LongArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jlongArray array, jlong* data, jboolean commit) {
+ _env->ReleaseLongArrayElements(array, data, commit ? 0 : JNI_ABORT);
+ }
+};
+class FloatArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jfloatArray array, jfloat* data, jboolean commit) {
+ _env->ReleaseFloatArrayElements(array, data, commit ? 0 : JNI_ABORT);
+ }
+};
+class DoubleArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jdoubleArray array, jdouble* data, jboolean commit) {
+ _env->ReleaseDoubleArrayElements(array, data, commit ? 0 : JNI_ABORT);
+ }
+};
+
+template<typename JTYPEARRAY, typename NTYPEARRAY, typename ARRAYRELEASER>
+static void
+releaseArrayPointer(JNIEnv *_env, JTYPEARRAY array, NTYPEARRAY data, jboolean commit) {
+ ARRAYRELEASER::Release(_env, array, data, commit);
+}
+
static void
releasePointer(JNIEnv *_env, jarray array, void *data, jboolean commit)
{
@@ -227,7 +337,8 @@
return needed;
}
-template <typename JTYPEARRAY, typename CTYPE, void GET(GLenum, CTYPE*)>
+template <typename JTYPEARRAY, typename ARRAYGETTER, typename NTYPEARRAY,
+ typename ARRAYRELEASER, typename CTYPE, void GET(GLenum, CTYPE*)>
static void
get
(JNIEnv *_env, jobject _this, jint pname, JTYPEARRAY params_ref, jint offset) {
@@ -262,8 +373,8 @@
_exceptionMessage = "length - offset < needed";
goto exit;
}
- params_base = (CTYPE *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ params_base = (CTYPE *) getArrayPointer<JTYPEARRAY, ARRAYGETTER>(
+ _env, params_ref, (jboolean *)0);
params = params_base + offset;
GET(
@@ -273,8 +384,8 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
- _exception ? JNI_ABORT: 0);
+ releaseArrayPointer<JTYPEARRAY, NTYPEARRAY, ARRAYRELEASER>(
+ _env, params_ref, params_base, !_exception);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -282,20 +393,21 @@
}
-template <typename CTYPE, void GET(GLenum, CTYPE*)>
+template <typename CTYPE, typename JTYPEARRAY, typename ARRAYGETTER, typename NTYPEARRAY,
+ typename ARRAYRELEASER, void GET(GLenum, CTYPE*)>
static void
getarray
(JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
jint _exception = 0;
const char * _exceptionType;
const char * _exceptionMessage;
- jarray _array = (jarray) 0;
+ JTYPEARRAY _array = (JTYPEARRAY) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
CTYPE *params = (CTYPE *) 0;
int _needed = 0;
- params = (CTYPE *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (CTYPE *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
_remaining /= sizeof(CTYPE); // convert from bytes to item count
_needed = getNeededCount(pname);
// if we didn't find this pname, we just assume the user passed
@@ -308,7 +420,8 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *) getArrayPointer<JTYPEARRAY, ARRAYGETTER>(
+ _env, _array, (jboolean *) 0);
params = (CTYPE *) (_paramsBase + _bufferOffset);
}
GET(
@@ -318,7 +431,8 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, _exception ? JNI_FALSE : JNI_TRUE);
+ releaseArrayPointer<JTYPEARRAY, NTYPEARRAY, ARRAYRELEASER>(
+ _env, _array, (NTYPEARRAY)params, _exception ? JNI_FALSE : JNI_TRUE);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -410,7 +524,7 @@
}
_remaining = _env->GetArrayLength(params_ref) - offset;
params_base = (GLint *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetFramebufferParameteriv(
@@ -421,7 +535,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -433,14 +547,14 @@
static void
android_glGetFramebufferParameteriv__IILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint target, jint pname, jobject params_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLint *params = (GLint *) 0;
- params = (GLint *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLint *) (_paramsBase + _bufferOffset);
}
glGetFramebufferParameteriv(
@@ -449,7 +563,7 @@
(GLint *)params
);
if (_array) {
- releasePointer(_env, _array, params, JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, 0);
}
}
@@ -478,7 +592,7 @@
}
_remaining = _env->GetArrayLength(params_ref) - offset;
params_base = (GLint *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetProgramInterfaceiv(
@@ -490,7 +604,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -502,14 +616,14 @@
static void
android_glGetProgramInterfaceiv__IIILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint program, jint programInterface, jint pname, jobject params_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLint *params = (GLint *) 0;
- params = (GLint *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLint *) (_paramsBase + _bufferOffset);
}
glGetProgramInterfaceiv(
@@ -519,7 +633,7 @@
(GLint *)params
);
if (_array) {
- releasePointer(_env, _array, params, JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, 0);
}
}
@@ -597,7 +711,7 @@
}
_propsRemaining = _env->GetArrayLength(props_ref) - propsOffset;
props_base = (GLenum *)
- _env->GetPrimitiveArrayCritical(props_ref, (jboolean *)0);
+ _env->GetIntArrayElements(props_ref, (jboolean *)0);
props = props_base + propsOffset;
if (!length_ref) {
@@ -614,7 +728,7 @@
}
_lengthRemaining = _env->GetArrayLength(length_ref) - lengthOffset;
length_base = (GLsizei *)
- _env->GetPrimitiveArrayCritical(length_ref, (jboolean *)0);
+ _env->GetIntArrayElements(length_ref, (jboolean *)0);
length = length_base + lengthOffset;
if (!params_ref) {
@@ -631,7 +745,7 @@
}
_paramsRemaining = _env->GetArrayLength(params_ref) - paramsOffset;
params_base = (GLint *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + paramsOffset;
glGetProgramResourceiv(
@@ -647,15 +761,15 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
_exception ? JNI_ABORT: 0);
}
if (length_base) {
- _env->ReleasePrimitiveArrayCritical(length_ref, length_base,
+ _env->ReleaseIntArrayElements(length_ref, (jint*)length_base,
_exception ? JNI_ABORT: 0);
}
if (props_base) {
- _env->ReleasePrimitiveArrayCritical(props_ref, props_base,
+ _env->ReleaseIntArrayElements(props_ref, (jint*)props_base,
JNI_ABORT);
}
if (_exception) {
@@ -667,11 +781,11 @@
static void
android_glGetProgramResourceiv__IIIILjava_nio_IntBuffer_2ILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint program, jint programInterface, jint index, jint propCount, jobject props_buf, jint bufSize, jobject length_buf, jobject params_buf) {
- jarray _propsArray = (jarray) 0;
+ jintArray _propsArray = (jintArray) 0;
jint _propsBufferOffset = (jint) 0;
- jarray _lengthArray = (jarray) 0;
+ jintArray _lengthArray = (jintArray) 0;
jint _lengthBufferOffset = (jint) 0;
- jarray _paramsArray = (jarray) 0;
+ jintArray _paramsArray = (jintArray) 0;
jint _paramsBufferOffset = (jint) 0;
jint _propsRemaining;
GLenum *props = (GLenum *) 0;
@@ -680,19 +794,19 @@
jint _paramsRemaining;
GLint *params = (GLint *) 0;
- props = (GLenum *)getPointer(_env, props_buf, &_propsArray, &_propsRemaining, &_propsBufferOffset);
- length = (GLsizei *)getPointer(_env, length_buf, &_lengthArray, &_lengthRemaining, &_lengthBufferOffset);
- params = (GLint *)getPointer(_env, params_buf, &_paramsArray, &_paramsRemaining, &_paramsBufferOffset);
+ props = (GLenum *)getPointer(_env, props_buf, (jarray*)&_propsArray, &_propsRemaining, &_propsBufferOffset);
+ length = (GLsizei *)getPointer(_env, length_buf, (jarray*)&_lengthArray, &_lengthRemaining, &_lengthBufferOffset);
+ params = (GLint *)getPointer(_env, params_buf, (jarray*)&_paramsArray, &_paramsRemaining, &_paramsBufferOffset);
if (props == NULL) {
- char * _propsBase = (char *)_env->GetPrimitiveArrayCritical(_propsArray, (jboolean *) 0);
+ char * _propsBase = (char *)_env->GetIntArrayElements(_propsArray, (jboolean *) 0);
props = (GLenum *) (_propsBase + _propsBufferOffset);
}
if (length == NULL) {
- char * _lengthBase = (char *)_env->GetPrimitiveArrayCritical(_lengthArray, (jboolean *) 0);
+ char * _lengthBase = (char *)_env->GetIntArrayElements(_lengthArray, (jboolean *) 0);
length = (GLsizei *) (_lengthBase + _lengthBufferOffset);
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_paramsArray, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_paramsArray, (jboolean *) 0);
params = (GLint *) (_paramsBase + _paramsBufferOffset);
}
glGetProgramResourceiv(
@@ -706,13 +820,13 @@
(GLint *)params
);
if (_paramsArray) {
- releasePointer(_env, _paramsArray, params, JNI_TRUE);
+ _env->ReleaseIntArrayElements(_paramsArray, (jint*)params, 0);
}
if (_lengthArray) {
- releasePointer(_env, _lengthArray, length, JNI_TRUE);
+ _env->ReleaseIntArrayElements(_lengthArray, (jint*)length, 0);
}
if (_propsArray) {
- releasePointer(_env, _propsArray, props, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_propsArray, (jint*)props, JNI_ABORT);
}
}
@@ -814,7 +928,7 @@
}
_remaining = _env->GetArrayLength(pipelines_ref) - offset;
pipelines_base = (GLuint *)
- _env->GetPrimitiveArrayCritical(pipelines_ref, (jboolean *)0);
+ _env->GetIntArrayElements(pipelines_ref, (jboolean *)0);
pipelines = pipelines_base + offset;
glDeleteProgramPipelines(
@@ -824,7 +938,7 @@
exit:
if (pipelines_base) {
- _env->ReleasePrimitiveArrayCritical(pipelines_ref, pipelines_base,
+ _env->ReleaseIntArrayElements(pipelines_ref, (jint*)pipelines_base,
JNI_ABORT);
}
if (_exception) {
@@ -836,14 +950,14 @@
static void
android_glDeleteProgramPipelines__ILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint n, jobject pipelines_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLuint *pipelines = (GLuint *) 0;
- pipelines = (GLuint *)getPointer(_env, pipelines_buf, &_array, &_remaining, &_bufferOffset);
+ pipelines = (GLuint *)getPointer(_env, pipelines_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (pipelines == NULL) {
- char * _pipelinesBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _pipelinesBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
pipelines = (GLuint *) (_pipelinesBase + _bufferOffset);
}
glDeleteProgramPipelines(
@@ -851,7 +965,7 @@
(GLuint *)pipelines
);
if (_array) {
- releasePointer(_env, _array, pipelines, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)pipelines, JNI_ABORT);
}
}
@@ -880,7 +994,7 @@
}
_remaining = _env->GetArrayLength(pipelines_ref) - offset;
pipelines_base = (GLuint *)
- _env->GetPrimitiveArrayCritical(pipelines_ref, (jboolean *)0);
+ _env->GetIntArrayElements(pipelines_ref, (jboolean *)0);
pipelines = pipelines_base + offset;
glGenProgramPipelines(
@@ -890,7 +1004,7 @@
exit:
if (pipelines_base) {
- _env->ReleasePrimitiveArrayCritical(pipelines_ref, pipelines_base,
+ _env->ReleaseIntArrayElements(pipelines_ref, (jint*)pipelines_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -902,14 +1016,14 @@
static void
android_glGenProgramPipelines__ILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint n, jobject pipelines_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLuint *pipelines = (GLuint *) 0;
- pipelines = (GLuint *)getPointer(_env, pipelines_buf, &_array, &_remaining, &_bufferOffset);
+ pipelines = (GLuint *)getPointer(_env, pipelines_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (pipelines == NULL) {
- char * _pipelinesBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _pipelinesBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
pipelines = (GLuint *) (_pipelinesBase + _bufferOffset);
}
glGenProgramPipelines(
@@ -917,7 +1031,7 @@
(GLuint *)pipelines
);
if (_array) {
- releasePointer(_env, _array, pipelines, JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)pipelines, 0);
}
}
@@ -957,7 +1071,7 @@
}
_remaining = _env->GetArrayLength(params_ref) - offset;
params_base = (GLint *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetProgramPipelineiv(
@@ -968,7 +1082,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -980,14 +1094,14 @@
static void
android_glGetProgramPipelineiv__IILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint pipeline, jint pname, jobject params_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLint *params = (GLint *) 0;
- params = (GLint *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLint *) (_paramsBase + _bufferOffset);
}
glGetProgramPipelineiv(
@@ -996,7 +1110,7 @@
(GLint *)params
);
if (_array) {
- releasePointer(_env, _array, params, JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, 0);
}
}
@@ -1175,7 +1289,7 @@
}
_remaining = _env->GetArrayLength(value_ref) - offset;
value_base = (GLint *)
- _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0);
+ _env->GetIntArrayElements(value_ref, (jboolean *)0);
value = value_base + offset;
glProgramUniform1iv(
@@ -1187,7 +1301,7 @@
exit:
if (value_base) {
- _env->ReleasePrimitiveArrayCritical(value_ref, value_base,
+ _env->ReleaseIntArrayElements(value_ref, (jint*)value_base,
JNI_ABORT);
}
if (_exception) {
@@ -1199,14 +1313,14 @@
static void
android_glProgramUniform1iv__IIILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint program, jint location, jint count, jobject value_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLint *value = (GLint *) 0;
- value = (GLint *)getPointer(_env, value_buf, &_array, &_remaining, &_bufferOffset);
+ value = (GLint *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (value == NULL) {
- char * _valueBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _valueBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
value = (GLint *) (_valueBase + _bufferOffset);
}
glProgramUniform1iv(
@@ -1216,7 +1330,7 @@
(GLint *)value
);
if (_array) {
- releasePointer(_env, _array, value, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)value, JNI_ABORT);
}
}
@@ -1245,7 +1359,7 @@
}
_remaining = _env->GetArrayLength(value_ref) - offset;
value_base = (GLint *)
- _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0);
+ _env->GetIntArrayElements(value_ref, (jboolean *)0);
value = value_base + offset;
glProgramUniform2iv(
@@ -1257,7 +1371,7 @@
exit:
if (value_base) {
- _env->ReleasePrimitiveArrayCritical(value_ref, value_base,
+ _env->ReleaseIntArrayElements(value_ref, (jint*)value_base,
JNI_ABORT);
}
if (_exception) {
@@ -1269,14 +1383,14 @@
static void
android_glProgramUniform2iv__IIILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint program, jint location, jint count, jobject value_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLint *value = (GLint *) 0;
- value = (GLint *)getPointer(_env, value_buf, &_array, &_remaining, &_bufferOffset);
+ value = (GLint *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (value == NULL) {
- char * _valueBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _valueBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
value = (GLint *) (_valueBase + _bufferOffset);
}
glProgramUniform2iv(
@@ -1286,7 +1400,7 @@
(GLint *)value
);
if (_array) {
- releasePointer(_env, _array, value, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)value, JNI_ABORT);
}
}
@@ -1315,7 +1429,7 @@
}
_remaining = _env->GetArrayLength(value_ref) - offset;
value_base = (GLint *)
- _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0);
+ _env->GetIntArrayElements(value_ref, (jboolean *)0);
value = value_base + offset;
glProgramUniform3iv(
@@ -1327,7 +1441,7 @@
exit:
if (value_base) {
- _env->ReleasePrimitiveArrayCritical(value_ref, value_base,
+ _env->ReleaseIntArrayElements(value_ref, (jint*)value_base,
JNI_ABORT);
}
if (_exception) {
@@ -1339,14 +1453,14 @@
static void
android_glProgramUniform3iv__IIILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint program, jint location, jint count, jobject value_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLint *value = (GLint *) 0;
- value = (GLint *)getPointer(_env, value_buf, &_array, &_remaining, &_bufferOffset);
+ value = (GLint *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (value == NULL) {
- char * _valueBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _valueBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
value = (GLint *) (_valueBase + _bufferOffset);
}
glProgramUniform3iv(
@@ -1356,7 +1470,7 @@
(GLint *)value
);
if (_array) {
- releasePointer(_env, _array, value, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)value, JNI_ABORT);
}
}
@@ -1385,7 +1499,7 @@
}
_remaining = _env->GetArrayLength(value_ref) - offset;
value_base = (GLint *)
- _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0);
+ _env->GetIntArrayElements(value_ref, (jboolean *)0);
value = value_base + offset;
glProgramUniform4iv(
@@ -1397,7 +1511,7 @@
exit:
if (value_base) {
- _env->ReleasePrimitiveArrayCritical(value_ref, value_base,
+ _env->ReleaseIntArrayElements(value_ref, (jint*)value_base,
JNI_ABORT);
}
if (_exception) {
@@ -1409,14 +1523,14 @@
static void
android_glProgramUniform4iv__IIILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint program, jint location, jint count, jobject value_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLint *value = (GLint *) 0;
- value = (GLint *)getPointer(_env, value_buf, &_array, &_remaining, &_bufferOffset);
+ value = (GLint *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (value == NULL) {
- char * _valueBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _valueBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
value = (GLint *) (_valueBase + _bufferOffset);
}
glProgramUniform4iv(
@@ -1426,7 +1540,7 @@
(GLint *)value
);
if (_array) {
- releasePointer(_env, _array, value, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)value, JNI_ABORT);
}
}
@@ -1455,7 +1569,7 @@
}
_remaining = _env->GetArrayLength(value_ref) - offset;
value_base = (GLuint *)
- _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0);
+ _env->GetIntArrayElements(value_ref, (jboolean *)0);
value = value_base + offset;
glProgramUniform1uiv(
@@ -1467,7 +1581,7 @@
exit:
if (value_base) {
- _env->ReleasePrimitiveArrayCritical(value_ref, value_base,
+ _env->ReleaseIntArrayElements(value_ref, (jint*)value_base,
JNI_ABORT);
}
if (_exception) {
@@ -1479,14 +1593,14 @@
static void
android_glProgramUniform1uiv__IIILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint program, jint location, jint count, jobject value_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLuint *value = (GLuint *) 0;
- value = (GLuint *)getPointer(_env, value_buf, &_array, &_remaining, &_bufferOffset);
+ value = (GLuint *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (value == NULL) {
- char * _valueBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _valueBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
value = (GLuint *) (_valueBase + _bufferOffset);
}
glProgramUniform1uiv(
@@ -1496,7 +1610,7 @@
(GLuint *)value
);
if (_array) {
- releasePointer(_env, _array, value, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)value, JNI_ABORT);
}
}
@@ -1525,7 +1639,7 @@
}
_remaining = _env->GetArrayLength(value_ref) - offset;
value_base = (GLuint *)
- _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0);
+ _env->GetIntArrayElements(value_ref, (jboolean *)0);
value = value_base + offset;
glProgramUniform2uiv(
@@ -1537,7 +1651,7 @@
exit:
if (value_base) {
- _env->ReleasePrimitiveArrayCritical(value_ref, value_base,
+ _env->ReleaseIntArrayElements(value_ref, (jint*)value_base,
JNI_ABORT);
}
if (_exception) {
@@ -1549,14 +1663,14 @@
static void
android_glProgramUniform2uiv__IIILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint program, jint location, jint count, jobject value_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLuint *value = (GLuint *) 0;
- value = (GLuint *)getPointer(_env, value_buf, &_array, &_remaining, &_bufferOffset);
+ value = (GLuint *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (value == NULL) {
- char * _valueBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _valueBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
value = (GLuint *) (_valueBase + _bufferOffset);
}
glProgramUniform2uiv(
@@ -1566,7 +1680,7 @@
(GLuint *)value
);
if (_array) {
- releasePointer(_env, _array, value, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)value, JNI_ABORT);
}
}
@@ -1595,7 +1709,7 @@
}
_remaining = _env->GetArrayLength(value_ref) - offset;
value_base = (GLuint *)
- _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0);
+ _env->GetIntArrayElements(value_ref, (jboolean *)0);
value = value_base + offset;
glProgramUniform3uiv(
@@ -1607,7 +1721,7 @@
exit:
if (value_base) {
- _env->ReleasePrimitiveArrayCritical(value_ref, value_base,
+ _env->ReleaseIntArrayElements(value_ref, (jint*)value_base,
JNI_ABORT);
}
if (_exception) {
@@ -1619,14 +1733,14 @@
static void
android_glProgramUniform3uiv__IIILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint program, jint location, jint count, jobject value_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLuint *value = (GLuint *) 0;
- value = (GLuint *)getPointer(_env, value_buf, &_array, &_remaining, &_bufferOffset);
+ value = (GLuint *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (value == NULL) {
- char * _valueBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _valueBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
value = (GLuint *) (_valueBase + _bufferOffset);
}
glProgramUniform3uiv(
@@ -1636,7 +1750,7 @@
(GLuint *)value
);
if (_array) {
- releasePointer(_env, _array, value, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)value, JNI_ABORT);
}
}
@@ -1665,7 +1779,7 @@
}
_remaining = _env->GetArrayLength(value_ref) - offset;
value_base = (GLuint *)
- _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0);
+ _env->GetIntArrayElements(value_ref, (jboolean *)0);
value = value_base + offset;
glProgramUniform4uiv(
@@ -1677,7 +1791,7 @@
exit:
if (value_base) {
- _env->ReleasePrimitiveArrayCritical(value_ref, value_base,
+ _env->ReleaseIntArrayElements(value_ref, (jint*)value_base,
JNI_ABORT);
}
if (_exception) {
@@ -1689,14 +1803,14 @@
static void
android_glProgramUniform4uiv__IIILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint program, jint location, jint count, jobject value_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLuint *value = (GLuint *) 0;
- value = (GLuint *)getPointer(_env, value_buf, &_array, &_remaining, &_bufferOffset);
+ value = (GLuint *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (value == NULL) {
- char * _valueBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _valueBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
value = (GLuint *) (_valueBase + _bufferOffset);
}
glProgramUniform4uiv(
@@ -1706,7 +1820,7 @@
(GLuint *)value
);
if (_array) {
- releasePointer(_env, _array, value, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)value, JNI_ABORT);
}
}
@@ -1735,7 +1849,7 @@
}
_remaining = _env->GetArrayLength(value_ref) - offset;
value_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(value_ref, (jboolean *)0);
value = value_base + offset;
glProgramUniform1fv(
@@ -1747,7 +1861,7 @@
exit:
if (value_base) {
- _env->ReleasePrimitiveArrayCritical(value_ref, value_base,
+ _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
JNI_ABORT);
}
if (_exception) {
@@ -1759,14 +1873,14 @@
static void
android_glProgramUniform1fv__IIILjava_nio_FloatBuffer_2
(JNIEnv *_env, jobject _this, jint program, jint location, jint count, jobject value_buf) {
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *value = (GLfloat *) 0;
- value = (GLfloat *)getPointer(_env, value_buf, &_array, &_remaining, &_bufferOffset);
+ value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (value == NULL) {
- char * _valueBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
value = (GLfloat *) (_valueBase + _bufferOffset);
}
glProgramUniform1fv(
@@ -1776,7 +1890,7 @@
(GLfloat *)value
);
if (_array) {
- releasePointer(_env, _array, value, JNI_FALSE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
}
}
@@ -1805,7 +1919,7 @@
}
_remaining = _env->GetArrayLength(value_ref) - offset;
value_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(value_ref, (jboolean *)0);
value = value_base + offset;
glProgramUniform2fv(
@@ -1817,7 +1931,7 @@
exit:
if (value_base) {
- _env->ReleasePrimitiveArrayCritical(value_ref, value_base,
+ _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
JNI_ABORT);
}
if (_exception) {
@@ -1829,14 +1943,14 @@
static void
android_glProgramUniform2fv__IIILjava_nio_FloatBuffer_2
(JNIEnv *_env, jobject _this, jint program, jint location, jint count, jobject value_buf) {
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *value = (GLfloat *) 0;
- value = (GLfloat *)getPointer(_env, value_buf, &_array, &_remaining, &_bufferOffset);
+ value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (value == NULL) {
- char * _valueBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
value = (GLfloat *) (_valueBase + _bufferOffset);
}
glProgramUniform2fv(
@@ -1846,7 +1960,7 @@
(GLfloat *)value
);
if (_array) {
- releasePointer(_env, _array, value, JNI_FALSE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
}
}
@@ -1875,7 +1989,7 @@
}
_remaining = _env->GetArrayLength(value_ref) - offset;
value_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(value_ref, (jboolean *)0);
value = value_base + offset;
glProgramUniform3fv(
@@ -1887,7 +2001,7 @@
exit:
if (value_base) {
- _env->ReleasePrimitiveArrayCritical(value_ref, value_base,
+ _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
JNI_ABORT);
}
if (_exception) {
@@ -1899,14 +2013,14 @@
static void
android_glProgramUniform3fv__IIILjava_nio_FloatBuffer_2
(JNIEnv *_env, jobject _this, jint program, jint location, jint count, jobject value_buf) {
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *value = (GLfloat *) 0;
- value = (GLfloat *)getPointer(_env, value_buf, &_array, &_remaining, &_bufferOffset);
+ value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (value == NULL) {
- char * _valueBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
value = (GLfloat *) (_valueBase + _bufferOffset);
}
glProgramUniform3fv(
@@ -1916,7 +2030,7 @@
(GLfloat *)value
);
if (_array) {
- releasePointer(_env, _array, value, JNI_FALSE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
}
}
@@ -1945,7 +2059,7 @@
}
_remaining = _env->GetArrayLength(value_ref) - offset;
value_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(value_ref, (jboolean *)0);
value = value_base + offset;
glProgramUniform4fv(
@@ -1957,7 +2071,7 @@
exit:
if (value_base) {
- _env->ReleasePrimitiveArrayCritical(value_ref, value_base,
+ _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
JNI_ABORT);
}
if (_exception) {
@@ -1969,14 +2083,14 @@
static void
android_glProgramUniform4fv__IIILjava_nio_FloatBuffer_2
(JNIEnv *_env, jobject _this, jint program, jint location, jint count, jobject value_buf) {
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *value = (GLfloat *) 0;
- value = (GLfloat *)getPointer(_env, value_buf, &_array, &_remaining, &_bufferOffset);
+ value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (value == NULL) {
- char * _valueBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
value = (GLfloat *) (_valueBase + _bufferOffset);
}
glProgramUniform4fv(
@@ -1986,7 +2100,7 @@
(GLfloat *)value
);
if (_array) {
- releasePointer(_env, _array, value, JNI_FALSE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
}
}
@@ -2015,7 +2129,7 @@
}
_remaining = _env->GetArrayLength(value_ref) - offset;
value_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(value_ref, (jboolean *)0);
value = value_base + offset;
glProgramUniformMatrix2fv(
@@ -2028,7 +2142,7 @@
exit:
if (value_base) {
- _env->ReleasePrimitiveArrayCritical(value_ref, value_base,
+ _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
JNI_ABORT);
}
if (_exception) {
@@ -2040,14 +2154,14 @@
static void
android_glProgramUniformMatrix2fv__IIIZLjava_nio_FloatBuffer_2
(JNIEnv *_env, jobject _this, jint program, jint location, jint count, jboolean transpose, jobject value_buf) {
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *value = (GLfloat *) 0;
- value = (GLfloat *)getPointer(_env, value_buf, &_array, &_remaining, &_bufferOffset);
+ value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (value == NULL) {
- char * _valueBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
value = (GLfloat *) (_valueBase + _bufferOffset);
}
glProgramUniformMatrix2fv(
@@ -2058,7 +2172,7 @@
(GLfloat *)value
);
if (_array) {
- releasePointer(_env, _array, value, JNI_FALSE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
}
}
@@ -2087,7 +2201,7 @@
}
_remaining = _env->GetArrayLength(value_ref) - offset;
value_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(value_ref, (jboolean *)0);
value = value_base + offset;
glProgramUniformMatrix3fv(
@@ -2100,7 +2214,7 @@
exit:
if (value_base) {
- _env->ReleasePrimitiveArrayCritical(value_ref, value_base,
+ _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
JNI_ABORT);
}
if (_exception) {
@@ -2112,14 +2226,14 @@
static void
android_glProgramUniformMatrix3fv__IIIZLjava_nio_FloatBuffer_2
(JNIEnv *_env, jobject _this, jint program, jint location, jint count, jboolean transpose, jobject value_buf) {
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *value = (GLfloat *) 0;
- value = (GLfloat *)getPointer(_env, value_buf, &_array, &_remaining, &_bufferOffset);
+ value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (value == NULL) {
- char * _valueBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
value = (GLfloat *) (_valueBase + _bufferOffset);
}
glProgramUniformMatrix3fv(
@@ -2130,7 +2244,7 @@
(GLfloat *)value
);
if (_array) {
- releasePointer(_env, _array, value, JNI_FALSE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
}
}
@@ -2159,7 +2273,7 @@
}
_remaining = _env->GetArrayLength(value_ref) - offset;
value_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(value_ref, (jboolean *)0);
value = value_base + offset;
glProgramUniformMatrix4fv(
@@ -2172,7 +2286,7 @@
exit:
if (value_base) {
- _env->ReleasePrimitiveArrayCritical(value_ref, value_base,
+ _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
JNI_ABORT);
}
if (_exception) {
@@ -2184,14 +2298,14 @@
static void
android_glProgramUniformMatrix4fv__IIIZLjava_nio_FloatBuffer_2
(JNIEnv *_env, jobject _this, jint program, jint location, jint count, jboolean transpose, jobject value_buf) {
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *value = (GLfloat *) 0;
- value = (GLfloat *)getPointer(_env, value_buf, &_array, &_remaining, &_bufferOffset);
+ value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (value == NULL) {
- char * _valueBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
value = (GLfloat *) (_valueBase + _bufferOffset);
}
glProgramUniformMatrix4fv(
@@ -2202,7 +2316,7 @@
(GLfloat *)value
);
if (_array) {
- releasePointer(_env, _array, value, JNI_FALSE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
}
}
@@ -2231,7 +2345,7 @@
}
_remaining = _env->GetArrayLength(value_ref) - offset;
value_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(value_ref, (jboolean *)0);
value = value_base + offset;
glProgramUniformMatrix2x3fv(
@@ -2244,7 +2358,7 @@
exit:
if (value_base) {
- _env->ReleasePrimitiveArrayCritical(value_ref, value_base,
+ _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
JNI_ABORT);
}
if (_exception) {
@@ -2256,14 +2370,14 @@
static void
android_glProgramUniformMatrix2x3fv__IIIZLjava_nio_FloatBuffer_2
(JNIEnv *_env, jobject _this, jint program, jint location, jint count, jboolean transpose, jobject value_buf) {
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *value = (GLfloat *) 0;
- value = (GLfloat *)getPointer(_env, value_buf, &_array, &_remaining, &_bufferOffset);
+ value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (value == NULL) {
- char * _valueBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
value = (GLfloat *) (_valueBase + _bufferOffset);
}
glProgramUniformMatrix2x3fv(
@@ -2274,7 +2388,7 @@
(GLfloat *)value
);
if (_array) {
- releasePointer(_env, _array, value, JNI_FALSE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
}
}
@@ -2303,7 +2417,7 @@
}
_remaining = _env->GetArrayLength(value_ref) - offset;
value_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(value_ref, (jboolean *)0);
value = value_base + offset;
glProgramUniformMatrix3x2fv(
@@ -2316,7 +2430,7 @@
exit:
if (value_base) {
- _env->ReleasePrimitiveArrayCritical(value_ref, value_base,
+ _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
JNI_ABORT);
}
if (_exception) {
@@ -2328,14 +2442,14 @@
static void
android_glProgramUniformMatrix3x2fv__IIIZLjava_nio_FloatBuffer_2
(JNIEnv *_env, jobject _this, jint program, jint location, jint count, jboolean transpose, jobject value_buf) {
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *value = (GLfloat *) 0;
- value = (GLfloat *)getPointer(_env, value_buf, &_array, &_remaining, &_bufferOffset);
+ value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (value == NULL) {
- char * _valueBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
value = (GLfloat *) (_valueBase + _bufferOffset);
}
glProgramUniformMatrix3x2fv(
@@ -2346,7 +2460,7 @@
(GLfloat *)value
);
if (_array) {
- releasePointer(_env, _array, value, JNI_FALSE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
}
}
@@ -2375,7 +2489,7 @@
}
_remaining = _env->GetArrayLength(value_ref) - offset;
value_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(value_ref, (jboolean *)0);
value = value_base + offset;
glProgramUniformMatrix2x4fv(
@@ -2388,7 +2502,7 @@
exit:
if (value_base) {
- _env->ReleasePrimitiveArrayCritical(value_ref, value_base,
+ _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
JNI_ABORT);
}
if (_exception) {
@@ -2400,14 +2514,14 @@
static void
android_glProgramUniformMatrix2x4fv__IIIZLjava_nio_FloatBuffer_2
(JNIEnv *_env, jobject _this, jint program, jint location, jint count, jboolean transpose, jobject value_buf) {
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *value = (GLfloat *) 0;
- value = (GLfloat *)getPointer(_env, value_buf, &_array, &_remaining, &_bufferOffset);
+ value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (value == NULL) {
- char * _valueBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
value = (GLfloat *) (_valueBase + _bufferOffset);
}
glProgramUniformMatrix2x4fv(
@@ -2418,7 +2532,7 @@
(GLfloat *)value
);
if (_array) {
- releasePointer(_env, _array, value, JNI_FALSE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
}
}
@@ -2447,7 +2561,7 @@
}
_remaining = _env->GetArrayLength(value_ref) - offset;
value_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(value_ref, (jboolean *)0);
value = value_base + offset;
glProgramUniformMatrix4x2fv(
@@ -2460,7 +2574,7 @@
exit:
if (value_base) {
- _env->ReleasePrimitiveArrayCritical(value_ref, value_base,
+ _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
JNI_ABORT);
}
if (_exception) {
@@ -2472,14 +2586,14 @@
static void
android_glProgramUniformMatrix4x2fv__IIIZLjava_nio_FloatBuffer_2
(JNIEnv *_env, jobject _this, jint program, jint location, jint count, jboolean transpose, jobject value_buf) {
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *value = (GLfloat *) 0;
- value = (GLfloat *)getPointer(_env, value_buf, &_array, &_remaining, &_bufferOffset);
+ value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (value == NULL) {
- char * _valueBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
value = (GLfloat *) (_valueBase + _bufferOffset);
}
glProgramUniformMatrix4x2fv(
@@ -2490,7 +2604,7 @@
(GLfloat *)value
);
if (_array) {
- releasePointer(_env, _array, value, JNI_FALSE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
}
}
@@ -2519,7 +2633,7 @@
}
_remaining = _env->GetArrayLength(value_ref) - offset;
value_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(value_ref, (jboolean *)0);
value = value_base + offset;
glProgramUniformMatrix3x4fv(
@@ -2532,7 +2646,7 @@
exit:
if (value_base) {
- _env->ReleasePrimitiveArrayCritical(value_ref, value_base,
+ _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
JNI_ABORT);
}
if (_exception) {
@@ -2544,14 +2658,14 @@
static void
android_glProgramUniformMatrix3x4fv__IIIZLjava_nio_FloatBuffer_2
(JNIEnv *_env, jobject _this, jint program, jint location, jint count, jboolean transpose, jobject value_buf) {
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *value = (GLfloat *) 0;
- value = (GLfloat *)getPointer(_env, value_buf, &_array, &_remaining, &_bufferOffset);
+ value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (value == NULL) {
- char * _valueBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
value = (GLfloat *) (_valueBase + _bufferOffset);
}
glProgramUniformMatrix3x4fv(
@@ -2562,7 +2676,7 @@
(GLfloat *)value
);
if (_array) {
- releasePointer(_env, _array, value, JNI_FALSE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
}
}
@@ -2591,7 +2705,7 @@
}
_remaining = _env->GetArrayLength(value_ref) - offset;
value_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(value_ref, (jboolean *)0);
value = value_base + offset;
glProgramUniformMatrix4x3fv(
@@ -2604,7 +2718,7 @@
exit:
if (value_base) {
- _env->ReleasePrimitiveArrayCritical(value_ref, value_base,
+ _env->ReleaseFloatArrayElements(value_ref, (jfloat*)value_base,
JNI_ABORT);
}
if (_exception) {
@@ -2616,14 +2730,14 @@
static void
android_glProgramUniformMatrix4x3fv__IIIZLjava_nio_FloatBuffer_2
(JNIEnv *_env, jobject _this, jint program, jint location, jint count, jboolean transpose, jobject value_buf) {
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *value = (GLfloat *) 0;
- value = (GLfloat *)getPointer(_env, value_buf, &_array, &_remaining, &_bufferOffset);
+ value = (GLfloat *)getPointer(_env, value_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (value == NULL) {
- char * _valueBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _valueBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
value = (GLfloat *) (_valueBase + _bufferOffset);
}
glProgramUniformMatrix4x3fv(
@@ -2634,7 +2748,7 @@
(GLfloat *)value
);
if (_array) {
- releasePointer(_env, _array, value, JNI_FALSE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)value, JNI_ABORT);
}
}
@@ -2706,7 +2820,7 @@
}
_remaining = _env->GetArrayLength(data_ref) - offset;
data_base = (GLboolean *)
- _env->GetPrimitiveArrayCritical(data_ref, (jboolean *)0);
+ _env->GetBooleanArrayElements(data_ref, (jboolean *)0);
data = data_base + offset;
glGetBooleani_v(
@@ -2717,7 +2831,7 @@
exit:
if (data_base) {
- _env->ReleasePrimitiveArrayCritical(data_ref, data_base,
+ _env->ReleaseBooleanArrayElements(data_ref, (jboolean*)data_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -2729,14 +2843,14 @@
static void
android_glGetBooleani_v__IILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint target, jint index, jobject data_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLboolean *data = (GLboolean *) 0;
- data = (GLboolean *)getPointer(_env, data_buf, &_array, &_remaining, &_bufferOffset);
+ data = (GLboolean *)getPointer(_env, data_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (data == NULL) {
- char * _dataBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _dataBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
data = (GLboolean *) (_dataBase + _bufferOffset);
}
glGetBooleani_v(
@@ -2745,7 +2859,7 @@
(GLboolean *)data
);
if (_array) {
- releasePointer(_env, _array, data, JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)data, 0);
}
}
@@ -2806,7 +2920,7 @@
}
_remaining = _env->GetArrayLength(val_ref) - offset;
val_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(val_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(val_ref, (jboolean *)0);
val = val_base + offset;
glGetMultisamplefv(
@@ -2817,7 +2931,7 @@
exit:
if (val_base) {
- _env->ReleasePrimitiveArrayCritical(val_ref, val_base,
+ _env->ReleaseFloatArrayElements(val_ref, (jfloat*)val_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -2829,14 +2943,14 @@
static void
android_glGetMultisamplefv__IILjava_nio_FloatBuffer_2
(JNIEnv *_env, jobject _this, jint pname, jint index, jobject val_buf) {
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *val = (GLfloat *) 0;
- val = (GLfloat *)getPointer(_env, val_buf, &_array, &_remaining, &_bufferOffset);
+ val = (GLfloat *)getPointer(_env, val_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (val == NULL) {
- char * _valBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _valBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
val = (GLfloat *) (_valBase + _bufferOffset);
}
glGetMultisamplefv(
@@ -2845,7 +2959,7 @@
(GLfloat *)val
);
if (_array) {
- releasePointer(_env, _array, val, JNI_TRUE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)val, 0);
}
}
@@ -2884,7 +2998,7 @@
}
_remaining = _env->GetArrayLength(params_ref) - offset;
params_base = (GLint *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetTexLevelParameteriv(
@@ -2896,7 +3010,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -2908,14 +3022,14 @@
static void
android_glGetTexLevelParameteriv__IIILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint target, jint level, jint pname, jobject params_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLint *params = (GLint *) 0;
- params = (GLint *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLint *) (_paramsBase + _bufferOffset);
}
glGetTexLevelParameteriv(
@@ -2925,7 +3039,7 @@
(GLint *)params
);
if (_array) {
- releasePointer(_env, _array, params, JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, 0);
}
}
@@ -2954,7 +3068,7 @@
}
_remaining = _env->GetArrayLength(params_ref) - offset;
params_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetTexLevelParameterfv(
@@ -2966,7 +3080,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseFloatArrayElements(params_ref, (jfloat*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -2978,14 +3092,14 @@
static void
android_glGetTexLevelParameterfv__IIILjava_nio_FloatBuffer_2
(JNIEnv *_env, jobject _this, jint target, jint level, jint pname, jobject params_buf) {
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *params = (GLfloat *) 0;
- params = (GLfloat *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfloat *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
params = (GLfloat *) (_paramsBase + _bufferOffset);
}
glGetTexLevelParameterfv(
@@ -2995,7 +3109,7 @@
(GLfloat *)params
);
if (_array) {
- releasePointer(_env, _array, params, JNI_TRUE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)params, 0);
}
}
diff --git a/core/jni/android_opengl_GLES31Ext.cpp b/core/jni/android_opengl_GLES31Ext.cpp
index 7317e9f..2856308 100644
--- a/core/jni/android_opengl_GLES31Ext.cpp
+++ b/core/jni/android_opengl_GLES31Ext.cpp
@@ -125,6 +125,116 @@
return NULL;
}
+class ByteArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jbyteArray array, jboolean* is_copy) {
+ return _env->GetByteArrayElements(array, is_copy);
+ }
+};
+class BooleanArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jbooleanArray array, jboolean* is_copy) {
+ return _env->GetBooleanArrayElements(array, is_copy);
+ }
+};
+class CharArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jcharArray array, jboolean* is_copy) {
+ return _env->GetCharArrayElements(array, is_copy);
+ }
+};
+class ShortArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jshortArray array, jboolean* is_copy) {
+ return _env->GetShortArrayElements(array, is_copy);
+ }
+};
+class IntArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jintArray array, jboolean* is_copy) {
+ return _env->GetIntArrayElements(array, is_copy);
+ }
+};
+class LongArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jlongArray array, jboolean* is_copy) {
+ return _env->GetLongArrayElements(array, is_copy);
+ }
+};
+class FloatArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jfloatArray array, jboolean* is_copy) {
+ return _env->GetFloatArrayElements(array, is_copy);
+ }
+};
+class DoubleArrayGetter {
+public:
+ static void* Get(JNIEnv* _env, jdoubleArray array, jboolean* is_copy) {
+ return _env->GetDoubleArrayElements(array, is_copy);
+ }
+};
+
+template<typename JTYPEARRAY, typename ARRAYGETTER>
+static void*
+getArrayPointer(JNIEnv *_env, JTYPEARRAY array, jboolean* is_copy) {
+ return ARRAYGETTER::Get(_env, array, is_copy);
+}
+
+class ByteArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jbyteArray array, jbyte* data, jboolean commit) {
+ _env->ReleaseByteArrayElements(array, data, commit ? 0 : JNI_ABORT);
+ }
+};
+class BooleanArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jbooleanArray array, jboolean* data, jboolean commit) {
+ _env->ReleaseBooleanArrayElements(array, data, commit ? 0 : JNI_ABORT);
+ }
+};
+class CharArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jcharArray array, jchar* data, jboolean commit) {
+ _env->ReleaseCharArrayElements(array, data, commit ? 0 : JNI_ABORT);
+ }
+};
+class ShortArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jshortArray array, jshort* data, jboolean commit) {
+ _env->ReleaseShortArrayElements(array, data, commit ? 0 : JNI_ABORT);
+ }
+};
+class IntArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jintArray array, jint* data, jboolean commit) {
+ _env->ReleaseIntArrayElements(array, data, commit ? 0 : JNI_ABORT);
+ }
+};
+class LongArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jlongArray array, jlong* data, jboolean commit) {
+ _env->ReleaseLongArrayElements(array, data, commit ? 0 : JNI_ABORT);
+ }
+};
+class FloatArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jfloatArray array, jfloat* data, jboolean commit) {
+ _env->ReleaseFloatArrayElements(array, data, commit ? 0 : JNI_ABORT);
+ }
+};
+class DoubleArrayReleaser {
+public:
+ static void Release(JNIEnv* _env, jdoubleArray array, jdouble* data, jboolean commit) {
+ _env->ReleaseDoubleArrayElements(array, data, commit ? 0 : JNI_ABORT);
+ }
+};
+
+template<typename JTYPEARRAY, typename NTYPEARRAY, typename ARRAYRELEASER>
+static void
+releaseArrayPointer(JNIEnv *_env, JTYPEARRAY array, NTYPEARRAY data, jboolean commit) {
+ ARRAYRELEASER::Release(_env, array, data, commit);
+}
+
static void
releasePointer(JNIEnv *_env, jarray array, void *data, jboolean commit)
{
@@ -228,7 +338,8 @@
return needed;
}
-template <typename JTYPEARRAY, typename CTYPE, void GET(GLenum, CTYPE*)>
+template <typename JTYPEARRAY, typename ARRAYGETTER, typename NTYPEARRAY,
+ typename ARRAYRELEASER, typename CTYPE, void GET(GLenum, CTYPE*)>
static void
get
(JNIEnv *_env, jobject _this, jint pname, JTYPEARRAY params_ref, jint offset) {
@@ -263,8 +374,8 @@
_exceptionMessage = "length - offset < needed";
goto exit;
}
- params_base = (CTYPE *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ params_base = (CTYPE *) getArrayPointer<JTYPEARRAY, ARRAYGETTER>(
+ _env, params_ref, (jboolean *)0);
params = params_base + offset;
GET(
@@ -274,8 +385,8 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
- _exception ? JNI_ABORT: 0);
+ releaseArrayPointer<JTYPEARRAY, NTYPEARRAY, ARRAYRELEASER>(
+ _env, params_ref, params_base, !_exception);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -283,20 +394,21 @@
}
-template <typename CTYPE, void GET(GLenum, CTYPE*)>
+template <typename CTYPE, typename JTYPEARRAY, typename ARRAYGETTER, typename NTYPEARRAY,
+ typename ARRAYRELEASER, void GET(GLenum, CTYPE*)>
static void
getarray
(JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
jint _exception = 0;
const char * _exceptionType;
const char * _exceptionMessage;
- jarray _array = (jarray) 0;
+ JTYPEARRAY _array = (JTYPEARRAY) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
CTYPE *params = (CTYPE *) 0;
int _needed = 0;
- params = (CTYPE *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (CTYPE *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
_remaining /= sizeof(CTYPE); // convert from bytes to item count
_needed = getNeededCount(pname);
// if we didn't find this pname, we just assume the user passed
@@ -309,7 +421,8 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *) getArrayPointer<JTYPEARRAY, ARRAYGETTER>(
+ _env, _array, (jboolean *) 0);
params = (CTYPE *) (_paramsBase + _bufferOffset);
}
GET(
@@ -319,7 +432,8 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, _exception ? JNI_FALSE : JNI_TRUE);
+ releaseArrayPointer<JTYPEARRAY, NTYPEARRAY, ARRAYRELEASER>(
+ _env, _array, (NTYPEARRAY)params, _exception ? JNI_FALSE : JNI_TRUE);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -359,7 +473,7 @@
}
_remaining = _env->GetArrayLength(ids_ref) - offset;
ids_base = (GLuint *)
- _env->GetPrimitiveArrayCritical(ids_ref, (jboolean *)0);
+ _env->GetIntArrayElements(ids_ref, (jboolean *)0);
ids = ids_base + offset;
glDebugMessageControlKHR(
@@ -373,7 +487,7 @@
exit:
if (ids_base) {
- _env->ReleasePrimitiveArrayCritical(ids_ref, ids_base,
+ _env->ReleaseIntArrayElements(ids_ref, (jint*)ids_base,
JNI_ABORT);
}
if (_exception) {
@@ -385,14 +499,14 @@
static void
android_glDebugMessageControlKHR__IIIILjava_nio_IntBuffer_2Z
(JNIEnv *_env, jobject _this, jint source, jint type, jint severity, jint count, jobject ids_buf, jboolean enabled) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLuint *ids = (GLuint *) 0;
- ids = (GLuint *)getPointer(_env, ids_buf, &_array, &_remaining, &_bufferOffset);
+ ids = (GLuint *)getPointer(_env, ids_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (ids == NULL) {
- char * _idsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _idsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
ids = (GLuint *) (_idsBase + _bufferOffset);
}
glDebugMessageControlKHR(
@@ -404,7 +518,7 @@
(GLboolean)enabled
);
if (_array) {
- releasePointer(_env, _array, ids, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)ids, JNI_ABORT);
}
}
@@ -784,7 +898,7 @@
}
_remaining = _env->GetArrayLength(params_ref) - offset;
params_base = (GLint *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glTexParameterIivEXT(
@@ -795,7 +909,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
JNI_ABORT);
}
if (_exception) {
@@ -807,14 +921,14 @@
static void
android_glTexParameterIivEXT__IILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint target, jint pname, jobject params_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLint *params = (GLint *) 0;
- params = (GLint *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLint *) (_paramsBase + _bufferOffset);
}
glTexParameterIivEXT(
@@ -823,7 +937,7 @@
(GLint *)params
);
if (_array) {
- releasePointer(_env, _array, params, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, JNI_ABORT);
}
}
@@ -852,7 +966,7 @@
}
_remaining = _env->GetArrayLength(params_ref) - offset;
params_base = (GLuint *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glTexParameterIuivEXT(
@@ -863,7 +977,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
JNI_ABORT);
}
if (_exception) {
@@ -875,14 +989,14 @@
static void
android_glTexParameterIuivEXT__IILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint target, jint pname, jobject params_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLuint *params = (GLuint *) 0;
- params = (GLuint *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLuint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLuint *) (_paramsBase + _bufferOffset);
}
glTexParameterIuivEXT(
@@ -891,7 +1005,7 @@
(GLuint *)params
);
if (_array) {
- releasePointer(_env, _array, params, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, JNI_ABORT);
}
}
@@ -920,7 +1034,7 @@
}
_remaining = _env->GetArrayLength(params_ref) - offset;
params_base = (GLint *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetTexParameterIivEXT(
@@ -931,7 +1045,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -943,14 +1057,14 @@
static void
android_glGetTexParameterIivEXT__IILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint target, jint pname, jobject params_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLint *params = (GLint *) 0;
- params = (GLint *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLint *) (_paramsBase + _bufferOffset);
}
glGetTexParameterIivEXT(
@@ -959,7 +1073,7 @@
(GLint *)params
);
if (_array) {
- releasePointer(_env, _array, params, JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, 0);
}
}
@@ -988,7 +1102,7 @@
}
_remaining = _env->GetArrayLength(params_ref) - offset;
params_base = (GLuint *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetTexParameterIuivEXT(
@@ -999,7 +1113,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -1011,14 +1125,14 @@
static void
android_glGetTexParameterIuivEXT__IILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint target, jint pname, jobject params_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLuint *params = (GLuint *) 0;
- params = (GLuint *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLuint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLuint *) (_paramsBase + _bufferOffset);
}
glGetTexParameterIuivEXT(
@@ -1027,7 +1141,7 @@
(GLuint *)params
);
if (_array) {
- releasePointer(_env, _array, params, JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, 0);
}
}
@@ -1056,7 +1170,7 @@
}
_remaining = _env->GetArrayLength(param_ref) - offset;
param_base = (GLint *)
- _env->GetPrimitiveArrayCritical(param_ref, (jboolean *)0);
+ _env->GetIntArrayElements(param_ref, (jboolean *)0);
param = param_base + offset;
glSamplerParameterIivEXT(
@@ -1067,7 +1181,7 @@
exit:
if (param_base) {
- _env->ReleasePrimitiveArrayCritical(param_ref, param_base,
+ _env->ReleaseIntArrayElements(param_ref, (jint*)param_base,
JNI_ABORT);
}
if (_exception) {
@@ -1079,14 +1193,14 @@
static void
android_glSamplerParameterIivEXT__IILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint sampler, jint pname, jobject param_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLint *param = (GLint *) 0;
- param = (GLint *)getPointer(_env, param_buf, &_array, &_remaining, &_bufferOffset);
+ param = (GLint *)getPointer(_env, param_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (param == NULL) {
- char * _paramBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
param = (GLint *) (_paramBase + _bufferOffset);
}
glSamplerParameterIivEXT(
@@ -1095,7 +1209,7 @@
(GLint *)param
);
if (_array) {
- releasePointer(_env, _array, param, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)param, JNI_ABORT);
}
}
@@ -1124,7 +1238,7 @@
}
_remaining = _env->GetArrayLength(param_ref) - offset;
param_base = (GLuint *)
- _env->GetPrimitiveArrayCritical(param_ref, (jboolean *)0);
+ _env->GetIntArrayElements(param_ref, (jboolean *)0);
param = param_base + offset;
glSamplerParameterIuivEXT(
@@ -1135,7 +1249,7 @@
exit:
if (param_base) {
- _env->ReleasePrimitiveArrayCritical(param_ref, param_base,
+ _env->ReleaseIntArrayElements(param_ref, (jint*)param_base,
JNI_ABORT);
}
if (_exception) {
@@ -1147,14 +1261,14 @@
static void
android_glSamplerParameterIuivEXT__IILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint sampler, jint pname, jobject param_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLuint *param = (GLuint *) 0;
- param = (GLuint *)getPointer(_env, param_buf, &_array, &_remaining, &_bufferOffset);
+ param = (GLuint *)getPointer(_env, param_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (param == NULL) {
- char * _paramBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
param = (GLuint *) (_paramBase + _bufferOffset);
}
glSamplerParameterIuivEXT(
@@ -1163,7 +1277,7 @@
(GLuint *)param
);
if (_array) {
- releasePointer(_env, _array, param, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)param, JNI_ABORT);
}
}
@@ -1192,7 +1306,7 @@
}
_remaining = _env->GetArrayLength(params_ref) - offset;
params_base = (GLint *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetSamplerParameterIivEXT(
@@ -1203,7 +1317,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -1215,14 +1329,14 @@
static void
android_glGetSamplerParameterIivEXT__IILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint sampler, jint pname, jobject params_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLint *params = (GLint *) 0;
- params = (GLint *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLint *) (_paramsBase + _bufferOffset);
}
glGetSamplerParameterIivEXT(
@@ -1231,7 +1345,7 @@
(GLint *)params
);
if (_array) {
- releasePointer(_env, _array, params, JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, 0);
}
}
@@ -1260,7 +1374,7 @@
}
_remaining = _env->GetArrayLength(params_ref) - offset;
params_base = (GLuint *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetSamplerParameterIuivEXT(
@@ -1271,7 +1385,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -1283,14 +1397,14 @@
static void
android_glGetSamplerParameterIuivEXT__IILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint sampler, jint pname, jobject params_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLuint *params = (GLuint *) 0;
- params = (GLuint *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLuint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLuint *) (_paramsBase + _bufferOffset);
}
glGetSamplerParameterIuivEXT(
@@ -1299,7 +1413,7 @@
(GLuint *)params
);
if (_array) {
- releasePointer(_env, _array, params, JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, 0);
}
}
diff --git a/core/jni/android_os_Debug.cpp b/core/jni/android_os_Debug.cpp
index 773d42e..1d2a7d9 100644
--- a/core/jni/android_os_Debug.cpp
+++ b/core/jni/android_os_Debug.cpp
@@ -34,10 +34,7 @@
#include <errno.h>
#include <assert.h>
#include <ctype.h>
-
-#ifdef HAVE_MALLOC_H
#include <malloc.h>
-#endif
namespace android
{
@@ -128,32 +125,20 @@
static jlong android_os_Debug_getNativeHeapSize(JNIEnv *env, jobject clazz)
{
-#ifdef HAVE_MALLOC_H
struct mallinfo info = mallinfo();
return (jlong) info.usmblks;
-#else
- return -1;
-#endif
}
static jlong android_os_Debug_getNativeHeapAllocatedSize(JNIEnv *env, jobject clazz)
{
-#ifdef HAVE_MALLOC_H
struct mallinfo info = mallinfo();
return (jlong) info.uordblks;
-#else
- return -1;
-#endif
}
static jlong android_os_Debug_getNativeHeapFreeSize(JNIEnv *env, jobject clazz)
{
-#ifdef HAVE_MALLOC_H
struct mallinfo info = mallinfo();
return (jlong) info.fordblks;
-#else
- return -1;
-#endif
}
// Container used to retrieve graphics memory pss
@@ -270,49 +255,10 @@
if ((strstr(name, "[heap]") == name)) {
whichHeap = HEAP_NATIVE;
- } else if (strncmp(name, "/dev/ashmem", 11) == 0) {
- if (strncmp(name, "/dev/ashmem/dalvik-", 19) == 0) {
- whichHeap = HEAP_DALVIK_OTHER;
- if (strstr(name, "/dev/ashmem/dalvik-LinearAlloc") == name) {
- subHeap = HEAP_DALVIK_LINEARALLOC;
- } else if ((strstr(name, "/dev/ashmem/dalvik-alloc space") == name) ||
- (strstr(name, "/dev/ashmem/dalvik-main space") == name)) {
- // This is the regular Dalvik heap.
- whichHeap = HEAP_DALVIK;
- subHeap = HEAP_DALVIK_NORMAL;
- } else if (strstr(name, "/dev/ashmem/dalvik-large object space") == name) {
- whichHeap = HEAP_DALVIK;
- subHeap = HEAP_DALVIK_LARGE;
- } else if (strstr(name, "/dev/ashmem/dalvik-non moving space") == name) {
- whichHeap = HEAP_DALVIK;
- subHeap = HEAP_DALVIK_NON_MOVING;
- } else if (strstr(name, "/dev/ashmem/dalvik-zygote space") == name) {
- whichHeap = HEAP_DALVIK;
- subHeap = HEAP_DALVIK_ZYGOTE;
- } else if (strstr(name, "/dev/ashmem/dalvik-indirect ref") == name) {
- subHeap = HEAP_DALVIK_INDIRECT_REFERENCE_TABLE;
- } else if (strstr(name, "/dev/ashmem/dalvik-jit-code-cache") == name) {
- subHeap = HEAP_DALVIK_CODE_CACHE;
- } else {
- subHeap = HEAP_DALVIK_ACCOUNTING; // Default to accounting.
- }
- } else if (strncmp(name, "/dev/ashmem/CursorWindow", 24) == 0) {
- whichHeap = HEAP_CURSOR;
- } else if (strncmp(name, "/dev/ashmem/libc malloc", 23) == 0) {
- whichHeap = HEAP_NATIVE;
- } else {
- whichHeap = HEAP_ASHMEM;
- }
} else if (strncmp(name, "[anon:libc_malloc]", 18) == 0) {
whichHeap = HEAP_NATIVE;
} else if (strncmp(name, "[stack", 6) == 0) {
whichHeap = HEAP_STACK;
- } else if (strncmp(name, "/dev/", 5) == 0) {
- if (strncmp(name, "/dev/kgsl-3d0", 13) == 0) {
- whichHeap = HEAP_GL_DEV;
- } else {
- whichHeap = HEAP_UNKNOWN_DEV;
- }
} else if (nameLen > 3 && strcmp(name+nameLen-3, ".so") == 0) {
whichHeap = HEAP_SO;
is_swappable = true;
@@ -325,7 +271,7 @@
} else if (nameLen > 4 && strcmp(name+nameLen-4, ".ttf") == 0) {
whichHeap = HEAP_TTF;
is_swappable = true;
- } else if ((nameLen > 4 && strcmp(name+nameLen-4, ".dex") == 0) ||
+ } else if ((nameLen > 4 && strstr(name, ".dex") != NULL) ||
(nameLen > 5 && strcmp(name+nameLen-5, ".odex") == 0)) {
whichHeap = HEAP_DEX;
is_swappable = true;
@@ -335,6 +281,45 @@
} else if (nameLen > 4 && strcmp(name+nameLen-4, ".art") == 0) {
whichHeap = HEAP_ART;
is_swappable = true;
+ } else if (strncmp(name, "/dev/", 5) == 0) {
+ if (strncmp(name, "/dev/kgsl-3d0", 13) == 0) {
+ whichHeap = HEAP_GL_DEV;
+ } else if (strncmp(name, "/dev/ashmem", 11) == 0) {
+ if (strncmp(name, "/dev/ashmem/dalvik-", 19) == 0) {
+ whichHeap = HEAP_DALVIK_OTHER;
+ if (strstr(name, "/dev/ashmem/dalvik-LinearAlloc") == name) {
+ subHeap = HEAP_DALVIK_LINEARALLOC;
+ } else if ((strstr(name, "/dev/ashmem/dalvik-alloc space") == name) ||
+ (strstr(name, "/dev/ashmem/dalvik-main space") == name)) {
+ // This is the regular Dalvik heap.
+ whichHeap = HEAP_DALVIK;
+ subHeap = HEAP_DALVIK_NORMAL;
+ } else if (strstr(name, "/dev/ashmem/dalvik-large object space") == name) {
+ whichHeap = HEAP_DALVIK;
+ subHeap = HEAP_DALVIK_LARGE;
+ } else if (strstr(name, "/dev/ashmem/dalvik-non moving space") == name) {
+ whichHeap = HEAP_DALVIK;
+ subHeap = HEAP_DALVIK_NON_MOVING;
+ } else if (strstr(name, "/dev/ashmem/dalvik-zygote space") == name) {
+ whichHeap = HEAP_DALVIK;
+ subHeap = HEAP_DALVIK_ZYGOTE;
+ } else if (strstr(name, "/dev/ashmem/dalvik-indirect ref") == name) {
+ subHeap = HEAP_DALVIK_INDIRECT_REFERENCE_TABLE;
+ } else if (strstr(name, "/dev/ashmem/dalvik-jit-code-cache") == name) {
+ subHeap = HEAP_DALVIK_CODE_CACHE;
+ } else {
+ subHeap = HEAP_DALVIK_ACCOUNTING; // Default to accounting.
+ }
+ } else if (strncmp(name, "/dev/ashmem/CursorWindow", 24) == 0) {
+ whichHeap = HEAP_CURSOR;
+ } else if (strncmp(name, "/dev/ashmem/libc malloc", 23) == 0) {
+ whichHeap = HEAP_NATIVE;
+ } else {
+ whichHeap = HEAP_ASHMEM;
+ }
+ } else {
+ whichHeap = HEAP_UNKNOWN_DEV;
+ }
} else if (strncmp(name, "[anon:", 6) == 0) {
whichHeap = HEAP_UNKNOWN;
} else if (nameLen > 0) {
diff --git a/core/jni/android_os_Parcel.cpp b/core/jni/android_os_Parcel.cpp
index 4f29c50..65eb38c 100644
--- a/core/jni/android_os_Parcel.cpp
+++ b/core/jni/android_os_Parcel.cpp
@@ -449,15 +449,11 @@
jniThrowNullPointerException(env, NULL);
return NULL;
}
- const jchar* str = env->GetStringCritical(name, 0);
- if (str == NULL) {
- // Whatever, whatever.
- jniThrowException(env, "java/lang/IllegalStateException", NULL);
+ ScopedUtfChars name8(env, name);
+ if (name8.c_str() == NULL) {
return NULL;
}
- String8 name8(reinterpret_cast<const char16_t*>(str),
- env->GetStringLength(name));
- env->ReleaseStringCritical(name, str);
+
int flags=0;
switch (mode&0x30000000) {
case 0:
@@ -480,7 +476,7 @@
if (mode&0x00000001) realMode |= S_IROTH;
if (mode&0x00000002) realMode |= S_IWOTH;
- int fd = open(name8.string(), flags, realMode);
+ int fd = open(name8.c_str(), flags, realMode);
if (fd < 0) {
jniThrowException(env, "java/io/FileNotFoundException", strerror(errno));
return NULL;
diff --git a/core/jni/android_util_Binder.cpp b/core/jni/android_util_Binder.cpp
index 5f42c3d..3987170 100644
--- a/core/jni/android_util_Binder.cpp
+++ b/core/jni/android_util_Binder.cpp
@@ -200,10 +200,8 @@
* that can be made while an exception is pending, so we want to
* get the VM ptr, throw the exception, and then detach the thread.
*/
- JavaVM* vm = jnienv_to_javavm(env);
env->Throw(excep);
- vm->DetachCurrentThread();
- sleep(60);
+ env->ExceptionDescribe();
ALOGE("Forcefully exiting");
exit(1);
}
@@ -360,6 +358,8 @@
void add(const sp<JavaDeathRecipient>& recipient);
void remove(const sp<JavaDeathRecipient>& recipient);
sp<JavaDeathRecipient> find(jobject recipient);
+
+ Mutex& lock(); // Use with care; specifically for mutual exclusion during binder death
};
// ----------------------------------------------------------------------------
@@ -394,11 +394,18 @@
"*** Uncaught exception returned from death notification!");
}
- // Demote from strong ref to weak after binderDied() has been delivered,
- // to allow the DeathRecipient and BinderProxy to be GC'd if no longer needed.
- mObjectWeak = env->NewWeakGlobalRef(mObject);
- env->DeleteGlobalRef(mObject);
- mObject = NULL;
+ // Serialize with our containing DeathRecipientList so that we can't
+ // delete the global ref on mObject while the list is being iterated.
+ sp<DeathRecipientList> list = mList.promote();
+ if (list != NULL) {
+ AutoMutex _l(list->lock());
+
+ // Demote from strong ref to weak after binderDied() has been delivered,
+ // to allow the DeathRecipient and BinderProxy to be GC'd if no longer needed.
+ mObjectWeak = env->NewWeakGlobalRef(mObject);
+ env->DeleteGlobalRef(mObject);
+ mObject = NULL;
+ }
}
}
@@ -520,6 +527,10 @@
return NULL;
}
+Mutex& DeathRecipientList::lock() {
+ return mLock;
+}
+
// ----------------------------------------------------------------------------
namespace android {
diff --git a/core/jni/android_util_Log.cpp b/core/jni/android_util_Log.cpp
index 9a80f1d..2b1067b 100644
--- a/core/jni/android_util_Log.cpp
+++ b/core/jni/android_util_Log.cpp
@@ -41,32 +41,8 @@
};
static levels_t levels;
-static int toLevel(const char* value)
-{
- switch (value[0]) {
- case 'V': return levels.verbose;
- case 'D': return levels.debug;
- case 'I': return levels.info;
- case 'W': return levels.warn;
- case 'E': return levels.error;
- case 'A': return levels.assert;
- case 'S': return -1; // SUPPRESS
- }
- return levels.info;
-}
-
static jboolean isLoggable(const char* tag, jint level) {
- String8 key;
- key.append(LOG_NAMESPACE);
- key.append(tag);
-
- char buf[PROPERTY_VALUE_MAX];
- if (property_get(key.string(), buf, "") <= 0) {
- buf[0] = '\0';
- }
-
- int logLevel = toLevel(buf);
- return logLevel >= 0 && level >= logLevel;
+ return __android_log_is_loggable(level, tag, ANDROID_LOG_INFO);
}
static jboolean android_util_Log_isLoggable(JNIEnv* env, jobject clazz, jstring tag, jint level)
diff --git a/core/jni/com_android_internal_content_NativeLibraryHelper.cpp b/core/jni/com_android_internal_content_NativeLibraryHelper.cpp
index 9307ff9..daa6f82 100644
--- a/core/jni/com_android_internal_content_NativeLibraryHelper.cpp
+++ b/core/jni/com_android_internal_content_NativeLibraryHelper.cpp
@@ -48,7 +48,6 @@
#define LIB_SUFFIX_LEN (sizeof(LIB_SUFFIX) - 1)
#define RS_BITCODE_SUFFIX ".bc"
-#define RS_BITCODE_SUFFIX_LEN (sizeof(RS_BITCODE_SUFFIX) -1)
#define GDBSERVER "gdbserver"
#define GDBSERVER_LEN (sizeof(GDBSERVER) - 1)
@@ -105,8 +104,8 @@
}
static bool
-isFileDifferent(const char* filePath, size_t fileSize, time_t modifiedTime,
- long zipCrc, struct stat64* st)
+isFileDifferent(const char* filePath, uint32_t fileSize, time_t modifiedTime,
+ uint32_t zipCrc, struct stat64* st)
{
if (lstat64(filePath, st) < 0) {
// File is not found or cannot be read.
@@ -134,7 +133,9 @@
return true;
}
- long crc = crc32(0L, Z_NULL, 0);
+ // uLong comes from zlib.h. It's a bit of a wart that they're
+ // potentially using a 64-bit type for a 32-bit CRC.
+ uLong crc = crc32(0L, Z_NULL, 0);
unsigned char crcBuffer[16384];
ssize_t numBytes;
while ((numBytes = TEMP_FAILURE_RETRY(read(fd, crcBuffer, sizeof(crcBuffer)))) > 0) {
@@ -142,9 +143,9 @@
}
close(fd);
- ALOGV("%s: crc = %lx, zipCrc = %lx\n", filePath, crc, zipCrc);
+ ALOGV("%s: crc = %lx, zipCrc = %" PRIu32 "\n", filePath, crc, zipCrc);
- if (crc != zipCrc) {
+ if (crc != static_cast<uLong>(zipCrc)) {
return true;
}
@@ -155,13 +156,13 @@
sumFiles(JNIEnv*, void* arg, ZipFileRO* zipFile, ZipEntryRO zipEntry, const char*)
{
size_t* total = (size_t*) arg;
- size_t uncompLen;
+ uint32_t uncompLen;
if (!zipFile->getEntryInfo(zipEntry, NULL, &uncompLen, NULL, NULL, NULL, NULL)) {
return INSTALL_FAILED_INVALID_APK;
}
- *total += uncompLen;
+ *total += static_cast<size_t>(uncompLen);
return INSTALL_SUCCEEDED;
}
@@ -181,12 +182,11 @@
ScopedUtfChars nativeLibPath(env, *javaNativeLibPath);
- size_t uncompLen;
- long when;
- long crc;
- time_t modTime;
+ uint32_t uncompLen;
+ uint32_t when;
+ uint32_t crc;
- int method;
+ uint16_t method;
off64_t offset;
if (!zipFile->getEntryInfo(zipEntry, &method, &uncompLen, NULL, &offset, &when, &crc)) {
@@ -233,7 +233,7 @@
// Only copy out the native file if it's different.
struct tm t;
ZipUtils::zipTimeToTimespec(when, &t);
- modTime = mktime(&t);
+ const time_t modTime = mktime(&t);
struct stat64 st;
if (!isFileDifferent(localFileName, uncompLen, modTime, crc, &st)) {
return INSTALL_SUCCEEDED;
@@ -321,7 +321,8 @@
public:
static NativeLibrariesIterator* create(ZipFileRO* zipFile) {
void* cookie = NULL;
- if (!zipFile->startIteration(&cookie)) {
+ // Do not specify a suffix to find both .so files and gdbserver.
+ if (!zipFile->startIteration(&cookie, APK_LIB, NULL /* suffix */)) {
return NULL;
}
@@ -336,11 +337,6 @@
continue;
}
- // Make sure we're in the lib directory of the ZIP.
- if (strncmp(fileName, APK_LIB, APK_LIB_LEN)) {
- continue;
- }
-
// Make sure the filename is at least to the minimum library name size.
const size_t fileNameLen = strlen(fileName);
static const size_t minLength = APK_LIB_LEN + 2 + LIB_PREFIX_LEN + 1 + LIB_SUFFIX_LEN;
@@ -528,7 +524,7 @@
jlong apkHandle) {
ZipFileRO* zipFile = reinterpret_cast<ZipFileRO*>(apkHandle);
void* cookie = NULL;
- if (!zipFile->startIteration(&cookie)) {
+ if (!zipFile->startIteration(&cookie, NULL /* prefix */, RS_BITCODE_SUFFIX)) {
return APK_SCAN_ERROR;
}
@@ -538,12 +534,9 @@
if (zipFile->getEntryFileName(next, fileName, sizeof(fileName))) {
continue;
}
-
- const size_t fileNameLen = strlen(fileName);
const char* lastSlash = strrchr(fileName, '/');
const char* baseName = (lastSlash == NULL) ? fileName : fileName + 1;
- if (!strncmp(fileName + fileNameLen - RS_BITCODE_SUFFIX_LEN, RS_BITCODE_SUFFIX,
- RS_BITCODE_SUFFIX_LEN) && isFilenameSafe(baseName)) {
+ if (isFilenameSafe(baseName)) {
zipFile->endIteration(cookie);
return BITCODE_PRESENT;
}
diff --git a/core/jni/com_google_android_gles_jni_GLImpl.cpp b/core/jni/com_google_android_gles_jni_GLImpl.cpp
index c5f330e..f15f957 100644
--- a/core/jni/com_google_android_gles_jni_GLImpl.cpp
+++ b/core/jni/com_google_android_gles_jni_GLImpl.cpp
@@ -449,7 +449,7 @@
jint _remaining;
GLvoid *data = (GLvoid *) 0;
- data = (GLvoid *)getPointer(_env, data_buf, &_array, &_remaining, &_bufferOffset);
+ data = (GLvoid *)getPointer(_env, data_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (data == NULL) {
char * _dataBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
data = (GLvoid *) (_dataBase + _bufferOffset);
@@ -478,7 +478,7 @@
jint _remaining;
GLvoid *data = (GLvoid *) 0;
- data = (GLvoid *)getPointer(_env, data_buf, &_array, &_remaining, &_bufferOffset);
+ data = (GLvoid *)getPointer(_env, data_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (data == NULL) {
char * _dataBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
data = (GLvoid *) (_dataBase + _bufferOffset);
@@ -571,7 +571,7 @@
goto exit;
}
textures_base = (GLuint *)
- _env->GetPrimitiveArrayCritical(textures_ref, (jboolean *)0);
+ _env->GetIntArrayElements(textures_ref, (jboolean *)0);
textures = textures_base + offset;
glDeleteTextures(
@@ -581,7 +581,7 @@
exit:
if (textures_base) {
- _env->ReleasePrimitiveArrayCritical(textures_ref, textures_base,
+ _env->ReleaseIntArrayElements(textures_ref, (jint*)textures_base,
JNI_ABORT);
}
if (_exception) {
@@ -596,12 +596,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLuint *textures = (GLuint *) 0;
- textures = (GLuint *)getPointer(_env, textures_buf, &_array, &_remaining, &_bufferOffset);
+ textures = (GLuint *)getPointer(_env, textures_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < n) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -609,7 +609,7 @@
goto exit;
}
if (textures == NULL) {
- char * _texturesBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _texturesBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
textures = (GLuint *) (_texturesBase + _bufferOffset);
}
glDeleteTextures(
@@ -619,7 +619,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, textures, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)textures, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -705,7 +705,7 @@
jint _remaining;
GLvoid *indices = (GLvoid *) 0;
- indices = (GLvoid *)getPointer(_env, indices_buf, &_array, &_remaining, &_bufferOffset);
+ indices = (GLvoid *)getPointer(_env, indices_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < count) {
_exception = 1;
_exceptionType = "java/lang/ArrayIndexOutOfBoundsException";
@@ -830,7 +830,7 @@
goto exit;
}
params_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glFogfv(
@@ -840,7 +840,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseFloatArrayElements(params_ref, (jfloat*)params_base,
JNI_ABORT);
}
if (_exception) {
@@ -855,12 +855,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *params = (GLfloat *) 0;
- params = (GLfloat *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfloat *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
int _needed;
switch (pname) {
#if defined(GL_FOG_MODE)
@@ -893,7 +893,7 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
params = (GLfloat *) (_paramsBase + _bufferOffset);
}
glFogfv(
@@ -903,7 +903,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, JNI_FALSE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)params, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -976,7 +976,7 @@
goto exit;
}
params_base = (GLfixed *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glFogxv(
@@ -986,7 +986,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
JNI_ABORT);
}
if (_exception) {
@@ -1001,12 +1001,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfixed *params = (GLfixed *) 0;
- params = (GLfixed *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfixed *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
int _needed;
switch (pname) {
#if defined(GL_FOG_MODE)
@@ -1039,7 +1039,7 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLfixed *) (_paramsBase + _bufferOffset);
}
glFogxv(
@@ -1049,7 +1049,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -1124,7 +1124,7 @@
goto exit;
}
textures_base = (GLuint *)
- _env->GetPrimitiveArrayCritical(textures_ref, (jboolean *)0);
+ _env->GetIntArrayElements(textures_ref, (jboolean *)0);
textures = textures_base + offset;
glGenTextures(
@@ -1134,7 +1134,7 @@
exit:
if (textures_base) {
- _env->ReleasePrimitiveArrayCritical(textures_ref, textures_base,
+ _env->ReleaseIntArrayElements(textures_ref, (jint*)textures_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -1149,12 +1149,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLuint *textures = (GLuint *) 0;
- textures = (GLuint *)getPointer(_env, textures_buf, &_array, &_remaining, &_bufferOffset);
+ textures = (GLuint *)getPointer(_env, textures_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < n) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -1162,7 +1162,7 @@
goto exit;
}
if (textures == NULL) {
- char * _texturesBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _texturesBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
textures = (GLuint *) (_texturesBase + _bufferOffset);
}
glGenTextures(
@@ -1172,7 +1172,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, textures, _exception ? JNI_FALSE : JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)textures, _exception ? JNI_ABORT : 0);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -1550,7 +1550,7 @@
goto exit;
}
params_base = (GLint *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetIntegerv(
@@ -1560,7 +1560,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -1575,12 +1575,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLint *params = (GLint *) 0;
- params = (GLint *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
int _needed;
switch (pname) {
#if defined(GL_ALPHA_BITS)
@@ -1919,7 +1919,7 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLint *) (_paramsBase + _bufferOffset);
}
glGetIntegerv(
@@ -1929,7 +1929,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, _exception ? JNI_FALSE : JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, _exception ? JNI_ABORT : 0);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -2008,7 +2008,7 @@
goto exit;
}
params_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glLightModelfv(
@@ -2018,7 +2018,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseFloatArrayElements(params_ref, (jfloat*)params_base,
JNI_ABORT);
}
if (_exception) {
@@ -2033,12 +2033,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *params = (GLfloat *) 0;
- params = (GLfloat *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfloat *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
int _needed;
switch (pname) {
#if defined(GL_LIGHT_MODEL_TWO_SIDE)
@@ -2062,7 +2062,7 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
params = (GLfloat *) (_paramsBase + _bufferOffset);
}
glLightModelfv(
@@ -2072,7 +2072,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, JNI_FALSE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)params, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -2136,7 +2136,7 @@
goto exit;
}
params_base = (GLfixed *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glLightModelxv(
@@ -2146,7 +2146,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
JNI_ABORT);
}
if (_exception) {
@@ -2161,12 +2161,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfixed *params = (GLfixed *) 0;
- params = (GLfixed *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfixed *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
int _needed;
switch (pname) {
#if defined(GL_LIGHT_MODEL_TWO_SIDE)
@@ -2190,7 +2190,7 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLfixed *) (_paramsBase + _bufferOffset);
}
glLightModelxv(
@@ -2200,7 +2200,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -2291,7 +2291,7 @@
goto exit;
}
params_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glLightfv(
@@ -2302,7 +2302,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseFloatArrayElements(params_ref, (jfloat*)params_base,
JNI_ABORT);
}
if (_exception) {
@@ -2317,12 +2317,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *params = (GLfloat *) 0;
- params = (GLfloat *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfloat *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
int _needed;
switch (pname) {
#if defined(GL_SPOT_EXPONENT)
@@ -2372,7 +2372,7 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
params = (GLfloat *) (_paramsBase + _bufferOffset);
}
glLightfv(
@@ -2383,7 +2383,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, JNI_FALSE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)params, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -2474,7 +2474,7 @@
goto exit;
}
params_base = (GLfixed *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glLightxv(
@@ -2485,7 +2485,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
JNI_ABORT);
}
if (_exception) {
@@ -2500,12 +2500,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfixed *params = (GLfixed *) 0;
- params = (GLfixed *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfixed *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
int _needed;
switch (pname) {
#if defined(GL_SPOT_EXPONENT)
@@ -2555,7 +2555,7 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLfixed *) (_paramsBase + _bufferOffset);
}
glLightxv(
@@ -2566,7 +2566,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -2623,7 +2623,7 @@
}
_remaining = _env->GetArrayLength(m_ref) - offset;
m_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(m_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(m_ref, (jboolean *)0);
m = m_base + offset;
glLoadMatrixf(
@@ -2632,7 +2632,7 @@
exit:
if (m_base) {
- _env->ReleasePrimitiveArrayCritical(m_ref, m_base,
+ _env->ReleaseFloatArrayElements(m_ref, (jfloat*)m_base,
JNI_ABORT);
}
if (_exception) {
@@ -2644,21 +2644,21 @@
static void
android_glLoadMatrixf__Ljava_nio_FloatBuffer_2
(JNIEnv *_env, jobject _this, jobject m_buf) {
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *m = (GLfloat *) 0;
- m = (GLfloat *)getPointer(_env, m_buf, &_array, &_remaining, &_bufferOffset);
+ m = (GLfloat *)getPointer(_env, m_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (m == NULL) {
- char * _mBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _mBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
m = (GLfloat *) (_mBase + _bufferOffset);
}
glLoadMatrixf(
(GLfloat *)m
);
if (_array) {
- releasePointer(_env, _array, m, JNI_FALSE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)m, JNI_ABORT);
}
}
@@ -2687,7 +2687,7 @@
}
_remaining = _env->GetArrayLength(m_ref) - offset;
m_base = (GLfixed *)
- _env->GetPrimitiveArrayCritical(m_ref, (jboolean *)0);
+ _env->GetIntArrayElements(m_ref, (jboolean *)0);
m = m_base + offset;
glLoadMatrixx(
@@ -2696,7 +2696,7 @@
exit:
if (m_base) {
- _env->ReleasePrimitiveArrayCritical(m_ref, m_base,
+ _env->ReleaseIntArrayElements(m_ref, (jint*)m_base,
JNI_ABORT);
}
if (_exception) {
@@ -2708,21 +2708,21 @@
static void
android_glLoadMatrixx__Ljava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jobject m_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfixed *m = (GLfixed *) 0;
- m = (GLfixed *)getPointer(_env, m_buf, &_array, &_remaining, &_bufferOffset);
+ m = (GLfixed *)getPointer(_env, m_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (m == NULL) {
- char * _mBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _mBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
m = (GLfixed *) (_mBase + _bufferOffset);
}
glLoadMatrixx(
(GLfixed *)m
);
if (_array) {
- releasePointer(_env, _array, m, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)m, JNI_ABORT);
}
}
@@ -2805,7 +2805,7 @@
goto exit;
}
params_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glMaterialfv(
@@ -2816,7 +2816,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseFloatArrayElements(params_ref, (jfloat*)params_base,
JNI_ABORT);
}
if (_exception) {
@@ -2831,12 +2831,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *params = (GLfloat *) 0;
- params = (GLfloat *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfloat *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
int _needed;
switch (pname) {
#if defined(GL_SHININESS)
@@ -2872,7 +2872,7 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
params = (GLfloat *) (_paramsBase + _bufferOffset);
}
glMaterialfv(
@@ -2883,7 +2883,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, JNI_FALSE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)params, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -2960,7 +2960,7 @@
goto exit;
}
params_base = (GLfixed *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glMaterialxv(
@@ -2971,7 +2971,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
JNI_ABORT);
}
if (_exception) {
@@ -2986,12 +2986,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfixed *params = (GLfixed *) 0;
- params = (GLfixed *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfixed *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
int _needed;
switch (pname) {
#if defined(GL_SHININESS)
@@ -3027,7 +3027,7 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLfixed *) (_paramsBase + _bufferOffset);
}
glMaterialxv(
@@ -3038,7 +3038,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -3079,7 +3079,7 @@
}
_remaining = _env->GetArrayLength(m_ref) - offset;
m_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(m_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(m_ref, (jboolean *)0);
m = m_base + offset;
glMultMatrixf(
@@ -3088,7 +3088,7 @@
exit:
if (m_base) {
- _env->ReleasePrimitiveArrayCritical(m_ref, m_base,
+ _env->ReleaseFloatArrayElements(m_ref, (jfloat*)m_base,
JNI_ABORT);
}
if (_exception) {
@@ -3100,21 +3100,21 @@
static void
android_glMultMatrixf__Ljava_nio_FloatBuffer_2
(JNIEnv *_env, jobject _this, jobject m_buf) {
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *m = (GLfloat *) 0;
- m = (GLfloat *)getPointer(_env, m_buf, &_array, &_remaining, &_bufferOffset);
+ m = (GLfloat *)getPointer(_env, m_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (m == NULL) {
- char * _mBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _mBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
m = (GLfloat *) (_mBase + _bufferOffset);
}
glMultMatrixf(
(GLfloat *)m
);
if (_array) {
- releasePointer(_env, _array, m, JNI_FALSE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)m, JNI_ABORT);
}
}
@@ -3143,7 +3143,7 @@
}
_remaining = _env->GetArrayLength(m_ref) - offset;
m_base = (GLfixed *)
- _env->GetPrimitiveArrayCritical(m_ref, (jboolean *)0);
+ _env->GetIntArrayElements(m_ref, (jboolean *)0);
m = m_base + offset;
glMultMatrixx(
@@ -3152,7 +3152,7 @@
exit:
if (m_base) {
- _env->ReleasePrimitiveArrayCritical(m_ref, m_base,
+ _env->ReleaseIntArrayElements(m_ref, (jint*)m_base,
JNI_ABORT);
}
if (_exception) {
@@ -3164,21 +3164,21 @@
static void
android_glMultMatrixx__Ljava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jobject m_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfixed *m = (GLfixed *) 0;
- m = (GLfixed *)getPointer(_env, m_buf, &_array, &_remaining, &_bufferOffset);
+ m = (GLfixed *)getPointer(_env, m_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (m == NULL) {
- char * _mBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _mBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
m = (GLfixed *) (_mBase + _bufferOffset);
}
glMultMatrixx(
(GLfixed *)m
);
if (_array) {
- releasePointer(_env, _array, m, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)m, JNI_ABORT);
}
}
@@ -3352,7 +3352,7 @@
jint _remaining;
GLvoid *pixels = (GLvoid *) 0;
- pixels = (GLvoid *)getPointer(_env, pixels_buf, &_array, &_remaining, &_bufferOffset);
+ pixels = (GLvoid *)getPointer(_env, pixels_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (pixels == NULL) {
char * _pixelsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
pixels = (GLvoid *) (_pixelsBase + _bufferOffset);
@@ -3577,7 +3577,7 @@
goto exit;
}
params_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glTexEnvfv(
@@ -3588,7 +3588,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseFloatArrayElements(params_ref, (jfloat*)params_base,
JNI_ABORT);
}
if (_exception) {
@@ -3603,12 +3603,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *params = (GLfloat *) 0;
- params = (GLfloat *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfloat *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
int _needed;
switch (pname) {
#if defined(GL_TEXTURE_ENV_MODE)
@@ -3638,7 +3638,7 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
params = (GLfloat *) (_paramsBase + _bufferOffset);
}
glTexEnvfv(
@@ -3649,7 +3649,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, JNI_FALSE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)params, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -3720,7 +3720,7 @@
goto exit;
}
params_base = (GLfixed *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glTexEnvxv(
@@ -3731,7 +3731,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
JNI_ABORT);
}
if (_exception) {
@@ -3746,12 +3746,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfixed *params = (GLfixed *) 0;
- params = (GLfixed *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfixed *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
int _needed;
switch (pname) {
#if defined(GL_TEXTURE_ENV_MODE)
@@ -3781,7 +3781,7 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLfixed *) (_paramsBase + _bufferOffset);
}
glTexEnvxv(
@@ -3792,7 +3792,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -3809,7 +3809,7 @@
GLvoid *pixels = (GLvoid *) 0;
if (pixels_buf) {
- pixels = (GLvoid *)getPointer(_env, pixels_buf, &_array, &_remaining, &_bufferOffset);
+ pixels = (GLvoid *)getPointer(_env, pixels_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
}
if (pixels_buf && pixels == NULL) {
char * _pixelsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
@@ -3863,7 +3863,7 @@
GLvoid *pixels = (GLvoid *) 0;
if (pixels_buf) {
- pixels = (GLvoid *)getPointer(_env, pixels_buf, &_array, &_remaining, &_bufferOffset);
+ pixels = (GLvoid *)getPointer(_env, pixels_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
}
if (pixels_buf && pixels == NULL) {
char * _pixelsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
@@ -3978,7 +3978,7 @@
goto exit;
}
mantissa_base = (GLfixed *)
- _env->GetPrimitiveArrayCritical(mantissa_ref, (jboolean *)0);
+ _env->GetIntArrayElements(mantissa_ref, (jboolean *)0);
mantissa = mantissa_base + mantissaOffset;
if (!exponent_ref) {
@@ -4001,7 +4001,7 @@
goto exit;
}
exponent_base = (GLint *)
- _env->GetPrimitiveArrayCritical(exponent_ref, (jboolean *)0);
+ _env->GetIntArrayElements(exponent_ref, (jboolean *)0);
exponent = exponent_base + exponentOffset;
_returnValue = glQueryMatrixxOES(
@@ -4011,11 +4011,11 @@
exit:
if (exponent_base) {
- _env->ReleasePrimitiveArrayCritical(exponent_ref, exponent_base,
+ _env->ReleaseIntArrayElements(exponent_ref, (jint*)exponent_base,
_exception ? JNI_ABORT: 0);
}
if (mantissa_base) {
- _env->ReleasePrimitiveArrayCritical(mantissa_ref, mantissa_base,
+ _env->ReleaseIntArrayElements(mantissa_ref, (jint*)mantissa_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -4031,9 +4031,9 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _mantissaArray = (jarray) 0;
+ jintArray _mantissaArray = (jintArray) 0;
jint _mantissaBufferOffset = (jint) 0;
- jarray _exponentArray = (jarray) 0;
+ jintArray _exponentArray = (jintArray) 0;
jint _exponentBufferOffset = (jint) 0;
GLbitfield _returnValue = -1;
jint _mantissaRemaining;
@@ -4041,14 +4041,14 @@
jint _exponentRemaining;
GLint *exponent = (GLint *) 0;
- mantissa = (GLfixed *)getPointer(_env, mantissa_buf, &_mantissaArray, &_mantissaRemaining, &_mantissaBufferOffset);
+ mantissa = (GLfixed *)getPointer(_env, mantissa_buf, (jarray*)&_mantissaArray, &_mantissaRemaining, &_mantissaBufferOffset);
if (_mantissaRemaining < 16) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
_exceptionMessage = "remaining() < 16 < needed";
goto exit;
}
- exponent = (GLint *)getPointer(_env, exponent_buf, &_exponentArray, &_exponentRemaining, &_exponentBufferOffset);
+ exponent = (GLint *)getPointer(_env, exponent_buf, (jarray*)&_exponentArray, &_exponentRemaining, &_exponentBufferOffset);
if (_exponentRemaining < 16) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -4056,11 +4056,11 @@
goto exit;
}
if (mantissa == NULL) {
- char * _mantissaBase = (char *)_env->GetPrimitiveArrayCritical(_mantissaArray, (jboolean *) 0);
+ char * _mantissaBase = (char *)_env->GetIntArrayElements(_mantissaArray, (jboolean *) 0);
mantissa = (GLfixed *) (_mantissaBase + _mantissaBufferOffset);
}
if (exponent == NULL) {
- char * _exponentBase = (char *)_env->GetPrimitiveArrayCritical(_exponentArray, (jboolean *) 0);
+ char * _exponentBase = (char *)_env->GetIntArrayElements(_exponentArray, (jboolean *) 0);
exponent = (GLint *) (_exponentBase + _exponentBufferOffset);
}
_returnValue = glQueryMatrixxOES(
@@ -4070,10 +4070,10 @@
exit:
if (_exponentArray) {
- releasePointer(_env, _exponentArray, exponent, _exception ? JNI_FALSE : JNI_TRUE);
+ _env->ReleaseIntArrayElements(_exponentArray, (jint*)exponent, _exception ? JNI_ABORT : 0);
}
if (_mantissaArray) {
- releasePointer(_env, _mantissaArray, mantissa, _exception ? JNI_FALSE : JNI_TRUE);
+ _env->ReleaseIntArrayElements(_mantissaArray, (jint*)mantissa, _exception ? JNI_ABORT : 0);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -4104,7 +4104,7 @@
GLvoid *data = (GLvoid *) 0;
if (data_buf) {
- data = (GLvoid *)getPointer(_env, data_buf, &_array, &_remaining, &_bufferOffset);
+ data = (GLvoid *)getPointer(_env, data_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < size) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -4144,7 +4144,7 @@
jint _remaining;
GLvoid *data = (GLvoid *) 0;
- data = (GLvoid *)getPointer(_env, data_buf, &_array, &_remaining, &_bufferOffset);
+ data = (GLvoid *)getPointer(_env, data_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < size) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -4202,7 +4202,7 @@
goto exit;
}
equation_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(equation_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(equation_ref, (jboolean *)0);
equation = equation_base + offset;
glClipPlanef(
@@ -4212,7 +4212,7 @@
exit:
if (equation_base) {
- _env->ReleasePrimitiveArrayCritical(equation_ref, equation_base,
+ _env->ReleaseFloatArrayElements(equation_ref, (jfloat*)equation_base,
JNI_ABORT);
}
if (_exception) {
@@ -4227,12 +4227,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *equation = (GLfloat *) 0;
- equation = (GLfloat *)getPointer(_env, equation_buf, &_array, &_remaining, &_bufferOffset);
+ equation = (GLfloat *)getPointer(_env, equation_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < 4) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -4240,7 +4240,7 @@
goto exit;
}
if (equation == NULL) {
- char * _equationBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _equationBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
equation = (GLfloat *) (_equationBase + _bufferOffset);
}
glClipPlanef(
@@ -4250,7 +4250,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, equation, JNI_FALSE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)equation, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -4288,7 +4288,7 @@
goto exit;
}
equation_base = (GLfixed *)
- _env->GetPrimitiveArrayCritical(equation_ref, (jboolean *)0);
+ _env->GetIntArrayElements(equation_ref, (jboolean *)0);
equation = equation_base + offset;
glClipPlanex(
@@ -4298,7 +4298,7 @@
exit:
if (equation_base) {
- _env->ReleasePrimitiveArrayCritical(equation_ref, equation_base,
+ _env->ReleaseIntArrayElements(equation_ref, (jint*)equation_base,
JNI_ABORT);
}
if (_exception) {
@@ -4313,12 +4313,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfixed *equation = (GLfixed *) 0;
- equation = (GLfixed *)getPointer(_env, equation_buf, &_array, &_remaining, &_bufferOffset);
+ equation = (GLfixed *)getPointer(_env, equation_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < 4) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -4326,7 +4326,7 @@
goto exit;
}
if (equation == NULL) {
- char * _equationBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _equationBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
equation = (GLfixed *) (_equationBase + _bufferOffset);
}
glClipPlanex(
@@ -4336,7 +4336,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, equation, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)equation, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -4398,7 +4398,7 @@
goto exit;
}
buffers_base = (GLuint *)
- _env->GetPrimitiveArrayCritical(buffers_ref, (jboolean *)0);
+ _env->GetIntArrayElements(buffers_ref, (jboolean *)0);
buffers = buffers_base + offset;
glDeleteBuffers(
@@ -4408,7 +4408,7 @@
exit:
if (buffers_base) {
- _env->ReleasePrimitiveArrayCritical(buffers_ref, buffers_base,
+ _env->ReleaseIntArrayElements(buffers_ref, (jint*)buffers_base,
JNI_ABORT);
}
if (_exception) {
@@ -4423,12 +4423,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLuint *buffers = (GLuint *) 0;
- buffers = (GLuint *)getPointer(_env, buffers_buf, &_array, &_remaining, &_bufferOffset);
+ buffers = (GLuint *)getPointer(_env, buffers_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < n) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -4436,7 +4436,7 @@
goto exit;
}
if (buffers == NULL) {
- char * _buffersBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _buffersBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
buffers = (GLuint *) (_buffersBase + _bufferOffset);
}
glDeleteBuffers(
@@ -4446,7 +4446,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, buffers, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)buffers, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -4502,7 +4502,7 @@
goto exit;
}
buffers_base = (GLuint *)
- _env->GetPrimitiveArrayCritical(buffers_ref, (jboolean *)0);
+ _env->GetIntArrayElements(buffers_ref, (jboolean *)0);
buffers = buffers_base + offset;
glGenBuffers(
@@ -4512,7 +4512,7 @@
exit:
if (buffers_base) {
- _env->ReleasePrimitiveArrayCritical(buffers_ref, buffers_base,
+ _env->ReleaseIntArrayElements(buffers_ref, (jint*)buffers_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -4527,12 +4527,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLuint *buffers = (GLuint *) 0;
- buffers = (GLuint *)getPointer(_env, buffers_buf, &_array, &_remaining, &_bufferOffset);
+ buffers = (GLuint *)getPointer(_env, buffers_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < n) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -4540,7 +4540,7 @@
goto exit;
}
if (buffers == NULL) {
- char * _buffersBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _buffersBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
buffers = (GLuint *) (_buffersBase + _bufferOffset);
}
glGenBuffers(
@@ -4550,7 +4550,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, buffers, _exception ? JNI_FALSE : JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)buffers, _exception ? JNI_ABORT : 0);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -4582,7 +4582,7 @@
}
_remaining = _env->GetArrayLength(params_ref) - offset;
params_base = (GLboolean *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetBooleanArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetBooleanv(
@@ -4592,7 +4592,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseBooleanArrayElements(params_ref, (jboolean*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -4604,14 +4604,14 @@
static void
android_glGetBooleanv__ILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLboolean *params = (GLboolean *) 0;
- params = (GLboolean *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLboolean *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLboolean *) (_paramsBase + _bufferOffset);
}
glGetBooleanv(
@@ -4619,7 +4619,7 @@
(GLboolean *)params
);
if (_array) {
- releasePointer(_env, _array, params, JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, 0);
}
}
@@ -4664,7 +4664,7 @@
}
_remaining = _env->GetArrayLength(eqn_ref) - offset;
eqn_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(eqn_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(eqn_ref, (jboolean *)0);
eqn = eqn_base + offset;
glGetClipPlanef(
@@ -4674,7 +4674,7 @@
exit:
if (eqn_base) {
- _env->ReleasePrimitiveArrayCritical(eqn_ref, eqn_base,
+ _env->ReleaseFloatArrayElements(eqn_ref, (jfloat*)eqn_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -4686,14 +4686,14 @@
static void
android_glGetClipPlanef__ILjava_nio_FloatBuffer_2
(JNIEnv *_env, jobject _this, jint pname, jobject eqn_buf) {
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *eqn = (GLfloat *) 0;
- eqn = (GLfloat *)getPointer(_env, eqn_buf, &_array, &_remaining, &_bufferOffset);
+ eqn = (GLfloat *)getPointer(_env, eqn_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (eqn == NULL) {
- char * _eqnBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _eqnBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
eqn = (GLfloat *) (_eqnBase + _bufferOffset);
}
glGetClipPlanef(
@@ -4701,7 +4701,7 @@
(GLfloat *)eqn
);
if (_array) {
- releasePointer(_env, _array, eqn, JNI_TRUE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)eqn, 0);
}
}
@@ -4730,7 +4730,7 @@
}
_remaining = _env->GetArrayLength(eqn_ref) - offset;
eqn_base = (GLfixed *)
- _env->GetPrimitiveArrayCritical(eqn_ref, (jboolean *)0);
+ _env->GetIntArrayElements(eqn_ref, (jboolean *)0);
eqn = eqn_base + offset;
glGetClipPlanex(
@@ -4740,7 +4740,7 @@
exit:
if (eqn_base) {
- _env->ReleasePrimitiveArrayCritical(eqn_ref, eqn_base,
+ _env->ReleaseIntArrayElements(eqn_ref, (jint*)eqn_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -4752,14 +4752,14 @@
static void
android_glGetClipPlanex__ILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint pname, jobject eqn_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfixed *eqn = (GLfixed *) 0;
- eqn = (GLfixed *)getPointer(_env, eqn_buf, &_array, &_remaining, &_bufferOffset);
+ eqn = (GLfixed *)getPointer(_env, eqn_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (eqn == NULL) {
- char * _eqnBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _eqnBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
eqn = (GLfixed *) (_eqnBase + _bufferOffset);
}
glGetClipPlanex(
@@ -4767,7 +4767,7 @@
(GLfixed *)eqn
);
if (_array) {
- releasePointer(_env, _array, eqn, JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)eqn, 0);
}
}
@@ -4796,7 +4796,7 @@
}
_remaining = _env->GetArrayLength(params_ref) - offset;
params_base = (GLfixed *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetFixedv(
@@ -4806,7 +4806,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -4818,14 +4818,14 @@
static void
android_glGetFixedv__ILjava_nio_IntBuffer_2
(JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfixed *params = (GLfixed *) 0;
- params = (GLfixed *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfixed *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLfixed *) (_paramsBase + _bufferOffset);
}
glGetFixedv(
@@ -4833,7 +4833,7 @@
(GLfixed *)params
);
if (_array) {
- releasePointer(_env, _array, params, JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, 0);
}
}
@@ -4862,7 +4862,7 @@
}
_remaining = _env->GetArrayLength(params_ref) - offset;
params_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetFloatv(
@@ -4872,7 +4872,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseFloatArrayElements(params_ref, (jfloat*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -4884,14 +4884,14 @@
static void
android_glGetFloatv__ILjava_nio_FloatBuffer_2
(JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *params = (GLfloat *) 0;
- params = (GLfloat *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfloat *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
params = (GLfloat *) (_paramsBase + _bufferOffset);
}
glGetFloatv(
@@ -4899,7 +4899,7 @@
(GLfloat *)params
);
if (_array) {
- releasePointer(_env, _array, params, JNI_TRUE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)params, 0);
}
}
@@ -4976,7 +4976,7 @@
goto exit;
}
params_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetLightfv(
@@ -4987,7 +4987,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseFloatArrayElements(params_ref, (jfloat*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -5002,12 +5002,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *params = (GLfloat *) 0;
- params = (GLfloat *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfloat *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
int _needed;
switch (pname) {
#if defined(GL_SPOT_EXPONENT)
@@ -5057,7 +5057,7 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
params = (GLfloat *) (_paramsBase + _bufferOffset);
}
glGetLightfv(
@@ -5068,7 +5068,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, _exception ? JNI_FALSE : JNI_TRUE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)params, _exception ? JNI_ABORT : 0);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -5148,7 +5148,7 @@
goto exit;
}
params_base = (GLfixed *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetLightxv(
@@ -5159,7 +5159,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -5174,12 +5174,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfixed *params = (GLfixed *) 0;
- params = (GLfixed *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfixed *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
int _needed;
switch (pname) {
#if defined(GL_SPOT_EXPONENT)
@@ -5229,7 +5229,7 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLfixed *) (_paramsBase + _bufferOffset);
}
glGetLightxv(
@@ -5240,7 +5240,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, _exception ? JNI_FALSE : JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, _exception ? JNI_ABORT : 0);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -5306,7 +5306,7 @@
goto exit;
}
params_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetMaterialfv(
@@ -5317,7 +5317,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseFloatArrayElements(params_ref, (jfloat*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -5332,12 +5332,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *params = (GLfloat *) 0;
- params = (GLfloat *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfloat *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
int _needed;
switch (pname) {
#if defined(GL_SHININESS)
@@ -5373,7 +5373,7 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
params = (GLfloat *) (_paramsBase + _bufferOffset);
}
glGetMaterialfv(
@@ -5384,7 +5384,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, _exception ? JNI_FALSE : JNI_TRUE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)params, _exception ? JNI_ABORT : 0);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -5450,7 +5450,7 @@
goto exit;
}
params_base = (GLfixed *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetMaterialxv(
@@ -5461,7 +5461,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -5476,12 +5476,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfixed *params = (GLfixed *) 0;
- params = (GLfixed *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfixed *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
int _needed;
switch (pname) {
#if defined(GL_SHININESS)
@@ -5517,7 +5517,7 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLfixed *) (_paramsBase + _bufferOffset);
}
glGetMaterialxv(
@@ -5528,7 +5528,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, _exception ? JNI_FALSE : JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, _exception ? JNI_ABORT : 0);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -5588,7 +5588,7 @@
goto exit;
}
params_base = (GLint *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetTexEnviv(
@@ -5599,7 +5599,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -5614,12 +5614,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLint *params = (GLint *) 0;
- params = (GLint *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
int _needed;
switch (pname) {
#if defined(GL_TEXTURE_ENV_MODE)
@@ -5649,7 +5649,7 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLint *) (_paramsBase + _bufferOffset);
}
glGetTexEnviv(
@@ -5660,7 +5660,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, _exception ? JNI_FALSE : JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, _exception ? JNI_ABORT : 0);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -5720,7 +5720,7 @@
goto exit;
}
params_base = (GLfixed *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetTexEnvxv(
@@ -5731,7 +5731,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -5746,12 +5746,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfixed *params = (GLfixed *) 0;
- params = (GLfixed *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfixed *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
int _needed;
switch (pname) {
#if defined(GL_TEXTURE_ENV_MODE)
@@ -5781,7 +5781,7 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLfixed *) (_paramsBase + _bufferOffset);
}
glGetTexEnvxv(
@@ -5792,7 +5792,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, _exception ? JNI_FALSE : JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, _exception ? JNI_ABORT : 0);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -5830,7 +5830,7 @@
goto exit;
}
params_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetTexParameterfv(
@@ -5841,7 +5841,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseFloatArrayElements(params_ref, (jfloat*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -5856,12 +5856,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *params = (GLfloat *) 0;
- params = (GLfloat *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfloat *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < 1) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -5869,7 +5869,7 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
params = (GLfloat *) (_paramsBase + _bufferOffset);
}
glGetTexParameterfv(
@@ -5880,7 +5880,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, _exception ? JNI_FALSE : JNI_TRUE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)params, _exception ? JNI_ABORT : 0);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -5918,7 +5918,7 @@
goto exit;
}
params_base = (GLint *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetTexParameteriv(
@@ -5929,7 +5929,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -5944,12 +5944,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLint *params = (GLint *) 0;
- params = (GLint *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < 1) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -5957,7 +5957,7 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLint *) (_paramsBase + _bufferOffset);
}
glGetTexParameteriv(
@@ -5968,7 +5968,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, _exception ? JNI_FALSE : JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, _exception ? JNI_ABORT : 0);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -6006,7 +6006,7 @@
goto exit;
}
params_base = (GLfixed *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetTexParameterxv(
@@ -6017,7 +6017,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -6032,12 +6032,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfixed *params = (GLfixed *) 0;
- params = (GLfixed *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfixed *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < 1) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -6045,7 +6045,7 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLfixed *) (_paramsBase + _bufferOffset);
}
glGetTexParameterxv(
@@ -6056,7 +6056,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, _exception ? JNI_FALSE : JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, _exception ? JNI_ABORT : 0);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -6148,7 +6148,7 @@
goto exit;
}
params_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glPointParameterfv(
@@ -6158,7 +6158,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseFloatArrayElements(params_ref, (jfloat*)params_base,
JNI_ABORT);
}
if (_exception) {
@@ -6173,12 +6173,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *params = (GLfloat *) 0;
- params = (GLfloat *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfloat *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < 1) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -6186,7 +6186,7 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
params = (GLfloat *) (_paramsBase + _bufferOffset);
}
glPointParameterfv(
@@ -6196,7 +6196,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, JNI_FALSE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)params, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -6244,7 +6244,7 @@
goto exit;
}
params_base = (GLfixed *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glPointParameterxv(
@@ -6254,7 +6254,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
JNI_ABORT);
}
if (_exception) {
@@ -6269,12 +6269,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfixed *params = (GLfixed *) 0;
- params = (GLfixed *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfixed *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < 1) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -6282,7 +6282,7 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLfixed *) (_paramsBase + _bufferOffset);
}
glPointParameterxv(
@@ -6292,7 +6292,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -6398,7 +6398,7 @@
goto exit;
}
params_base = (GLint *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glTexEnviv(
@@ -6409,7 +6409,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
JNI_ABORT);
}
if (_exception) {
@@ -6424,12 +6424,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLint *params = (GLint *) 0;
- params = (GLint *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
int _needed;
switch (pname) {
#if defined(GL_TEXTURE_ENV_MODE)
@@ -6459,7 +6459,7 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLint *) (_paramsBase + _bufferOffset);
}
glTexEnviv(
@@ -6470,7 +6470,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -6508,7 +6508,7 @@
goto exit;
}
params_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glTexParameterfv(
@@ -6519,7 +6519,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseFloatArrayElements(params_ref, (jfloat*)params_base,
JNI_ABORT);
}
if (_exception) {
@@ -6534,12 +6534,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *params = (GLfloat *) 0;
- params = (GLfloat *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfloat *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < 1) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -6547,7 +6547,7 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
params = (GLfloat *) (_paramsBase + _bufferOffset);
}
glTexParameterfv(
@@ -6558,7 +6558,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, JNI_FALSE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)params, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -6607,7 +6607,7 @@
goto exit;
}
params_base = (GLint *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glTexParameteriv(
@@ -6618,7 +6618,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
JNI_ABORT);
}
if (_exception) {
@@ -6633,12 +6633,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLint *params = (GLint *) 0;
- params = (GLint *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < 1) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -6646,7 +6646,7 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLint *) (_paramsBase + _bufferOffset);
}
glTexParameteriv(
@@ -6657,7 +6657,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -6695,7 +6695,7 @@
goto exit;
}
params_base = (GLfixed *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glTexParameterxv(
@@ -6706,7 +6706,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
JNI_ABORT);
}
if (_exception) {
@@ -6721,12 +6721,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfixed *params = (GLfixed *) 0;
- params = (GLfixed *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfixed *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < 1) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -6734,7 +6734,7 @@
goto exit;
}
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLfixed *) (_paramsBase + _bufferOffset);
}
glTexParameterxv(
@@ -6745,7 +6745,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, params, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -6817,7 +6817,7 @@
goto exit;
}
coords_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(coords_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(coords_ref, (jboolean *)0);
coords = coords_base + offset;
glDrawTexfvOES(
@@ -6826,7 +6826,7 @@
exit:
if (coords_base) {
- _env->ReleasePrimitiveArrayCritical(coords_ref, coords_base,
+ _env->ReleaseFloatArrayElements(coords_ref, (jfloat*)coords_base,
JNI_ABORT);
}
if (_exception) {
@@ -6841,12 +6841,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *coords = (GLfloat *) 0;
- coords = (GLfloat *)getPointer(_env, coords_buf, &_array, &_remaining, &_bufferOffset);
+ coords = (GLfloat *)getPointer(_env, coords_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < 5) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -6854,7 +6854,7 @@
goto exit;
}
if (coords == NULL) {
- char * _coordsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _coordsBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
coords = (GLfloat *) (_coordsBase + _bufferOffset);
}
glDrawTexfvOES(
@@ -6863,7 +6863,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, coords, JNI_FALSE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)coords, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -6914,7 +6914,7 @@
goto exit;
}
coords_base = (GLint *)
- _env->GetPrimitiveArrayCritical(coords_ref, (jboolean *)0);
+ _env->GetIntArrayElements(coords_ref, (jboolean *)0);
coords = coords_base + offset;
glDrawTexivOES(
@@ -6923,7 +6923,7 @@
exit:
if (coords_base) {
- _env->ReleasePrimitiveArrayCritical(coords_ref, coords_base,
+ _env->ReleaseIntArrayElements(coords_ref, (jint*)coords_base,
JNI_ABORT);
}
if (_exception) {
@@ -6938,12 +6938,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLint *coords = (GLint *) 0;
- coords = (GLint *)getPointer(_env, coords_buf, &_array, &_remaining, &_bufferOffset);
+ coords = (GLint *)getPointer(_env, coords_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < 5) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -6951,7 +6951,7 @@
goto exit;
}
if (coords == NULL) {
- char * _coordsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _coordsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
coords = (GLint *) (_coordsBase + _bufferOffset);
}
glDrawTexivOES(
@@ -6960,7 +6960,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, coords, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)coords, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -7011,7 +7011,7 @@
goto exit;
}
coords_base = (GLshort *)
- _env->GetPrimitiveArrayCritical(coords_ref, (jboolean *)0);
+ _env->GetShortArrayElements(coords_ref, (jboolean *)0);
coords = coords_base + offset;
glDrawTexsvOES(
@@ -7020,7 +7020,7 @@
exit:
if (coords_base) {
- _env->ReleasePrimitiveArrayCritical(coords_ref, coords_base,
+ _env->ReleaseShortArrayElements(coords_ref, (jshort*)coords_base,
JNI_ABORT);
}
if (_exception) {
@@ -7035,12 +7035,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jshortArray _array = (jshortArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLshort *coords = (GLshort *) 0;
- coords = (GLshort *)getPointer(_env, coords_buf, &_array, &_remaining, &_bufferOffset);
+ coords = (GLshort *)getPointer(_env, coords_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < 5) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -7048,7 +7048,7 @@
goto exit;
}
if (coords == NULL) {
- char * _coordsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _coordsBase = (char *)_env->GetShortArrayElements(_array, (jboolean *) 0);
coords = (GLshort *) (_coordsBase + _bufferOffset);
}
glDrawTexsvOES(
@@ -7057,7 +7057,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, coords, JNI_FALSE);
+ _env->ReleaseShortArrayElements(_array, (jshort*)coords, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -7108,7 +7108,7 @@
goto exit;
}
coords_base = (GLfixed *)
- _env->GetPrimitiveArrayCritical(coords_ref, (jboolean *)0);
+ _env->GetIntArrayElements(coords_ref, (jboolean *)0);
coords = coords_base + offset;
glDrawTexxvOES(
@@ -7117,7 +7117,7 @@
exit:
if (coords_base) {
- _env->ReleasePrimitiveArrayCritical(coords_ref, coords_base,
+ _env->ReleaseIntArrayElements(coords_ref, (jint*)coords_base,
JNI_ABORT);
}
if (_exception) {
@@ -7132,12 +7132,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfixed *coords = (GLfixed *) 0;
- coords = (GLfixed *)getPointer(_env, coords_buf, &_array, &_remaining, &_bufferOffset);
+ coords = (GLfixed *)getPointer(_env, coords_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < 5) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -7145,7 +7145,7 @@
goto exit;
}
if (coords == NULL) {
- char * _coordsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _coordsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
coords = (GLfixed *) (_coordsBase + _bufferOffset);
}
glDrawTexxvOES(
@@ -7154,7 +7154,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, coords, JNI_FALSE);
+ _env->ReleaseIntArrayElements(_array, (jint*)coords, JNI_ABORT);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -7368,7 +7368,7 @@
goto exit;
}
framebuffers_base = (GLuint *)
- _env->GetPrimitiveArrayCritical(framebuffers_ref, (jboolean *)0);
+ _env->GetIntArrayElements(framebuffers_ref, (jboolean *)0);
framebuffers = framebuffers_base + offset;
glDeleteFramebuffersOES(
@@ -7378,7 +7378,7 @@
exit:
if (framebuffers_base) {
- _env->ReleasePrimitiveArrayCritical(framebuffers_ref, framebuffers_base,
+ _env->ReleaseIntArrayElements(framebuffers_ref, (jint*)framebuffers_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -7398,12 +7398,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLuint *framebuffers = (GLuint *) 0;
- framebuffers = (GLuint *)getPointer(_env, framebuffers_buf, &_array, &_remaining, &_bufferOffset);
+ framebuffers = (GLuint *)getPointer(_env, framebuffers_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < n) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -7411,7 +7411,7 @@
goto exit;
}
if (framebuffers == NULL) {
- char * _framebuffersBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _framebuffersBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
framebuffers = (GLuint *) (_framebuffersBase + _bufferOffset);
}
glDeleteFramebuffersOES(
@@ -7421,7 +7421,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, framebuffers, _exception ? JNI_FALSE : JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)framebuffers, _exception ? JNI_ABORT : 0);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -7464,7 +7464,7 @@
goto exit;
}
renderbuffers_base = (GLuint *)
- _env->GetPrimitiveArrayCritical(renderbuffers_ref, (jboolean *)0);
+ _env->GetIntArrayElements(renderbuffers_ref, (jboolean *)0);
renderbuffers = renderbuffers_base + offset;
glDeleteRenderbuffersOES(
@@ -7474,7 +7474,7 @@
exit:
if (renderbuffers_base) {
- _env->ReleasePrimitiveArrayCritical(renderbuffers_ref, renderbuffers_base,
+ _env->ReleaseIntArrayElements(renderbuffers_ref, (jint*)renderbuffers_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -7494,12 +7494,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLuint *renderbuffers = (GLuint *) 0;
- renderbuffers = (GLuint *)getPointer(_env, renderbuffers_buf, &_array, &_remaining, &_bufferOffset);
+ renderbuffers = (GLuint *)getPointer(_env, renderbuffers_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < n) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -7507,7 +7507,7 @@
goto exit;
}
if (renderbuffers == NULL) {
- char * _renderbuffersBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _renderbuffersBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
renderbuffers = (GLuint *) (_renderbuffersBase + _bufferOffset);
}
glDeleteRenderbuffersOES(
@@ -7517,7 +7517,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, renderbuffers, _exception ? JNI_FALSE : JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)renderbuffers, _exception ? JNI_ABORT : 0);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -7609,7 +7609,7 @@
goto exit;
}
framebuffers_base = (GLuint *)
- _env->GetPrimitiveArrayCritical(framebuffers_ref, (jboolean *)0);
+ _env->GetIntArrayElements(framebuffers_ref, (jboolean *)0);
framebuffers = framebuffers_base + offset;
glGenFramebuffersOES(
@@ -7619,7 +7619,7 @@
exit:
if (framebuffers_base) {
- _env->ReleasePrimitiveArrayCritical(framebuffers_ref, framebuffers_base,
+ _env->ReleaseIntArrayElements(framebuffers_ref, (jint*)framebuffers_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -7639,12 +7639,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLuint *framebuffers = (GLuint *) 0;
- framebuffers = (GLuint *)getPointer(_env, framebuffers_buf, &_array, &_remaining, &_bufferOffset);
+ framebuffers = (GLuint *)getPointer(_env, framebuffers_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < n) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -7652,7 +7652,7 @@
goto exit;
}
if (framebuffers == NULL) {
- char * _framebuffersBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _framebuffersBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
framebuffers = (GLuint *) (_framebuffersBase + _bufferOffset);
}
glGenFramebuffersOES(
@@ -7662,7 +7662,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, framebuffers, _exception ? JNI_FALSE : JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)framebuffers, _exception ? JNI_ABORT : 0);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -7705,7 +7705,7 @@
goto exit;
}
renderbuffers_base = (GLuint *)
- _env->GetPrimitiveArrayCritical(renderbuffers_ref, (jboolean *)0);
+ _env->GetIntArrayElements(renderbuffers_ref, (jboolean *)0);
renderbuffers = renderbuffers_base + offset;
glGenRenderbuffersOES(
@@ -7715,7 +7715,7 @@
exit:
if (renderbuffers_base) {
- _env->ReleasePrimitiveArrayCritical(renderbuffers_ref, renderbuffers_base,
+ _env->ReleaseIntArrayElements(renderbuffers_ref, (jint*)renderbuffers_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -7735,12 +7735,12 @@
jint _exception = 0;
const char * _exceptionType = NULL;
const char * _exceptionMessage = NULL;
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLuint *renderbuffers = (GLuint *) 0;
- renderbuffers = (GLuint *)getPointer(_env, renderbuffers_buf, &_array, &_remaining, &_bufferOffset);
+ renderbuffers = (GLuint *)getPointer(_env, renderbuffers_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (_remaining < n) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
@@ -7748,7 +7748,7 @@
goto exit;
}
if (renderbuffers == NULL) {
- char * _renderbuffersBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _renderbuffersBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
renderbuffers = (GLuint *) (_renderbuffersBase + _bufferOffset);
}
glGenRenderbuffersOES(
@@ -7758,7 +7758,7 @@
exit:
if (_array) {
- releasePointer(_env, _array, renderbuffers, _exception ? JNI_FALSE : JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)renderbuffers, _exception ? JNI_ABORT : 0);
}
if (_exception) {
jniThrowException(_env, _exceptionType, _exceptionMessage);
@@ -7795,7 +7795,7 @@
}
_remaining = _env->GetArrayLength(params_ref) - offset;
params_base = (GLint *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetFramebufferAttachmentParameterivOES(
@@ -7807,7 +7807,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -7824,14 +7824,14 @@
"glGetFramebufferAttachmentParameterivOES");
return;
}
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLint *params = (GLint *) 0;
- params = (GLint *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLint *) (_paramsBase + _bufferOffset);
}
glGetFramebufferAttachmentParameterivOES(
@@ -7841,7 +7841,7 @@
(GLint *)params
);
if (_array) {
- releasePointer(_env, _array, params, JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, 0);
}
}
@@ -7875,7 +7875,7 @@
}
_remaining = _env->GetArrayLength(params_ref) - offset;
params_base = (GLint *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetRenderbufferParameterivOES(
@@ -7886,7 +7886,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -7903,14 +7903,14 @@
"glGetRenderbufferParameterivOES");
return;
}
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLint *params = (GLint *) 0;
- params = (GLint *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLint *) (_paramsBase + _bufferOffset);
}
glGetRenderbufferParameterivOES(
@@ -7919,7 +7919,7 @@
(GLint *)params
);
if (_array) {
- releasePointer(_env, _array, params, JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, 0);
}
}
@@ -7953,7 +7953,7 @@
}
_remaining = _env->GetArrayLength(params_ref) - offset;
params_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetTexGenfv(
@@ -7964,7 +7964,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseFloatArrayElements(params_ref, (jfloat*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -7981,14 +7981,14 @@
"glGetTexGenfv");
return;
}
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *params = (GLfloat *) 0;
- params = (GLfloat *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfloat *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
params = (GLfloat *) (_paramsBase + _bufferOffset);
}
glGetTexGenfv(
@@ -7997,7 +7997,7 @@
(GLfloat *)params
);
if (_array) {
- releasePointer(_env, _array, params, JNI_TRUE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)params, 0);
}
}
@@ -8031,7 +8031,7 @@
}
_remaining = _env->GetArrayLength(params_ref) - offset;
params_base = (GLint *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetTexGeniv(
@@ -8042,7 +8042,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -8059,14 +8059,14 @@
"glGetTexGeniv");
return;
}
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLint *params = (GLint *) 0;
- params = (GLint *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLint *) (_paramsBase + _bufferOffset);
}
glGetTexGeniv(
@@ -8075,7 +8075,7 @@
(GLint *)params
);
if (_array) {
- releasePointer(_env, _array, params, JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, 0);
}
}
@@ -8109,7 +8109,7 @@
}
_remaining = _env->GetArrayLength(params_ref) - offset;
params_base = (GLint *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glGetTexGenxv(
@@ -8120,7 +8120,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -8137,14 +8137,14 @@
"glGetTexGenxv");
return;
}
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLint *params = (GLint *) 0;
- params = (GLint *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLint *) (_paramsBase + _bufferOffset);
}
glGetTexGenxv(
@@ -8153,7 +8153,7 @@
(GLint *)params
);
if (_array) {
- releasePointer(_env, _array, params, JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, 0);
}
}
@@ -8252,7 +8252,7 @@
}
_remaining = _env->GetArrayLength(params_ref) - offset;
params_base = (GLfloat *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetFloatArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glTexGenfv(
@@ -8263,7 +8263,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseFloatArrayElements(params_ref, (jfloat*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -8280,14 +8280,14 @@
"glTexGenfv");
return;
}
- jarray _array = (jarray) 0;
+ jfloatArray _array = (jfloatArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLfloat *params = (GLfloat *) 0;
- params = (GLfloat *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLfloat *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
params = (GLfloat *) (_paramsBase + _bufferOffset);
}
glTexGenfv(
@@ -8296,7 +8296,7 @@
(GLfloat *)params
);
if (_array) {
- releasePointer(_env, _array, params, JNI_TRUE);
+ _env->ReleaseFloatArrayElements(_array, (jfloat*)params, 0);
}
}
@@ -8346,7 +8346,7 @@
}
_remaining = _env->GetArrayLength(params_ref) - offset;
params_base = (GLint *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glTexGeniv(
@@ -8357,7 +8357,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -8374,14 +8374,14 @@
"glTexGeniv");
return;
}
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLint *params = (GLint *) 0;
- params = (GLint *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLint *) (_paramsBase + _bufferOffset);
}
glTexGeniv(
@@ -8390,7 +8390,7 @@
(GLint *)params
);
if (_array) {
- releasePointer(_env, _array, params, JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, 0);
}
}
@@ -8440,7 +8440,7 @@
}
_remaining = _env->GetArrayLength(params_ref) - offset;
params_base = (GLint *)
- _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ _env->GetIntArrayElements(params_ref, (jboolean *)0);
params = params_base + offset;
glTexGenxv(
@@ -8451,7 +8451,7 @@
exit:
if (params_base) {
- _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
_exception ? JNI_ABORT: 0);
}
if (_exception) {
@@ -8468,14 +8468,14 @@
"glTexGenxv");
return;
}
- jarray _array = (jarray) 0;
+ jintArray _array = (jintArray) 0;
jint _bufferOffset = (jint) 0;
jint _remaining;
GLint *params = (GLint *) 0;
- params = (GLint *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
if (params == NULL) {
- char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
params = (GLint *) (_paramsBase + _bufferOffset);
}
glTexGenxv(
@@ -8484,7 +8484,7 @@
(GLint *)params
);
if (_array) {
- releasePointer(_env, _array, params, JNI_TRUE);
+ _env->ReleaseIntArrayElements(_array, (jint*)params, 0);
}
}
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index 34dc5ad..11b8f0a 100644
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -393,6 +393,16 @@
<!-- Spoken description for ringer normal option. [CHAR LIMIT=NONE] -->
<string name="silent_mode_ring">Ringer on</string>
+ <!-- Reboot to Recovery Progress Dialog. This is shown before it reboots to recovery. -->
+ <string name="reboot_to_update_title">Android system update</string>
+ <string name="reboot_to_update_prepare">Preparing to update\u2026</string>
+ <string name="reboot_to_update_package">Processing the update package\u2026</string>
+ <string name="reboot_to_update_reboot">Restarting\u2026</string>
+
+ <!-- Reboot to Recovery for factory reset. -->
+ <string name="reboot_to_reset_title">Factory data reset</string>
+ <string name="reboot_to_reset_message">Restarting\u2026</string>
+
<!-- Shutdown Progress Dialog. This is shown if the user chooses to power off the phone. -->
<string name="shutdown_progress">Shutting down\u2026</string>
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index eec989e..8c1f4e2 100755
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -780,6 +780,12 @@
<java-symbol type="string" name="mobile_provisioning_url" />
<java-symbol type="string" name="mobile_redirected_provisioning_url" />
<java-symbol type="string" name="quick_contacts_not_available" />
+ <java-symbol type="string" name="reboot_to_update_package" />
+ <java-symbol type="string" name="reboot_to_update_prepare" />
+ <java-symbol type="string" name="reboot_to_update_title" />
+ <java-symbol type="string" name="reboot_to_update_reboot" />
+ <java-symbol type="string" name="reboot_to_reset_title" />
+ <java-symbol type="string" name="reboot_to_reset_message" />
<java-symbol type="string" name="reboot_safemode_confirm" />
<java-symbol type="string" name="reboot_safemode_title" />
<java-symbol type="string" name="relationTypeAssistant" />
diff --git a/core/tests/coretests/apks/install_jni_lib_open_from_apk/Android.mk b/core/tests/coretests/apks/install_jni_lib_open_from_apk/Android.mk
index 5fa2405..6ee6ffa 100644
--- a/core/tests/coretests/apks/install_jni_lib_open_from_apk/Android.mk
+++ b/core/tests/coretests/apks/install_jni_lib_open_from_apk/Android.mk
@@ -5,7 +5,6 @@
LOCAL_PACKAGE_NAME := install_jni_lib_open_from_apk
-LOCAL_JNI_SHARED_LIBRARIES_ZIP_OPTIONS := -0
LOCAL_PAGE_ALIGN_JNI_SHARED_LIBRARIES := true
include $(FrameworkCoreTests_BUILD_PACKAGE)
diff --git a/core/tests/coretests/src/android/net/IpPrefixTest.java b/core/tests/coretests/src/android/net/IpPrefixTest.java
index cf278fb..fcc6389 100644
--- a/core/tests/coretests/src/android/net/IpPrefixTest.java
+++ b/core/tests/coretests/src/android/net/IpPrefixTest.java
@@ -29,6 +29,10 @@
public class IpPrefixTest extends TestCase {
+ private static InetAddress Address(String addr) {
+ return InetAddress.parseNumericAddress(addr);
+ }
+
// Explicitly cast everything to byte because "error: possible loss of precision".
private static final byte[] IPV4_BYTES = { (byte) 192, (byte) 0, (byte) 2, (byte) 4};
private static final byte[] IPV6_BYTES = {
@@ -209,6 +213,34 @@
}
@SmallTest
+ public void testContains() {
+ IpPrefix p = new IpPrefix("2001:db8:f00::ace:d00d/127");
+ assertTrue(p.contains(Address("2001:db8:f00::ace:d00c")));
+ assertTrue(p.contains(Address("2001:db8:f00::ace:d00d")));
+ assertFalse(p.contains(Address("2001:db8:f00::ace:d00e")));
+ assertFalse(p.contains(Address("2001:db8:f00::bad:d00d")));
+ assertFalse(p.contains(Address("2001:4868:4860::8888")));
+ assertFalse(p.contains(null));
+ assertFalse(p.contains(Address("8.8.8.8")));
+
+ p = new IpPrefix("192.0.2.0/23");
+ assertTrue(p.contains(Address("192.0.2.43")));
+ assertTrue(p.contains(Address("192.0.3.21")));
+ assertFalse(p.contains(Address("192.0.0.21")));
+ assertFalse(p.contains(Address("8.8.8.8")));
+ assertFalse(p.contains(Address("2001:4868:4860::8888")));
+
+ IpPrefix ipv6Default = new IpPrefix("::/0");
+ assertTrue(ipv6Default.contains(Address("2001:db8::f00")));
+ assertFalse(ipv6Default.contains(Address("192.0.2.1")));
+
+ IpPrefix ipv4Default = new IpPrefix("0.0.0.0/0");
+ assertTrue(ipv4Default.contains(Address("255.255.255.255")));
+ assertTrue(ipv4Default.contains(Address("192.0.2.1")));
+ assertFalse(ipv4Default.contains(Address("2001:db8::f00")));
+ }
+
+ @SmallTest
public void testHashCode() {
IpPrefix p;
int oldCode = -1;
diff --git a/core/tests/coretests/src/android/net/RouteInfoTest.java b/core/tests/coretests/src/android/net/RouteInfoTest.java
index 0b88bc7..831fefd 100644
--- a/core/tests/coretests/src/android/net/RouteInfoTest.java
+++ b/core/tests/coretests/src/android/net/RouteInfoTest.java
@@ -90,6 +90,7 @@
assertFalse(r.matches(Address("2001:db8:f00::ace:d00e")));
assertFalse(r.matches(Address("2001:db8:f00::bad:d00d")));
assertFalse(r.matches(Address("2001:4868:4860::8888")));
+ assertFalse(r.matches(Address("8.8.8.8")));
r = new PatchedRouteInfo(Prefix("192.0.2.0/23"), null, "wlan0");
assertTrue(r.matches(Address("192.0.2.43")));
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyAndException/Android.mk b/core/tests/hosttests/test-apps/MultiDexLegacyAndException/Android.mk
index 7839d26..78e718f 100644
--- a/core/tests/hosttests/test-apps/MultiDexLegacyAndException/Android.mk
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyAndException/Android.mk
@@ -27,18 +27,30 @@
LOCAL_PACKAGE_NAME := MultiDexLegacyAndException
+LOCAL_DEX_PREOPT := false
+
mainDexList:= \
- $(call intermediates-dir-for,APPS,$(LOCAL_PACKAGE_NAME),$(LOCAL_IS_HOST_MODULE),common)/maindex.list
+ $(call intermediates-dir-for,APPS,$(LOCAL_PACKAGE_NAME),$(LOCAL_IS_HOST_MODULE),common)/maindex.list
LOCAL_DX_FLAGS := --multi-dex --main-dex-list=$(mainDexList) --minimal-main-dex
+LOCAL_JACK_FLAGS := -D jack.dex.output.policy=minimal-multidex -D jack.preprocessor=true\
+ -D jack.preprocessor.file=$(LOCAL_PATH)/test.jpp -D jack.dex.output.multidex.legacy=true
-LOCAL_DEX_PREOPT := false
+#################################
+include $(BUILD_SYSTEM)/configure_local_jack.mk
+#################################
+
+ifdef LOCAL_JACK_ENABLED
+LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/test.jpp
+endif
include $(BUILD_PACKAGE)
+ifndef LOCAL_JACK_ENABLED
$(mainDexList): $(full_classes_proguard_jar) | $(HOST_OUT_EXECUTABLES)/mainDexClasses
+ $(hide) mkdir -p $(dir $@)
$(HOST_OUT_EXECUTABLES)/mainDexClasses $< 1>$@
echo "com/android/multidexlegacyandexception/Test.class" >> $@
$(built_dex_intermediate): $(mainDexList)
-
+endif
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyAndException/test.jpp b/core/tests/hosttests/test-apps/MultiDexLegacyAndException/test.jpp
new file mode 100644
index 0000000..0d027ed
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyAndException/test.jpp
@@ -0,0 +1,3 @@
+test:
+ @@com.android.jack.annotations.ForceInMainDex
+ class com.android.multidexlegacyandexception.Test
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/Android.mk b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/Android.mk
index e2ab1a8..7c699b6 100644
--- a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/Android.mk
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/Android.mk
@@ -27,21 +27,33 @@
LOCAL_PACKAGE_NAME := MultiDexLegacyTestApp
+LOCAL_DEX_PREOPT := false
+
mainDexList:= \
$(call intermediates-dir-for,APPS,$(LOCAL_PACKAGE_NAME),$(LOCAL_IS_HOST_MODULE),common)/maindex.list
LOCAL_DX_FLAGS := --multi-dex --main-dex-list=$(mainDexList) --minimal-main-dex
+LOCAL_JACK_FLAGS := -D jack.dex.output.policy=minimal-multidex -D jack.preprocessor=true\
+ -D jack.preprocessor.file=$(LOCAL_PATH)/test.jpp -D jack.dex.output.multidex.legacy=true
-LOCAL_DEX_PREOPT := false
+#################################
+include $(BUILD_SYSTEM)/configure_local_jack.mk
+#################################
+
+ifdef LOCAL_JACK_ENABLED
+LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/test.jpp
+endif
include $(BUILD_PACKAGE)
+ifndef LOCAL_JACK_ENABLED
$(mainDexList): $(full_classes_proguard_jar) | $(HOST_OUT_EXECUTABLES)/mainDexClasses
+ $(hide) mkdir -p $(dir $@)
$(HOST_OUT_EXECUTABLES)/mainDexClasses $< 1>$@
echo "com/android/multidexlegacytestapp/Test.class" >> $@
$(built_dex_intermediate): $(mainDexList)
-
+endif
## The application with a full main dex
include $(CLEAR_VARS)
@@ -56,17 +68,30 @@
LOCAL_PACKAGE_NAME := MultiDexLegacyTestApp2
+LOCAL_DEX_PREOPT := false
+
mainDexList2:= \
$(call intermediates-dir-for,APPS,$(LOCAL_PACKAGE_NAME),$(LOCAL_IS_HOST_MODULE),common)/maindex.list
LOCAL_DX_FLAGS := --multi-dex --main-dex-list=$(mainDexList2)
+LOCAL_JACK_FLAGS := -D jack.dex.output.policy=multidex -D jack.preprocessor=true\
+ -D jack.preprocessor.file=$(LOCAL_PATH)/test.jpp -D jack.dex.output.multidex.legacy=true
-LOCAL_DEX_PREOPT := false
+#################################
+include $(BUILD_SYSTEM)/configure_local_jack.mk
+#################################
+
+ifdef LOCAL_JACK_ENABLED
+LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/test.jpp
+endif
include $(BUILD_PACKAGE)
+ifndef LOCAL_JACK_ENABLED
$(mainDexList2): $(full_classes_proguard_jar) | $(HOST_OUT_EXECUTABLES)/mainDexClasses
+ $(hide) mkdir -p $(dir $@)
$(HOST_OUT_EXECUTABLES)/mainDexClasses $< 1>$@
echo "com/android/multidexlegacytestapp/Test.class" >> $@
$(built_dex_intermediate): $(mainDexList2)
+endif
\ No newline at end of file
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/test.jpp b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/test.jpp
new file mode 100644
index 0000000..a1f5656
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/test.jpp
@@ -0,0 +1,3 @@
+test:
+ @@com.android.jack.annotations.ForceInMainDex
+ class com.android.multidexlegacytestapp.Test
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/Android.mk b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/Android.mk
index 329f544..b85c02c 100644
--- a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/Android.mk
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/Android.mk
@@ -30,13 +30,16 @@
$(call intermediates-dir-for,APPS,$(LOCAL_PACKAGE_NAME),$(LOCAL_IS_HOST_MODULE),common)/maindex.list
LOCAL_DX_FLAGS := --multi-dex --main-dex-list=$(mainDexList) --minimal-main-dex
+LOCAL_JACK_FLAGS := -D jack.dex.output.policy=minimal-multidex -D jack.dex.output.multidex.legacy=true
LOCAL_DEX_PREOPT := false
include $(BUILD_PACKAGE)
+ifndef LOCAL_JACK_ENABLED
$(mainDexList): $(full_classes_proguard_jar) | $(HOST_OUT_EXECUTABLES)/mainDexClasses
+ $(hide) mkdir -p $(dir $@)
$(HOST_OUT_EXECUTABLES)/mainDexClasses $< 1>$@
$(built_dex_intermediate): $(mainDexList)
-
+endif
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v1/Android.mk b/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v1/Android.mk
index e79fd71..0f1d9c0 100644
--- a/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v1/Android.mk
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v1/Android.mk
@@ -26,18 +26,30 @@
LOCAL_STATIC_JAVA_LIBRARIES := android-support-multidex
+LOCAL_DEX_PREOPT := false
+
mainDexList:= \
$(call intermediates-dir-for,APPS,$(LOCAL_PACKAGE_NAME),$(LOCAL_IS_HOST_MODULE),common)/maindex.list
LOCAL_DX_FLAGS := --multi-dex --main-dex-list=$(mainDexList) --minimal-main-dex
+LOCAL_JACK_FLAGS := -D jack.dex.output.policy=minimal-multidex -D jack.preprocessor=true\
+ -D jack.preprocessor.file=$(LOCAL_PATH)/test.jpp -D jack.dex.output.multidex.legacy=true
-LOCAL_DEX_PREOPT := false
+#################################
+include $(BUILD_SYSTEM)/configure_local_jack.mk
+#################################
+
+ifdef LOCAL_JACK_ENABLED
+LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/test.jpp
+endif
include $(BUILD_PACKAGE)
+ifndef LOCAL_JACK_ENABLED
$(mainDexList): $(full_classes_proguard_jar) | $(HOST_OUT_EXECUTABLES)/mainDexClasses
+ $(hide) mkdir -p $(dir $@)
$(HOST_OUT_EXECUTABLES)/mainDexClasses $< 1>$@
echo "com/android/framework/multidexlegacyversionedtestapp/MultiDexUpdateTest.class" >> $@
$(built_dex_intermediate): $(mainDexList)
-
+endif
\ No newline at end of file
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v1/test.jpp b/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v1/test.jpp
new file mode 100644
index 0000000..6d384e3
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v1/test.jpp
@@ -0,0 +1,3 @@
+test:
+ @@com.android.jack.annotations.ForceInMainDex
+ class com.android.framework.multidexlegacyversionedtestapp.MultiDexUpdateTest
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v2/Android.mk b/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v2/Android.mk
index 3742004..67ca483 100644
--- a/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v2/Android.mk
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v2/Android.mk
@@ -26,18 +26,30 @@
LOCAL_STATIC_JAVA_LIBRARIES := android-support-multidex
+LOCAL_DEX_PREOPT := false
+
mainDexList:= \
$(call intermediates-dir-for,APPS,$(LOCAL_PACKAGE_NAME),$(LOCAL_IS_HOST_MODULE),common)/maindex.list
LOCAL_DX_FLAGS := --multi-dex --main-dex-list=$(mainDexList) --minimal-main-dex
+LOCAL_JACK_FLAGS := -D jack.dex.output.policy=minimal-multidex -D jack.preprocessor=true\
+ -D jack.preprocessor.file=$(LOCAL_PATH)/test.jpp -D jack.dex.output.multidex.legacy=true
-LOCAL_DEX_PREOPT := false
+#################################
+include $(BUILD_SYSTEM)/configure_local_jack.mk
+#################################
+
+ifdef LOCAL_JACK_ENABLED
+LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/test.jpp
+endif
include $(BUILD_PACKAGE)
+ifndef LOCAL_JACK_ENABLED
$(mainDexList): $(full_classes_proguard_jar) | $(HOST_OUT_EXECUTABLES)/mainDexClasses
+ $(hide) mkdir -p $(dir $@)
$(HOST_OUT_EXECUTABLES)/mainDexClasses $< 1>$@
echo "com/android/framework/multidexlegacyversionedtestapp/MultiDexUpdateTest.class" >> $@
$(built_dex_intermediate): $(mainDexList)
-
+endif
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v2/test.jpp b/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v2/test.jpp
new file mode 100644
index 0000000..6d384e3
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v2/test.jpp
@@ -0,0 +1,3 @@
+test:
+ @@com.android.jack.annotations.ForceInMainDex
+ class com.android.framework.multidexlegacyversionedtestapp.MultiDexUpdateTest
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v3/Android.mk b/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v3/Android.mk
index 7f400bc..bf2efb1 100644
--- a/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v3/Android.mk
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v3/Android.mk
@@ -29,15 +29,28 @@
mainDexList:= \
$(call intermediates-dir-for,APPS,$(LOCAL_PACKAGE_NAME),$(LOCAL_IS_HOST_MODULE),common)/maindex.list
-LOCAL_DX_FLAGS := --multi-dex --main-dex-list=$(mainDexList) --minimal-main-dex
-
LOCAL_DEX_PREOPT := false
+LOCAL_DX_FLAGS := --multi-dex --main-dex-list=$(mainDexList) --minimal-main-dex
+LOCAL_JACK_FLAGS := -D jack.dex.output.policy=minimal-multidex -D jack.preprocessor=true\
+ -D jack.preprocessor.file=$(LOCAL_PATH)/test.jpp -D jack.dex.output.multidex.legacy=true
+
+#################################
+include $(BUILD_SYSTEM)/configure_local_jack.mk
+#################################
+
+ifdef LOCAL_JACK_ENABLED
+LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/test.jpp
+endif
+
include $(BUILD_PACKAGE)
+ifndef LOCAL_JACK_ENABLED
$(mainDexList): $(full_classes_proguard_jar) | $(HOST_OUT_EXECUTABLES)/mainDexClasses
+ $(hide) mkdir -p $(dir $@)
$(HOST_OUT_EXECUTABLES)/mainDexClasses $< 1>$@
echo "com/android/framework/multidexlegacyversionedtestapp/MultiDexUpdateTest.class" >> $@
$(built_dex_intermediate): $(mainDexList)
+endif
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v3/test.jpp b/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v3/test.jpp
new file mode 100644
index 0000000..6d384e3
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v3/test.jpp
@@ -0,0 +1,3 @@
+test:
+ @@com.android.jack.annotations.ForceInMainDex
+ class com.android.framework.multidexlegacyversionedtestapp.MultiDexUpdateTest
diff --git a/core/tests/overlaytests/testrunner.py b/core/tests/overlaytests/testrunner.py
index 3703f4a..2aa25ad 100755
--- a/core/tests/overlaytests/testrunner.py
+++ b/core/tests/overlaytests/testrunner.py
@@ -301,7 +301,7 @@
return self.path
def execute(self):
- returncode, stdout, stderr = _adb_shell('md5 %s' % self.path)
+ returncode, stdout, stderr = _adb_shell('md5sum %s' % self.path)
if returncode != 0:
return returncode, stdout, stderr
actual_md5 = stdout.split()[0]
diff --git a/data/keyboards/Android.mk b/data/keyboards/Android.mk
index 898efe8..4616838 100644
--- a/data/keyboards/Android.mk
+++ b/data/keyboards/Android.mk
@@ -32,7 +32,7 @@
$(hide) mkdir -p $(dir $@) && touch $@
# Run validatekeymaps uncondionally for platform build.
-droidcore all_modules : $(LOCAL_BUILT_MODULE)
+droidcore : $(LOCAL_BUILT_MODULE)
# Reset temp vars.
validatekeymaps :=
diff --git a/docs/html/guide/guide_toc.cs b/docs/html/guide/guide_toc.cs
index 8d010a1..f3f2e5e 100644
--- a/docs/html/guide/guide_toc.cs
+++ b/docs/html/guide/guide_toc.cs
@@ -357,8 +357,61 @@
<li><a href="<?cs var:toroot ?>guide/topics/renderscript/advanced.html">
<span class="en">Advanced RenderScript</span></a>
</li>
- <li><a href="<?cs var:toroot ?>guide/topics/renderscript/reference.html">
- <span class="en">Runtime API Reference</span></a>
+ <li class="nav-section">
+ <div class="nav-section-header">
+ <a href="<?cs var:toroot ?>guide/topics/renderscript/reference/overview.html">
+ <span class="en">Runtime API Reference</span>
+ </a></div>
+ <ul>
+ <li><a href="<?cs var:toroot ?>guide/topics/renderscript/reference/rs_value_types.html">
+ <span class="en">Numerical Types</span>
+ </a></li>
+ <li><a href="<?cs var:toroot ?>guide/topics/renderscript/reference/rs_object_types.html">
+ <span class="en">Object Types</span>
+ </a></li>
+ <li><a href="<?cs var:toroot ?>guide/topics/renderscript/reference/rs_convert.html">
+ <span class="en">Conversion Functions</span>
+ </a></li>
+ <li><a href="<?cs var:toroot ?>guide/topics/renderscript/reference/rs_math.html">
+ <span class="en">Mathematical Constants and Functions</span>
+ </a></li>
+ <li><a href="<?cs var:toroot ?>guide/topics/renderscript/reference/rs_vector_math.html">
+ <span class="en">Vector Math Functions</span>
+ </a></li>
+ <li><a href="<?cs var:toroot ?>guide/topics/renderscript/reference/rs_matrix.html">
+ <span class="en">Matrix Functions</span>
+ </a></li>
+ <li><a href="<?cs var:toroot ?>guide/topics/renderscript/reference/rs_quaternion.html">
+ <span class="en">Quaternion Functions</span>
+ </a></li>
+ <li><a href="<?cs var:toroot ?>guide/topics/renderscript/reference/rs_atomic.html">
+ <span class="en">Atomic Update Functions</span>
+ </a></li>
+ <li><a href="<?cs var:toroot ?>guide/topics/renderscript/reference/rs_time.html">
+ <span class="en">Time Functions and Types</span>
+ </a></li>
+ <li><a href="<?cs var:toroot ?>guide/topics/renderscript/reference/rs_allocation_data.html">
+ <span class="en">Allocation Data Access Functions</span>
+ </a></li>
+ <li><a href="<?cs var:toroot ?>guide/topics/renderscript/reference/rs_object_info.html">
+ <span class="en">Object Characteristics Functions</span>
+ </a></li>
+ <li><a href="<?cs var:toroot ?>guide/topics/renderscript/reference/rs_for_each.html">
+ <span class="en">Kernel Invocation Functions and Types</span>
+ </a></li>
+ <li><a href="<?cs var:toroot ?>guide/topics/renderscript/reference/rs_io.html">
+ <span class="en">Input/Output Functions</span>
+ </a></li>
+ <li><a href="<?cs var:toroot ?>guide/topics/renderscript/reference/rs_debug.html">
+ <span class="en">Debugging Functions</span>
+ </a></li>
+ <li><a href="<?cs var:toroot ?>guide/topics/renderscript/reference/rs_graphics.html">
+ <span class="en">Graphics Functions and Types</span>
+ </a></li>
+ <li><a href="<?cs var:toroot ?>guide/topics/renderscript/reference/index.html">
+ <span class="en">Index</span>
+ </a></li>
+ </ul>
</li>
</ul>
</li>
@@ -588,4 +641,3 @@
changeNavLang(getLangPref());
//-->
</script>
-
diff --git a/docs/html/guide/topics/renderscript/reference/index.jd b/docs/html/guide/topics/renderscript/reference/index.jd
new file mode 100644
index 0000000..9221bfc
--- /dev/null
+++ b/docs/html/guide/topics/renderscript/reference/index.jd
@@ -0,0 +1,2837 @@
+page.title=RenderScript Index
+
+@jd:body
+
+<div class='renderscript'>
+<h2 style='margin-bottom: 0px;'>Constants</h2>
+<table class='jd-sumtable'><tbody>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:M_1_PI'>M_1_PI</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ 1 / pi, as a 32 bit float
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:M_2_PI'>M_2_PI</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ 2 / pi, as a 32 bit float
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:M_2_SQRTPI'>M_2_SQRTPI</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ 2 / sqrt(pi), as a 32 bit float
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:M_E'>M_E</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ e, as a 32 bit float
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:M_LN10'>M_LN10</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ log_e(10), as a 32 bit float
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:M_LN2'>M_LN2</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ log_e(2), as a 32 bit float
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:M_LOG10E'>M_LOG10E</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ log_10(e), as a 32 bit float
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:M_LOG2E'>M_LOG2E</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ log_2(e), as a 32 bit float
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:M_PI'>M_PI</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ pi, as a 32 bit float
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:M_PI_2'>M_PI_2</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ pi / 2, as a 32 bit float
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:M_PI_4'>M_PI_4</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ pi / 4, as a 32 bit float
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:M_SQRT1_2'>M_SQRT1_2</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ 1 / sqrt(2), as a 32 bit float
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:M_SQRT2'>M_SQRT2</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ sqrt(2), as a 32 bit float
+ </td>
+ </tr>
+</tbody></table>
+<h2 style='margin-bottom: 0px;'>Types</h2>
+<table class='jd-sumtable'><tbody>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:char2'>char2</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Two 8 bit signed integers
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:char3'>char3</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Three 8 bit signed integers
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:char4'>char4</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Four 8 bit signed integers
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:double2'>double2</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Two 64 bit floats
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:double3'>double3</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Three 64 bit floats
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:double4'>double4</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Four 64 bit floats
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:float2'>float2</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Two 32 bit floats
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:float3'>float3</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Three 32 bit floats
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:float4'>float4</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Four 32 bit floats
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:int16_t'>int16_t</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ 16 bit signed integer
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:int2'>int2</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Two 32 bit signed integers
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:int3'>int3</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Three 32 bit signed integers
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:int32_t'>int32_t</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ 32 bit signed integer
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:int4'>int4</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Four 32 bit signed integers
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:int64_t'>int64_t</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ 64 bit signed integer
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:int8_t'>int8_t</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ 8 bit signed integer
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:long2'>long2</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Two 64 bit signed integers
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:long3'>long3</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Three 64 bit signed integers
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:long4'>long4</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Four 64 bit signed integers
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Handle to an allocation
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_types.html#android_rs:rs_allocation_cubemap_face'>rs_allocation_cubemap_face</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Enum for selecting cube map faces
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_types.html#android_rs:rs_allocation_usage_type'>rs_allocation_usage_type</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Bitfield to specify how an allocation is used
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_types.html#android_rs:rs_data_kind'>rs_data_kind</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Element data kind
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_types.html#android_rs:rs_data_type'>rs_data_type</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Element basic data type
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_types.html#android_rs:rs_element'>rs_element</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Handle to an element
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_for_each.html#android_rs:rs_for_each_strategy_t'>rs_for_each_strategy_t</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Suggested cell processing order
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:rs_matrix2x2'>rs_matrix2x2</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ 2x2 matrix of 32 bit floats
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:rs_matrix3x3'>rs_matrix3x3</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ 3x3 matrix of 32 bit floats
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ 4x4 matrix of 32 bit floats
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:rs_quaternion'>rs_quaternion</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Quaternion
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_types.html#android_rs:rs_sampler'>rs_sampler</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Handle to a Sampler
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_types.html#android_rs:rs_sampler_value'>rs_sampler_value</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Sampler wrap T value
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_types.html#android_rs:rs_script'>rs_script</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Handle to a Script
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_for_each.html#android_rs:rs_script_call_t'>rs_script_call_t</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Cell iteration information
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_time.html#android_rs:rs_time_t'>rs_time_t</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Seconds since January 1, 1970
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_time.html#android_rs:rs_tm'>rs_tm</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Date and time structure
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_types.html#android_rs:rs_type'>rs_type</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Handle to a Type
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:short2'>short2</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Two 16 bit signed integers
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:short3'>short3</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Three 16 bit signed integers
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:short4'>short4</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Four 16 bit signed integers
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:size_t'>size_t</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Unsigned size type
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:ssize_t'>ssize_t</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Signed size type
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:uchar'>uchar</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ 8 bit unsigned integer
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:uchar2'>uchar2</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Two 8 bit unsigned integers
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:uchar3'>uchar3</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Three 8 bit unsigned integers
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:uchar4'>uchar4</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Four 8 bit unsigned integers
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:uint'>uint</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ 32 bit unsigned integer
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:uint16_t'>uint16_t</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ 16 bit unsigned integer
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:uint2'>uint2</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Two 32 bit unsigned integers
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:uint3'>uint3</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Three 32 bit unsigned integers
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ 32 bit unsigned integer
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:uint4'>uint4</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Four 32 bit unsigned integers
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:uint64_t'>uint64_t</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ 64 bit unsigned integer
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:uint8_t'>uint8_t</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ 8 bit unsigned integer
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:ulong'>ulong</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ 64 bit unsigned integer
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:ulong2'>ulong2</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Two 64 bit unsigned integers
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:ulong3'>ulong3</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Three 64 bit unsigned integers
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:ulong4'>ulong4</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Four 64 bit unsigned integers
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:ushort'>ushort</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ 16 bit unsigned integer
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:ushort2'>ushort2</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Two 16 bit unsigned integers
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:ushort3'>ushort3</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Three 16 bit unsigned integers
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:ushort4'>ushort4</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Four 16 bit unsigned integers
+ </td>
+ </tr>
+</tbody></table>
+<h2 style='margin-bottom: 0px;'>Functions</h2>
+<table class='jd-sumtable'><tbody>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:abs'>abs</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Absolute value of an integer
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:acos'>acos</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Inverse cosine
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:acosh'>acosh</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Inverse hyperbolic cosine
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:acospi'>acospi</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Inverse cosine divided by pi
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:asin'>asin</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Inverse sine
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:asinh'>asinh</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Inverse hyperbolic sine
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:asinpi'>asinpi</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Inverse sine divided by pi
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:atan'>atan</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Inverse tangent
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:atan2'>atan2</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Inverse tangent of a ratio
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:atan2pi'>atan2pi</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Inverse tangent of a ratio, divided by pi
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:atanh'>atanh</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Inverse hyperbolic tangent
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:atanpi'>atanpi</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Inverse tangent divided by pi
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:cbrt'>cbrt</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Cube root
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:ceil'>ceil</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Smallest integer not less than a value
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:clamp'>clamp</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Restrain a value to a range
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:clz'>clz</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Number of leading 0 bits
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_convert.html#android_rs:convert'>convert</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Convert numerical vectors
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:copysign'>copysign</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Copies the sign of a number to another
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:cos'>cos</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Cosine
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:cosh'>cosh</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Hypebolic cosine
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:cospi'>cospi</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Cosine of a number multiplied by pi
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_vector_math.html#android_rs:cross'>cross</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Cross product of two vectors
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:degrees'>degrees</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Converts radians into degrees
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_vector_math.html#android_rs:distance'>distance</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Distance between two points
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_vector_math.html#android_rs:dot'>dot</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Dot product of two vectors
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:erf'>erf</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Mathematical error function
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:erfc'>erfc</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Mathematical complementary error function
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:exp'>exp</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ e raised to a number
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:exp10'>exp10</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ 10 raised to a number
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:exp2'>exp2</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ 2 raised to a number
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:expm1'>expm1</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ e raised to a number minus one
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:fabs'>fabs</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Absolute value of a float
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_vector_math.html#android_rs:fast_distance'>fast_distance</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate distance between two points
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_vector_math.html#android_rs:fast_length'>fast_length</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate length of a vector
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_vector_math.html#android_rs:fast_normalize'>fast_normalize</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate normalized vector
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:fdim'>fdim</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Positive difference between two values
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:floor'>floor</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Smallest integer not greater than a value
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:fma'>fma</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Multiply and add
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:fmax'>fmax</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Maximum of two floats
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:fmin'>fmin</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Minimum of two floats
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:fmod'>fmod</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Modulo
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:fract'>fract</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Positive fractional part
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:frexp'>frexp</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Binary mantissa and exponent
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:half_recip'>half_recip</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Reciprocal computed to 16 bit precision
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:half_rsqrt'>half_rsqrt</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Reciprocal of a square root computed to 16 bit precision
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:half_sqrt'>half_sqrt</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Square root computed to 16 bit precision
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:hypot'>hypot</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Hypotenuse
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:ilogb'>ilogb</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Base two exponent
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:ldexp'>ldexp</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Creates a floating point from mantissa and exponent
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_vector_math.html#android_rs:length'>length</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Length of a vector
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:lgamma'>lgamma</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Natural logarithm of the gamma function
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:log'>log</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Natural logarithm
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:log10'>log10</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Base 10 logarithm
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:log1p'>log1p</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Natural logarithm of a value plus 1
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:log2'>log2</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Base 2 logarithm
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:logb'>logb</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Base two exponent
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:mad'>mad</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Multiply and add
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:max'>max</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Maximum
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:min'>min</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Minimum
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:mix'>mix</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Mixes two values
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:modf'>modf</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Integral and fractional components
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:nan'>nan</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Not a Number
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_acos'>native_acos</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate inverse cosine
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_acosh'>native_acosh</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate inverse hyperbolic cosine
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_acospi'>native_acospi</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate inverse cosine divided by pi
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_asin'>native_asin</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate inverse sine
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_asinh'>native_asinh</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate inverse hyperbolic sine
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_asinpi'>native_asinpi</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate inverse sine divided by pi
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_atan'>native_atan</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate inverse tangent
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_atan2'>native_atan2</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate inverse tangent of a ratio
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_atan2pi'>native_atan2pi</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate inverse tangent of a ratio, divided by pi
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_atanh'>native_atanh</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate inverse hyperbolic tangent
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_atanpi'>native_atanpi</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate inverse tangent divided by pi
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_cbrt'>native_cbrt</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate cube root
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_cos'>native_cos</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate cosine
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_cosh'>native_cosh</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate hypebolic cosine
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_cospi'>native_cospi</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate cosine of a number multiplied by pi
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_vector_math.html#android_rs:native_distance'>native_distance</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate distance between two points
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_divide'>native_divide</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate division
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_exp'>native_exp</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate e raised to a number
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_exp10'>native_exp10</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate 10 raised to a number
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_exp2'>native_exp2</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate 2 raised to a number
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_expm1'>native_expm1</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate e raised to a number minus one
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_hypot'>native_hypot</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate hypotenuse
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_vector_math.html#android_rs:native_length'>native_length</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate length of a vector
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_log'>native_log</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate natural logarithm
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_log10'>native_log10</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate base 10 logarithm
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_log1p'>native_log1p</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate natural logarithm of a value plus 1
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_log2'>native_log2</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate base 2 logarithm
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_vector_math.html#android_rs:native_normalize'>native_normalize</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximately normalize a vector
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_powr'>native_powr</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate positive base raised to an exponent
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_recip'>native_recip</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate reciprocal
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_rootn'>native_rootn</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate nth root
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_rsqrt'>native_rsqrt</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate reciprocal of a square root
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_sin'>native_sin</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate sine
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_sincos'>native_sincos</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate sine and cosine
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_sinh'>native_sinh</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate hyperbolic sine
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_sinpi'>native_sinpi</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate sine of a number multiplied by pi
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_sqrt'>native_sqrt</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate square root
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_tan'>native_tan</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate tangent
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_tanh'>native_tanh</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate hyperbolic tangent
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_tanpi'>native_tanpi</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate tangent of a number multiplied by pi
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:nextafter'>nextafter</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Next floating point number
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_vector_math.html#android_rs:normalize'>normalize</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Normalize a vector
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:pow'>pow</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Base raised to an exponent
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:pown'>pown</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Base raised to an integer exponent
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:powr'>powr</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Positive base raised to an exponent
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:radians'>radians</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Converts degrees into radians
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:remainder'>remainder</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Remainder of a division
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:remquo'>remquo</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Remainder and quotient of a division
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:rint'>rint</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Round to even
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:rootn'>rootn</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Nth root
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:round'>round</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Round away from zero
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_allocation_data.html#android_rs:rsAllocationCopy1DRange'>rsAllocationCopy1DRange</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Copy consecutive cells between allocations
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_allocation_data.html#android_rs:rsAllocationCopy2DRange'>rsAllocationCopy2DRange</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Copy a rectangular region of cells between allocations
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsAllocationGetDimFaces'>rsAllocationGetDimFaces</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Presence of more than one face
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsAllocationGetDimLOD'>rsAllocationGetDimLOD</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Presence of levels of detail
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsAllocationGetDimX'>rsAllocationGetDimX</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Size of the X dimension
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsAllocationGetDimY'>rsAllocationGetDimY</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Size of the Y dimension
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsAllocationGetDimZ'>rsAllocationGetDimZ</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Size of the Z dimension
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsAllocationGetElement'>rsAllocationGetElement</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Get the object that describes the cell of an Allocation
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_io.html#android_rs:rsAllocationIoReceive'>rsAllocationIoReceive</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Receive new content from the queue
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_io.html#android_rs:rsAllocationIoSend'>rsAllocationIoSend</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Send new content to the queue
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_allocation_data.html#android_rs:rsAllocationVLoadX'>rsAllocationVLoadX</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Get a vector from an allocation of scalars
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_allocation_data.html#android_rs:rsAllocationVStoreX'>rsAllocationVStoreX</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Store a vector into an allocation of scalars
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_atomic.html#android_rs:rsAtomicAdd'>rsAtomicAdd</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Thread-safe addition
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_atomic.html#android_rs:rsAtomicAnd'>rsAtomicAnd</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Thread-safe bitwise and
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_atomic.html#android_rs:rsAtomicCas'>rsAtomicCas</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Thread-safe compare and set
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_atomic.html#android_rs:rsAtomicDec'>rsAtomicDec</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Thread-safe decrement
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_atomic.html#android_rs:rsAtomicInc'>rsAtomicInc</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Thread-safe increment
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_atomic.html#android_rs:rsAtomicMax'>rsAtomicMax</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Thread-safe maximum
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_atomic.html#android_rs:rsAtomicMin'>rsAtomicMin</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Thread-safe minimum
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_atomic.html#android_rs:rsAtomicOr'>rsAtomicOr</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Thread-safe bitwise or
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_atomic.html#android_rs:rsAtomicSub'>rsAtomicSub</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Thread-safe subtraction
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_atomic.html#android_rs:rsAtomicXor'>rsAtomicXor</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Thread-safe bitwise exclusive or
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsClearObject'>rsClearObject</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Release an object
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_debug.html#android_rs:rsDebug'>rsDebug</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Log a message and values
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsElementGetBytesSize'>rsElementGetBytesSize</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Size of an Element
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsElementGetDataKind'>rsElementGetDataKind</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Kind of an Element
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsElementGetDataType'>rsElementGetDataType</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Data type of an Element
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsElementGetSubElement'>rsElementGetSubElement</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Sub-element of a complex Element
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsElementGetSubElementArraySize'>rsElementGetSubElementArraySize</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Array size of a sub-element of a complex Element
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsElementGetSubElementCount'>rsElementGetSubElementCount</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Number of sub-elements
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsElementGetSubElementName'>rsElementGetSubElementName</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Name of a sub-element
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsElementGetSubElementNameLength'>rsElementGetSubElementNameLength</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Length of the name of a sub-element
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsElementGetSubElementOffsetBytes'>rsElementGetSubElementOffsetBytes</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Offset of the instantiated sub-element
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsElementGetVectorSize'>rsElementGetVectorSize</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Vector size of the Element
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_matrix.html#android_rs:rsExtractFrustumPlanes'>rsExtractFrustumPlanes</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Compute frustum planes
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_for_each.html#android_rs:rsForEach'>rsForEach</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Invoke the root kernel of a script
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_time.html#android_rs:rsGetDt'>rsGetDt</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Elapsed time since last call
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_allocation_data.html#android_rs:rsGetElementAt'>rsGetElementAt</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Return a cell from an allocation
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_allocation_data.html#android_rs:rsGetElementAtYuv_uchar_U'>rsGetElementAtYuv_uchar_U</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Get the U component of an allocation of YUVs
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_allocation_data.html#android_rs:rsGetElementAtYuv_uchar_V'>rsGetElementAtYuv_uchar_V</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Get the V component of an allocation of YUVs
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_allocation_data.html#android_rs:rsGetElementAtYuv_uchar_Y'>rsGetElementAtYuv_uchar_Y</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Get the Y component of an allocation of YUVs
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsIsObject'>rsIsObject</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Check for an empty handle
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_matrix.html#android_rs:rsIsSphereInFrustum'>rsIsSphereInFrustum</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Checks if a sphere is within the frustum planes
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_time.html#android_rs:rsLocaltime'>rsLocaltime</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Convert to local time
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_matrix.html#android_rs:rsMatrixGet'>rsMatrixGet</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Get one element
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_matrix.html#android_rs:rsMatrixInverse'>rsMatrixInverse</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Inverts a matrix in place
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_matrix.html#android_rs:rsMatrixInverseTranspose'>rsMatrixInverseTranspose</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Inverts and transpose a matrix in place
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_matrix.html#android_rs:rsMatrixLoad'>rsMatrixLoad</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Load or copy a matrix
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_matrix.html#android_rs:rsMatrixLoadFrustum'>rsMatrixLoadFrustum</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Load a frustum projection matrix
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_matrix.html#android_rs:rsMatrixLoadIdentity'>rsMatrixLoadIdentity</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Load identity matrix
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_matrix.html#android_rs:rsMatrixLoadMultiply'>rsMatrixLoadMultiply</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Multiply two matrices
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_matrix.html#android_rs:rsMatrixLoadOrtho'>rsMatrixLoadOrtho</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Load an orthographic projection matrix
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_matrix.html#android_rs:rsMatrixLoadPerspective'>rsMatrixLoadPerspective</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Load a perspective projection matrix
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_matrix.html#android_rs:rsMatrixLoadRotate'>rsMatrixLoadRotate</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Load a rotation matrix
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_matrix.html#android_rs:rsMatrixLoadScale'>rsMatrixLoadScale</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Load a scaling matrix
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_matrix.html#android_rs:rsMatrixLoadTranslate'>rsMatrixLoadTranslate</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Load a translation matrix
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_matrix.html#android_rs:rsMatrixMultiply'>rsMatrixMultiply</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Multiply a matrix by a vector or another matrix
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_matrix.html#android_rs:rsMatrixRotate'>rsMatrixRotate</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Apply a rotation to a transformation matrix
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_matrix.html#android_rs:rsMatrixScale'>rsMatrixScale</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Apply a scaling to a transformation matrix
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_matrix.html#android_rs:rsMatrixSet'>rsMatrixSet</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Set one element
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_matrix.html#android_rs:rsMatrixTranslate'>rsMatrixTranslate</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Apply a translation to a transformation matrix
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_matrix.html#android_rs:rsMatrixTranspose'>rsMatrixTranspose</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Transpose a matrix place
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_convert.html#android_rs:rsPackColorTo8888'>rsPackColorTo8888</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Create a uchar4 RGBA from floats
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_quaternion.html#android_rs:rsQuaternionAdd'>rsQuaternionAdd</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Add two quaternions
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_quaternion.html#android_rs:rsQuaternionConjugate'>rsQuaternionConjugate</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Conjugate a quaternion
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_quaternion.html#android_rs:rsQuaternionDot'>rsQuaternionDot</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Dot product of two quaternions
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_quaternion.html#android_rs:rsQuaternionGetMatrixUnit'>rsQuaternionGetMatrixUnit</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Get a rotation matrix from a quaternion
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_quaternion.html#android_rs:rsQuaternionLoadRotate'>rsQuaternionLoadRotate</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Create a rotation quaternion
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_quaternion.html#android_rs:rsQuaternionLoadRotateUnit'>rsQuaternionLoadRotateUnit</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Quaternion that represents a rotation about an arbitrary unit vector
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_quaternion.html#android_rs:rsQuaternionMultiply'>rsQuaternionMultiply</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Multiply a quaternion by a scalar or another quaternion
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_quaternion.html#android_rs:rsQuaternionNormalize'>rsQuaternionNormalize</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Normalize a quaternion
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_quaternion.html#android_rs:rsQuaternionSet'>rsQuaternionSet</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Create a quaternion
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_quaternion.html#android_rs:rsQuaternionSlerp'>rsQuaternionSlerp</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Spherical linear interpolation between two quaternions
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:rsRand'>rsRand</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Pseudo-random number
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_allocation_data.html#android_rs:rsSample'>rsSample</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Sample a value from a texture allocation
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsSamplerGetAnisotropy'>rsSamplerGetAnisotropy</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Anisotropy of the Sampler
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsSamplerGetMagnification'>rsSamplerGetMagnification</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Sampler magnification value
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsSamplerGetMinification'>rsSamplerGetMinification</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Sampler minification value
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsSamplerGetWrapS'>rsSamplerGetWrapS</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Sampler wrap S value
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsSamplerGetWrapT'>rsSamplerGetWrapT</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Sampler wrap T value
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_io.html#android_rs:rsSendToClient'>rsSendToClient</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Send a message to the client, non-blocking
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_io.html#android_rs:rsSendToClientBlocking'>rsSendToClientBlocking</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Send a message to the client, blocking
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_allocation_data.html#android_rs:rsSetElementAt'>rsSetElementAt</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Set a cell of an allocation
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_time.html#android_rs:rsTime'>rsTime</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Seconds since January 1, 1970
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_convert.html#android_rs:rsUnpackColor8888'>rsUnpackColor8888</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Create a float4 RGBA from uchar4
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_time.html#android_rs:rsUptimeMillis'>rsUptimeMillis</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ System uptime in milliseconds
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_time.html#android_rs:rsUptimeNanos'>rsUptimeNanos</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ System uptime in nanoseconds
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_convert.html#android_rs:rsYuvToRGBA'>rsYuvToRGBA</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Convert a YUV value to RGBA
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:rsqrt'>rsqrt</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Reciprocal of a square root
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:sign'>sign</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Sign of a value
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:sin'>sin</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Sine
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:sincos'>sincos</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Sine and cosine
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:sinh'>sinh</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Hyperbolic sine
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:sinpi'>sinpi</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Sine of a number multiplied by pi
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:sqrt'>sqrt</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Square root
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:step'>step</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ 0 if less than a value, 0 otherwise
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:tan'>tan</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Tangent
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:tanh'>tanh</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Hyperbolic tangent
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:tanpi'>tanpi</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Tangent of a number multiplied by pi
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:tgamma'>tgamma</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Gamma function
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:trunc'>trunc</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Truncates a floating point
+ </td>
+ </tr>
+</tbody></table>
+<h2 style='margin-bottom: 0px;'>Deprecated Types</h2>
+<table class='jd-sumtable'><tbody>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rs_blend_dst_func'>rs_blend_dst_func</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Blend destination function
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rs_blend_src_func'>rs_blend_src_func</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Blend source function
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rs_cull_mode'>rs_cull_mode</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Culling mode
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rs_depth_func'>rs_depth_func</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Depth function
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rs_font'>rs_font</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Handle to a Font
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rs_mesh'>rs_mesh</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Handle to a Mesh
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rs_primitive'>rs_primitive</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. How to intepret mesh vertex data
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rs_program_fragment'>rs_program_fragment</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Handle to a ProgramFragment
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rs_program_raster'>rs_program_raster</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Handle to a ProgramRaster
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rs_program_store'>rs_program_store</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Handle to a ProgramStore
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rs_program_vertex'>rs_program_vertex</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Handle to a ProgramVertex
+ </td>
+ </tr>
+</tbody></table>
+<h2 style='margin-bottom: 0px;'>Deprecated Functions</h2>
+<table class='jd-sumtable'><tbody>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:rsClamp'>rsClamp</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Restrain a value to a range
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:rsFrac'>rsFrac</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Returns the fractional part of a float
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsGetAllocation'>rsGetAllocation</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Return the Allocation for a given pointer
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgAllocationSyncAll'>rsgAllocationSyncAll</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Sync the contents of an allocation
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgBindColorTarget'>rsgBindColorTarget</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Set the color target
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgBindConstant'>rsgBindConstant</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Bind a constant allocation
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgBindDepthTarget'>rsgBindDepthTarget</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Set the depth target
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgBindFont'>rsgBindFont</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Bind a font object
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgBindProgramFragment'>rsgBindProgramFragment</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Bind a ProgramFragment
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgBindProgramRaster'>rsgBindProgramRaster</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Bind a ProgramRaster
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgBindProgramStore'>rsgBindProgramStore</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Bind a ProgramStore
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgBindProgramVertex'>rsgBindProgramVertex</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Bind a ProgramVertex
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgBindSampler'>rsgBindSampler</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Bind a sampler
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgBindTexture'>rsgBindTexture</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Bind a texture allocation
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgClearAllRenderTargets'>rsgClearAllRenderTargets</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Clear all color and depth targets
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgClearColor'>rsgClearColor</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Clear the specified color from the surface
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgClearColorTarget'>rsgClearColorTarget</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Clear the color target
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgClearDepth'>rsgClearDepth</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Clear the depth surface
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgClearDepthTarget'>rsgClearDepthTarget</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Clear the depth target
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgDrawMesh'>rsgDrawMesh</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Draw a mesh
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgDrawQuad'>rsgDrawQuad</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Draw a quad
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgDrawQuadTexCoords'>rsgDrawQuadTexCoords</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Draw a textured quad
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgDrawRect'>rsgDrawRect</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Draw a rectangle
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgDrawSpriteScreenspace'>rsgDrawSpriteScreenspace</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Draw rectangles in screenspace
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgDrawText'>rsgDrawText</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Draw a text string
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgFinish'>rsgFinish</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. End rendering commands
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgFontColor'>rsgFontColor</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Set the font color
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgGetHeight'>rsgGetHeight</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Get the surface height
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgGetWidth'>rsgGetWidth</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Get the surface width
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgMeasureText'>rsgMeasureText</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Get the bounding box for a text string
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgMeshComputeBoundingBox'>rsgMeshComputeBoundingBox</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Compute a bounding box
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgMeshGetIndexAllocation'>rsgMeshGetIndexAllocation</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Return an allocation containing index data
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgMeshGetPrimitive'>rsgMeshGetPrimitive</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Return the primitive
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgMeshGetPrimitiveCount'>rsgMeshGetPrimitiveCount</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Return the number of index sets
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgMeshGetVertexAllocation'>rsgMeshGetVertexAllocation</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Return a vertex allocation
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgMeshGetVertexAllocationCount'>rsgMeshGetVertexAllocationCount</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Return the number of vertex allocations
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgProgramFragmentConstantColor'>rsgProgramFragmentConstantColor</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Set the constant color for a fixed function emulation program
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgProgramRasterGetCullMode'>rsgProgramRasterGetCullMode</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Get program raster cull mode
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgProgramRasterIsPointSpriteEnabled'>rsgProgramRasterIsPointSpriteEnabled</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Get program raster point sprite state
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgProgramStoreGetBlendDstFunc'>rsgProgramStoreGetBlendDstFunc</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Get program store blend destination function
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgProgramStoreGetBlendSrcFunc'>rsgProgramStoreGetBlendSrcFunc</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Get program store blend source function
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgProgramStoreGetDepthFunc'>rsgProgramStoreGetDepthFunc</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Get program store depth function
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgProgramStoreIsColorMaskAlphaEnabled'>rsgProgramStoreIsColorMaskAlphaEnabled</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Get program store alpha component color mask
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgProgramStoreIsColorMaskBlueEnabled'>rsgProgramStoreIsColorMaskBlueEnabled</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Get program store blur component color mask
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgProgramStoreIsColorMaskGreenEnabled'>rsgProgramStoreIsColorMaskGreenEnabled</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Get program store green component color mask
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgProgramStoreIsColorMaskRedEnabled'>rsgProgramStoreIsColorMaskRedEnabled</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Get program store red component color mask
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgProgramStoreIsDepthMaskEnabled'>rsgProgramStoreIsDepthMaskEnabled</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Get program store depth mask
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgProgramStoreIsDitherEnabled'>rsgProgramStoreIsDitherEnabled</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Get program store dither state
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgProgramVertexGetProjectionMatrix'>rsgProgramVertexGetProjectionMatrix</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Get the projection matrix for a fixed function vertex program
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgProgramVertexLoadModelMatrix'>rsgProgramVertexLoadModelMatrix</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Load the model matrix for a bound fixed function vertex program
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgProgramVertexLoadProjectionMatrix'>rsgProgramVertexLoadProjectionMatrix</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Load the projection matrix for a bound fixed function vertex program
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgProgramVertexLoadTextureMatrix'>rsgProgramVertexLoadTextureMatrix</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Load the texture matrix for a bound fixed function vertex program
+ </td>
+ </tr>
+</tbody></table>
+</div>
diff --git a/docs/html/guide/topics/renderscript/reference/overview.jd b/docs/html/guide/topics/renderscript/reference/overview.jd
new file mode 100644
index 0000000..169b320
--- /dev/null
+++ b/docs/html/guide/topics/renderscript/reference/overview.jd
@@ -0,0 +1,2676 @@
+page.title=RenderScript Runtime API Reference
+
+@jd:body
+
+<div class='renderscript'>
+<h2>Overview</h2>
+<p> RenderScript is a high-performance runtime that provides compute operations at the native level.
+RenderScript code is compiled on devices at runtime to allow platform-independence as well.
+</p>
+
+<p> This reference documentation describes the RenderScript runtime APIs, which you can utilize
+to write RenderScript code in C99. The RenderScript compute header files are automatically
+included for you.
+</p>
+
+<p> To use RenderScript, you need to utilize the RenderScript runtime APIs documented here as well
+as the Android framework APIs for RenderScript. For documentation on the Android framework
+APIs, see the <a target="_parent" href="http://developer.android.com/reference/android/renderscript/package-summary.html">android.renderscript</a> package reference.
+</p>
+
+<p> For more information on how to develop with RenderScript and how the runtime and Android
+framework APIs interact, see the <a target="_parent" href="http://developer.android.com/guide/topics/renderscript/index.html">RenderScript developer guide</a> and the <a target="_parent" href="http://developer.android.com/resources/samples/RenderScript/index.html">RenderScript samples</a>.
+</p>
+<h2>Numerical Types</h2>
+<p> <h5>Scalars:</h5>
+</p>
+
+<p> RenderScript supports the following scalar numerical types:
+<table>
+<tr><td> </td> <td>8 bits </td> <td>16 bits </td> <td>32 bits </td> <td>64 bits</td></tr>
+<tr><td>Integer: </td> <td>char, <a href='rs_value_types.html#android_rs:int8_t'>int8_t</a> </td> <td>short, <a href='rs_value_types.html#android_rs:int16_t'>int16_t</a> </td> <td><a href='rs_value_types.html#android_rs:int32_t'>int32_t</a> </td> <td>long, long long, <a href='rs_value_types.html#android_rs:int64_t'>int64_t</a></td></tr>
+<tr><td>Unsigned integer:</td> <td>uchar, <a href='rs_value_types.html#android_rs:uint8_t'>uint8_t</a></td> <td>ushort, <a href='rs_value_types.html#android_rs:uint16_t'>uint16_t</a></td> <td>uint, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a></td> <td>ulong, <a href='rs_value_types.html#android_rs:uint64_t'>uint64_t</a></td></tr>
+<tr><td>Floating point: </td> <td> </td> <td> </td> <td>float </td> <td>double</td></tr>
+</table>
+</p>
+
+<p> <h5>Vectors:</h5>
+</p>
+
+<p> RenderScript supports fixed size vectors of length 2, 3, and 4.
+Vectors are declared using the common type name followed by a 2, 3, or 4.
+E.g. <a href='rs_value_types.html#android_rs:float4'>float4</a>, <a href='rs_value_types.html#android_rs:int3'>int3</a>, <a href='rs_value_types.html#android_rs:double2'>double2</a>, <a href='rs_value_types.html#android_rs:ulong4'>ulong4</a>.
+</p>
+
+<p> To create vector literals, use the vector type followed by the values enclosed
+between curly braces, e.g. <code>(float3){1.0f, 2.0f, 3.0f}</code>.
+</p>
+
+<p> Entries of a vector can be accessed using different naming styles.
+</p>
+
+<p> Single entries can be accessed by following the variable name with a dot and:<ul>
+<li>The letters x, y, z, and w,</li>
+<li>The letters r, g, b, and a,</li>
+<li>The letter s or S, followed by a zero based index.</li></ul>
+</p>
+
+<p> For example, with <code>int4 myVar;</code> the following are equivalent:<code><br/>
+ myVar.x == myVar.r == myVar.s0 == myVar.S0<br/>
+ myVar.y == myVar.g == myVar.s1 == myVar.S1<br/>
+ myVar.z == myVar.b == myVar.s2 == myVar.S2<br/>
+ myVar.w == myVar.a == myVar.s3 == myVar.S3</code>
+</p>
+
+<p> Multiple entries of a vector can be accessed at once by using an identifier that is
+the concatenation of multiple letters or indices. The resulting vector has a size
+equal to the number of entries named.
+</p>
+
+<p> With the example above, the middle two entries can be accessed using
+<code>myVar.yz</code>, <code>myVar.gb</code>, <code>myVar.s12</code>, and <code>myVar.S12</code>.
+</p>
+
+<p> The entries don't have to be contiguous or in increasing order. Entries can even be
+repeated, as long as we're not trying to assign to it. You also can't mix the naming
+styles.
+</p>
+
+<p> Here are examples of what can or can't be done:<code><br/>
+float4 v4;<br/>
+float3 v3;<br/>
+float2 v2;<br/>
+v2 = v4.xx; // Valid<br/>
+v3 = v4.zxw; // Valid<br/>
+v3 = v4.bba; // Valid<br/>
+v3 = v4.s032; // Valid<br/>
+v3.s120 = v4.S233; // Valid<br/>
+v4.yz = v3.rg; // Valid<br/>
+v4.yzx = v3.rg; // Invalid: mismatched sizes<br/>
+v4.yzz = v3; // Invalid: z appears twice in an assignment<br/>
+v3 = v3.xas0; // Invalid: can't mix xyzw with rgba nor s0...<br/>
+v3 = v4.s034; // Invalid: the digit can only be 0, 1, 2, or 3<br/>
+</code>
+</p>
+
+<p> <h5>Matrices and Quaternions:</h5>
+</p>
+
+<p> RenderScript supports fixed size square matrices of floats of size 2x2, 3x3, and 4x4.
+The types are named <a href='rs_value_types.html#android_rs:rs_matrix2x2'>rs_matrix2x2</a>, <a href='rs_value_types.html#android_rs:rs_matrix3x3'>rs_matrix3x3</a>, and <a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>. See
+<a href='rs_matrix.html'>Matrix Functions</a> for the list of operations.
+</p>
+
+<p> Quaternions are also supported via <a href='rs_value_types.html#android_rs:rs_quaternion'>rs_quaternion</a>. See <a href='rs_quaternion.html'>Quaterion Functions</a> for the list
+of operations.
+</p>
+<table class='jd-sumtable'><tbody>
+ <tr><th colspan='2'>Types</th></tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:char2'>char2</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Two 8 bit signed integers
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:char3'>char3</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Three 8 bit signed integers
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:char4'>char4</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Four 8 bit signed integers
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:double2'>double2</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Two 64 bit floats
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:double3'>double3</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Three 64 bit floats
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:double4'>double4</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Four 64 bit floats
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:float2'>float2</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Two 32 bit floats
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:float3'>float3</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Three 32 bit floats
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:float4'>float4</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Four 32 bit floats
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:int16_t'>int16_t</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ 16 bit signed integer
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:int2'>int2</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Two 32 bit signed integers
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:int3'>int3</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Three 32 bit signed integers
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:int32_t'>int32_t</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ 32 bit signed integer
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:int4'>int4</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Four 32 bit signed integers
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:int64_t'>int64_t</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ 64 bit signed integer
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:int8_t'>int8_t</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ 8 bit signed integer
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:long2'>long2</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Two 64 bit signed integers
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:long3'>long3</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Three 64 bit signed integers
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:long4'>long4</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Four 64 bit signed integers
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:rs_matrix2x2'>rs_matrix2x2</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ 2x2 matrix of 32 bit floats
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:rs_matrix3x3'>rs_matrix3x3</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ 3x3 matrix of 32 bit floats
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ 4x4 matrix of 32 bit floats
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:rs_quaternion'>rs_quaternion</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Quaternion
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:short2'>short2</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Two 16 bit signed integers
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:short3'>short3</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Three 16 bit signed integers
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:short4'>short4</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Four 16 bit signed integers
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:size_t'>size_t</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Unsigned size type
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:ssize_t'>ssize_t</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Signed size type
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:uchar'>uchar</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ 8 bit unsigned integer
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:uchar2'>uchar2</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Two 8 bit unsigned integers
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:uchar3'>uchar3</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Three 8 bit unsigned integers
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:uchar4'>uchar4</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Four 8 bit unsigned integers
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:uint'>uint</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ 32 bit unsigned integer
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:uint16_t'>uint16_t</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ 16 bit unsigned integer
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:uint2'>uint2</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Two 32 bit unsigned integers
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:uint3'>uint3</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Three 32 bit unsigned integers
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ 32 bit unsigned integer
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:uint4'>uint4</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Four 32 bit unsigned integers
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:uint64_t'>uint64_t</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ 64 bit unsigned integer
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:uint8_t'>uint8_t</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ 8 bit unsigned integer
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:ulong'>ulong</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ 64 bit unsigned integer
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:ulong2'>ulong2</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Two 64 bit unsigned integers
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:ulong3'>ulong3</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Three 64 bit unsigned integers
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:ulong4'>ulong4</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Four 64 bit unsigned integers
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:ushort'>ushort</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ 16 bit unsigned integer
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:ushort2'>ushort2</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Two 16 bit unsigned integers
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:ushort3'>ushort3</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Three 16 bit unsigned integers
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:ushort4'>ushort4</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Four 16 bit unsigned integers
+ </td>
+ </tr>
+</tbody></table>
+<h2>Object Types</h2>
+<p> The types below are used to manipulate RenderScript objects like allocations, samplers,
+elements, and scripts. Most of these object are created using the Java RenderScript APIs.
+</p>
+<table class='jd-sumtable'><tbody>
+ <tr><th colspan='2'>Types</th></tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Handle to an allocation
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_types.html#android_rs:rs_allocation_cubemap_face'>rs_allocation_cubemap_face</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Enum for selecting cube map faces
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_types.html#android_rs:rs_allocation_usage_type'>rs_allocation_usage_type</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Bitfield to specify how an allocation is used
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_types.html#android_rs:rs_data_kind'>rs_data_kind</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Element data kind
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_types.html#android_rs:rs_data_type'>rs_data_type</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Element basic data type
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_types.html#android_rs:rs_element'>rs_element</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Handle to an element
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_types.html#android_rs:rs_sampler'>rs_sampler</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Handle to a Sampler
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_types.html#android_rs:rs_sampler_value'>rs_sampler_value</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Sampler wrap T value
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_types.html#android_rs:rs_script'>rs_script</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Handle to a Script
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_types.html#android_rs:rs_type'>rs_type</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Handle to a Type
+ </td>
+ </tr>
+</tbody></table>
+<h2>Conversion Functions</h2>
+<p> The functions below convert from a numerical vector type to another, of from one color
+representation to another.
+</p>
+<table class='jd-sumtable'><tbody>
+ <tr><th colspan='2'>Functions</th></tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_convert.html#android_rs:convert'>convert</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Convert numerical vectors
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_convert.html#android_rs:rsPackColorTo8888'>rsPackColorTo8888</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Create a uchar4 RGBA from floats
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_convert.html#android_rs:rsUnpackColor8888'>rsUnpackColor8888</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Create a float4 RGBA from uchar4
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_convert.html#android_rs:rsYuvToRGBA'>rsYuvToRGBA</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Convert a YUV value to RGBA
+ </td>
+ </tr>
+</tbody></table>
+<h2>Mathematical Constants and Functions</h2>
+<p> The mathematical functions below can be applied to scalars and vectors. When applied
+to vectors, the returned value is a vector of the function applied to each entry of the input.
+</p>
+
+<p> For example:<code><br/>
+float3 a, b;<br/>
+// The following call sets<br/>
+// a.x to sin(b.x),<br/>
+// a.y to sin(b.y), and<br/>
+// a.z to sin(b.z).<br/>
+a = sin(b);<br/>
+</code>
+</p>
+
+<p> See <a href='rs_vector_math.html'>Vector Math Functions</a> for functions like <a href='rs_vector_math.html#android_rs:distance'>distance</a>() and <a href='rs_vector_math.html#android_rs:length'>length</a>() that interpret
+instead the input as a single vector in n-dimensional space.
+</p>
+
+<p> The precision of the mathematical operations on 32 bit floats is affected by the pragmas
+rs_fp_relaxed and rs_fp_full. Under rs_fp_relaxed, subnormal values may be flushed to zero and
+rounding may be done towards zero. In comparison, rs_fp_full requires correct handling of
+subnormal values, i.e. smaller than 1.17549435e-38f. rs_fp_rull also requires round to nearest
+with ties to even.
+</p>
+
+<p> Different precision/speed tradeoffs can be achieved by using variants of the common math
+functions. Functions with a name starting with<ul>
+<li>native_: May have custom hardware implementations with weaker precision. Additionally,
+ subnormal values may be flushed to zero, rounding towards zero may be used, and NaN and
+ infinity input may not be handled correctly.</li>
+<li>half_: May perform internal computations using 16 bit floats. Additionally, subnormal
+ values may be flushed to zero, and rounding towards zero may be used.</li>
+</ul>
+</p>
+<table class='jd-sumtable'><tbody>
+ <tr><th colspan='2'>Constants</th></tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:M_1_PI'>M_1_PI</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ 1 / pi, as a 32 bit float
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:M_2_PI'>M_2_PI</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ 2 / pi, as a 32 bit float
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:M_2_SQRTPI'>M_2_SQRTPI</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ 2 / sqrt(pi), as a 32 bit float
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:M_E'>M_E</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ e, as a 32 bit float
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:M_LN10'>M_LN10</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ log_e(10), as a 32 bit float
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:M_LN2'>M_LN2</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ log_e(2), as a 32 bit float
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:M_LOG10E'>M_LOG10E</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ log_10(e), as a 32 bit float
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:M_LOG2E'>M_LOG2E</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ log_2(e), as a 32 bit float
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:M_PI'>M_PI</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ pi, as a 32 bit float
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:M_PI_2'>M_PI_2</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ pi / 2, as a 32 bit float
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:M_PI_4'>M_PI_4</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ pi / 4, as a 32 bit float
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:M_SQRT1_2'>M_SQRT1_2</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ 1 / sqrt(2), as a 32 bit float
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:M_SQRT2'>M_SQRT2</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ sqrt(2), as a 32 bit float
+ </td>
+ </tr>
+</tbody></table>
+<table class='jd-sumtable'><tbody>
+ <tr><th colspan='2'>Functions</th></tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:abs'>abs</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Absolute value of an integer
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:acos'>acos</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Inverse cosine
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:acosh'>acosh</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Inverse hyperbolic cosine
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:acospi'>acospi</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Inverse cosine divided by pi
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:asin'>asin</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Inverse sine
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:asinh'>asinh</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Inverse hyperbolic sine
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:asinpi'>asinpi</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Inverse sine divided by pi
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:atan'>atan</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Inverse tangent
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:atan2'>atan2</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Inverse tangent of a ratio
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:atan2pi'>atan2pi</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Inverse tangent of a ratio, divided by pi
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:atanh'>atanh</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Inverse hyperbolic tangent
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:atanpi'>atanpi</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Inverse tangent divided by pi
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:cbrt'>cbrt</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Cube root
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:ceil'>ceil</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Smallest integer not less than a value
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:clamp'>clamp</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Restrain a value to a range
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:clz'>clz</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Number of leading 0 bits
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:copysign'>copysign</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Copies the sign of a number to another
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:cos'>cos</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Cosine
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:cosh'>cosh</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Hypebolic cosine
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:cospi'>cospi</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Cosine of a number multiplied by pi
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:degrees'>degrees</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Converts radians into degrees
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:erf'>erf</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Mathematical error function
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:erfc'>erfc</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Mathematical complementary error function
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:exp'>exp</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ e raised to a number
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:exp10'>exp10</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ 10 raised to a number
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:exp2'>exp2</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ 2 raised to a number
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:expm1'>expm1</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ e raised to a number minus one
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:fabs'>fabs</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Absolute value of a float
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:fdim'>fdim</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Positive difference between two values
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:floor'>floor</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Smallest integer not greater than a value
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:fma'>fma</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Multiply and add
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:fmax'>fmax</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Maximum of two floats
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:fmin'>fmin</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Minimum of two floats
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:fmod'>fmod</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Modulo
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:fract'>fract</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Positive fractional part
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:frexp'>frexp</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Binary mantissa and exponent
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:half_recip'>half_recip</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Reciprocal computed to 16 bit precision
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:half_rsqrt'>half_rsqrt</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Reciprocal of a square root computed to 16 bit precision
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:half_sqrt'>half_sqrt</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Square root computed to 16 bit precision
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:hypot'>hypot</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Hypotenuse
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:ilogb'>ilogb</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Base two exponent
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:ldexp'>ldexp</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Creates a floating point from mantissa and exponent
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:lgamma'>lgamma</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Natural logarithm of the gamma function
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:log'>log</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Natural logarithm
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:log10'>log10</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Base 10 logarithm
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:log1p'>log1p</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Natural logarithm of a value plus 1
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:log2'>log2</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Base 2 logarithm
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:logb'>logb</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Base two exponent
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:mad'>mad</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Multiply and add
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:max'>max</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Maximum
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:min'>min</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Minimum
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:mix'>mix</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Mixes two values
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:modf'>modf</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Integral and fractional components
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:nan'>nan</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Not a Number
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_acos'>native_acos</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate inverse cosine
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_acosh'>native_acosh</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate inverse hyperbolic cosine
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_acospi'>native_acospi</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate inverse cosine divided by pi
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_asin'>native_asin</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate inverse sine
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_asinh'>native_asinh</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate inverse hyperbolic sine
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_asinpi'>native_asinpi</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate inverse sine divided by pi
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_atan'>native_atan</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate inverse tangent
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_atan2'>native_atan2</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate inverse tangent of a ratio
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_atan2pi'>native_atan2pi</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate inverse tangent of a ratio, divided by pi
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_atanh'>native_atanh</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate inverse hyperbolic tangent
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_atanpi'>native_atanpi</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate inverse tangent divided by pi
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_cbrt'>native_cbrt</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate cube root
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_cos'>native_cos</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate cosine
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_cosh'>native_cosh</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate hypebolic cosine
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_cospi'>native_cospi</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate cosine of a number multiplied by pi
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_divide'>native_divide</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate division
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_exp'>native_exp</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate e raised to a number
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_exp10'>native_exp10</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate 10 raised to a number
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_exp2'>native_exp2</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate 2 raised to a number
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_expm1'>native_expm1</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate e raised to a number minus one
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_hypot'>native_hypot</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate hypotenuse
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_log'>native_log</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate natural logarithm
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_log10'>native_log10</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate base 10 logarithm
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_log1p'>native_log1p</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate natural logarithm of a value plus 1
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_log2'>native_log2</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate base 2 logarithm
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_powr'>native_powr</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate positive base raised to an exponent
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_recip'>native_recip</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate reciprocal
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_rootn'>native_rootn</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate nth root
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_rsqrt'>native_rsqrt</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate reciprocal of a square root
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_sin'>native_sin</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate sine
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_sincos'>native_sincos</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate sine and cosine
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_sinh'>native_sinh</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate hyperbolic sine
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_sinpi'>native_sinpi</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate sine of a number multiplied by pi
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_sqrt'>native_sqrt</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate square root
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_tan'>native_tan</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate tangent
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_tanh'>native_tanh</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate hyperbolic tangent
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_tanpi'>native_tanpi</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate tangent of a number multiplied by pi
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:nextafter'>nextafter</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Next floating point number
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:pow'>pow</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Base raised to an exponent
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:pown'>pown</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Base raised to an integer exponent
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:powr'>powr</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Positive base raised to an exponent
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:radians'>radians</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Converts degrees into radians
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:remainder'>remainder</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Remainder of a division
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:remquo'>remquo</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Remainder and quotient of a division
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:rint'>rint</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Round to even
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:rootn'>rootn</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Nth root
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:round'>round</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Round away from zero
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:rsRand'>rsRand</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Pseudo-random number
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:rsqrt'>rsqrt</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Reciprocal of a square root
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:sign'>sign</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Sign of a value
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:sin'>sin</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Sine
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:sincos'>sincos</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Sine and cosine
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:sinh'>sinh</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Hyperbolic sine
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:sinpi'>sinpi</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Sine of a number multiplied by pi
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:sqrt'>sqrt</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Square root
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:step'>step</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ 0 if less than a value, 0 otherwise
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:tan'>tan</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Tangent
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:tanh'>tanh</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Hyperbolic tangent
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:tanpi'>tanpi</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Tangent of a number multiplied by pi
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:tgamma'>tgamma</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Gamma function
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:trunc'>trunc</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Truncates a floating point
+ </td>
+ </tr>
+</tbody></table>
+<h2>Vector Math Functions</h2>
+<p> These functions interpret the input arguments as representation of vectors in
+n-dimensional space.
+</p>
+
+<p> The precision of the mathematical operations on 32 bit floats is affected by the pragmas
+rs_fp_relaxed and rs_fp_full. See <a href='rs_math.html'>Mathematical Constants and Functions</a> for details.
+</p>
+
+<p> Different precision/speed tradeoffs can be achieved by using variants of the common math
+functions. Functions with a name starting with<ul>
+<li>native_: May have custom hardware implementations with weaker precision. Additionally,
+ subnormal values may be flushed to zero, rounding towards zero may be used, and NaN and
+ infinity input may not be handled correctly.</li>
+<li>fast_: May perform internal computations using 16 bit floats. Additionally, subnormal
+ values may be flushed to zero, and rounding towards zero may be used.</li>
+</ul>
+</p>
+<table class='jd-sumtable'><tbody>
+ <tr><th colspan='2'>Functions</th></tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_vector_math.html#android_rs:cross'>cross</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Cross product of two vectors
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_vector_math.html#android_rs:distance'>distance</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Distance between two points
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_vector_math.html#android_rs:dot'>dot</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Dot product of two vectors
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_vector_math.html#android_rs:fast_distance'>fast_distance</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate distance between two points
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_vector_math.html#android_rs:fast_length'>fast_length</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate length of a vector
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_vector_math.html#android_rs:fast_normalize'>fast_normalize</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate normalized vector
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_vector_math.html#android_rs:length'>length</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Length of a vector
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_vector_math.html#android_rs:native_distance'>native_distance</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate distance between two points
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_vector_math.html#android_rs:native_length'>native_length</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate length of a vector
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_vector_math.html#android_rs:native_normalize'>native_normalize</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximately normalize a vector
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_vector_math.html#android_rs:normalize'>normalize</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Normalize a vector
+ </td>
+ </tr>
+</tbody></table>
+<h2>Matrix Functions</h2>
+<p> These functions let you manipulate square matrices of rank 2x2, 3x3, and 4x4.
+They are particularly useful for graphical transformations and are compatible
+with OpenGL.
+</p>
+
+<p> We use a zero-based index for rows and columns. E.g. the last element of a
+<a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a> is found at (3, 3).
+</p>
+
+<p> RenderScript uses column-major matrices and column-based vectors. Transforming
+a vector is done by postmultiplying the vector, e.g. <code>(matrix * vector)</code>,
+as provided by <a href='rs_matrix.html#android_rs:rsMatrixMultiply'>rsMatrixMultiply</a>().
+</p>
+
+<p> To create a transformation matrix that performs two transformations at once,
+multiply the two source matrices, with the first transformation as the right
+argument. E.g. to create a transformation matrix that applies the
+transformation s1 followed by s2, call <code>rsMatrixLoadMultiply(&combined, &s2, &s1)</code>.
+This derives from <code>s2 * (s1 * v)</code>, which is <code>(s2 * s1) * v</code>.
+</p>
+
+<p> We have two style of functions to create transformation matrices:
+rsMatrixLoad<i>Transformation</i> and rsMatrix<i>Transformation</i>. The former
+style simply stores the transformation matrix in the first argument. The latter
+modifies a pre-existing transformation matrix so that the new transformation
+happens first. E.g. if you call <a href='rs_matrix.html#android_rs:rsMatrixTranslate'>rsMatrixTranslate</a>() on a matrix that already
+does a scaling, the resulting matrix when applied to a vector will first do the
+translation then the scaling.
+</p>
+<table class='jd-sumtable'><tbody>
+ <tr><th colspan='2'>Functions</th></tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_matrix.html#android_rs:rsExtractFrustumPlanes'>rsExtractFrustumPlanes</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Compute frustum planes
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_matrix.html#android_rs:rsIsSphereInFrustum'>rsIsSphereInFrustum</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Checks if a sphere is within the frustum planes
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_matrix.html#android_rs:rsMatrixGet'>rsMatrixGet</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Get one element
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_matrix.html#android_rs:rsMatrixInverse'>rsMatrixInverse</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Inverts a matrix in place
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_matrix.html#android_rs:rsMatrixInverseTranspose'>rsMatrixInverseTranspose</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Inverts and transpose a matrix in place
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_matrix.html#android_rs:rsMatrixLoad'>rsMatrixLoad</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Load or copy a matrix
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_matrix.html#android_rs:rsMatrixLoadFrustum'>rsMatrixLoadFrustum</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Load a frustum projection matrix
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_matrix.html#android_rs:rsMatrixLoadIdentity'>rsMatrixLoadIdentity</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Load identity matrix
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_matrix.html#android_rs:rsMatrixLoadMultiply'>rsMatrixLoadMultiply</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Multiply two matrices
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_matrix.html#android_rs:rsMatrixLoadOrtho'>rsMatrixLoadOrtho</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Load an orthographic projection matrix
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_matrix.html#android_rs:rsMatrixLoadPerspective'>rsMatrixLoadPerspective</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Load a perspective projection matrix
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_matrix.html#android_rs:rsMatrixLoadRotate'>rsMatrixLoadRotate</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Load a rotation matrix
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_matrix.html#android_rs:rsMatrixLoadScale'>rsMatrixLoadScale</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Load a scaling matrix
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_matrix.html#android_rs:rsMatrixLoadTranslate'>rsMatrixLoadTranslate</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Load a translation matrix
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_matrix.html#android_rs:rsMatrixMultiply'>rsMatrixMultiply</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Multiply a matrix by a vector or another matrix
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_matrix.html#android_rs:rsMatrixRotate'>rsMatrixRotate</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Apply a rotation to a transformation matrix
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_matrix.html#android_rs:rsMatrixScale'>rsMatrixScale</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Apply a scaling to a transformation matrix
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_matrix.html#android_rs:rsMatrixSet'>rsMatrixSet</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Set one element
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_matrix.html#android_rs:rsMatrixTranslate'>rsMatrixTranslate</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Apply a translation to a transformation matrix
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_matrix.html#android_rs:rsMatrixTranspose'>rsMatrixTranspose</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Transpose a matrix place
+ </td>
+ </tr>
+</tbody></table>
+<h2>Quaternion Functions</h2>
+<p> The following functions manipulate quaternions.
+</p>
+<table class='jd-sumtable'><tbody>
+ <tr><th colspan='2'>Functions</th></tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_quaternion.html#android_rs:rsQuaternionAdd'>rsQuaternionAdd</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Add two quaternions
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_quaternion.html#android_rs:rsQuaternionConjugate'>rsQuaternionConjugate</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Conjugate a quaternion
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_quaternion.html#android_rs:rsQuaternionDot'>rsQuaternionDot</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Dot product of two quaternions
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_quaternion.html#android_rs:rsQuaternionGetMatrixUnit'>rsQuaternionGetMatrixUnit</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Get a rotation matrix from a quaternion
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_quaternion.html#android_rs:rsQuaternionLoadRotate'>rsQuaternionLoadRotate</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Create a rotation quaternion
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_quaternion.html#android_rs:rsQuaternionLoadRotateUnit'>rsQuaternionLoadRotateUnit</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Quaternion that represents a rotation about an arbitrary unit vector
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_quaternion.html#android_rs:rsQuaternionMultiply'>rsQuaternionMultiply</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Multiply a quaternion by a scalar or another quaternion
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_quaternion.html#android_rs:rsQuaternionNormalize'>rsQuaternionNormalize</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Normalize a quaternion
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_quaternion.html#android_rs:rsQuaternionSet'>rsQuaternionSet</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Create a quaternion
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_quaternion.html#android_rs:rsQuaternionSlerp'>rsQuaternionSlerp</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Spherical linear interpolation between two quaternions
+ </td>
+ </tr>
+</tbody></table>
+<h2>Atomic Update Functions</h2>
+<p> To update values shared between multiple threads, use the functions below.
+They ensure that the values are atomically updated, i.e. that the memory
+reads, the updates, and the memory writes are done in the right order.
+</p>
+
+<p> These functions are slower than their non-atomic equivalents, so use
+them only when synchronization is needed.
+</p>
+
+<p> Note that in RenderScript, your code is likely to be running in separate
+threads even though you did not explicitely create them. The RenderScript
+runtime will very often split the execution of one kernel across multiple
+threads. Updating globals should be done with atomic functions. If possible,
+modify your algorithm to avoid them altogether.
+</p>
+<table class='jd-sumtable'><tbody>
+ <tr><th colspan='2'>Functions</th></tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_atomic.html#android_rs:rsAtomicAdd'>rsAtomicAdd</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Thread-safe addition
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_atomic.html#android_rs:rsAtomicAnd'>rsAtomicAnd</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Thread-safe bitwise and
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_atomic.html#android_rs:rsAtomicCas'>rsAtomicCas</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Thread-safe compare and set
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_atomic.html#android_rs:rsAtomicDec'>rsAtomicDec</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Thread-safe decrement
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_atomic.html#android_rs:rsAtomicInc'>rsAtomicInc</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Thread-safe increment
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_atomic.html#android_rs:rsAtomicMax'>rsAtomicMax</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Thread-safe maximum
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_atomic.html#android_rs:rsAtomicMin'>rsAtomicMin</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Thread-safe minimum
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_atomic.html#android_rs:rsAtomicOr'>rsAtomicOr</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Thread-safe bitwise or
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_atomic.html#android_rs:rsAtomicSub'>rsAtomicSub</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Thread-safe subtraction
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_atomic.html#android_rs:rsAtomicXor'>rsAtomicXor</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Thread-safe bitwise exclusive or
+ </td>
+ </tr>
+</tbody></table>
+<h2>Time Functions and Types</h2>
+<p> The functions below can be used to tell the current clock time and the current
+system up time. It is not recommended to call these functions inside of a kernel.
+</p>
+<table class='jd-sumtable'><tbody>
+ <tr><th colspan='2'>Types</th></tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_time.html#android_rs:rs_time_t'>rs_time_t</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Seconds since January 1, 1970
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_time.html#android_rs:rs_tm'>rs_tm</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Date and time structure
+ </td>
+ </tr>
+</tbody></table>
+<table class='jd-sumtable'><tbody>
+ <tr><th colspan='2'>Functions</th></tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_time.html#android_rs:rsGetDt'>rsGetDt</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Elapsed time since last call
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_time.html#android_rs:rsLocaltime'>rsLocaltime</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Convert to local time
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_time.html#android_rs:rsTime'>rsTime</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Seconds since January 1, 1970
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_time.html#android_rs:rsUptimeMillis'>rsUptimeMillis</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ System uptime in milliseconds
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_time.html#android_rs:rsUptimeNanos'>rsUptimeNanos</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ System uptime in nanoseconds
+ </td>
+ </tr>
+</tbody></table>
+<h2>Allocation Data Access Functions</h2>
+<p> The functions below can be used to get and set the cells that comprise
+an allocation.
+<ul>
+<li>Individual cells are accessed using the rsGetElementAt* and
+ <a href='rs_allocation_data.html#android_rs:rsSetElementAt'>rsSetElementAt</a> functions.</li>
+<li>Multiple cells can be copied using the rsAllocationCopy* and
+ rsAllocationV* functions.</li>
+<li>For getting values through a sampler, use <a href='rs_allocation_data.html#android_rs:rsSample'>rsSample</a>.</li>
+</ul>
+The <a href='rs_allocation_data.html#android_rs:rsGetElementAt'>rsGetElementAt</a> and rsSetElement* functions are somewhat misnamed.
+They don't get or set elements, which are akin to data types; they get
+or set cells. Think of them as rsGetCellAt and and rsSetCellAt.
+</p>
+<table class='jd-sumtable'><tbody>
+ <tr><th colspan='2'>Functions</th></tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_allocation_data.html#android_rs:rsAllocationCopy1DRange'>rsAllocationCopy1DRange</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Copy consecutive cells between allocations
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_allocation_data.html#android_rs:rsAllocationCopy2DRange'>rsAllocationCopy2DRange</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Copy a rectangular region of cells between allocations
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_allocation_data.html#android_rs:rsAllocationVLoadX'>rsAllocationVLoadX</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Get a vector from an allocation of scalars
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_allocation_data.html#android_rs:rsAllocationVStoreX'>rsAllocationVStoreX</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Store a vector into an allocation of scalars
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_allocation_data.html#android_rs:rsGetElementAt'>rsGetElementAt</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Return a cell from an allocation
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_allocation_data.html#android_rs:rsGetElementAtYuv_uchar_U'>rsGetElementAtYuv_uchar_U</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Get the U component of an allocation of YUVs
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_allocation_data.html#android_rs:rsGetElementAtYuv_uchar_V'>rsGetElementAtYuv_uchar_V</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Get the V component of an allocation of YUVs
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_allocation_data.html#android_rs:rsGetElementAtYuv_uchar_Y'>rsGetElementAtYuv_uchar_Y</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Get the Y component of an allocation of YUVs
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_allocation_data.html#android_rs:rsSample'>rsSample</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Sample a value from a texture allocation
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_allocation_data.html#android_rs:rsSetElementAt'>rsSetElementAt</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Set a cell of an allocation
+ </td>
+ </tr>
+</tbody></table>
+<h2>Object Characteristics Functions</h2>
+<p> The functions below can be used to query the characteristics of an Allocation, Element,
+or Sampler object. These objects are created from Java. You can't create them from a
+script.
+</p>
+
+<p> <h5>Allocations:</h5>
+</p>
+
+<p> Allocations are the primary method used to pass data to and from RenderScript kernels.
+</p>
+
+<p> They are a structured collection of cells that can be used to store bitmaps, textures,
+arbitrary data points, etc.
+</p>
+
+<p> This collection of cells may have many dimensions (X, Y, Z, Array0, Array1, Array2, Array3),
+faces (for cubemaps), and level of details (for mipmapping).
+</p>
+
+<p> See the <a href='http://developer.android.com/reference/android/renderscript/Allocation.html'>android.renderscript.Allocation</a> for details on to create Allocations.
+</p>
+
+<p> <h5>Elements:</h5>
+</p>
+
+<p> The term "element" is used a bit ambiguously in RenderScript, as both type information
+for the cells of an Allocation and the instantiation of that type. For example:<ul>
+<li><a href='rs_object_types.html#android_rs:rs_element'>rs_element</a> is a handle to a type specification, and</li>
+<li>In functions like <a href='rs_allocation_data.html#android_rs:rsGetElementAt'>rsGetElementAt</a>(), "element" means the instantiation of the type,
+ i.e. a cell of an Allocation.</li></ul>
+</p>
+
+<p> The functions below let you query the characteristics of the type specificiation.
+</p>
+
+<p> An Element can specify a simple data types as found in C, e.g. an integer, float, or
+boolean. It can also specify a handle to a RenderScript object. See <a href='rs_object_types.html#android_rs:rs_data_type'>rs_data_type</a> for
+a list of basic types.
+</p>
+
+<p> Elements can specify fixed size vector (of size 2, 3, or 4) versions of the basic types.
+Elements can be grouped together into complex Elements, creating the equivalent of
+C structure definitions.
+</p>
+
+<p> Elements can also have a kind, which is semantic information used to interpret pixel
+data. See <a href='rs_object_types.html#android_rs:rs_data_kind'>rs_data_kind</a>.
+</p>
+
+<p> When creating Allocations of common elements, you can simply use one of the many predefined
+Elements like <a href='http://developer.android.com/reference/android/renderscript/Element.html#F32_2(android.renderscript.RenderScript)'>F32_2</a>.
+</p>
+
+<p> To create complex Elements, use the <a href='http://developer.android.com/reference/android/renderscript/Element.Builder.html'>Element.Builder</a> Java class.
+</p>
+
+<p> <h5>Samplers:</h5>
+</p>
+
+<p> Samplers objects define how Allocations can be read as structure within a kernel.
+See <a href='http://developer.android.com/reference/android/renderscript/Sampler.html'>android.renderscript.S</a>.
+</p>
+<table class='jd-sumtable'><tbody>
+ <tr><th colspan='2'>Functions</th></tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsAllocationGetDimFaces'>rsAllocationGetDimFaces</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Presence of more than one face
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsAllocationGetDimLOD'>rsAllocationGetDimLOD</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Presence of levels of detail
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsAllocationGetDimX'>rsAllocationGetDimX</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Size of the X dimension
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsAllocationGetDimY'>rsAllocationGetDimY</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Size of the Y dimension
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsAllocationGetDimZ'>rsAllocationGetDimZ</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Size of the Z dimension
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsAllocationGetElement'>rsAllocationGetElement</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Get the object that describes the cell of an Allocation
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsClearObject'>rsClearObject</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Release an object
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsElementGetBytesSize'>rsElementGetBytesSize</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Size of an Element
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsElementGetDataKind'>rsElementGetDataKind</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Kind of an Element
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsElementGetDataType'>rsElementGetDataType</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Data type of an Element
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsElementGetSubElement'>rsElementGetSubElement</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Sub-element of a complex Element
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsElementGetSubElementArraySize'>rsElementGetSubElementArraySize</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Array size of a sub-element of a complex Element
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsElementGetSubElementCount'>rsElementGetSubElementCount</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Number of sub-elements
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsElementGetSubElementName'>rsElementGetSubElementName</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Name of a sub-element
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsElementGetSubElementNameLength'>rsElementGetSubElementNameLength</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Length of the name of a sub-element
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsElementGetSubElementOffsetBytes'>rsElementGetSubElementOffsetBytes</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Offset of the instantiated sub-element
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsElementGetVectorSize'>rsElementGetVectorSize</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Vector size of the Element
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsIsObject'>rsIsObject</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Check for an empty handle
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsSamplerGetAnisotropy'>rsSamplerGetAnisotropy</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Anisotropy of the Sampler
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsSamplerGetMagnification'>rsSamplerGetMagnification</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Sampler magnification value
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsSamplerGetMinification'>rsSamplerGetMinification</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Sampler minification value
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsSamplerGetWrapS'>rsSamplerGetWrapS</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Sampler wrap S value
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsSamplerGetWrapT'>rsSamplerGetWrapT</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Sampler wrap T value
+ </td>
+ </tr>
+</tbody></table>
+<h2>Kernel Invocation Functions and Types</h2>
+<p> The <a href='rs_for_each.html#android_rs:rsForEach'>rsForEach</a>() function can be used to invoke the root kernel of a script.
+</p>
+<table class='jd-sumtable'><tbody>
+ <tr><th colspan='2'>Types</th></tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_for_each.html#android_rs:rs_for_each_strategy_t'>rs_for_each_strategy_t</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Suggested cell processing order
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_for_each.html#android_rs:rs_script_call_t'>rs_script_call_t</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Cell iteration information
+ </td>
+ </tr>
+</tbody></table>
+<table class='jd-sumtable'><tbody>
+ <tr><th colspan='2'>Functions</th></tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_for_each.html#android_rs:rsForEach'>rsForEach</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Invoke the root kernel of a script
+ </td>
+ </tr>
+</tbody></table>
+<h2>Input/Output Functions</h2>
+<p> These functions are used to:<ul>
+<li>Send information to the Java client, and</li>
+<li>Send the processed allocation or receive the next allocation to process.</li></ul>
+</p>
+<table class='jd-sumtable'><tbody>
+ <tr><th colspan='2'>Functions</th></tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_io.html#android_rs:rsAllocationIoReceive'>rsAllocationIoReceive</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Receive new content from the queue
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_io.html#android_rs:rsAllocationIoSend'>rsAllocationIoSend</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Send new content to the queue
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_io.html#android_rs:rsSendToClient'>rsSendToClient</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Send a message to the client, non-blocking
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_io.html#android_rs:rsSendToClientBlocking'>rsSendToClientBlocking</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Send a message to the client, blocking
+ </td>
+ </tr>
+</tbody></table>
+<h2>Debugging Functions</h2>
+<p> The functions below are intended to be used during application developement.
+They should not be used in shipping applications.
+</p>
+<table class='jd-sumtable'><tbody>
+ <tr><th colspan='2'>Functions</th></tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_debug.html#android_rs:rsDebug'>rsDebug</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Log a message and values
+ </td>
+ </tr>
+</tbody></table>
+<h2>Graphics Functions and Types</h2>
+<p> The graphics subsystem of RenderScript has been deprecated.
+</p>
+</div>
diff --git a/docs/html/guide/topics/renderscript/reference/rs_allocation_data.jd b/docs/html/guide/topics/renderscript/reference/rs_allocation_data.jd
new file mode 100644
index 0000000..3735cce
--- /dev/null
+++ b/docs/html/guide/topics/renderscript/reference/rs_allocation_data.jd
@@ -0,0 +1,2925 @@
+page.title=RenderScript Allocation Data Access Functions
+
+@jd:body
+
+<div class='renderscript'>
+<h2>Overview</h2>
+<p> The functions below can be used to get and set the cells that comprise
+an allocation.
+<ul>
+<li>Individual cells are accessed using the rsGetElementAt* and
+ <a href='rs_allocation_data.html#android_rs:rsSetElementAt'>rsSetElementAt</a> functions.</li>
+<li>Multiple cells can be copied using the rsAllocationCopy* and
+ rsAllocationV* functions.</li>
+<li>For getting values through a sampler, use <a href='rs_allocation_data.html#android_rs:rsSample'>rsSample</a>.</li>
+</ul>
+The <a href='rs_allocation_data.html#android_rs:rsGetElementAt'>rsGetElementAt</a> and rsSetElement* functions are somewhat misnamed.
+They don't get or set elements, which are akin to data types; they get
+or set cells. Think of them as rsGetCellAt and and rsSetCellAt.
+</p>
+<h2>Summary</h2>
+<table class='jd-sumtable'><tbody>
+ <tr><th colspan='2'>Functions</th></tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_allocation_data.html#android_rs:rsAllocationCopy1DRange'>rsAllocationCopy1DRange</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Copy consecutive cells between allocations
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_allocation_data.html#android_rs:rsAllocationCopy2DRange'>rsAllocationCopy2DRange</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Copy a rectangular region of cells between allocations
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_allocation_data.html#android_rs:rsAllocationVLoadX'>rsAllocationVLoadX</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Get a vector from an allocation of scalars
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_allocation_data.html#android_rs:rsAllocationVStoreX'>rsAllocationVStoreX</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Store a vector into an allocation of scalars
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_allocation_data.html#android_rs:rsGetElementAt'>rsGetElementAt</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Return a cell from an allocation
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_allocation_data.html#android_rs:rsGetElementAtYuv_uchar_U'>rsGetElementAtYuv_uchar_U</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Get the U component of an allocation of YUVs
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_allocation_data.html#android_rs:rsGetElementAtYuv_uchar_V'>rsGetElementAtYuv_uchar_V</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Get the V component of an allocation of YUVs
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_allocation_data.html#android_rs:rsGetElementAtYuv_uchar_Y'>rsGetElementAtYuv_uchar_Y</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Get the Y component of an allocation of YUVs
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_allocation_data.html#android_rs:rsSample'>rsSample</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Sample a value from a texture allocation
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_allocation_data.html#android_rs:rsSetElementAt'>rsSetElementAt</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Set a cell of an allocation
+ </td>
+ </tr>
+</tbody></table>
+<h2>Functions</h2>
+<a name='android_rs:rsAllocationCopy1DRange'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsAllocationCopy1DRange</span>
+ <span class='normal'>: Copy consecutive cells between allocations</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>void rsAllocationCopy1DRange(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> dstAlloc, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> dstOff, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> dstMip, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> count, <a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> srcAlloc, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> srcOff, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> srcMip);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>dstAlloc</th><td>Allocation to copy cells into.</td></tr>
+ <tr><th>dstOff</th><td>Offset in the destination of the first cell to be copied into.</td></tr>
+ <tr><th>dstMip</th><td>Mip level in the destination allocation. 0 if mip mapping is not used.</td></tr>
+ <tr><th>count</th><td>Number of cells to be copied.</td></tr>
+ <tr><th>srcAlloc</th><td>Source allocation.</td></tr>
+ <tr><th>srcOff</th><td>Offset in the source of the first cell to be copied.</td></tr>
+ <tr><th>srcMip</th><td>Mip level in the source allocation. 0 if mip mapping is not used.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Copies the specified number of cells from one allocation to another.
+</p>
+
+<p> The two allocations must be different. Using this function to copy whithin
+the same allocation yields undefined results.
+</p>
+
+<p> The function does not validate whether the offset plus count exceeds the size
+of either allocation. Be careful!
+</p>
+
+<p> This function should only be called between 1D allocations. Calling it
+on other allocations is undefined.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsAllocationCopy2DRange'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsAllocationCopy2DRange</span>
+ <span class='normal'>: Copy a rectangular region of cells between allocations</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>void rsAllocationCopy2DRange(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> dstAlloc, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> dstXoff, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> dstYoff, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> dstMip, <a href='rs_object_types.html#android_rs:rs_allocation_cubemap_face'>rs_allocation_cubemap_face</a> dstFace, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> width, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> height, <a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> srcAlloc, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> srcXoff, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> srcYoff, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> srcMip, <a href='rs_object_types.html#android_rs:rs_allocation_cubemap_face'>rs_allocation_cubemap_face</a> srcFace);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>dstAlloc</th><td>Allocation to copy cells into.</td></tr>
+ <tr><th>dstXoff</th><td>X offset in the destination of the region to be set.</td></tr>
+ <tr><th>dstYoff</th><td>Y offset in the destination of the region to be set.</td></tr>
+ <tr><th>dstMip</th><td>Mip level in the destination allocation. 0 if mip mapping is not used.</td></tr>
+ <tr><th>dstFace</th><td>Cubemap face of the destination allocation. Ignored for allocations that aren't cubemaps.</td></tr>
+ <tr><th>width</th><td>Width of the incoming region to update.</td></tr>
+ <tr><th>height</th><td>Height of the incoming region to update.</td></tr>
+ <tr><th>srcAlloc</th><td>Source allocation.</td></tr>
+ <tr><th>srcXoff</th><td>X offset in the source.</td></tr>
+ <tr><th>srcYoff</th><td>Y offset in the source.</td></tr>
+ <tr><th>srcMip</th><td>Mip level in the source allocation. 0 if mip mapping is not used.</td></tr>
+ <tr><th>srcFace</th><td>Cubemap face of the source allocation. Ignored for allocations that aren't cubemaps.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Copies a rectangular region of cells from one allocation to another.
+(width * heigth) cells are copied.
+</p>
+
+<p> The two allocations must be different. Using this function to copy whithin
+the same allocation yields undefined results.
+</p>
+
+<p> The function does not validate whether the the source or destination region
+exceeds the size of its respective allocation. Be careful!
+</p>
+
+<p> This function should only be called between 2D allocations. Calling it
+on other allocations is undefined.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsAllocationVLoadX'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsAllocationVLoadX</span>
+ <span class='normal'>: Get a vector from an allocation of scalars</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:char2'>char2</a> rsAllocationVLoadX_char2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:char2'>char2</a> rsAllocationVLoadX_char2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:char2'>char2</a> rsAllocationVLoadX_char2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:char3'>char3</a> rsAllocationVLoadX_char3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:char3'>char3</a> rsAllocationVLoadX_char3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:char3'>char3</a> rsAllocationVLoadX_char3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:char4'>char4</a> rsAllocationVLoadX_char4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:char4'>char4</a> rsAllocationVLoadX_char4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:char4'>char4</a> rsAllocationVLoadX_char4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:double2'>double2</a> rsAllocationVLoadX_double2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:double2'>double2</a> rsAllocationVLoadX_double2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:double2'>double2</a> rsAllocationVLoadX_double2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:double3'>double3</a> rsAllocationVLoadX_double3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:double3'>double3</a> rsAllocationVLoadX_double3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:double3'>double3</a> rsAllocationVLoadX_double3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:double4'>double4</a> rsAllocationVLoadX_double4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:double4'>double4</a> rsAllocationVLoadX_double4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:double4'>double4</a> rsAllocationVLoadX_double4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> rsAllocationVLoadX_float2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> rsAllocationVLoadX_float2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> rsAllocationVLoadX_float2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> rsAllocationVLoadX_float3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> rsAllocationVLoadX_float3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> rsAllocationVLoadX_float3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> rsAllocationVLoadX_float4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> rsAllocationVLoadX_float4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> rsAllocationVLoadX_float4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int2'>int2</a> rsAllocationVLoadX_int2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int2'>int2</a> rsAllocationVLoadX_int2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int2'>int2</a> rsAllocationVLoadX_int2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int3'>int3</a> rsAllocationVLoadX_int3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int3'>int3</a> rsAllocationVLoadX_int3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int3'>int3</a> rsAllocationVLoadX_int3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int4'>int4</a> rsAllocationVLoadX_int4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int4'>int4</a> rsAllocationVLoadX_int4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int4'>int4</a> rsAllocationVLoadX_int4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:long2'>long2</a> rsAllocationVLoadX_long2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:long2'>long2</a> rsAllocationVLoadX_long2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:long2'>long2</a> rsAllocationVLoadX_long2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:long3'>long3</a> rsAllocationVLoadX_long3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:long3'>long3</a> rsAllocationVLoadX_long3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:long3'>long3</a> rsAllocationVLoadX_long3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:long4'>long4</a> rsAllocationVLoadX_long4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:long4'>long4</a> rsAllocationVLoadX_long4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:long4'>long4</a> rsAllocationVLoadX_long4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:short2'>short2</a> rsAllocationVLoadX_short2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:short2'>short2</a> rsAllocationVLoadX_short2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:short2'>short2</a> rsAllocationVLoadX_short2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:short3'>short3</a> rsAllocationVLoadX_short3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:short3'>short3</a> rsAllocationVLoadX_short3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:short3'>short3</a> rsAllocationVLoadX_short3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:short4'>short4</a> rsAllocationVLoadX_short4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:short4'>short4</a> rsAllocationVLoadX_short4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:short4'>short4</a> rsAllocationVLoadX_short4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> rsAllocationVLoadX_uchar2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> rsAllocationVLoadX_uchar2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> rsAllocationVLoadX_uchar2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> rsAllocationVLoadX_uchar3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> rsAllocationVLoadX_uchar3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> rsAllocationVLoadX_uchar3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> rsAllocationVLoadX_uchar4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> rsAllocationVLoadX_uchar4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> rsAllocationVLoadX_uchar4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint2'>uint2</a> rsAllocationVLoadX_uint2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint2'>uint2</a> rsAllocationVLoadX_uint2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint2'>uint2</a> rsAllocationVLoadX_uint2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint3'>uint3</a> rsAllocationVLoadX_uint3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint3'>uint3</a> rsAllocationVLoadX_uint3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint3'>uint3</a> rsAllocationVLoadX_uint3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint4'>uint4</a> rsAllocationVLoadX_uint4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint4'>uint4</a> rsAllocationVLoadX_uint4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint4'>uint4</a> rsAllocationVLoadX_uint4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> rsAllocationVLoadX_ulong2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> rsAllocationVLoadX_ulong2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> rsAllocationVLoadX_ulong2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> rsAllocationVLoadX_ulong3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> rsAllocationVLoadX_ulong3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> rsAllocationVLoadX_ulong3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> rsAllocationVLoadX_ulong4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> rsAllocationVLoadX_ulong4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> rsAllocationVLoadX_ulong4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> rsAllocationVLoadX_ushort2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> rsAllocationVLoadX_ushort2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> rsAllocationVLoadX_ushort2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> rsAllocationVLoadX_ushort3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> rsAllocationVLoadX_ushort3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> rsAllocationVLoadX_ushort3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> rsAllocationVLoadX_ushort4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> rsAllocationVLoadX_ushort4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> rsAllocationVLoadX_ushort4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>a</th><td>Allocation to get the data from.</td></tr>
+ <tr><th>x</th><td>X offset in the allocation of the first cell to be copied from.</td></tr>
+ <tr><th>y</th><td>Y offset in the allocation of the first cell to be copied from.</td></tr>
+ <tr><th>z</th><td>Z offset in the allocation of the first cell to be copied from.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> This function returns a vector composed of successive cells of the allocation.
+It assumes that the allocation contains scalars.
+</p>
+
+<p> The "X" in the name indicates that successive values are extracted by
+increasing the X index. There are currently no functions to get successive
+values incrementing other dimensions. Use multiple calls to rsGetElementAt()
+instead.
+</p>
+
+<p> For example, when calling rsAllocationVLoadX_int4(a, 20, 30), an int4 composed
+of a[20, 30], a[21, 30], a[22, 30], and a[23, 30] is returned.
+</p>
+
+<p> When retrieving from a three dimensional allocations, use the x, y, z variant.
+Similarly, use the x, y variant for two dimensional allocations and x for the
+mono dimensional allocations.
+</p>
+
+<p> For efficiency, this function does not validate the inputs. Trying to wrap
+the X index, exceeding the size of the allocation, or using indices incompatible
+with the dimensionality of the allocation yields undefined results.
+</p>
+
+<p> See also <a href='rs_allocation_data.html#android_rs:rsAllocationVStoreX'>rsAllocationVStoreX</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsAllocationVStoreX'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsAllocationVStoreX</span>
+ <span class='normal'>: Store a vector into an allocation of scalars</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>void rsAllocationVStoreX_char2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:char2'>char2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_char2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:char2'>char2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_char2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:char2'>char2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_char3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:char3'>char3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_char3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:char3'>char3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_char3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:char3'>char3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_char4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:char4'>char4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_char4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:char4'>char4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_char4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:char4'>char4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_double2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:double2'>double2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_double2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:double2'>double2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_double2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:double2'>double2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_double3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:double3'>double3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_double3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:double3'>double3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_double3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:double3'>double3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_double4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:double4'>double4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_double4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:double4'>double4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_double4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:double4'>double4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_float2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:float2'>float2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_float2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:float2'>float2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_float2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:float2'>float2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_float3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:float3'>float3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_float3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:float3'>float3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_float3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:float3'>float3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_float4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:float4'>float4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_float4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:float4'>float4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_float4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:float4'>float4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_int2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:int2'>int2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_int2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:int2'>int2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_int2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:int2'>int2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_int3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:int3'>int3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_int3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:int3'>int3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_int3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:int3'>int3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_int4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:int4'>int4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_int4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:int4'>int4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_int4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:int4'>int4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_long2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:long2'>long2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_long2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:long2'>long2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_long2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:long2'>long2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_long3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:long3'>long3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_long3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:long3'>long3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_long3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:long3'>long3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_long4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:long4'>long4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_long4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:long4'>long4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_long4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:long4'>long4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_short2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:short2'>short2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_short2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:short2'>short2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_short2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:short2'>short2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_short3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:short3'>short3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_short3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:short3'>short3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_short3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:short3'>short3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_short4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:short4'>short4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_short4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:short4'>short4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_short4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:short4'>short4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_uchar2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_uchar2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_uchar2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_uchar3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_uchar3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_uchar3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_uchar4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_uchar4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_uchar4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_uint2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint2'>uint2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_uint2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint2'>uint2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_uint2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint2'>uint2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_uint3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint3'>uint3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_uint3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint3'>uint3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_uint3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint3'>uint3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_uint4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint4'>uint4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_uint4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint4'>uint4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_uint4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint4'>uint4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_ulong2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_ulong2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_ulong2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_ulong3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_ulong3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_ulong3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_ulong4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_ulong4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_ulong4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_ushort2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_ushort2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_ushort2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_ushort3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_ushort3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_ushort3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_ushort4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_ushort4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsAllocationVStoreX_ushort4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 22</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>a</th><td>Allocation to store the data into.</td></tr>
+ <tr><th>val</th><td>Value to be stored.</td></tr>
+ <tr><th>x</th><td>X offset in the allocation of the first cell to be copied into.</td></tr>
+ <tr><th>y</th><td>Y offset in the allocation of the first cell to be copied into.</td></tr>
+ <tr><th>z</th><td>Z offset in the allocation of the first cell to be copied into.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> This function stores the entries of a vector into successive cells of an allocation.
+It assumes that the allocation contains scalars.
+</p>
+
+<p> The "X" in the name indicates that successive values are stored by increasing
+the X index. There are currently no functions to store successive values
+incrementing other dimensions. Use multiple calls to rsSetElementAt() instead.
+</p>
+
+<p> For example, when calling rsAllocationVStoreX_int3(a, v, 20, 30), v.x is stored
+at a[20, 30], v.y at a[21, 30], and v.z at a[22, 30].
+</p>
+
+<p> When storing into a three dimensional allocations, use the x, y, z variant.
+Similarly, use the x, y variant for two dimensional allocations and x for the
+mono dimensional allocations.
+</p>
+
+<p> For efficiency, this function does not validate the inputs. Trying to wrap the
+X index, exceeding the size of the allocation, or using indexes incompatible
+with the dimensionality of the allocation yiels undefined results.
+</p>
+
+<p> See also <a href='rs_allocation_data.html#android_rs:rsAllocationVLoadX'>rsAllocationVLoadX</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsGetElementAt'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsGetElementAt</span>
+ <span class='normal'>: Return a cell from an allocation</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>char rsGetElementAt_char(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>char rsGetElementAt_char(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>char rsGetElementAt_char(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:char2'>char2</a> rsGetElementAt_char2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:char2'>char2</a> rsGetElementAt_char2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:char2'>char2</a> rsGetElementAt_char2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:char3'>char3</a> rsGetElementAt_char3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:char3'>char3</a> rsGetElementAt_char3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:char3'>char3</a> rsGetElementAt_char3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:char4'>char4</a> rsGetElementAt_char4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:char4'>char4</a> rsGetElementAt_char4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:char4'>char4</a> rsGetElementAt_char4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>const void* rsGetElementAt(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>const void* rsGetElementAt(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>const void* rsGetElementAt(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>double rsGetElementAt_double(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>double rsGetElementAt_double(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>double rsGetElementAt_double(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:double2'>double2</a> rsGetElementAt_double2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:double2'>double2</a> rsGetElementAt_double2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:double2'>double2</a> rsGetElementAt_double2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:double3'>double3</a> rsGetElementAt_double3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:double3'>double3</a> rsGetElementAt_double3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:double3'>double3</a> rsGetElementAt_double3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:double4'>double4</a> rsGetElementAt_double4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:double4'>double4</a> rsGetElementAt_double4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:double4'>double4</a> rsGetElementAt_double4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>float rsGetElementAt_float(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>float rsGetElementAt_float(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>float rsGetElementAt_float(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> rsGetElementAt_float2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> rsGetElementAt_float2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> rsGetElementAt_float2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> rsGetElementAt_float3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> rsGetElementAt_float3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> rsGetElementAt_float3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> rsGetElementAt_float4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> rsGetElementAt_float4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> rsGetElementAt_float4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>int rsGetElementAt_int(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>int rsGetElementAt_int(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>int rsGetElementAt_int(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int2'>int2</a> rsGetElementAt_int2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int2'>int2</a> rsGetElementAt_int2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int2'>int2</a> rsGetElementAt_int2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int3'>int3</a> rsGetElementAt_int3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int3'>int3</a> rsGetElementAt_int3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int3'>int3</a> rsGetElementAt_int3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int4'>int4</a> rsGetElementAt_int4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int4'>int4</a> rsGetElementAt_int4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int4'>int4</a> rsGetElementAt_int4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>long rsGetElementAt_long(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>long rsGetElementAt_long(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>long rsGetElementAt_long(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:long2'>long2</a> rsGetElementAt_long2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:long2'>long2</a> rsGetElementAt_long2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:long2'>long2</a> rsGetElementAt_long2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:long3'>long3</a> rsGetElementAt_long3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:long3'>long3</a> rsGetElementAt_long3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:long3'>long3</a> rsGetElementAt_long3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:long4'>long4</a> rsGetElementAt_long4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:long4'>long4</a> rsGetElementAt_long4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:long4'>long4</a> rsGetElementAt_long4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>short rsGetElementAt_short(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>short rsGetElementAt_short(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>short rsGetElementAt_short(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:short2'>short2</a> rsGetElementAt_short2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:short2'>short2</a> rsGetElementAt_short2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:short2'>short2</a> rsGetElementAt_short2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:short3'>short3</a> rsGetElementAt_short3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:short3'>short3</a> rsGetElementAt_short3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:short3'>short3</a> rsGetElementAt_short3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:short4'>short4</a> rsGetElementAt_short4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:short4'>short4</a> rsGetElementAt_short4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:short4'>short4</a> rsGetElementAt_short4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar'>uchar</a> rsGetElementAt_uchar(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar'>uchar</a> rsGetElementAt_uchar(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar'>uchar</a> rsGetElementAt_uchar(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> rsGetElementAt_uchar2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> rsGetElementAt_uchar2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> rsGetElementAt_uchar2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> rsGetElementAt_uchar3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> rsGetElementAt_uchar3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> rsGetElementAt_uchar3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> rsGetElementAt_uchar4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> rsGetElementAt_uchar4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> rsGetElementAt_uchar4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint'>uint</a> rsGetElementAt_uint(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint'>uint</a> rsGetElementAt_uint(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint'>uint</a> rsGetElementAt_uint(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint2'>uint2</a> rsGetElementAt_uint2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint2'>uint2</a> rsGetElementAt_uint2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint2'>uint2</a> rsGetElementAt_uint2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint3'>uint3</a> rsGetElementAt_uint3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint3'>uint3</a> rsGetElementAt_uint3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint3'>uint3</a> rsGetElementAt_uint3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint4'>uint4</a> rsGetElementAt_uint4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint4'>uint4</a> rsGetElementAt_uint4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint4'>uint4</a> rsGetElementAt_uint4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ulong'>ulong</a> rsGetElementAt_ulong(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ulong'>ulong</a> rsGetElementAt_ulong(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ulong'>ulong</a> rsGetElementAt_ulong(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> rsGetElementAt_ulong2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> rsGetElementAt_ulong2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> rsGetElementAt_ulong2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> rsGetElementAt_ulong3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> rsGetElementAt_ulong3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> rsGetElementAt_ulong3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> rsGetElementAt_ulong4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> rsGetElementAt_ulong4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> rsGetElementAt_ulong4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort'>ushort</a> rsGetElementAt_ushort(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort'>ushort</a> rsGetElementAt_ushort(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort'>ushort</a> rsGetElementAt_ushort(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> rsGetElementAt_ushort2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> rsGetElementAt_ushort2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> rsGetElementAt_ushort2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> rsGetElementAt_ushort3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> rsGetElementAt_ushort3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> rsGetElementAt_ushort3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> rsGetElementAt_ushort4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> rsGetElementAt_ushort4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> rsGetElementAt_ushort4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> This function extracts a single cell from an allocation.
+</p>
+
+<p> When retrieving from a three dimensional allocations, use the x, y, z variant.
+Similarly, use the x, y variant for two dimensional allocations and x for the
+mono dimensional allocations.
+</p>
+
+<p> This function has two styles. One returns the address of the value using a void*,
+the other returns the actual value, e.g. rsGetElementAt() vs. rsGetElementAt_int4().
+For primitive types, always use the latter as it is more efficient.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsGetElementAtYuv_uchar_U'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsGetElementAtYuv_uchar_U</span>
+ <span class='normal'>: Get the U component of an allocation of YUVs</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar'>uchar</a> rsGetElementAtYuv_uchar_U(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Extracts the U component of a single YUV value from a 2D allocation of YUVs.
+</p>
+
+<p> Inside an allocation, Y, U, and V components may be stored if different planes
+and at different resolutions. The x, y coordinates provided here are in the
+dimensions of the Y plane.
+</p>
+
+<p> See <a href='rs_allocation_data.html#android_rs:rsGetElementAtYuv_uchar_Y'>rsGetElementAtYuv_uchar_Y</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsGetElementAtYuv_uchar_V'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsGetElementAtYuv_uchar_V</span>
+ <span class='normal'>: Get the V component of an allocation of YUVs</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar'>uchar</a> rsGetElementAtYuv_uchar_V(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Extracts the V component of a single YUV value from a 2D allocation of YUVs.
+</p>
+
+<p> Inside an allocation, Y, U, and V components may be stored if different planes
+and at different resolutions. The x, y coordinates provided here are in the
+dimensions of the Y plane.
+</p>
+
+<p> See <a href='rs_allocation_data.html#android_rs:rsGetElementAtYuv_uchar_Y'>rsGetElementAtYuv_uchar_Y</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsGetElementAtYuv_uchar_Y'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsGetElementAtYuv_uchar_Y</span>
+ <span class='normal'>: Get the Y component of an allocation of YUVs</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar'>uchar</a> rsGetElementAtYuv_uchar_Y(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Extracts the Y component of a single YUV value from a 2D allocation of YUVs.
+</p>
+
+<p> Inside an allocation, Y, U, and V components may be stored if different planes
+and at different resolutions. The x, y coordinates provided here are in the
+dimensions of the Y plane.
+</p>
+
+<p> See <a href='rs_allocation_data.html#android_rs:rsGetElementAtYuv_uchar_U'>rsGetElementAtYuv_uchar_U</a>() and <a href='rs_allocation_data.html#android_rs:rsGetElementAtYuv_uchar_V'>rsGetElementAtYuv_uchar_V</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsSample'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsSample</span>
+ <span class='normal'>: Sample a value from a texture allocation</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> rsSample(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_object_types.html#android_rs:rs_sampler'>rs_sampler</a> s, float location);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> rsSample(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_object_types.html#android_rs:rs_sampler'>rs_sampler</a> s, float location, float lod);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> rsSample(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_object_types.html#android_rs:rs_sampler'>rs_sampler</a> s, <a href='rs_value_types.html#android_rs:float2'>float2</a> location);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> rsSample(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_object_types.html#android_rs:rs_sampler'>rs_sampler</a> s, <a href='rs_value_types.html#android_rs:float2'>float2</a> location, float lod);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>a</th><td>Allocation to sample from.</td></tr>
+ <tr><th>s</th><td>Sampler state.</td></tr>
+ <tr><th>location</th><td>Location to sample from.</td></tr>
+ <tr><th>lod</th><td>Mip level to sample from, for fractional values mip levels will be interpolated if RS_SAMPLER_LINEAR_MIP_LINEAR is used.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Fetches a value from a texture allocation in a way described by the sampler.
+</p>
+
+<p> If your allocation is 1D, use the variant with float for location. For 2D,
+use the float2 variant.
+</p>
+
+<p> See <a href='http://developer.android.com/reference/android/renderscript/Sampler.html'>android.renderscript.Sampler</a> for more details.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsSetElementAt'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsSetElementAt</span>
+ <span class='normal'>: Set a cell of an allocation</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>void rsSetElementAt(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, void* ptr, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, void* ptr, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_char(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, char val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_char(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, char val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_char(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, char val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_char2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:char2'>char2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_char2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:char2'>char2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_char2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:char2'>char2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_char3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:char3'>char3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_char3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:char3'>char3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_char3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:char3'>char3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_char4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:char4'>char4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_char4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:char4'>char4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_char4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:char4'>char4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_double(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, double val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_double(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, double val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_double(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, double val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_double2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:double2'>double2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_double2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:double2'>double2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_double2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:double2'>double2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_double3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:double3'>double3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_double3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:double3'>double3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_double3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:double3'>double3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_double4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:double4'>double4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_double4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:double4'>double4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_double4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:double4'>double4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_float(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, float val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_float(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, float val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_float(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, float val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_float2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:float2'>float2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_float2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:float2'>float2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_float2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:float2'>float2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_float3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:float3'>float3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_float3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:float3'>float3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_float3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:float3'>float3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_float4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:float4'>float4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_float4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:float4'>float4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_float4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:float4'>float4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_int(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, int val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_int(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, int val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_int(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, int val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_int2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:int2'>int2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_int2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:int2'>int2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_int2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:int2'>int2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_int3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:int3'>int3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_int3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:int3'>int3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_int3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:int3'>int3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_int4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:int4'>int4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_int4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:int4'>int4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_int4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:int4'>int4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_long(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, long val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_long(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, long val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_long(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, long val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_long2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:long2'>long2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_long2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:long2'>long2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_long2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:long2'>long2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_long3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:long3'>long3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_long3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:long3'>long3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_long3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:long3'>long3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_long4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:long4'>long4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_long4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:long4'>long4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_long4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:long4'>long4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_short(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, short val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_short(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, short val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_short(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, short val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_short2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:short2'>short2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_short2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:short2'>short2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_short2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:short2'>short2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_short3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:short3'>short3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_short3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:short3'>short3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_short3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:short3'>short3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_short4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:short4'>short4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_short4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:short4'>short4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_short4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:short4'>short4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_uchar(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uchar'>uchar</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_uchar(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uchar'>uchar</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_uchar(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uchar'>uchar</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_uchar2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_uchar2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_uchar2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_uchar3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_uchar3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_uchar3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_uchar4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_uchar4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_uchar4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_uint(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint'>uint</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_uint(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint'>uint</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_uint(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint'>uint</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_uint2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint2'>uint2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_uint2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint2'>uint2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_uint2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint2'>uint2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_uint3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint3'>uint3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_uint3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint3'>uint3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_uint3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint3'>uint3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_uint4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint4'>uint4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_uint4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint4'>uint4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_uint4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:uint4'>uint4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_ulong(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ulong'>ulong</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_ulong(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ulong'>ulong</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_ulong(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ulong'>ulong</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_ulong2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_ulong2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_ulong2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_ulong3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_ulong3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_ulong3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_ulong4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_ulong4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_ulong4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_ushort(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ushort'>ushort</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_ushort(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ushort'>ushort</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_ushort(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ushort'>ushort</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_ushort2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_ushort2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_ushort2(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_ushort3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_ushort3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_ushort3(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_ushort4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_ushort4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsSetElementAt_ushort4(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a, <a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> val, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> x, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> y, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> z);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> This function stores a value into a single cell of an allocation.
+</p>
+
+<p> When storing into a three dimensional allocations, use the x, y, z variant.
+Similarly, use the x, y variant for two dimensional allocations and x for
+the mono dimensional allocations.
+</p>
+
+<p> This function has two styles. One passes the value to be stored using a void*,
+the other has the actual value as an argument, e.g. rsSetElementAt() vs.
+rsSetElementAt_int4(). For primitive types, always use the latter as it is
+more efficient.
+</p>
+
+<p> See also <a href='rs_allocation_data.html#android_rs:rsGetElementAt'>rsGetElementAt</a>().
+</p>
+ </div>
+</div>
+
+</div>
diff --git a/docs/html/guide/topics/renderscript/reference/rs_atomic.jd b/docs/html/guide/topics/renderscript/reference/rs_atomic.jd
new file mode 100644
index 0000000..e7dde80
--- /dev/null
+++ b/docs/html/guide/topics/renderscript/reference/rs_atomic.jd
@@ -0,0 +1,506 @@
+page.title=RenderScript Atomic Update Functions
+
+@jd:body
+
+<div class='renderscript'>
+<h2>Overview</h2>
+<p> To update values shared between multiple threads, use the functions below.
+They ensure that the values are atomically updated, i.e. that the memory
+reads, the updates, and the memory writes are done in the right order.
+</p>
+
+<p> These functions are slower than their non-atomic equivalents, so use
+them only when synchronization is needed.
+</p>
+
+<p> Note that in RenderScript, your code is likely to be running in separate
+threads even though you did not explicitely create them. The RenderScript
+runtime will very often split the execution of one kernel across multiple
+threads. Updating globals should be done with atomic functions. If possible,
+modify your algorithm to avoid them altogether.
+</p>
+<h2>Summary</h2>
+<table class='jd-sumtable'><tbody>
+ <tr><th colspan='2'>Functions</th></tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_atomic.html#android_rs:rsAtomicAdd'>rsAtomicAdd</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Thread-safe addition
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_atomic.html#android_rs:rsAtomicAnd'>rsAtomicAnd</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Thread-safe bitwise and
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_atomic.html#android_rs:rsAtomicCas'>rsAtomicCas</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Thread-safe compare and set
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_atomic.html#android_rs:rsAtomicDec'>rsAtomicDec</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Thread-safe decrement
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_atomic.html#android_rs:rsAtomicInc'>rsAtomicInc</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Thread-safe increment
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_atomic.html#android_rs:rsAtomicMax'>rsAtomicMax</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Thread-safe maximum
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_atomic.html#android_rs:rsAtomicMin'>rsAtomicMin</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Thread-safe minimum
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_atomic.html#android_rs:rsAtomicOr'>rsAtomicOr</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Thread-safe bitwise or
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_atomic.html#android_rs:rsAtomicSub'>rsAtomicSub</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Thread-safe subtraction
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_atomic.html#android_rs:rsAtomicXor'>rsAtomicXor</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Thread-safe bitwise exclusive or
+ </td>
+ </tr>
+</tbody></table>
+<h2>Functions</h2>
+<a name='android_rs:rsAtomicAdd'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsAtomicAdd</span>
+ <span class='normal'>: Thread-safe addition</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int32_t'>int32_t</a> rsAtomicAdd(volatile <a href='rs_value_types.html#android_rs:int32_t'>int32_t</a>* addr, <a href='rs_value_types.html#android_rs:int32_t'>int32_t</a> value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int32_t'>int32_t</a> rsAtomicAdd(volatile <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a>* addr, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 20</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>addr</th><td>Address of the value to modify.</td></tr>
+ <tr><th>value</th><td>Amount to add.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Returns</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><td>Value of *addr prior to the operation.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Atomicly adds a value to the value at addr, i.e. <code>*addr += value</code>.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsAtomicAnd'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsAtomicAnd</span>
+ <span class='normal'>: Thread-safe bitwise and</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int32_t'>int32_t</a> rsAtomicAnd(volatile <a href='rs_value_types.html#android_rs:int32_t'>int32_t</a>* addr, <a href='rs_value_types.html#android_rs:int32_t'>int32_t</a> value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int32_t'>int32_t</a> rsAtomicAnd(volatile <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a>* addr, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 20</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>addr</th><td>Address of the value to modify.</td></tr>
+ <tr><th>value</th><td>Value to and with.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Returns</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><td>Value of *addr prior to the operation.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Atomicly performs a bitwise and of two values, storing the result back at addr,
+i.e. <code>*addr &= value</code>.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsAtomicCas'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsAtomicCas</span>
+ <span class='normal'>: Thread-safe compare and set</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int32_t'>int32_t</a> rsAtomicCas(volatile <a href='rs_value_types.html#android_rs:int32_t'>int32_t</a>* addr, <a href='rs_value_types.html#android_rs:int32_t'>int32_t</a> compareValue, <a href='rs_value_types.html#android_rs:int32_t'>int32_t</a> newValue);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> rsAtomicCas(volatile <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a>* addr, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> compareValue, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> newValue);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>addr</th><td>Address of the value to compare and replace if the test passes.</td></tr>
+ <tr><th>compareValue</th><td>Value to test *addr against.</td></tr>
+ <tr><th>newValue</th><td>Value to write if the test passes.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Returns</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><td>Value of *addr prior to the operation.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> If the value at addr matches compareValue then the newValue is written at addr,
+i.e. <code>if (*addr == compareValue) { *addr = newValue; }</code>.
+</p>
+
+<p> You can check that the value was written by checking that the value returned
+by rsAtomicCas() is compareValue.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsAtomicDec'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsAtomicDec</span>
+ <span class='normal'>: Thread-safe decrement</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int32_t'>int32_t</a> rsAtomicDec(volatile <a href='rs_value_types.html#android_rs:int32_t'>int32_t</a>* addr);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int32_t'>int32_t</a> rsAtomicDec(volatile <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a>* addr);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 20</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>addr</th><td>Address of the value to decrement.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Returns</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><td>Value of *addr prior to the operation.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Atomicly subtracts one from the value at addr. This is equivalent to <code><a href='rs_atomic.html#android_rs:rsAtomicSub'>rsAtomicSub</a>(addr, 1)</code>.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsAtomicInc'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsAtomicInc</span>
+ <span class='normal'>: Thread-safe increment</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int32_t'>int32_t</a> rsAtomicInc(volatile <a href='rs_value_types.html#android_rs:int32_t'>int32_t</a>* addr);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int32_t'>int32_t</a> rsAtomicInc(volatile <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a>* addr);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 20</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>addr</th><td>Address of the value to increment.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Returns</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><td>Value of *addr prior to the operation.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Atomicly adds one to the value at addr. This is equivalent to <code><a href='rs_atomic.html#android_rs:rsAtomicAdd'>rsAtomicAdd</a>(addr, 1)</code>.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsAtomicMax'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsAtomicMax</span>
+ <span class='normal'>: Thread-safe maximum</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int32_t'>int32_t</a> rsAtomicMax(volatile <a href='rs_value_types.html#android_rs:int32_t'>int32_t</a>* addr, <a href='rs_value_types.html#android_rs:int32_t'>int32_t</a> value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> rsAtomicMax(volatile <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a>* addr, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>addr</th><td>Address of the value to modify.</td></tr>
+ <tr><th>value</th><td>Comparison value.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Returns</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><td>Value of *addr prior to the operation.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Atomicly sets the value at addr to the maximum of *addr and value, i.e.
+<code>*addr = max(*addr, value)</code>.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsAtomicMin'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsAtomicMin</span>
+ <span class='normal'>: Thread-safe minimum</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int32_t'>int32_t</a> rsAtomicMin(volatile <a href='rs_value_types.html#android_rs:int32_t'>int32_t</a>* addr, <a href='rs_value_types.html#android_rs:int32_t'>int32_t</a> value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> rsAtomicMin(volatile <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a>* addr, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>addr</th><td>Address of the value to modify.</td></tr>
+ <tr><th>value</th><td>Comparison value.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Returns</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><td>Value of *addr prior to the operation.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Atomicly sets the value at addr to the minimum of *addr and value, i.e.
+<code>*addr = min(*addr, value)</code>.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsAtomicOr'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsAtomicOr</span>
+ <span class='normal'>: Thread-safe bitwise or</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int32_t'>int32_t</a> rsAtomicOr(volatile <a href='rs_value_types.html#android_rs:int32_t'>int32_t</a>* addr, <a href='rs_value_types.html#android_rs:int32_t'>int32_t</a> value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int32_t'>int32_t</a> rsAtomicOr(volatile <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a>* addr, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 20</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>addr</th><td>Address of the value to modify.</td></tr>
+ <tr><th>value</th><td>Value to or with.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Returns</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><td>Value of *addr prior to the operation.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Atomicly perform a bitwise or two values, storing the result at addr,
+i.e. <code>*addr |= value</code>.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsAtomicSub'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsAtomicSub</span>
+ <span class='normal'>: Thread-safe subtraction</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int32_t'>int32_t</a> rsAtomicSub(volatile <a href='rs_value_types.html#android_rs:int32_t'>int32_t</a>* addr, <a href='rs_value_types.html#android_rs:int32_t'>int32_t</a> value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int32_t'>int32_t</a> rsAtomicSub(volatile <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a>* addr, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 20</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>addr</th><td>Address of the value to modify.</td></tr>
+ <tr><th>value</th><td>Amount to subtract.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Returns</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><td>Value of *addr prior to the operation.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Atomicly subtracts a value from the value at addr, i.e. <code>*addr -= value</code>.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsAtomicXor'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsAtomicXor</span>
+ <span class='normal'>: Thread-safe bitwise exclusive or</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int32_t'>int32_t</a> rsAtomicXor(volatile <a href='rs_value_types.html#android_rs:int32_t'>int32_t</a>* addr, <a href='rs_value_types.html#android_rs:int32_t'>int32_t</a> value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int32_t'>int32_t</a> rsAtomicXor(volatile <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a>* addr, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 20</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>addr</th><td>Address of the value to modify.</td></tr>
+ <tr><th>value</th><td>Value to xor with.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Returns</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><td>Value of *addr prior to the operation.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Atomicly performs a bitwise xor of two values, storing the result at addr,
+i.e. <code>*addr ^= value</code>.
+</p>
+ </div>
+</div>
+
+</div>
diff --git a/docs/html/guide/topics/renderscript/reference/rs_convert.jd b/docs/html/guide/topics/renderscript/reference/rs_convert.jd
new file mode 100644
index 0000000..bf1f611
--- /dev/null
+++ b/docs/html/guide/topics/renderscript/reference/rs_convert.jd
@@ -0,0 +1,1836 @@
+page.title=RenderScript Conversion Functions
+
+@jd:body
+
+<div class='renderscript'>
+<h2>Overview</h2>
+<p> The functions below convert from a numerical vector type to another, of from one color
+representation to another.
+</p>
+<h2>Summary</h2>
+<table class='jd-sumtable'><tbody>
+ <tr><th colspan='2'>Functions</th></tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_convert.html#android_rs:convert'>convert</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Convert numerical vectors
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_convert.html#android_rs:rsPackColorTo8888'>rsPackColorTo8888</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Create a uchar4 RGBA from floats
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_convert.html#android_rs:rsUnpackColor8888'>rsUnpackColor8888</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Create a float4 RGBA from uchar4
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_convert.html#android_rs:rsYuvToRGBA'>rsYuvToRGBA</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Convert a YUV value to RGBA
+ </td>
+ </tr>
+</tbody></table>
+<h2>Functions</h2>
+<a name='android_rs:convert'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>convert</span>
+ <span class='normal'>: Convert numerical vectors</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:char2'>char2</a> convert_char2(<a href='rs_value_types.html#android_rs:char2'>char2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:char2'>char2</a> convert_char2(<a href='rs_value_types.html#android_rs:double2'>double2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:char2'>char2</a> convert_char2(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:char2'>char2</a> convert_char2(<a href='rs_value_types.html#android_rs:int2'>int2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:char2'>char2</a> convert_char2(<a href='rs_value_types.html#android_rs:long2'>long2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:char2'>char2</a> convert_char2(<a href='rs_value_types.html#android_rs:short2'>short2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:char2'>char2</a> convert_char2(<a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:char2'>char2</a> convert_char2(<a href='rs_value_types.html#android_rs:uint2'>uint2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:char2'>char2</a> convert_char2(<a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:char2'>char2</a> convert_char2(<a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:char3'>char3</a> convert_char3(<a href='rs_value_types.html#android_rs:char3'>char3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:char3'>char3</a> convert_char3(<a href='rs_value_types.html#android_rs:double3'>double3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:char3'>char3</a> convert_char3(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:char3'>char3</a> convert_char3(<a href='rs_value_types.html#android_rs:int3'>int3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:char3'>char3</a> convert_char3(<a href='rs_value_types.html#android_rs:long3'>long3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:char3'>char3</a> convert_char3(<a href='rs_value_types.html#android_rs:short3'>short3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:char3'>char3</a> convert_char3(<a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:char3'>char3</a> convert_char3(<a href='rs_value_types.html#android_rs:uint3'>uint3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:char3'>char3</a> convert_char3(<a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:char3'>char3</a> convert_char3(<a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:char4'>char4</a> convert_char4(<a href='rs_value_types.html#android_rs:char4'>char4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:char4'>char4</a> convert_char4(<a href='rs_value_types.html#android_rs:double4'>double4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:char4'>char4</a> convert_char4(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:char4'>char4</a> convert_char4(<a href='rs_value_types.html#android_rs:int4'>int4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:char4'>char4</a> convert_char4(<a href='rs_value_types.html#android_rs:long4'>long4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:char4'>char4</a> convert_char4(<a href='rs_value_types.html#android_rs:short4'>short4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:char4'>char4</a> convert_char4(<a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:char4'>char4</a> convert_char4(<a href='rs_value_types.html#android_rs:uint4'>uint4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:char4'>char4</a> convert_char4(<a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:char4'>char4</a> convert_char4(<a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:double2'>double2</a> convert_double2(<a href='rs_value_types.html#android_rs:char2'>char2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:double2'>double2</a> convert_double2(<a href='rs_value_types.html#android_rs:double2'>double2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:double2'>double2</a> convert_double2(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:double2'>double2</a> convert_double2(<a href='rs_value_types.html#android_rs:int2'>int2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:double2'>double2</a> convert_double2(<a href='rs_value_types.html#android_rs:long2'>long2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:double2'>double2</a> convert_double2(<a href='rs_value_types.html#android_rs:short2'>short2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:double2'>double2</a> convert_double2(<a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:double2'>double2</a> convert_double2(<a href='rs_value_types.html#android_rs:uint2'>uint2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:double2'>double2</a> convert_double2(<a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:double2'>double2</a> convert_double2(<a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:double3'>double3</a> convert_double3(<a href='rs_value_types.html#android_rs:char3'>char3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:double3'>double3</a> convert_double3(<a href='rs_value_types.html#android_rs:double3'>double3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:double3'>double3</a> convert_double3(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:double3'>double3</a> convert_double3(<a href='rs_value_types.html#android_rs:int3'>int3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:double3'>double3</a> convert_double3(<a href='rs_value_types.html#android_rs:long3'>long3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:double3'>double3</a> convert_double3(<a href='rs_value_types.html#android_rs:short3'>short3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:double3'>double3</a> convert_double3(<a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:double3'>double3</a> convert_double3(<a href='rs_value_types.html#android_rs:uint3'>uint3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:double3'>double3</a> convert_double3(<a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:double3'>double3</a> convert_double3(<a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:double4'>double4</a> convert_double4(<a href='rs_value_types.html#android_rs:char4'>char4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:double4'>double4</a> convert_double4(<a href='rs_value_types.html#android_rs:double4'>double4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:double4'>double4</a> convert_double4(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:double4'>double4</a> convert_double4(<a href='rs_value_types.html#android_rs:int4'>int4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:double4'>double4</a> convert_double4(<a href='rs_value_types.html#android_rs:long4'>long4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:double4'>double4</a> convert_double4(<a href='rs_value_types.html#android_rs:short4'>short4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:double4'>double4</a> convert_double4(<a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:double4'>double4</a> convert_double4(<a href='rs_value_types.html#android_rs:uint4'>uint4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:double4'>double4</a> convert_double4(<a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:double4'>double4</a> convert_double4(<a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> convert_float2(<a href='rs_value_types.html#android_rs:char2'>char2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> convert_float2(<a href='rs_value_types.html#android_rs:double2'>double2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> convert_float2(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> convert_float2(<a href='rs_value_types.html#android_rs:int2'>int2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> convert_float2(<a href='rs_value_types.html#android_rs:long2'>long2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> convert_float2(<a href='rs_value_types.html#android_rs:short2'>short2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> convert_float2(<a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> convert_float2(<a href='rs_value_types.html#android_rs:uint2'>uint2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> convert_float2(<a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> convert_float2(<a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> convert_float3(<a href='rs_value_types.html#android_rs:char3'>char3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> convert_float3(<a href='rs_value_types.html#android_rs:double3'>double3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> convert_float3(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> convert_float3(<a href='rs_value_types.html#android_rs:int3'>int3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> convert_float3(<a href='rs_value_types.html#android_rs:long3'>long3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> convert_float3(<a href='rs_value_types.html#android_rs:short3'>short3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> convert_float3(<a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> convert_float3(<a href='rs_value_types.html#android_rs:uint3'>uint3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> convert_float3(<a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> convert_float3(<a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> convert_float4(<a href='rs_value_types.html#android_rs:char4'>char4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> convert_float4(<a href='rs_value_types.html#android_rs:double4'>double4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> convert_float4(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> convert_float4(<a href='rs_value_types.html#android_rs:int4'>int4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> convert_float4(<a href='rs_value_types.html#android_rs:long4'>long4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> convert_float4(<a href='rs_value_types.html#android_rs:short4'>short4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> convert_float4(<a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> convert_float4(<a href='rs_value_types.html#android_rs:uint4'>uint4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> convert_float4(<a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> convert_float4(<a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int2'>int2</a> convert_int2(<a href='rs_value_types.html#android_rs:char2'>char2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int2'>int2</a> convert_int2(<a href='rs_value_types.html#android_rs:double2'>double2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int2'>int2</a> convert_int2(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int2'>int2</a> convert_int2(<a href='rs_value_types.html#android_rs:int2'>int2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int2'>int2</a> convert_int2(<a href='rs_value_types.html#android_rs:long2'>long2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int2'>int2</a> convert_int2(<a href='rs_value_types.html#android_rs:short2'>short2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int2'>int2</a> convert_int2(<a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int2'>int2</a> convert_int2(<a href='rs_value_types.html#android_rs:uint2'>uint2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int2'>int2</a> convert_int2(<a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int2'>int2</a> convert_int2(<a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int3'>int3</a> convert_int3(<a href='rs_value_types.html#android_rs:char3'>char3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int3'>int3</a> convert_int3(<a href='rs_value_types.html#android_rs:double3'>double3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int3'>int3</a> convert_int3(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int3'>int3</a> convert_int3(<a href='rs_value_types.html#android_rs:int3'>int3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int3'>int3</a> convert_int3(<a href='rs_value_types.html#android_rs:long3'>long3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int3'>int3</a> convert_int3(<a href='rs_value_types.html#android_rs:short3'>short3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int3'>int3</a> convert_int3(<a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int3'>int3</a> convert_int3(<a href='rs_value_types.html#android_rs:uint3'>uint3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int3'>int3</a> convert_int3(<a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int3'>int3</a> convert_int3(<a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int4'>int4</a> convert_int4(<a href='rs_value_types.html#android_rs:char4'>char4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int4'>int4</a> convert_int4(<a href='rs_value_types.html#android_rs:double4'>double4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int4'>int4</a> convert_int4(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int4'>int4</a> convert_int4(<a href='rs_value_types.html#android_rs:int4'>int4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int4'>int4</a> convert_int4(<a href='rs_value_types.html#android_rs:long4'>long4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int4'>int4</a> convert_int4(<a href='rs_value_types.html#android_rs:short4'>short4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int4'>int4</a> convert_int4(<a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int4'>int4</a> convert_int4(<a href='rs_value_types.html#android_rs:uint4'>uint4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int4'>int4</a> convert_int4(<a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int4'>int4</a> convert_int4(<a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:long2'>long2</a> convert_long2(<a href='rs_value_types.html#android_rs:char2'>char2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:long2'>long2</a> convert_long2(<a href='rs_value_types.html#android_rs:double2'>double2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:long2'>long2</a> convert_long2(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:long2'>long2</a> convert_long2(<a href='rs_value_types.html#android_rs:int2'>int2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:long2'>long2</a> convert_long2(<a href='rs_value_types.html#android_rs:long2'>long2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:long2'>long2</a> convert_long2(<a href='rs_value_types.html#android_rs:short2'>short2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:long2'>long2</a> convert_long2(<a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:long2'>long2</a> convert_long2(<a href='rs_value_types.html#android_rs:uint2'>uint2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:long2'>long2</a> convert_long2(<a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:long2'>long2</a> convert_long2(<a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:long3'>long3</a> convert_long3(<a href='rs_value_types.html#android_rs:char3'>char3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:long3'>long3</a> convert_long3(<a href='rs_value_types.html#android_rs:double3'>double3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:long3'>long3</a> convert_long3(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:long3'>long3</a> convert_long3(<a href='rs_value_types.html#android_rs:int3'>int3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:long3'>long3</a> convert_long3(<a href='rs_value_types.html#android_rs:long3'>long3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:long3'>long3</a> convert_long3(<a href='rs_value_types.html#android_rs:short3'>short3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:long3'>long3</a> convert_long3(<a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:long3'>long3</a> convert_long3(<a href='rs_value_types.html#android_rs:uint3'>uint3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:long3'>long3</a> convert_long3(<a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:long3'>long3</a> convert_long3(<a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:long4'>long4</a> convert_long4(<a href='rs_value_types.html#android_rs:char4'>char4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:long4'>long4</a> convert_long4(<a href='rs_value_types.html#android_rs:double4'>double4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:long4'>long4</a> convert_long4(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:long4'>long4</a> convert_long4(<a href='rs_value_types.html#android_rs:int4'>int4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:long4'>long4</a> convert_long4(<a href='rs_value_types.html#android_rs:long4'>long4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:long4'>long4</a> convert_long4(<a href='rs_value_types.html#android_rs:short4'>short4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:long4'>long4</a> convert_long4(<a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:long4'>long4</a> convert_long4(<a href='rs_value_types.html#android_rs:uint4'>uint4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:long4'>long4</a> convert_long4(<a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:long4'>long4</a> convert_long4(<a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:short2'>short2</a> convert_short2(<a href='rs_value_types.html#android_rs:char2'>char2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:short2'>short2</a> convert_short2(<a href='rs_value_types.html#android_rs:double2'>double2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:short2'>short2</a> convert_short2(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:short2'>short2</a> convert_short2(<a href='rs_value_types.html#android_rs:int2'>int2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:short2'>short2</a> convert_short2(<a href='rs_value_types.html#android_rs:long2'>long2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:short2'>short2</a> convert_short2(<a href='rs_value_types.html#android_rs:short2'>short2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:short2'>short2</a> convert_short2(<a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:short2'>short2</a> convert_short2(<a href='rs_value_types.html#android_rs:uint2'>uint2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:short2'>short2</a> convert_short2(<a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:short2'>short2</a> convert_short2(<a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:short3'>short3</a> convert_short3(<a href='rs_value_types.html#android_rs:char3'>char3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:short3'>short3</a> convert_short3(<a href='rs_value_types.html#android_rs:double3'>double3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:short3'>short3</a> convert_short3(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:short3'>short3</a> convert_short3(<a href='rs_value_types.html#android_rs:int3'>int3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:short3'>short3</a> convert_short3(<a href='rs_value_types.html#android_rs:long3'>long3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:short3'>short3</a> convert_short3(<a href='rs_value_types.html#android_rs:short3'>short3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:short3'>short3</a> convert_short3(<a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:short3'>short3</a> convert_short3(<a href='rs_value_types.html#android_rs:uint3'>uint3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:short3'>short3</a> convert_short3(<a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:short3'>short3</a> convert_short3(<a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:short4'>short4</a> convert_short4(<a href='rs_value_types.html#android_rs:char4'>char4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:short4'>short4</a> convert_short4(<a href='rs_value_types.html#android_rs:double4'>double4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:short4'>short4</a> convert_short4(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:short4'>short4</a> convert_short4(<a href='rs_value_types.html#android_rs:int4'>int4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:short4'>short4</a> convert_short4(<a href='rs_value_types.html#android_rs:long4'>long4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:short4'>short4</a> convert_short4(<a href='rs_value_types.html#android_rs:short4'>short4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:short4'>short4</a> convert_short4(<a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:short4'>short4</a> convert_short4(<a href='rs_value_types.html#android_rs:uint4'>uint4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:short4'>short4</a> convert_short4(<a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:short4'>short4</a> convert_short4(<a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> convert_uchar2(<a href='rs_value_types.html#android_rs:char2'>char2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> convert_uchar2(<a href='rs_value_types.html#android_rs:double2'>double2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> convert_uchar2(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> convert_uchar2(<a href='rs_value_types.html#android_rs:int2'>int2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> convert_uchar2(<a href='rs_value_types.html#android_rs:long2'>long2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> convert_uchar2(<a href='rs_value_types.html#android_rs:short2'>short2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> convert_uchar2(<a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> convert_uchar2(<a href='rs_value_types.html#android_rs:uint2'>uint2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> convert_uchar2(<a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> convert_uchar2(<a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> convert_uchar3(<a href='rs_value_types.html#android_rs:char3'>char3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> convert_uchar3(<a href='rs_value_types.html#android_rs:double3'>double3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> convert_uchar3(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> convert_uchar3(<a href='rs_value_types.html#android_rs:int3'>int3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> convert_uchar3(<a href='rs_value_types.html#android_rs:long3'>long3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> convert_uchar3(<a href='rs_value_types.html#android_rs:short3'>short3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> convert_uchar3(<a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> convert_uchar3(<a href='rs_value_types.html#android_rs:uint3'>uint3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> convert_uchar3(<a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> convert_uchar3(<a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> convert_uchar4(<a href='rs_value_types.html#android_rs:char4'>char4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> convert_uchar4(<a href='rs_value_types.html#android_rs:double4'>double4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> convert_uchar4(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> convert_uchar4(<a href='rs_value_types.html#android_rs:int4'>int4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> convert_uchar4(<a href='rs_value_types.html#android_rs:long4'>long4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> convert_uchar4(<a href='rs_value_types.html#android_rs:short4'>short4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> convert_uchar4(<a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> convert_uchar4(<a href='rs_value_types.html#android_rs:uint4'>uint4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> convert_uchar4(<a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> convert_uchar4(<a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint2'>uint2</a> convert_uint2(<a href='rs_value_types.html#android_rs:char2'>char2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint2'>uint2</a> convert_uint2(<a href='rs_value_types.html#android_rs:double2'>double2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint2'>uint2</a> convert_uint2(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint2'>uint2</a> convert_uint2(<a href='rs_value_types.html#android_rs:int2'>int2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint2'>uint2</a> convert_uint2(<a href='rs_value_types.html#android_rs:long2'>long2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint2'>uint2</a> convert_uint2(<a href='rs_value_types.html#android_rs:short2'>short2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint2'>uint2</a> convert_uint2(<a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint2'>uint2</a> convert_uint2(<a href='rs_value_types.html#android_rs:uint2'>uint2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint2'>uint2</a> convert_uint2(<a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint2'>uint2</a> convert_uint2(<a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint3'>uint3</a> convert_uint3(<a href='rs_value_types.html#android_rs:char3'>char3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint3'>uint3</a> convert_uint3(<a href='rs_value_types.html#android_rs:double3'>double3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint3'>uint3</a> convert_uint3(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint3'>uint3</a> convert_uint3(<a href='rs_value_types.html#android_rs:int3'>int3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint3'>uint3</a> convert_uint3(<a href='rs_value_types.html#android_rs:long3'>long3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint3'>uint3</a> convert_uint3(<a href='rs_value_types.html#android_rs:short3'>short3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint3'>uint3</a> convert_uint3(<a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint3'>uint3</a> convert_uint3(<a href='rs_value_types.html#android_rs:uint3'>uint3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint3'>uint3</a> convert_uint3(<a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint3'>uint3</a> convert_uint3(<a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint4'>uint4</a> convert_uint4(<a href='rs_value_types.html#android_rs:char4'>char4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint4'>uint4</a> convert_uint4(<a href='rs_value_types.html#android_rs:double4'>double4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint4'>uint4</a> convert_uint4(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint4'>uint4</a> convert_uint4(<a href='rs_value_types.html#android_rs:int4'>int4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint4'>uint4</a> convert_uint4(<a href='rs_value_types.html#android_rs:long4'>long4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint4'>uint4</a> convert_uint4(<a href='rs_value_types.html#android_rs:short4'>short4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint4'>uint4</a> convert_uint4(<a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint4'>uint4</a> convert_uint4(<a href='rs_value_types.html#android_rs:uint4'>uint4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint4'>uint4</a> convert_uint4(<a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint4'>uint4</a> convert_uint4(<a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> convert_ulong2(<a href='rs_value_types.html#android_rs:char2'>char2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> convert_ulong2(<a href='rs_value_types.html#android_rs:double2'>double2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> convert_ulong2(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> convert_ulong2(<a href='rs_value_types.html#android_rs:int2'>int2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> convert_ulong2(<a href='rs_value_types.html#android_rs:long2'>long2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> convert_ulong2(<a href='rs_value_types.html#android_rs:short2'>short2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> convert_ulong2(<a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> convert_ulong2(<a href='rs_value_types.html#android_rs:uint2'>uint2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> convert_ulong2(<a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> convert_ulong2(<a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> convert_ulong3(<a href='rs_value_types.html#android_rs:char3'>char3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> convert_ulong3(<a href='rs_value_types.html#android_rs:double3'>double3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> convert_ulong3(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> convert_ulong3(<a href='rs_value_types.html#android_rs:int3'>int3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> convert_ulong3(<a href='rs_value_types.html#android_rs:long3'>long3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> convert_ulong3(<a href='rs_value_types.html#android_rs:short3'>short3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> convert_ulong3(<a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> convert_ulong3(<a href='rs_value_types.html#android_rs:uint3'>uint3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> convert_ulong3(<a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> convert_ulong3(<a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> convert_ulong4(<a href='rs_value_types.html#android_rs:char4'>char4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> convert_ulong4(<a href='rs_value_types.html#android_rs:double4'>double4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> convert_ulong4(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> convert_ulong4(<a href='rs_value_types.html#android_rs:int4'>int4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> convert_ulong4(<a href='rs_value_types.html#android_rs:long4'>long4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> convert_ulong4(<a href='rs_value_types.html#android_rs:short4'>short4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> convert_ulong4(<a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> convert_ulong4(<a href='rs_value_types.html#android_rs:uint4'>uint4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> convert_ulong4(<a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> convert_ulong4(<a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> convert_ushort2(<a href='rs_value_types.html#android_rs:char2'>char2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> convert_ushort2(<a href='rs_value_types.html#android_rs:double2'>double2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> convert_ushort2(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> convert_ushort2(<a href='rs_value_types.html#android_rs:int2'>int2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> convert_ushort2(<a href='rs_value_types.html#android_rs:long2'>long2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> convert_ushort2(<a href='rs_value_types.html#android_rs:short2'>short2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> convert_ushort2(<a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> convert_ushort2(<a href='rs_value_types.html#android_rs:uint2'>uint2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> convert_ushort2(<a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> convert_ushort2(<a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> convert_ushort3(<a href='rs_value_types.html#android_rs:char3'>char3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> convert_ushort3(<a href='rs_value_types.html#android_rs:double3'>double3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> convert_ushort3(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> convert_ushort3(<a href='rs_value_types.html#android_rs:int3'>int3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> convert_ushort3(<a href='rs_value_types.html#android_rs:long3'>long3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> convert_ushort3(<a href='rs_value_types.html#android_rs:short3'>short3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> convert_ushort3(<a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> convert_ushort3(<a href='rs_value_types.html#android_rs:uint3'>uint3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> convert_ushort3(<a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> convert_ushort3(<a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> convert_ushort4(<a href='rs_value_types.html#android_rs:char4'>char4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> convert_ushort4(<a href='rs_value_types.html#android_rs:double4'>double4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> convert_ushort4(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> convert_ushort4(<a href='rs_value_types.html#android_rs:int4'>int4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> convert_ushort4(<a href='rs_value_types.html#android_rs:long4'>long4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> convert_ushort4(<a href='rs_value_types.html#android_rs:short4'>short4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> convert_ushort4(<a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> convert_ushort4(<a href='rs_value_types.html#android_rs:uint4'>uint4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> convert_ushort4(<a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> convert_ushort4(<a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Converts a vector from one numerical type to another. The conversion are done entry per entry.
+</p>
+
+<p> E.g calling <code>a = convert_short3(b);</code> is equivalent to doing
+<code>a.x = (short)b.x; a.y = (short)b.y; a.z = (short)b.z;</code>.
+</p>
+
+<p> Converting floating point values to integer types truncates.
+</p>
+
+<p> Converting numbers too large to fit the destination type yields undefined results.
+For example, converting a float that contains 1.0e18 to a short is undefined.
+Use <a href='rs_math.html#android_rs:clamp'>clamp</a>() to avoid this.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsPackColorTo8888'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsPackColorTo8888</span>
+ <span class='normal'>: Create a uchar4 RGBA from floats</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> rsPackColorTo8888(float r, float g, float b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> rsPackColorTo8888(float r, float g, float b, float a);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> rsPackColorTo8888(<a href='rs_value_types.html#android_rs:float3'>float3</a> color);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> rsPackColorTo8888(<a href='rs_value_types.html#android_rs:float4'>float4</a> color);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>r</th><td>Red component.</td></tr>
+ <tr><th>g</th><td>Green component.</td></tr>
+ <tr><th>b</th><td>Blue component.</td></tr>
+ <tr><th>a</th><td>Alpha component.</td></tr>
+ <tr><th>color</th><td>Vector of 3 or 4 floats containing the R, G, B, and A values.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Packs three or four floating point RGBA values into a uchar4. The RGBA values should be
+between 0.0 and 1.0 inclusive. Values outside of this range are clamped to this range.
+However numbers greater than INT_MAX or less than INT_MIN can result in undefined behavior.
+</p>
+
+<p> If the alpha component is not specified, it is assumed to be 1.0, i.e. the result will
+have an alpha set to 255.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsUnpackColor8888'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsUnpackColor8888</span>
+ <span class='normal'>: Create a float4 RGBA from uchar4</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> rsUnpackColor8888(<a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> c);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Unpacks a uchar4 color to float4. The resulting floats will be between 0.0 and 1.0 inclusive.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsYuvToRGBA'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsYuvToRGBA</span>
+ <span class='normal'>: Convert a YUV value to RGBA</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> rsYuvToRGBA_float4(<a href='rs_value_types.html#android_rs:uchar'>uchar</a> y, <a href='rs_value_types.html#android_rs:uchar'>uchar</a> u, <a href='rs_value_types.html#android_rs:uchar'>uchar</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> rsYuvToRGBA_uchar4(<a href='rs_value_types.html#android_rs:uchar'>uchar</a> y, <a href='rs_value_types.html#android_rs:uchar'>uchar</a> u, <a href='rs_value_types.html#android_rs:uchar'>uchar</a> v);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>y</th><td>Luminance component.</td></tr>
+ <tr><th>u</th><td>U chrominance component.</td></tr>
+ <tr><th>v</th><td>V chrominance component.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Converts a color from a YUV representation to RGBA.
+</p>
+
+<p> We currently don't provide a function to do the reverse conversion.
+</p>
+ </div>
+</div>
+
+</div>
diff --git a/docs/html/guide/topics/renderscript/reference/rs_debug.jd b/docs/html/guide/topics/renderscript/reference/rs_debug.jd
new file mode 100644
index 0000000..d041309
--- /dev/null
+++ b/docs/html/guide/topics/renderscript/reference/rs_debug.jd
@@ -0,0 +1,301 @@
+page.title=RenderScript Debugging Functions
+
+@jd:body
+
+<div class='renderscript'>
+<h2>Overview</h2>
+<p> The functions below are intended to be used during application developement.
+They should not be used in shipping applications.
+</p>
+<h2>Summary</h2>
+<table class='jd-sumtable'><tbody>
+ <tr><th colspan='2'>Functions</th></tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_debug.html#android_rs:rsDebug'>rsDebug</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Log a message and values
+ </td>
+ </tr>
+</tbody></table>
+<h2>Functions</h2>
+<a name='android_rs:rsDebug'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsDebug</span>
+ <span class='normal'>: Log a message and values</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>void rsDebug(const char* message, char a);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsDebug(const char* message, <a href='rs_value_types.html#android_rs:char2'>char2</a> a);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsDebug(const char* message, <a href='rs_value_types.html#android_rs:char3'>char3</a> a);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsDebug(const char* message, <a href='rs_value_types.html#android_rs:char4'>char4</a> a);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsDebug(const char* message, const <a href='rs_value_types.html#android_rs:rs_matrix2x2'>rs_matrix2x2</a>* a);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>void rsDebug(const char* message, const <a href='rs_value_types.html#android_rs:rs_matrix3x3'>rs_matrix3x3</a>* a);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>void rsDebug(const char* message, const <a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* a);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>void rsDebug(const char* message, const void* a);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>void rsDebug(const char* message, double a);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>void rsDebug(const char* message, float a);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>void rsDebug(const char* message, float a, float b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>void rsDebug(const char* message, float a, float b, float c);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>void rsDebug(const char* message, float a, float b, float c, float d);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>void rsDebug(const char* message, <a href='rs_value_types.html#android_rs:float2'>float2</a> a);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>void rsDebug(const char* message, <a href='rs_value_types.html#android_rs:float3'>float3</a> a);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>void rsDebug(const char* message, <a href='rs_value_types.html#android_rs:float4'>float4</a> a);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>void rsDebug(const char* message, int a);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>void rsDebug(const char* message, <a href='rs_value_types.html#android_rs:int2'>int2</a> a);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsDebug(const char* message, <a href='rs_value_types.html#android_rs:int3'>int3</a> a);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsDebug(const char* message, <a href='rs_value_types.html#android_rs:int4'>int4</a> a);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsDebug(const char* message, long a);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>void rsDebug(const char* message, long long a);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>void rsDebug(const char* message, <a href='rs_value_types.html#android_rs:long2'>long2</a> a);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsDebug(const char* message, <a href='rs_value_types.html#android_rs:long3'>long3</a> a);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsDebug(const char* message, <a href='rs_value_types.html#android_rs:long4'>long4</a> a);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsDebug(const char* message, short a);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsDebug(const char* message, <a href='rs_value_types.html#android_rs:short2'>short2</a> a);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsDebug(const char* message, <a href='rs_value_types.html#android_rs:short3'>short3</a> a);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsDebug(const char* message, <a href='rs_value_types.html#android_rs:short4'>short4</a> a);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsDebug(const char* message, <a href='rs_value_types.html#android_rs:uchar'>uchar</a> a);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsDebug(const char* message, <a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> a);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsDebug(const char* message, <a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> a);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsDebug(const char* message, <a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> a);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsDebug(const char* message, <a href='rs_value_types.html#android_rs:uint'>uint</a> a);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>void rsDebug(const char* message, <a href='rs_value_types.html#android_rs:uint2'>uint2</a> a);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsDebug(const char* message, <a href='rs_value_types.html#android_rs:uint3'>uint3</a> a);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsDebug(const char* message, <a href='rs_value_types.html#android_rs:uint4'>uint4</a> a);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsDebug(const char* message, <a href='rs_value_types.html#android_rs:ulong'>ulong</a> a);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>void rsDebug(const char* message, <a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> a);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsDebug(const char* message, <a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> a);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsDebug(const char* message, <a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> a);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsDebug(const char* message, unsigned long long a);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>void rsDebug(const char* message, <a href='rs_value_types.html#android_rs:ushort'>ushort</a> a);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsDebug(const char* message, <a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> a);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsDebug(const char* message, <a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> a);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsDebug(const char* message, <a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> a);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> This function prints a message to the standard log, followed by the provided values.
+</p>
+
+<p> This function is intended for debugging only and should not be used in shipping
+applications.
+</p>
+ </div>
+</div>
+
+</div>
diff --git a/docs/html/guide/topics/renderscript/reference/rs_for_each.jd b/docs/html/guide/topics/renderscript/reference/rs_for_each.jd
new file mode 100644
index 0000000..cad5a21
--- /dev/null
+++ b/docs/html/guide/topics/renderscript/reference/rs_for_each.jd
@@ -0,0 +1,183 @@
+page.title=RenderScript Kernel Invocation Functions and Types
+
+@jd:body
+
+<div class='renderscript'>
+<h2>Overview</h2>
+<p> The <a href='rs_for_each.html#android_rs:rsForEach'>rsForEach</a>() function can be used to invoke the root kernel of a script.
+</p>
+<h2>Summary</h2>
+<table class='jd-sumtable'><tbody>
+ <tr><th colspan='2'>Types</th></tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_for_each.html#android_rs:rs_for_each_strategy_t'>rs_for_each_strategy_t</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Suggested cell processing order
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_for_each.html#android_rs:rs_script_call_t'>rs_script_call_t</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Cell iteration information
+ </td>
+ </tr>
+</tbody></table>
+<table class='jd-sumtable'><tbody>
+ <tr><th colspan='2'>Functions</th></tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_for_each.html#android_rs:rsForEach'>rsForEach</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Invoke the root kernel of a script
+ </td>
+ </tr>
+</tbody></table>
+<h2>Types</h2>
+<a name='android_rs:rs_for_each_strategy_t'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rs_for_each_strategy_t</span>
+ <span class='normal'>: Suggested cell processing order</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>An enum with the following values:
+</p>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>RS_FOR_EACH_STRATEGY_SERIAL = 0</th><td>Prefer contiguous memory regions.</td></tr>
+ <tr><th>RS_FOR_EACH_STRATEGY_DONT_CARE = 1</th><td>No prefrences.</td></tr>
+ <tr><th>RS_FOR_EACH_STRATEGY_DST_LINEAR = 2</th><td>Prefer DST.</td></tr>
+ <tr><th>RS_FOR_EACH_STRATEGY_TILE_SMALL = 3</th><td>Prefer processing small rectangular regions.</td></tr>
+ <tr><th>RS_FOR_EACH_STRATEGY_TILE_MEDIUM = 4</th><td>Prefer processing medium rectangular regions.</td></tr>
+ <tr><th>RS_FOR_EACH_STRATEGY_TILE_LARGE = 5</th><td>Prefer processing large rectangular regions.</td></tr>
+ </tbody></table><br/>
+<p> This type is used to suggest how the invoked kernel should iterate over the cells of the
+allocations. This is a hint only. Implementations may not follow the suggestion.
+</p>
+
+<p> This specification can help the caching behavior of the running kernel, e.g. the cache
+locality when the processing is distributed over multiple cores.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rs_script_call_t'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rs_script_call_t</span>
+ <span class='normal'>: Cell iteration information</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>A structure with the following fields: </p>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>rs_for_each_strategy_t strategy</th><td>Currently ignored. In the future, will be suggested cell iteration strategy.</td></tr>
+ <tr><th>uint32_t xStart</th><td>Starting index in the X dimension.</td></tr>
+ <tr><th>uint32_t xEnd</th><td>Ending index (exclusive) in the X dimension.</td></tr>
+ <tr><th>uint32_t yStart</th><td>Starting index in the Y dimension.</td></tr>
+ <tr><th>uint32_t yEnd</th><td>Ending index (exclusive) in the Y dimension.</td></tr>
+ <tr><th>uint32_t zStart</th><td>Starting index in the Z dimension.</td></tr>
+ <tr><th>uint32_t zEnd</th><td>Ending index (exclusive) in the Z dimension.</td></tr>
+ <tr><th>uint32_t arrayStart</th><td>Starting index in the Array0 dimension.</td></tr>
+ <tr><th>uint32_t arrayEnd</th><td>Ending index (exclusive) in the Array0 dimension.</td></tr>
+ <tr><th>uint32_t array1Start</th><td>Starting index in the Array1 dimension.</td></tr>
+ <tr><th>uint32_t array1End</th><td>Ending index (exclusive) in the Array1 dimension.</td></tr>
+ <tr><th>uint32_t array2Start</th><td>Starting index in the Array2 dimension.</td></tr>
+ <tr><th>uint32_t array2End</th><td>Ending index (exclusive) in the Array2 dimension.</td></tr>
+ <tr><th>uint32_t array3Start</th><td>Starting index in the Array3 dimension.</td></tr>
+ <tr><th>uint32_t array3End</th><td>Ending index (exclusive) in the Array3 dimension.</td></tr>
+ </tbody></table><br/>
+<p> This structure is used to provide iteration information to a rsForEach call.
+It is currently used to restrict processing to a subset of cells. In future
+versions, it will also be used to provide hint on how to best iterate over
+the cells.
+</p>
+
+<p> The Start fields are inclusive and the End fields are exclusive. E.g. to iterate
+over cells 4, 5, 6, and 7 in the X dimension, set xStart to 4 and xEnd to 8.
+</p>
+ </div>
+</div>
+
+<h2>Functions</h2>
+<a name='android_rs:rsForEach'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsForEach</span>
+ <span class='normal'>: Invoke the root kernel of a script</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>void rsForEach(<a href='rs_object_types.html#android_rs:rs_script'>rs_script</a> script, <a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> input, <a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> output);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsForEach(<a href='rs_object_types.html#android_rs:rs_script'>rs_script</a> script, <a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> input, <a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> output, const void* usrData);
+</td>
+ <td> Removed from <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsForEach(<a href='rs_object_types.html#android_rs:rs_script'>rs_script</a> script, <a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> input, <a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> output, const void* usrData, const <a href='rs_for_each.html#android_rs:rs_script_call_t'>rs_script_call_t</a>* sc);
+</td>
+ <td> Removed from <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsForEach(<a href='rs_object_types.html#android_rs:rs_script'>rs_script</a> script, <a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> input, <a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> output, const void* usrData, <a href='rs_value_types.html#android_rs:size_t'>size_t</a> usrDataLen);
+</td>
+ <td> <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14 - 20</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsForEach(<a href='rs_object_types.html#android_rs:rs_script'>rs_script</a> script, <a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> input, <a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> output, const void* usrData, <a href='rs_value_types.html#android_rs:size_t'>size_t</a> usrDataLen, const <a href='rs_for_each.html#android_rs:rs_script_call_t'>rs_script_call_t</a>* sc);
+</td>
+ <td> <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14 - 20</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>script</th><td>Script to call.</td></tr>
+ <tr><th>input</th><td>Allocation to source data from.</td></tr>
+ <tr><th>output</th><td>Allocation to write date into.</td></tr>
+ <tr><th>usrData</th><td>User defined data to pass to the script. May be NULL.</td></tr>
+ <tr><th>sc</th><td>Extra control information used to select a sub-region of the allocation to be processed or suggest a walking strategy. May be NULL.</td></tr>
+ <tr><th>usrDataLen</th><td>Size of the userData structure. This will be used to perform a shallow copy of the data if necessary.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Invoke the kernel named "root" of the specified script. Like other kernels, this root()
+function will be invoked repeatedly over the cells of the specificed allocation, filling
+the output allocation with the results.
+</p>
+
+<p> When rsForEach is called, the root script is launched immediately. rsForEach returns
+only when the script has completed and the output allocation is ready to use.
+</p>
+
+<p> The rs_script argument is typically initialized using a global variable set from Java.
+</p>
+
+<p> The kernel can be invoked with just an input allocation or just an output allocation.
+This can be done by defining an rs_allocation variable and not initializing it. E.g.<code><br/>
+rs_script gCustomScript;<br/>
+void specializedProcessing(rs_allocation in) {<br/>
+ rs_allocation ignoredOut;<br/>
+ rsForEach(gCustomScript, in, ignoredOut);<br/>
+}<br/></code>
+</p>
+
+<p> If both input and output allocations are specified, they must have the same dimensions.
+</p>
+ </div>
+</div>
+
+</div>
diff --git a/docs/html/guide/topics/renderscript/reference/rs_graphics.jd b/docs/html/guide/topics/renderscript/reference/rs_graphics.jd
new file mode 100644
index 0000000..ee50184
--- /dev/null
+++ b/docs/html/guide/topics/renderscript/reference/rs_graphics.jd
@@ -0,0 +1,2085 @@
+page.title=RenderScript Graphics Functions and Types
+
+@jd:body
+
+<div class='renderscript'>
+<h2>Overview</h2>
+<p> The graphics subsystem of RenderScript has been deprecated.
+</p>
+<h2>Summary</h2>
+<table class='jd-sumtable'><tbody>
+ <tr><th colspan='2'>Deprecated Types</th></tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rs_blend_dst_func'>rs_blend_dst_func</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Blend destination function
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rs_blend_src_func'>rs_blend_src_func</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Blend source function
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rs_cull_mode'>rs_cull_mode</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Culling mode
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rs_depth_func'>rs_depth_func</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Depth function
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rs_font'>rs_font</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Handle to a Font
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rs_mesh'>rs_mesh</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Handle to a Mesh
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rs_primitive'>rs_primitive</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. How to intepret mesh vertex data
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rs_program_fragment'>rs_program_fragment</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Handle to a ProgramFragment
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rs_program_raster'>rs_program_raster</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Handle to a ProgramRaster
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rs_program_store'>rs_program_store</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Handle to a ProgramStore
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rs_program_vertex'>rs_program_vertex</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Handle to a ProgramVertex
+ </td>
+ </tr>
+</tbody></table>
+<table class='jd-sumtable'><tbody>
+ <tr><th colspan='2'>Deprecated Functions</th></tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgAllocationSyncAll'>rsgAllocationSyncAll</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Sync the contents of an allocation
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgBindColorTarget'>rsgBindColorTarget</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Set the color target
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgBindConstant'>rsgBindConstant</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Bind a constant allocation
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgBindDepthTarget'>rsgBindDepthTarget</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Set the depth target
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgBindFont'>rsgBindFont</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Bind a font object
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgBindProgramFragment'>rsgBindProgramFragment</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Bind a ProgramFragment
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgBindProgramRaster'>rsgBindProgramRaster</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Bind a ProgramRaster
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgBindProgramStore'>rsgBindProgramStore</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Bind a ProgramStore
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgBindProgramVertex'>rsgBindProgramVertex</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Bind a ProgramVertex
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgBindSampler'>rsgBindSampler</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Bind a sampler
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgBindTexture'>rsgBindTexture</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Bind a texture allocation
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgClearAllRenderTargets'>rsgClearAllRenderTargets</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Clear all color and depth targets
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgClearColor'>rsgClearColor</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Clear the specified color from the surface
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgClearColorTarget'>rsgClearColorTarget</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Clear the color target
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgClearDepth'>rsgClearDepth</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Clear the depth surface
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgClearDepthTarget'>rsgClearDepthTarget</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Clear the depth target
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgDrawMesh'>rsgDrawMesh</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Draw a mesh
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgDrawQuad'>rsgDrawQuad</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Draw a quad
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgDrawQuadTexCoords'>rsgDrawQuadTexCoords</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Draw a textured quad
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgDrawRect'>rsgDrawRect</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Draw a rectangle
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgDrawSpriteScreenspace'>rsgDrawSpriteScreenspace</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Draw rectangles in screenspace
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgDrawText'>rsgDrawText</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Draw a text string
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgFinish'>rsgFinish</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. End rendering commands
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgFontColor'>rsgFontColor</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Set the font color
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgGetHeight'>rsgGetHeight</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Get the surface height
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgGetWidth'>rsgGetWidth</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Get the surface width
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgMeasureText'>rsgMeasureText</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Get the bounding box for a text string
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgMeshComputeBoundingBox'>rsgMeshComputeBoundingBox</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Compute a bounding box
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgMeshGetIndexAllocation'>rsgMeshGetIndexAllocation</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Return an allocation containing index data
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgMeshGetPrimitive'>rsgMeshGetPrimitive</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Return the primitive
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgMeshGetPrimitiveCount'>rsgMeshGetPrimitiveCount</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Return the number of index sets
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgMeshGetVertexAllocation'>rsgMeshGetVertexAllocation</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Return a vertex allocation
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgMeshGetVertexAllocationCount'>rsgMeshGetVertexAllocationCount</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Return the number of vertex allocations
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgProgramFragmentConstantColor'>rsgProgramFragmentConstantColor</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Set the constant color for a fixed function emulation program
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgProgramRasterGetCullMode'>rsgProgramRasterGetCullMode</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Get program raster cull mode
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgProgramRasterIsPointSpriteEnabled'>rsgProgramRasterIsPointSpriteEnabled</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Get program raster point sprite state
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgProgramStoreGetBlendDstFunc'>rsgProgramStoreGetBlendDstFunc</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Get program store blend destination function
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgProgramStoreGetBlendSrcFunc'>rsgProgramStoreGetBlendSrcFunc</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Get program store blend source function
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgProgramStoreGetDepthFunc'>rsgProgramStoreGetDepthFunc</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Get program store depth function
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgProgramStoreIsColorMaskAlphaEnabled'>rsgProgramStoreIsColorMaskAlphaEnabled</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Get program store alpha component color mask
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgProgramStoreIsColorMaskBlueEnabled'>rsgProgramStoreIsColorMaskBlueEnabled</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Get program store blur component color mask
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgProgramStoreIsColorMaskGreenEnabled'>rsgProgramStoreIsColorMaskGreenEnabled</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Get program store green component color mask
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgProgramStoreIsColorMaskRedEnabled'>rsgProgramStoreIsColorMaskRedEnabled</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Get program store red component color mask
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgProgramStoreIsDepthMaskEnabled'>rsgProgramStoreIsDepthMaskEnabled</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Get program store depth mask
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgProgramStoreIsDitherEnabled'>rsgProgramStoreIsDitherEnabled</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Get program store dither state
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgProgramVertexGetProjectionMatrix'>rsgProgramVertexGetProjectionMatrix</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Get the projection matrix for a fixed function vertex program
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgProgramVertexLoadModelMatrix'>rsgProgramVertexLoadModelMatrix</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Load the model matrix for a bound fixed function vertex program
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgProgramVertexLoadProjectionMatrix'>rsgProgramVertexLoadProjectionMatrix</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Load the projection matrix for a bound fixed function vertex program
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_graphics.html#android_rs:rsgProgramVertexLoadTextureMatrix'>rsgProgramVertexLoadTextureMatrix</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Load the texture matrix for a bound fixed function vertex program
+ </td>
+ </tr>
+</tbody></table>
+<h2>Types</h2>
+<a name='android_rs:rs_blend_dst_func'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rs_blend_dst_func</span>
+ <span class='normal'>: Blend destination function</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>An enum with the following values:
+ When compiling for 32 bits. Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+</p>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>RS_BLEND_DST_ZERO = 0</th><td></td></tr>
+ <tr><th>RS_BLEND_DST_ONE = 1</th><td></td></tr>
+ <tr><th>RS_BLEND_DST_SRC_COLOR = 2</th><td></td></tr>
+ <tr><th>RS_BLEND_DST_ONE_MINUS_SRC_COLOR = 3</th><td></td></tr>
+ <tr><th>RS_BLEND_DST_SRC_ALPHA = 4</th><td></td></tr>
+ <tr><th>RS_BLEND_DST_ONE_MINUS_SRC_ALPHA = 5</th><td></td></tr>
+ <tr><th>RS_BLEND_DST_DST_ALPHA = 6</th><td></td></tr>
+ <tr><th>RS_BLEND_DST_ONE_MINUS_DST_ALPHA = 7</th><td></td></tr>
+ <tr><th>RS_BLEND_DST_INVALID = 100</th><td></td></tr>
+ </tbody></table><br/>
+ <p><b>Deprecated.</b> Do not use.</p>
+ </div>
+</div>
+
+<a name='android_rs:rs_blend_src_func'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rs_blend_src_func</span>
+ <span class='normal'>: Blend source function</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>An enum with the following values:
+ When compiling for 32 bits. Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+</p>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>RS_BLEND_SRC_ZERO = 0</th><td></td></tr>
+ <tr><th>RS_BLEND_SRC_ONE = 1</th><td></td></tr>
+ <tr><th>RS_BLEND_SRC_DST_COLOR = 2</th><td></td></tr>
+ <tr><th>RS_BLEND_SRC_ONE_MINUS_DST_COLOR = 3</th><td></td></tr>
+ <tr><th>RS_BLEND_SRC_SRC_ALPHA = 4</th><td></td></tr>
+ <tr><th>RS_BLEND_SRC_ONE_MINUS_SRC_ALPHA = 5</th><td></td></tr>
+ <tr><th>RS_BLEND_SRC_DST_ALPHA = 6</th><td></td></tr>
+ <tr><th>RS_BLEND_SRC_ONE_MINUS_DST_ALPHA = 7</th><td></td></tr>
+ <tr><th>RS_BLEND_SRC_SRC_ALPHA_SATURATE = 8</th><td></td></tr>
+ <tr><th>RS_BLEND_SRC_INVALID = 100</th><td></td></tr>
+ </tbody></table><br/>
+ <p><b>Deprecated.</b> Do not use.</p>
+ </div>
+</div>
+
+<a name='android_rs:rs_cull_mode'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rs_cull_mode</span>
+ <span class='normal'>: Culling mode</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>An enum with the following values:
+ When compiling for 32 bits. Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+</p>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>RS_CULL_BACK = 0</th><td></td></tr>
+ <tr><th>RS_CULL_FRONT = 1</th><td></td></tr>
+ <tr><th>RS_CULL_NONE = 2</th><td></td></tr>
+ <tr><th>RS_CULL_INVALID = 100</th><td></td></tr>
+ </tbody></table><br/>
+ <p><b>Deprecated.</b> Do not use.</p>
+ </div>
+</div>
+
+<a name='android_rs:rs_depth_func'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rs_depth_func</span>
+ <span class='normal'>: Depth function</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>An enum with the following values:
+ When compiling for 32 bits. Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+</p>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>RS_DEPTH_FUNC_ALWAYS = 0</th><td>Always drawn</td></tr>
+ <tr><th>RS_DEPTH_FUNC_LESS = 1</th><td>Drawn if the incoming depth value is less than that in the depth buffer</td></tr>
+ <tr><th>RS_DEPTH_FUNC_LEQUAL = 2</th><td>Drawn if the incoming depth value is less or equal to that in the depth buffer</td></tr>
+ <tr><th>RS_DEPTH_FUNC_GREATER = 3</th><td>Drawn if the incoming depth value is greater than that in the depth buffer</td></tr>
+ <tr><th>RS_DEPTH_FUNC_GEQUAL = 4</th><td>Drawn if the incoming depth value is greater or equal to that in the depth buffer</td></tr>
+ <tr><th>RS_DEPTH_FUNC_EQUAL = 5</th><td>Drawn if the incoming depth value is equal to that in the depth buffer</td></tr>
+ <tr><th>RS_DEPTH_FUNC_NOTEQUAL = 6</th><td>Drawn if the incoming depth value is not equal to that in the depth buffer</td></tr>
+ <tr><th>RS_DEPTH_FUNC_INVALID = 100</th><td>Invalid depth function</td></tr>
+ </tbody></table><br/>
+ <p><b>Deprecated.</b> Do not use.</p>
+<p> Specifies conditional drawing depending on the comparison of the incoming
+depth to that found in the depth buffer.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rs_font'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rs_font</span>
+ <span class='normal'>: Handle to a Font</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>A typedef of: _RS_HANDLE When compiling for 32 bits.
+</p>
+ <p><b>Deprecated.</b> Do not use.</p>
+<p> Opaque handle to a RenderScript font object.
+See: android.renderscript.Font
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rs_mesh'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rs_mesh</span>
+ <span class='normal'>: Handle to a Mesh</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>A typedef of: _RS_HANDLE When compiling for 32 bits.
+</p>
+ <p><b>Deprecated.</b> Do not use.</p>
+<p> Opaque handle to a RenderScript mesh object.
+See: android.renderscript.Mesh
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rs_primitive'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rs_primitive</span>
+ <span class='normal'>: How to intepret mesh vertex data</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>An enum with the following values:
+ When compiling for 32 bits. Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+</p>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>RS_PRIMITIVE_POINT = 0</th><td>Vertex data will be rendered as a series of points</td></tr>
+ <tr><th>RS_PRIMITIVE_LINE = 1</th><td>Vertex pairs will be rendered as lines</td></tr>
+ <tr><th>RS_PRIMITIVE_LINE_STRIP = 2</th><td>Vertex data will be rendered as a connected line strip</td></tr>
+ <tr><th>RS_PRIMITIVE_TRIANGLE = 3</th><td>Vertices will be rendered as individual triangles</td></tr>
+ <tr><th>RS_PRIMITIVE_TRIANGLE_STRIP = 4</th><td>Vertices will be rendered as a connected triangle strip defined by the first three vertices with each additional triangle defined by a new vertex</td></tr>
+ <tr><th>RS_PRIMITIVE_TRIANGLE_FAN = 5</th><td>Vertices will be rendered as a sequence of triangles that all share first vertex as the origin</td></tr>
+ <tr><th>RS_PRIMITIVE_INVALID = 100</th><td>Invalid primitive</td></tr>
+ </tbody></table><br/>
+ <p><b>Deprecated.</b> Do not use.</p>
+<p> Describes the way mesh vertex data is interpreted when rendering
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rs_program_fragment'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rs_program_fragment</span>
+ <span class='normal'>: Handle to a ProgramFragment</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>A typedef of: _RS_HANDLE When compiling for 32 bits.
+</p>
+ <p><b>Deprecated.</b> Do not use.</p>
+<p> Opaque handle to a RenderScript ProgramFragment object.
+See: android.renderscript.ProgramFragment
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rs_program_raster'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rs_program_raster</span>
+ <span class='normal'>: Handle to a ProgramRaster</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>A typedef of: _RS_HANDLE When compiling for 32 bits.
+</p>
+ <p><b>Deprecated.</b> Do not use.</p>
+<p> Opaque handle to a RenderScript ProgramRaster object.
+See: android.renderscript.ProgramRaster
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rs_program_store'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rs_program_store</span>
+ <span class='normal'>: Handle to a ProgramStore</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>A typedef of: _RS_HANDLE When compiling for 32 bits.
+</p>
+ <p><b>Deprecated.</b> Do not use.</p>
+<p> Opaque handle to a RenderScript ProgramStore object.
+See: android.renderscript.ProgramStore
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rs_program_vertex'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rs_program_vertex</span>
+ <span class='normal'>: Handle to a ProgramVertex</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>A typedef of: _RS_HANDLE When compiling for 32 bits.
+</p>
+ <p><b>Deprecated.</b> Do not use.</p>
+<p> Opaque handle to a RenderScript ProgramVertex object.
+See: android.renderscript.ProgramVertex
+</p>
+ </div>
+</div>
+
+<h2>Functions</h2>
+<a name='android_rs:rsgAllocationSyncAll'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsgAllocationSyncAll</span>
+ <span class='normal'>: Sync the contents of an allocation</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>void rsgAllocationSyncAll(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> alloc);
+</td>
+ <td> When compiling for 32 bits.
+ </td>
+ </tr>
+ <tr>
+ <td>void rsgAllocationSyncAll(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> alloc, <a href='rs_object_types.html#android_rs:rs_allocation_usage_type'>rs_allocation_usage_type</a> source);
+</td>
+ <td> When compiling for 32 bits. Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+ <p><b>Deprecated.</b> Do not use.</p>
+<p> Sync the contents of an allocation.
+</p>
+
+<p> If the source is specified, sync from memory space specified by source.
+</p>
+
+<p> If the source is not specified, sync from its SCRIPT memory space to its HW
+memory spaces.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsgBindColorTarget'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsgBindColorTarget</span>
+ <span class='normal'>: Set the color target</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>void rsgBindColorTarget(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> colorTarget, <a href='rs_value_types.html#android_rs:uint'>uint</a> slot);
+</td>
+ <td> When compiling for 32 bits. Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+ <p><b>Deprecated.</b> Do not use.</p>
+<p> Set the color target used for all subsequent rendering calls
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsgBindConstant'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsgBindConstant</span>
+ <span class='normal'>: Bind a constant allocation</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>void rsgBindConstant(<a href='rs_graphics.html#android_rs:rs_program_fragment'>rs_program_fragment</a> ps, <a href='rs_value_types.html#android_rs:uint'>uint</a> slot, <a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> c);
+</td>
+ <td> When compiling for 32 bits.
+ </td>
+ </tr>
+ <tr>
+ <td>void rsgBindConstant(<a href='rs_graphics.html#android_rs:rs_program_vertex'>rs_program_vertex</a> pv, <a href='rs_value_types.html#android_rs:uint'>uint</a> slot, <a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> c);
+</td>
+ <td> When compiling for 32 bits.
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>ps</th><td>program fragment object</td></tr>
+ <tr><th>slot</th><td>index of the constant buffer on the program</td></tr>
+ <tr><th>c</th><td>constants to bind</td></tr>
+ <tr><th>pv</th><td>program vertex object</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+ <p><b>Deprecated.</b> Do not use.</p>
+<p> Bind a new Allocation object to a ProgramFragment or ProgramVertex.
+The Allocation must be a valid constant input for the Program.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsgBindDepthTarget'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsgBindDepthTarget</span>
+ <span class='normal'>: Set the depth target</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>void rsgBindDepthTarget(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> depthTarget);
+</td>
+ <td> When compiling for 32 bits. Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+ <p><b>Deprecated.</b> Do not use.</p>
+<p> Set the depth target used for all subsequent rendering calls
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsgBindFont'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsgBindFont</span>
+ <span class='normal'>: Bind a font object</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>void rsgBindFont(<a href='rs_graphics.html#android_rs:rs_font'>rs_font</a> font);
+</td>
+ <td> When compiling for 32 bits.
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>font</th><td>object to bind</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+ <p><b>Deprecated.</b> Do not use.</p>
+<p> Binds the font object to be used for all subsequent font rendering calls
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsgBindProgramFragment'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsgBindProgramFragment</span>
+ <span class='normal'>: Bind a ProgramFragment</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>void rsgBindProgramFragment(<a href='rs_graphics.html#android_rs:rs_program_fragment'>rs_program_fragment</a> pf);
+</td>
+ <td> When compiling for 32 bits.
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+ <p><b>Deprecated.</b> Do not use.</p>
+<p> Bind a new ProgramFragment to the rendering context.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsgBindProgramRaster'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsgBindProgramRaster</span>
+ <span class='normal'>: Bind a ProgramRaster</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>void rsgBindProgramRaster(<a href='rs_graphics.html#android_rs:rs_program_raster'>rs_program_raster</a> pr);
+</td>
+ <td> When compiling for 32 bits.
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+ <p><b>Deprecated.</b> Do not use.</p>
+<p> Bind a new ProgramRaster to the rendering context.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsgBindProgramStore'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsgBindProgramStore</span>
+ <span class='normal'>: Bind a ProgramStore</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>void rsgBindProgramStore(<a href='rs_graphics.html#android_rs:rs_program_store'>rs_program_store</a> ps);
+</td>
+ <td> When compiling for 32 bits.
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+ <p><b>Deprecated.</b> Do not use.</p>
+<p> Bind a new ProgramStore to the rendering context.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsgBindProgramVertex'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsgBindProgramVertex</span>
+ <span class='normal'>: Bind a ProgramVertex</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>void rsgBindProgramVertex(<a href='rs_graphics.html#android_rs:rs_program_vertex'>rs_program_vertex</a> pv);
+</td>
+ <td> When compiling for 32 bits.
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+ <p><b>Deprecated.</b> Do not use.</p>
+<p> Bind a new ProgramVertex to the rendering context.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsgBindSampler'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsgBindSampler</span>
+ <span class='normal'>: Bind a sampler</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>void rsgBindSampler(<a href='rs_graphics.html#android_rs:rs_program_fragment'>rs_program_fragment</a> fragment, <a href='rs_value_types.html#android_rs:uint'>uint</a> slot, <a href='rs_object_types.html#android_rs:rs_sampler'>rs_sampler</a> sampler);
+</td>
+ <td> When compiling for 32 bits.
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+ <p><b>Deprecated.</b> Do not use.</p>
+<p> Bind a new Sampler object to a ProgramFragment. The sampler will
+operate on the texture bound at the matching slot.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsgBindTexture'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsgBindTexture</span>
+ <span class='normal'>: Bind a texture allocation</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>void rsgBindTexture(<a href='rs_graphics.html#android_rs:rs_program_fragment'>rs_program_fragment</a> v, <a href='rs_value_types.html#android_rs:uint'>uint</a> slot, <a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> alloc);
+</td>
+ <td> When compiling for 32 bits.
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+ <p><b>Deprecated.</b> Do not use.</p>
+<p> Bind a new Allocation object to a ProgramFragment. The
+Allocation must be a valid texture for the Program. The sampling
+of the texture will be controled by the Sampler bound at the
+matching slot.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsgClearAllRenderTargets'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsgClearAllRenderTargets</span>
+ <span class='normal'>: Clear all color and depth targets</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>void rsgClearAllRenderTargets();
+</td>
+ <td> When compiling for 32 bits. Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+ <p><b>Deprecated.</b> Do not use.</p>
+<p> Clear all color and depth targets and resume rendering into
+the framebuffer
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsgClearColor'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsgClearColor</span>
+ <span class='normal'>: Clear the specified color from the surface</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>void rsgClearColor(float r, float g, float b, float a);
+</td>
+ <td> When compiling for 32 bits.
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+ <p><b>Deprecated.</b> Do not use.</p>
+<p> Clears the rendering surface to the specified color.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsgClearColorTarget'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsgClearColorTarget</span>
+ <span class='normal'>: Clear the color target</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>void rsgClearColorTarget(<a href='rs_value_types.html#android_rs:uint'>uint</a> slot);
+</td>
+ <td> When compiling for 32 bits. Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+ <p><b>Deprecated.</b> Do not use.</p>
+<p> Clear the previously set color target
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsgClearDepth'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsgClearDepth</span>
+ <span class='normal'>: Clear the depth surface</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>void rsgClearDepth(float value);
+</td>
+ <td> When compiling for 32 bits.
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+ <p><b>Deprecated.</b> Do not use.</p>
+<p> Clears the depth suface to the specified value.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsgClearDepthTarget'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsgClearDepthTarget</span>
+ <span class='normal'>: Clear the depth target</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>void rsgClearDepthTarget();
+</td>
+ <td> When compiling for 32 bits. Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+ <p><b>Deprecated.</b> Do not use.</p>
+<p> Clear the previously set depth target
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsgDrawMesh'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsgDrawMesh</span>
+ <span class='normal'>: Draw a mesh</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>void rsgDrawMesh(<a href='rs_graphics.html#android_rs:rs_mesh'>rs_mesh</a> ism);
+</td>
+ <td> When compiling for 32 bits.
+ </td>
+ </tr>
+ <tr>
+ <td>void rsgDrawMesh(<a href='rs_graphics.html#android_rs:rs_mesh'>rs_mesh</a> ism, <a href='rs_value_types.html#android_rs:uint'>uint</a> primitiveIndex);
+</td>
+ <td> When compiling for 32 bits.
+ </td>
+ </tr>
+ <tr>
+ <td>void rsgDrawMesh(<a href='rs_graphics.html#android_rs:rs_mesh'>rs_mesh</a> ism, <a href='rs_value_types.html#android_rs:uint'>uint</a> primitiveIndex, <a href='rs_value_types.html#android_rs:uint'>uint</a> start, <a href='rs_value_types.html#android_rs:uint'>uint</a> len);
+</td>
+ <td> When compiling for 32 bits.
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>ism</th><td>mesh object to render</td></tr>
+ <tr><th>primitiveIndex</th><td>for meshes that contain multiple primitive groups this parameter specifies the index of the group to draw.</td></tr>
+ <tr><th>start</th><td>starting index in the range</td></tr>
+ <tr><th>len</th><td>number of indices to draw</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+ <p><b>Deprecated.</b> Do not use.</p>
+<p> Draw a mesh using the current context state.
+</p>
+
+<p> If primitiveIndex is specified, draw part of a mesh using the current context state.
+</p>
+
+<p> If start and len are also specified, draw specified index range of part of a mesh using the current context state.
+</p>
+
+<p> Otherwise the whole mesh is rendered.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsgDrawQuad'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsgDrawQuad</span>
+ <span class='normal'>: Draw a quad</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>void rsgDrawQuad(float x1, float y1, float z1, float x2, float y2, float z2, float x3, float y3, float z3, float x4, float y4, float z4);
+</td>
+ <td> When compiling for 32 bits.
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+ <p><b>Deprecated.</b> Do not use.</p>
+<p> Low performance utility function for drawing a simple quad. Not intended for
+drawing large quantities of geometry.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsgDrawQuadTexCoords'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsgDrawQuadTexCoords</span>
+ <span class='normal'>: Draw a textured quad</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>void rsgDrawQuadTexCoords(float x1, float y1, float z1, float u1, float v1, float x2, float y2, float z2, float u2, float v2, float x3, float y3, float z3, float u3, float v3, float x4, float y4, float z4, float u4, float v4);
+</td>
+ <td> When compiling for 32 bits.
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+ <p><b>Deprecated.</b> Do not use.</p>
+<p> Low performance utility function for drawing a textured quad. Not intended
+for drawing large quantities of geometry.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsgDrawRect'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsgDrawRect</span>
+ <span class='normal'>: Draw a rectangle</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>void rsgDrawRect(float x1, float y1, float x2, float y2, float z);
+</td>
+ <td> When compiling for 32 bits.
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+ <p><b>Deprecated.</b> Do not use.</p>
+<p> Low performance utility function for drawing a simple rectangle. Not
+intended for drawing large quantities of geometry.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsgDrawSpriteScreenspace'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsgDrawSpriteScreenspace</span>
+ <span class='normal'>: Draw rectangles in screenspace</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>void rsgDrawSpriteScreenspace(float x, float y, float z, float w, float h);
+</td>
+ <td> When compiling for 32 bits.
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+ <p><b>Deprecated.</b> Do not use.</p>
+<p> Low performance function for drawing rectangles in screenspace. This
+function uses the default passthough ProgramVertex. Any bound ProgramVertex
+is ignored. This function has considerable overhead and should not be used
+for drawing in shipping applications.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsgDrawText'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsgDrawText</span>
+ <span class='normal'>: Draw a text string</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>void rsgDrawText(const char* text, int x, int y);
+</td>
+ <td> When compiling for 32 bits.
+ </td>
+ </tr>
+ <tr>
+ <td>void rsgDrawText(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> alloc, int x, int y);
+</td>
+ <td> When compiling for 32 bits.
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+ <p><b>Deprecated.</b> Do not use.</p>
+<p> Draws text given a string and location
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsgFinish'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsgFinish</span>
+ <span class='normal'>: End rendering commands</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint'>uint</a> rsgFinish();
+</td>
+ <td> When compiling for 32 bits. Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+ <p><b>Deprecated.</b> Do not use.</p>
+<p> Force RenderScript to finish all rendering commands
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsgFontColor'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsgFontColor</span>
+ <span class='normal'>: Set the font color</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>void rsgFontColor(float r, float g, float b, float a);
+</td>
+ <td> When compiling for 32 bits.
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>r</th><td>red component</td></tr>
+ <tr><th>g</th><td>green component</td></tr>
+ <tr><th>b</th><td>blue component</td></tr>
+ <tr><th>a</th><td>alpha component</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+ <p><b>Deprecated.</b> Do not use.</p>
+<p> Sets the font color for all subsequent rendering calls
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsgGetHeight'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsgGetHeight</span>
+ <span class='normal'>: Get the surface height</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint'>uint</a> rsgGetHeight();
+</td>
+ <td> When compiling for 32 bits.
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+ <p><b>Deprecated.</b> Do not use.</p>
+<p> Get the height of the current rendering surface.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsgGetWidth'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsgGetWidth</span>
+ <span class='normal'>: Get the surface width</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint'>uint</a> rsgGetWidth();
+</td>
+ <td> When compiling for 32 bits.
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+ <p><b>Deprecated.</b> Do not use.</p>
+<p> Get the width of the current rendering surface.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsgMeasureText'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsgMeasureText</span>
+ <span class='normal'>: Get the bounding box for a text string</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>void rsgMeasureText(const char* text, int* left, int* right, int* top, int* bottom);
+</td>
+ <td> When compiling for 32 bits.
+ </td>
+ </tr>
+ <tr>
+ <td>void rsgMeasureText(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> alloc, int* left, int* right, int* top, int* bottom);
+</td>
+ <td> When compiling for 32 bits.
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+ <p><b>Deprecated.</b> Do not use.</p>
+<p> Returns the bounding box of the text relative to (0, 0)
+Any of left, right, top, bottom could be NULL
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsgMeshComputeBoundingBox'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsgMeshComputeBoundingBox</span>
+ <span class='normal'>: Compute a bounding box</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>void rsgMeshComputeBoundingBox(<a href='rs_graphics.html#android_rs:rs_mesh'>rs_mesh</a> mesh, float* minX, float* minY, float* min, float* maxX, float* maxY, float* maxZ);
+</td>
+ <td> When compiling for 32 bits.
+ </td>
+ </tr>
+ <tr>
+ <td>void rsgMeshComputeBoundingBox(<a href='rs_graphics.html#android_rs:rs_mesh'>rs_mesh</a> mesh, <a href='rs_value_types.html#android_rs:float3'>float3</a>* bBoxMin, <a href='rs_value_types.html#android_rs:float3'>float3</a>* bBoxMax);
+</td>
+ <td> When compiling for 32 bits.
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+ <p><b>Deprecated.</b> Do not use.</p>
+<p> Computes an axis aligned bounding box of a mesh object
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsgMeshGetIndexAllocation'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsgMeshGetIndexAllocation</span>
+ <span class='normal'>: Return an allocation containing index data</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td><a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> rsgMeshGetIndexAllocation(<a href='rs_graphics.html#android_rs:rs_mesh'>rs_mesh</a> m, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> index);
+</td>
+ <td> When compiling for 32 bits. Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>m</th><td>mesh to get data from</td></tr>
+ <tr><th>index</th><td>index of the index allocation</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Returns</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><td>allocation containing index data</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+ <p><b>Deprecated.</b> Do not use.</p>
+<p> Returns an allocation containing index data or a null
+allocation if only the primitive is specified
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsgMeshGetPrimitive'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsgMeshGetPrimitive</span>
+ <span class='normal'>: Return the primitive</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td><a href='rs_graphics.html#android_rs:rs_primitive'>rs_primitive</a> rsgMeshGetPrimitive(<a href='rs_graphics.html#android_rs:rs_mesh'>rs_mesh</a> m, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> index);
+</td>
+ <td> When compiling for 32 bits. Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>m</th><td>mesh to get data from</td></tr>
+ <tr><th>index</th><td>index of the primitive</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Returns</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><td>primitive describing how the mesh is rendered</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+ <p><b>Deprecated.</b> Do not use.</p>
+<p> Returns the primitive describing how a part of the mesh is
+rendered
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsgMeshGetPrimitiveCount'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsgMeshGetPrimitiveCount</span>
+ <span class='normal'>: Return the number of index sets</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> rsgMeshGetPrimitiveCount(<a href='rs_graphics.html#android_rs:rs_mesh'>rs_mesh</a> m);
+</td>
+ <td> When compiling for 32 bits. Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>m</th><td>mesh to get data from</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Returns</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><td>number of primitive groups in the mesh. This would include simple primitives as well as allocations containing index data</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+ <p><b>Deprecated.</b> Do not use.</p>
+<p> Meshes could have multiple index sets, this function returns
+the number.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsgMeshGetVertexAllocation'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsgMeshGetVertexAllocation</span>
+ <span class='normal'>: Return a vertex allocation</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td><a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> rsgMeshGetVertexAllocation(<a href='rs_graphics.html#android_rs:rs_mesh'>rs_mesh</a> m, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> index);
+</td>
+ <td> When compiling for 32 bits. Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>m</th><td>mesh to get data from</td></tr>
+ <tr><th>index</th><td>index of the vertex allocation</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Returns</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><td>allocation containing vertex data</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+ <p><b>Deprecated.</b> Do not use.</p>
+<p> Returns an allocation that is part of the mesh and contains
+vertex data, e.g. positions, normals, texcoords
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsgMeshGetVertexAllocationCount'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsgMeshGetVertexAllocationCount</span>
+ <span class='normal'>: Return the number of vertex allocations</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> rsgMeshGetVertexAllocationCount(<a href='rs_graphics.html#android_rs:rs_mesh'>rs_mesh</a> m);
+</td>
+ <td> When compiling for 32 bits. Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>m</th><td>mesh to get data from</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Returns</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><td>number of allocations in the mesh that contain vertex data</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+ <p><b>Deprecated.</b> Do not use.</p>
+<p> Returns the number of allocations in the mesh that contain
+vertex data
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsgProgramFragmentConstantColor'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsgProgramFragmentConstantColor</span>
+ <span class='normal'>: Set the constant color for a fixed function emulation program</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>void rsgProgramFragmentConstantColor(<a href='rs_graphics.html#android_rs:rs_program_fragment'>rs_program_fragment</a> pf, float r, float g, float b, float a);
+</td>
+ <td> When compiling for 32 bits.
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+ <p><b>Deprecated.</b> Do not use.</p>
+<p> Set the constant color for a fixed function emulation program.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsgProgramRasterGetCullMode'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsgProgramRasterGetCullMode</span>
+ <span class='normal'>: Get program raster cull mode</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td><a href='rs_graphics.html#android_rs:rs_cull_mode'>rs_cull_mode</a> rsgProgramRasterGetCullMode(<a href='rs_graphics.html#android_rs:rs_program_raster'>rs_program_raster</a> pr);
+</td>
+ <td> When compiling for 32 bits. Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>pr</th><td>program raster to query</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+ <p><b>Deprecated.</b> Do not use.</p>
+<p> Get program raster cull mode
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsgProgramRasterIsPointSpriteEnabled'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsgProgramRasterIsPointSpriteEnabled</span>
+ <span class='normal'>: Get program raster point sprite state</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>bool rsgProgramRasterIsPointSpriteEnabled(<a href='rs_graphics.html#android_rs:rs_program_raster'>rs_program_raster</a> pr);
+</td>
+ <td> When compiling for 32 bits. Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>pr</th><td>program raster to query</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+ <p><b>Deprecated.</b> Do not use.</p>
+<p> Get program raster point sprite state
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsgProgramStoreGetBlendDstFunc'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsgProgramStoreGetBlendDstFunc</span>
+ <span class='normal'>: Get program store blend destination function</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td><a href='rs_graphics.html#android_rs:rs_blend_dst_func'>rs_blend_dst_func</a> rsgProgramStoreGetBlendDstFunc(<a href='rs_graphics.html#android_rs:rs_program_store'>rs_program_store</a> ps);
+</td>
+ <td> When compiling for 32 bits. Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>ps</th><td>program store to query</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+ <p><b>Deprecated.</b> Do not use.</p>
+<p> Get program store blend destination function
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsgProgramStoreGetBlendSrcFunc'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsgProgramStoreGetBlendSrcFunc</span>
+ <span class='normal'>: Get program store blend source function</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td><a href='rs_graphics.html#android_rs:rs_blend_src_func'>rs_blend_src_func</a> rsgProgramStoreGetBlendSrcFunc(<a href='rs_graphics.html#android_rs:rs_program_store'>rs_program_store</a> ps);
+</td>
+ <td> When compiling for 32 bits. Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>ps</th><td>program store to query</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+ <p><b>Deprecated.</b> Do not use.</p>
+<p> Get program store blend source function
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsgProgramStoreGetDepthFunc'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsgProgramStoreGetDepthFunc</span>
+ <span class='normal'>: Get program store depth function</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td><a href='rs_graphics.html#android_rs:rs_depth_func'>rs_depth_func</a> rsgProgramStoreGetDepthFunc(<a href='rs_graphics.html#android_rs:rs_program_store'>rs_program_store</a> ps);
+</td>
+ <td> When compiling for 32 bits. Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>ps</th><td>program store to query</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+ <p><b>Deprecated.</b> Do not use.</p>
+<p> Get program store depth function
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsgProgramStoreIsColorMaskAlphaEnabled'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsgProgramStoreIsColorMaskAlphaEnabled</span>
+ <span class='normal'>: Get program store alpha component color mask</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>bool rsgProgramStoreIsColorMaskAlphaEnabled(<a href='rs_graphics.html#android_rs:rs_program_store'>rs_program_store</a> ps);
+</td>
+ <td> When compiling for 32 bits. Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>ps</th><td>program store to query</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+ <p><b>Deprecated.</b> Do not use.</p>
+<p> Get program store alpha component color mask
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsgProgramStoreIsColorMaskBlueEnabled'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsgProgramStoreIsColorMaskBlueEnabled</span>
+ <span class='normal'>: Get program store blur component color mask</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>bool rsgProgramStoreIsColorMaskBlueEnabled(<a href='rs_graphics.html#android_rs:rs_program_store'>rs_program_store</a> ps);
+</td>
+ <td> When compiling for 32 bits. Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>ps</th><td>program store to query</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+ <p><b>Deprecated.</b> Do not use.</p>
+<p> Get program store blur component color mask
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsgProgramStoreIsColorMaskGreenEnabled'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsgProgramStoreIsColorMaskGreenEnabled</span>
+ <span class='normal'>: Get program store green component color mask</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>bool rsgProgramStoreIsColorMaskGreenEnabled(<a href='rs_graphics.html#android_rs:rs_program_store'>rs_program_store</a> ps);
+</td>
+ <td> When compiling for 32 bits. Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>ps</th><td>program store to query</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+ <p><b>Deprecated.</b> Do not use.</p>
+<p> Get program store green component color mask
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsgProgramStoreIsColorMaskRedEnabled'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsgProgramStoreIsColorMaskRedEnabled</span>
+ <span class='normal'>: Get program store red component color mask</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>bool rsgProgramStoreIsColorMaskRedEnabled(<a href='rs_graphics.html#android_rs:rs_program_store'>rs_program_store</a> ps);
+</td>
+ <td> When compiling for 32 bits. Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>ps</th><td>program store to query</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+ <p><b>Deprecated.</b> Do not use.</p>
+<p> Get program store red component color mask
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsgProgramStoreIsDepthMaskEnabled'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsgProgramStoreIsDepthMaskEnabled</span>
+ <span class='normal'>: Get program store depth mask</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>bool rsgProgramStoreIsDepthMaskEnabled(<a href='rs_graphics.html#android_rs:rs_program_store'>rs_program_store</a> ps);
+</td>
+ <td> When compiling for 32 bits. Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>ps</th><td>program store to query</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+ <p><b>Deprecated.</b> Do not use.</p>
+<p> Get program store depth mask
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsgProgramStoreIsDitherEnabled'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsgProgramStoreIsDitherEnabled</span>
+ <span class='normal'>: Get program store dither state</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>bool rsgProgramStoreIsDitherEnabled(<a href='rs_graphics.html#android_rs:rs_program_store'>rs_program_store</a> ps);
+</td>
+ <td> When compiling for 32 bits. Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>ps</th><td>program store to query</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+ <p><b>Deprecated.</b> Do not use.</p>
+<p> Get program store dither state
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsgProgramVertexGetProjectionMatrix'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsgProgramVertexGetProjectionMatrix</span>
+ <span class='normal'>: Get the projection matrix for a fixed function vertex program</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>void rsgProgramVertexGetProjectionMatrix(<a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* proj);
+</td>
+ <td> When compiling for 32 bits.
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>proj</th><td>matrix to store the current projection matrix into</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+ <p><b>Deprecated.</b> Do not use.</p>
+<p> Get the projection matrix for a currently bound fixed function
+vertex program. Calling this function with a custom vertex shader
+would result in an error.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsgProgramVertexLoadModelMatrix'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsgProgramVertexLoadModelMatrix</span>
+ <span class='normal'>: Load the model matrix for a bound fixed function vertex program</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>void rsgProgramVertexLoadModelMatrix(const <a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* model);
+</td>
+ <td> When compiling for 32 bits.
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>model</th><td>model matrix</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+ <p><b>Deprecated.</b> Do not use.</p>
+<p> Load the model matrix for a currently bound fixed function
+vertex program. Calling this function with a custom vertex shader
+would result in an error.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsgProgramVertexLoadProjectionMatrix'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsgProgramVertexLoadProjectionMatrix</span>
+ <span class='normal'>: Load the projection matrix for a bound fixed function vertex program</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>void rsgProgramVertexLoadProjectionMatrix(const <a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* proj);
+</td>
+ <td> When compiling for 32 bits.
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>proj</th><td>projection matrix</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+ <p><b>Deprecated.</b> Do not use.</p>
+<p> Load the projection matrix for a currently bound fixed function
+vertex program. Calling this function with a custom vertex shader
+would result in an error.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsgProgramVertexLoadTextureMatrix'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsgProgramVertexLoadTextureMatrix</span>
+ <span class='normal'>: Load the texture matrix for a bound fixed function vertex program</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>void rsgProgramVertexLoadTextureMatrix(const <a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* tex);
+</td>
+ <td> When compiling for 32 bits.
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>tex</th><td>texture matrix</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+ <p><b>Deprecated.</b> Do not use.</p>
+<p> Load the texture matrix for a currently bound fixed function
+vertex program. Calling this function with a custom vertex shader
+would result in an error.
+</p>
+ </div>
+</div>
+
+</div>
diff --git a/docs/html/guide/topics/renderscript/reference/rs_io.jd b/docs/html/guide/topics/renderscript/reference/rs_io.jd
new file mode 100644
index 0000000..d02c804
--- /dev/null
+++ b/docs/html/guide/topics/renderscript/reference/rs_io.jd
@@ -0,0 +1,185 @@
+page.title=RenderScript Input/Output Functions
+
+@jd:body
+
+<div class='renderscript'>
+<h2>Overview</h2>
+<p> These functions are used to:<ul>
+<li>Send information to the Java client, and</li>
+<li>Send the processed allocation or receive the next allocation to process.</li></ul>
+</p>
+<h2>Summary</h2>
+<table class='jd-sumtable'><tbody>
+ <tr><th colspan='2'>Functions</th></tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_io.html#android_rs:rsAllocationIoReceive'>rsAllocationIoReceive</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Receive new content from the queue
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_io.html#android_rs:rsAllocationIoSend'>rsAllocationIoSend</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Send new content to the queue
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_io.html#android_rs:rsSendToClient'>rsSendToClient</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Send a message to the client, non-blocking
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_io.html#android_rs:rsSendToClientBlocking'>rsSendToClientBlocking</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Send a message to the client, blocking
+ </td>
+ </tr>
+</tbody></table>
+<h2>Functions</h2>
+<a name='android_rs:rsAllocationIoReceive'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsAllocationIoReceive</span>
+ <span class='normal'>: Receive new content from the queue</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>void rsAllocationIoReceive(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>a</th><td>Allocation to work on.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Receive a new set of contents from the queue.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsAllocationIoSend'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsAllocationIoSend</span>
+ <span class='normal'>: Send new content to the queue</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>void rsAllocationIoSend(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>a</th><td>Allocation to work on.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Send the contents of the Allocation to the queue.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsSendToClient'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsSendToClient</span>
+ <span class='normal'>: Send a message to the client, non-blocking</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>bool rsSendToClient(int cmdID);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>bool rsSendToClient(int cmdID, const void* data, <a href='rs_value_types.html#android_rs:uint'>uint</a> len);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>cmdID</th><td></td></tr>
+ <tr><th>data</th><td>Application specific data.</td></tr>
+ <tr><th>len</th><td>Length of the data, in bytes.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Sends a message back to the client. This call does not block.
+It returns true if the message was sent and false if the
+message queue is full.
+</p>
+
+<p> A message ID is required. The data payload is optional.
+</p>
+
+<p> See <a href='http://developer.android.com/reference/android/renderscript/RenderScript.RSMessageHandler.html'>RenderScript.RSMessageHandler</a>.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsSendToClientBlocking'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsSendToClientBlocking</span>
+ <span class='normal'>: Send a message to the client, blocking</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>void rsSendToClientBlocking(int cmdID);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>void rsSendToClientBlocking(int cmdID, const void* data, <a href='rs_value_types.html#android_rs:uint'>uint</a> len);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>cmdID</th><td></td></tr>
+ <tr><th>data</th><td>Application specific data.</td></tr>
+ <tr><th>len</th><td>Length of the data, in bytes.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Sends a message back to the client. This function will block
+until there is room on the message queue for this message.
+This function may return before the message was delivered and
+processed by the client.
+</p>
+
+<p> A message ID is required. The data payload is optional.
+</p>
+
+<p> See <a href='http://developer.android.com/reference/android/renderscript/RenderScript.RSMessageHandler.html'>RenderScript.RSMessageHandler</a>.
+</p>
+ </div>
+</div>
+
+</div>
diff --git a/docs/html/guide/topics/renderscript/reference/rs_math.jd b/docs/html/guide/topics/renderscript/reference/rs_math.jd
new file mode 100644
index 0000000..13513e9
--- /dev/null
+++ b/docs/html/guide/topics/renderscript/reference/rs_math.jd
@@ -0,0 +1,7251 @@
+page.title=RenderScript Mathematical Constants and Functions
+
+@jd:body
+
+<div class='renderscript'>
+<h2>Overview</h2>
+<p> The mathematical functions below can be applied to scalars and vectors. When applied
+to vectors, the returned value is a vector of the function applied to each entry of the input.
+</p>
+
+<p> For example:<code><br/>
+float3 a, b;<br/>
+// The following call sets<br/>
+// a.x to sin(b.x),<br/>
+// a.y to sin(b.y), and<br/>
+// a.z to sin(b.z).<br/>
+a = sin(b);<br/>
+</code>
+</p>
+
+<p> See <a href='rs_vector_math.html'>Vector Math Functions</a> for functions like <a href='rs_vector_math.html#android_rs:distance'>distance</a>() and <a href='rs_vector_math.html#android_rs:length'>length</a>() that interpret
+instead the input as a single vector in n-dimensional space.
+</p>
+
+<p> The precision of the mathematical operations on 32 bit floats is affected by the pragmas
+rs_fp_relaxed and rs_fp_full. Under rs_fp_relaxed, subnormal values may be flushed to zero and
+rounding may be done towards zero. In comparison, rs_fp_full requires correct handling of
+subnormal values, i.e. smaller than 1.17549435e-38f. rs_fp_rull also requires round to nearest
+with ties to even.
+</p>
+
+<p> Different precision/speed tradeoffs can be achieved by using variants of the common math
+functions. Functions with a name starting with<ul>
+<li>native_: May have custom hardware implementations with weaker precision. Additionally,
+ subnormal values may be flushed to zero, rounding towards zero may be used, and NaN and
+ infinity input may not be handled correctly.</li>
+<li>half_: May perform internal computations using 16 bit floats. Additionally, subnormal
+ values may be flushed to zero, and rounding towards zero may be used.</li>
+</ul>
+</p>
+<h2>Summary</h2>
+<table class='jd-sumtable'><tbody>
+ <tr><th colspan='2'>Constants</th></tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:M_1_PI'>M_1_PI</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ 1 / pi, as a 32 bit float
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:M_2_PI'>M_2_PI</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ 2 / pi, as a 32 bit float
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:M_2_SQRTPI'>M_2_SQRTPI</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ 2 / sqrt(pi), as a 32 bit float
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:M_E'>M_E</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ e, as a 32 bit float
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:M_LN10'>M_LN10</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ log_e(10), as a 32 bit float
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:M_LN2'>M_LN2</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ log_e(2), as a 32 bit float
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:M_LOG10E'>M_LOG10E</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ log_10(e), as a 32 bit float
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:M_LOG2E'>M_LOG2E</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ log_2(e), as a 32 bit float
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:M_PI'>M_PI</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ pi, as a 32 bit float
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:M_PI_2'>M_PI_2</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ pi / 2, as a 32 bit float
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:M_PI_4'>M_PI_4</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ pi / 4, as a 32 bit float
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:M_SQRT1_2'>M_SQRT1_2</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ 1 / sqrt(2), as a 32 bit float
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:M_SQRT2'>M_SQRT2</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ sqrt(2), as a 32 bit float
+ </td>
+ </tr>
+</tbody></table>
+<table class='jd-sumtable'><tbody>
+ <tr><th colspan='2'>Functions</th></tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:abs'>abs</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Absolute value of an integer
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:acos'>acos</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Inverse cosine
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:acosh'>acosh</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Inverse hyperbolic cosine
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:acospi'>acospi</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Inverse cosine divided by pi
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:asin'>asin</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Inverse sine
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:asinh'>asinh</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Inverse hyperbolic sine
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:asinpi'>asinpi</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Inverse sine divided by pi
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:atan'>atan</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Inverse tangent
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:atan2'>atan2</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Inverse tangent of a ratio
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:atan2pi'>atan2pi</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Inverse tangent of a ratio, divided by pi
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:atanh'>atanh</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Inverse hyperbolic tangent
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:atanpi'>atanpi</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Inverse tangent divided by pi
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:cbrt'>cbrt</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Cube root
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:ceil'>ceil</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Smallest integer not less than a value
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:clamp'>clamp</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Restrain a value to a range
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:clz'>clz</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Number of leading 0 bits
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:copysign'>copysign</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Copies the sign of a number to another
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:cos'>cos</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Cosine
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:cosh'>cosh</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Hypebolic cosine
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:cospi'>cospi</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Cosine of a number multiplied by pi
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:degrees'>degrees</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Converts radians into degrees
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:erf'>erf</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Mathematical error function
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:erfc'>erfc</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Mathematical complementary error function
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:exp'>exp</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ e raised to a number
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:exp10'>exp10</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ 10 raised to a number
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:exp2'>exp2</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ 2 raised to a number
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:expm1'>expm1</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ e raised to a number minus one
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:fabs'>fabs</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Absolute value of a float
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:fdim'>fdim</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Positive difference between two values
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:floor'>floor</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Smallest integer not greater than a value
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:fma'>fma</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Multiply and add
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:fmax'>fmax</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Maximum of two floats
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:fmin'>fmin</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Minimum of two floats
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:fmod'>fmod</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Modulo
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:fract'>fract</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Positive fractional part
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:frexp'>frexp</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Binary mantissa and exponent
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:half_recip'>half_recip</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Reciprocal computed to 16 bit precision
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:half_rsqrt'>half_rsqrt</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Reciprocal of a square root computed to 16 bit precision
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:half_sqrt'>half_sqrt</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Square root computed to 16 bit precision
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:hypot'>hypot</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Hypotenuse
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:ilogb'>ilogb</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Base two exponent
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:ldexp'>ldexp</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Creates a floating point from mantissa and exponent
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:lgamma'>lgamma</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Natural logarithm of the gamma function
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:log'>log</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Natural logarithm
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:log10'>log10</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Base 10 logarithm
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:log1p'>log1p</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Natural logarithm of a value plus 1
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:log2'>log2</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Base 2 logarithm
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:logb'>logb</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Base two exponent
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:mad'>mad</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Multiply and add
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:max'>max</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Maximum
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:min'>min</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Minimum
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:mix'>mix</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Mixes two values
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:modf'>modf</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Integral and fractional components
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:nan'>nan</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Not a Number
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_acos'>native_acos</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate inverse cosine
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_acosh'>native_acosh</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate inverse hyperbolic cosine
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_acospi'>native_acospi</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate inverse cosine divided by pi
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_asin'>native_asin</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate inverse sine
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_asinh'>native_asinh</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate inverse hyperbolic sine
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_asinpi'>native_asinpi</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate inverse sine divided by pi
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_atan'>native_atan</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate inverse tangent
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_atan2'>native_atan2</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate inverse tangent of a ratio
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_atan2pi'>native_atan2pi</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate inverse tangent of a ratio, divided by pi
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_atanh'>native_atanh</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate inverse hyperbolic tangent
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_atanpi'>native_atanpi</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate inverse tangent divided by pi
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_cbrt'>native_cbrt</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate cube root
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_cos'>native_cos</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate cosine
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_cosh'>native_cosh</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate hypebolic cosine
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_cospi'>native_cospi</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate cosine of a number multiplied by pi
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_divide'>native_divide</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate division
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_exp'>native_exp</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate e raised to a number
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_exp10'>native_exp10</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate 10 raised to a number
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_exp2'>native_exp2</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate 2 raised to a number
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_expm1'>native_expm1</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate e raised to a number minus one
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_hypot'>native_hypot</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate hypotenuse
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_log'>native_log</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate natural logarithm
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_log10'>native_log10</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate base 10 logarithm
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_log1p'>native_log1p</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate natural logarithm of a value plus 1
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_log2'>native_log2</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate base 2 logarithm
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_powr'>native_powr</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate positive base raised to an exponent
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_recip'>native_recip</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate reciprocal
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_rootn'>native_rootn</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate nth root
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_rsqrt'>native_rsqrt</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate reciprocal of a square root
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_sin'>native_sin</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate sine
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_sincos'>native_sincos</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate sine and cosine
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_sinh'>native_sinh</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate hyperbolic sine
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_sinpi'>native_sinpi</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate sine of a number multiplied by pi
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_sqrt'>native_sqrt</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate square root
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_tan'>native_tan</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate tangent
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_tanh'>native_tanh</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate hyperbolic tangent
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:native_tanpi'>native_tanpi</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate tangent of a number multiplied by pi
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:nextafter'>nextafter</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Next floating point number
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:pow'>pow</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Base raised to an exponent
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:pown'>pown</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Base raised to an integer exponent
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:powr'>powr</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Positive base raised to an exponent
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:radians'>radians</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Converts degrees into radians
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:remainder'>remainder</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Remainder of a division
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:remquo'>remquo</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Remainder and quotient of a division
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:rint'>rint</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Round to even
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:rootn'>rootn</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Nth root
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:round'>round</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Round away from zero
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:rsRand'>rsRand</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Pseudo-random number
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:rsqrt'>rsqrt</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Reciprocal of a square root
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:sign'>sign</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Sign of a value
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:sin'>sin</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Sine
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:sincos'>sincos</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Sine and cosine
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:sinh'>sinh</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Hyperbolic sine
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:sinpi'>sinpi</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Sine of a number multiplied by pi
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:sqrt'>sqrt</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Square root
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:step'>step</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ 0 if less than a value, 0 otherwise
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:tan'>tan</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Tangent
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:tanh'>tanh</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Hyperbolic tangent
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:tanpi'>tanpi</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Tangent of a number multiplied by pi
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:tgamma'>tgamma</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Gamma function
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:trunc'>trunc</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Truncates a floating point
+ </td>
+ </tr>
+</tbody></table>
+<table class='jd-sumtable'><tbody>
+ <tr><th colspan='2'>Deprecated Functions</th></tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:rsClamp'>rsClamp</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Restrain a value to a range
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_math.html#android_rs:rsFrac'>rsFrac</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Returns the fractional part of a float
+ </td>
+ </tr>
+</tbody></table>
+<h2>Constants</h2>
+<a name='android_rs:M_1_PI'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>M_1_PI</span>
+ <span class='normal'>: 1 / pi, as a 32 bit float</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr><td>Value: 0.318309886183790671537767526745028724f
+ </td></tr>
+<br/>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> The inverse of pi, as a 32 bit float.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:M_2_PI'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>M_2_PI</span>
+ <span class='normal'>: 2 / pi, as a 32 bit float</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr><td>Value: 0.636619772367581343075535053490057448f
+ </td></tr>
+<br/>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> 2 divided by pi, as a 32 bit float.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:M_2_SQRTPI'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>M_2_SQRTPI</span>
+ <span class='normal'>: 2 / sqrt(pi), as a 32 bit float</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr><td>Value: 1.128379167095512573896158903121545172f
+ </td></tr>
+<br/>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> 2 divided by the square root of pi, as a 32 bit float.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:M_E'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>M_E</span>
+ <span class='normal'>: e, as a 32 bit float</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr><td>Value: 2.718281828459045235360287471352662498f
+ </td></tr>
+<br/>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> The number e, the base of the natural logarithm, as a 32 bit float.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:M_LN10'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>M_LN10</span>
+ <span class='normal'>: log_e(10), as a 32 bit float</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr><td>Value: 2.302585092994045684017991454684364208f
+ </td></tr>
+<br/>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> The natural logarithm of 10, as a 32 bit float.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:M_LN2'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>M_LN2</span>
+ <span class='normal'>: log_e(2), as a 32 bit float</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr><td>Value: 0.693147180559945309417232121458176568f
+ </td></tr>
+<br/>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> The natural logarithm of 2, as a 32 bit float.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:M_LOG10E'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>M_LOG10E</span>
+ <span class='normal'>: log_10(e), as a 32 bit float</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr><td>Value: 0.434294481903251827651128918916605082f
+ </td></tr>
+<br/>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> The logarithm base 10 of e, as a 32 bit float.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:M_LOG2E'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>M_LOG2E</span>
+ <span class='normal'>: log_2(e), as a 32 bit float</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr><td>Value: 1.442695040888963407359924681001892137f
+ </td></tr>
+<br/>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> The logarithm base 2 of e, as a 32 bit float.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:M_PI'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>M_PI</span>
+ <span class='normal'>: pi, as a 32 bit float</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr><td>Value: 3.141592653589793238462643383279502884f
+ </td></tr>
+<br/>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> The constant pi, as a 32 bit float.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:M_PI_2'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>M_PI_2</span>
+ <span class='normal'>: pi / 2, as a 32 bit float</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr><td>Value: 1.570796326794896619231321691639751442f
+ </td></tr>
+<br/>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Pi divided by 2, as a 32 bit float.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:M_PI_4'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>M_PI_4</span>
+ <span class='normal'>: pi / 4, as a 32 bit float</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr><td>Value: 0.785398163397448309615660845819875721f
+ </td></tr>
+<br/>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Pi divided by 4, as a 32 bit float.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:M_SQRT1_2'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>M_SQRT1_2</span>
+ <span class='normal'>: 1 / sqrt(2), as a 32 bit float</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr><td>Value: 0.707106781186547524400844362104849039f
+ </td></tr>
+<br/>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> The inverse of the square root of 2, as a 32 bit float.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:M_SQRT2'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>M_SQRT2</span>
+ <span class='normal'>: sqrt(2), as a 32 bit float</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr><td>Value: 1.414213562373095048801688724209698079f
+ </td></tr>
+<br/>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> The square root of 2, as a 32 bit float.
+</p>
+ </div>
+</div>
+
+<h2>Functions</h2>
+<a name='android_rs:abs'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>abs</span>
+ <span class='normal'>: Absolute value of an integer</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar'>uchar</a> abs(char v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> abs(<a href='rs_value_types.html#android_rs:char2'>char2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> abs(<a href='rs_value_types.html#android_rs:char3'>char3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> abs(<a href='rs_value_types.html#android_rs:char4'>char4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint'>uint</a> abs(int v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint2'>uint2</a> abs(<a href='rs_value_types.html#android_rs:int2'>int2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint3'>uint3</a> abs(<a href='rs_value_types.html#android_rs:int3'>int3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint4'>uint4</a> abs(<a href='rs_value_types.html#android_rs:int4'>int4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort'>ushort</a> abs(short v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> abs(<a href='rs_value_types.html#android_rs:short2'>short2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> abs(<a href='rs_value_types.html#android_rs:short3'>short3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> abs(<a href='rs_value_types.html#android_rs:short4'>short4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the absolute value of an integer.
+</p>
+
+<p> For floats, use <a href='rs_math.html#android_rs:fabs'>fabs</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:acos'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>acos</span>
+ <span class='normal'>: Inverse cosine</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float acos(float v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> acos(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> acos(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> acos(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the inverse cosine, in radians.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:native_acos'>native_acos</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:acosh'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>acosh</span>
+ <span class='normal'>: Inverse hyperbolic cosine</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float acosh(float v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> acosh(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> acosh(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> acosh(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the inverse hyperbolic cosine, in radians.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:native_acosh'>native_acosh</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:acospi'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>acospi</span>
+ <span class='normal'>: Inverse cosine divided by pi</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float acospi(float v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> acospi(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> acospi(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> acospi(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the inverse cosine in radians, divided by pi.
+</p>
+
+<p> To get an inverse cosine measured in degrees, use <code>acospi(a) * 180.f</code>.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:native_acospi'>native_acospi</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:asin'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>asin</span>
+ <span class='normal'>: Inverse sine</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float asin(float v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> asin(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> asin(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> asin(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the inverse sine, in radians.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:native_asin'>native_asin</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:asinh'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>asinh</span>
+ <span class='normal'>: Inverse hyperbolic sine</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float asinh(float v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> asinh(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> asinh(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> asinh(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the inverse hyperbolic sine, in radians.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:native_asinh'>native_asinh</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:asinpi'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>asinpi</span>
+ <span class='normal'>: Inverse sine divided by pi</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float asinpi(float v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> asinpi(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> asinpi(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> asinpi(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the inverse sine in radians, divided by pi.
+</p>
+
+<p> To get an inverse sine measured in degrees, use <code>asinpi(a) * 180.f</code>.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:native_asinpi'>native_asinpi</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:atan'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>atan</span>
+ <span class='normal'>: Inverse tangent</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float atan(float v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> atan(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> atan(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> atan(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the inverse tangent, in radians.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:native_atan'>native_atan</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:atan2'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>atan2</span>
+ <span class='normal'>: Inverse tangent of a ratio</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float atan2(float numerator, float denominator);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> atan2(<a href='rs_value_types.html#android_rs:float2'>float2</a> numerator, <a href='rs_value_types.html#android_rs:float2'>float2</a> denominator);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> atan2(<a href='rs_value_types.html#android_rs:float3'>float3</a> numerator, <a href='rs_value_types.html#android_rs:float3'>float3</a> denominator);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> atan2(<a href='rs_value_types.html#android_rs:float4'>float4</a> numerator, <a href='rs_value_types.html#android_rs:float4'>float4</a> denominator);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>numerator</th><td>Numerator.</td></tr>
+ <tr><th>denominator</th><td>Denominator. Can be 0.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the inverse tangent of <code>(numerator / denominator)</code>, in radians.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:native_atan2'>native_atan2</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:atan2pi'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>atan2pi</span>
+ <span class='normal'>: Inverse tangent of a ratio, divided by pi</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float atan2pi(float numerator, float denominator);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> atan2pi(<a href='rs_value_types.html#android_rs:float2'>float2</a> numerator, <a href='rs_value_types.html#android_rs:float2'>float2</a> denominator);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> atan2pi(<a href='rs_value_types.html#android_rs:float3'>float3</a> numerator, <a href='rs_value_types.html#android_rs:float3'>float3</a> denominator);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> atan2pi(<a href='rs_value_types.html#android_rs:float4'>float4</a> numerator, <a href='rs_value_types.html#android_rs:float4'>float4</a> denominator);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>numerator</th><td>Numerator.</td></tr>
+ <tr><th>denominator</th><td>Denominator. Can be 0.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the inverse tangent of <code>(numerator / denominator)</code>, in radians, divided by pi.
+</p>
+
+<p> To get an inverse tangent measured in degrees, use <code>atan2pi(n, d) * 180.f</code>.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:native_atan2pi'>native_atan2pi</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:atanh'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>atanh</span>
+ <span class='normal'>: Inverse hyperbolic tangent</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float atanh(float v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> atanh(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> atanh(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> atanh(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the inverse hyperbolic tangent, in radians.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:native_atanh'>native_atanh</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:atanpi'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>atanpi</span>
+ <span class='normal'>: Inverse tangent divided by pi</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float atanpi(float v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> atanpi(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> atanpi(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> atanpi(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the inverse tangent in radians, divided by pi.
+</p>
+
+<p> To get an inverse tangent measured in degrees, use <code>atanpi(a) * 180.f</code>.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:native_atanpi'>native_atanpi</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:cbrt'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>cbrt</span>
+ <span class='normal'>: Cube root</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float cbrt(float v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> cbrt(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> cbrt(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> cbrt(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the cube root.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:native_cbrt'>native_cbrt</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:ceil'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>ceil</span>
+ <span class='normal'>: Smallest integer not less than a value</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float ceil(float v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> ceil(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> ceil(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> ceil(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the smallest integer not less than a value.
+</p>
+
+<p> For example, <code>ceil(1.2f)</code> returns 2.f, and <code>ceil(-1.2f)</code> returns -1.f.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:floor'>floor</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:clamp'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>clamp</span>
+ <span class='normal'>: Restrain a value to a range</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>char clamp(char value, char min_value, char max_value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:char2'>char2</a> clamp(<a href='rs_value_types.html#android_rs:char2'>char2</a> value, char min_value, char max_value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:char2'>char2</a> clamp(<a href='rs_value_types.html#android_rs:char2'>char2</a> value, <a href='rs_value_types.html#android_rs:char2'>char2</a> min_value, <a href='rs_value_types.html#android_rs:char2'>char2</a> max_value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:char3'>char3</a> clamp(<a href='rs_value_types.html#android_rs:char3'>char3</a> value, char min_value, char max_value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:char3'>char3</a> clamp(<a href='rs_value_types.html#android_rs:char3'>char3</a> value, <a href='rs_value_types.html#android_rs:char3'>char3</a> min_value, <a href='rs_value_types.html#android_rs:char3'>char3</a> max_value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:char4'>char4</a> clamp(<a href='rs_value_types.html#android_rs:char4'>char4</a> value, char min_value, char max_value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:char4'>char4</a> clamp(<a href='rs_value_types.html#android_rs:char4'>char4</a> value, <a href='rs_value_types.html#android_rs:char4'>char4</a> min_value, <a href='rs_value_types.html#android_rs:char4'>char4</a> max_value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+ </td>
+ </tr>
+ <tr>
+ <td>float clamp(float value, float min_value, float max_value);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> clamp(<a href='rs_value_types.html#android_rs:float2'>float2</a> value, float min_value, float max_value);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> clamp(<a href='rs_value_types.html#android_rs:float2'>float2</a> value, <a href='rs_value_types.html#android_rs:float2'>float2</a> min_value, <a href='rs_value_types.html#android_rs:float2'>float2</a> max_value);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> clamp(<a href='rs_value_types.html#android_rs:float3'>float3</a> value, float min_value, float max_value);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> clamp(<a href='rs_value_types.html#android_rs:float3'>float3</a> value, <a href='rs_value_types.html#android_rs:float3'>float3</a> min_value, <a href='rs_value_types.html#android_rs:float3'>float3</a> max_value);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> clamp(<a href='rs_value_types.html#android_rs:float4'>float4</a> value, float min_value, float max_value);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> clamp(<a href='rs_value_types.html#android_rs:float4'>float4</a> value, <a href='rs_value_types.html#android_rs:float4'>float4</a> min_value, <a href='rs_value_types.html#android_rs:float4'>float4</a> max_value);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>int clamp(int value, int min_value, int max_value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int2'>int2</a> clamp(<a href='rs_value_types.html#android_rs:int2'>int2</a> value, int min_value, int max_value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int2'>int2</a> clamp(<a href='rs_value_types.html#android_rs:int2'>int2</a> value, <a href='rs_value_types.html#android_rs:int2'>int2</a> min_value, <a href='rs_value_types.html#android_rs:int2'>int2</a> max_value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int3'>int3</a> clamp(<a href='rs_value_types.html#android_rs:int3'>int3</a> value, int min_value, int max_value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int3'>int3</a> clamp(<a href='rs_value_types.html#android_rs:int3'>int3</a> value, <a href='rs_value_types.html#android_rs:int3'>int3</a> min_value, <a href='rs_value_types.html#android_rs:int3'>int3</a> max_value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int4'>int4</a> clamp(<a href='rs_value_types.html#android_rs:int4'>int4</a> value, int min_value, int max_value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int4'>int4</a> clamp(<a href='rs_value_types.html#android_rs:int4'>int4</a> value, <a href='rs_value_types.html#android_rs:int4'>int4</a> min_value, <a href='rs_value_types.html#android_rs:int4'>int4</a> max_value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+ </td>
+ </tr>
+ <tr>
+ <td>long clamp(long value, long min_value, long max_value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:long2'>long2</a> clamp(<a href='rs_value_types.html#android_rs:long2'>long2</a> value, long min_value, long max_value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:long2'>long2</a> clamp(<a href='rs_value_types.html#android_rs:long2'>long2</a> value, <a href='rs_value_types.html#android_rs:long2'>long2</a> min_value, <a href='rs_value_types.html#android_rs:long2'>long2</a> max_value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:long3'>long3</a> clamp(<a href='rs_value_types.html#android_rs:long3'>long3</a> value, long min_value, long max_value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:long3'>long3</a> clamp(<a href='rs_value_types.html#android_rs:long3'>long3</a> value, <a href='rs_value_types.html#android_rs:long3'>long3</a> min_value, <a href='rs_value_types.html#android_rs:long3'>long3</a> max_value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:long4'>long4</a> clamp(<a href='rs_value_types.html#android_rs:long4'>long4</a> value, long min_value, long max_value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:long4'>long4</a> clamp(<a href='rs_value_types.html#android_rs:long4'>long4</a> value, <a href='rs_value_types.html#android_rs:long4'>long4</a> min_value, <a href='rs_value_types.html#android_rs:long4'>long4</a> max_value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+ </td>
+ </tr>
+ <tr>
+ <td>short clamp(short value, short min_value, short max_value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:short2'>short2</a> clamp(<a href='rs_value_types.html#android_rs:short2'>short2</a> value, short min_value, short max_value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:short2'>short2</a> clamp(<a href='rs_value_types.html#android_rs:short2'>short2</a> value, <a href='rs_value_types.html#android_rs:short2'>short2</a> min_value, <a href='rs_value_types.html#android_rs:short2'>short2</a> max_value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:short3'>short3</a> clamp(<a href='rs_value_types.html#android_rs:short3'>short3</a> value, short min_value, short max_value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:short3'>short3</a> clamp(<a href='rs_value_types.html#android_rs:short3'>short3</a> value, <a href='rs_value_types.html#android_rs:short3'>short3</a> min_value, <a href='rs_value_types.html#android_rs:short3'>short3</a> max_value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:short4'>short4</a> clamp(<a href='rs_value_types.html#android_rs:short4'>short4</a> value, short min_value, short max_value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:short4'>short4</a> clamp(<a href='rs_value_types.html#android_rs:short4'>short4</a> value, <a href='rs_value_types.html#android_rs:short4'>short4</a> min_value, <a href='rs_value_types.html#android_rs:short4'>short4</a> max_value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar'>uchar</a> clamp(<a href='rs_value_types.html#android_rs:uchar'>uchar</a> value, <a href='rs_value_types.html#android_rs:uchar'>uchar</a> min_value, <a href='rs_value_types.html#android_rs:uchar'>uchar</a> max_value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> clamp(<a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> value, <a href='rs_value_types.html#android_rs:uchar'>uchar</a> min_value, <a href='rs_value_types.html#android_rs:uchar'>uchar</a> max_value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> clamp(<a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> value, <a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> min_value, <a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> max_value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> clamp(<a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> value, <a href='rs_value_types.html#android_rs:uchar'>uchar</a> min_value, <a href='rs_value_types.html#android_rs:uchar'>uchar</a> max_value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> clamp(<a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> value, <a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> min_value, <a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> max_value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> clamp(<a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> value, <a href='rs_value_types.html#android_rs:uchar'>uchar</a> min_value, <a href='rs_value_types.html#android_rs:uchar'>uchar</a> max_value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> clamp(<a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> value, <a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> min_value, <a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> max_value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint'>uint</a> clamp(<a href='rs_value_types.html#android_rs:uint'>uint</a> value, <a href='rs_value_types.html#android_rs:uint'>uint</a> min_value, <a href='rs_value_types.html#android_rs:uint'>uint</a> max_value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint2'>uint2</a> clamp(<a href='rs_value_types.html#android_rs:uint2'>uint2</a> value, <a href='rs_value_types.html#android_rs:uint'>uint</a> min_value, <a href='rs_value_types.html#android_rs:uint'>uint</a> max_value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint2'>uint2</a> clamp(<a href='rs_value_types.html#android_rs:uint2'>uint2</a> value, <a href='rs_value_types.html#android_rs:uint2'>uint2</a> min_value, <a href='rs_value_types.html#android_rs:uint2'>uint2</a> max_value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint3'>uint3</a> clamp(<a href='rs_value_types.html#android_rs:uint3'>uint3</a> value, <a href='rs_value_types.html#android_rs:uint'>uint</a> min_value, <a href='rs_value_types.html#android_rs:uint'>uint</a> max_value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint3'>uint3</a> clamp(<a href='rs_value_types.html#android_rs:uint3'>uint3</a> value, <a href='rs_value_types.html#android_rs:uint3'>uint3</a> min_value, <a href='rs_value_types.html#android_rs:uint3'>uint3</a> max_value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint4'>uint4</a> clamp(<a href='rs_value_types.html#android_rs:uint4'>uint4</a> value, <a href='rs_value_types.html#android_rs:uint'>uint</a> min_value, <a href='rs_value_types.html#android_rs:uint'>uint</a> max_value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint4'>uint4</a> clamp(<a href='rs_value_types.html#android_rs:uint4'>uint4</a> value, <a href='rs_value_types.html#android_rs:uint4'>uint4</a> min_value, <a href='rs_value_types.html#android_rs:uint4'>uint4</a> max_value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ulong'>ulong</a> clamp(<a href='rs_value_types.html#android_rs:ulong'>ulong</a> value, <a href='rs_value_types.html#android_rs:ulong'>ulong</a> min_value, <a href='rs_value_types.html#android_rs:ulong'>ulong</a> max_value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> clamp(<a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> value, <a href='rs_value_types.html#android_rs:ulong'>ulong</a> min_value, <a href='rs_value_types.html#android_rs:ulong'>ulong</a> max_value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> clamp(<a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> value, <a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> min_value, <a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> max_value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> clamp(<a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> value, <a href='rs_value_types.html#android_rs:ulong'>ulong</a> min_value, <a href='rs_value_types.html#android_rs:ulong'>ulong</a> max_value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> clamp(<a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> value, <a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> min_value, <a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> max_value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> clamp(<a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> value, <a href='rs_value_types.html#android_rs:ulong'>ulong</a> min_value, <a href='rs_value_types.html#android_rs:ulong'>ulong</a> max_value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> clamp(<a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> value, <a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> min_value, <a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> max_value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort'>ushort</a> clamp(<a href='rs_value_types.html#android_rs:ushort'>ushort</a> value, <a href='rs_value_types.html#android_rs:ushort'>ushort</a> min_value, <a href='rs_value_types.html#android_rs:ushort'>ushort</a> max_value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> clamp(<a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> value, <a href='rs_value_types.html#android_rs:ushort'>ushort</a> min_value, <a href='rs_value_types.html#android_rs:ushort'>ushort</a> max_value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> clamp(<a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> value, <a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> min_value, <a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> max_value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> clamp(<a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> value, <a href='rs_value_types.html#android_rs:ushort'>ushort</a> min_value, <a href='rs_value_types.html#android_rs:ushort'>ushort</a> max_value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> clamp(<a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> value, <a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> min_value, <a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> max_value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> clamp(<a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> value, <a href='rs_value_types.html#android_rs:ushort'>ushort</a> min_value, <a href='rs_value_types.html#android_rs:ushort'>ushort</a> max_value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> clamp(<a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> value, <a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> min_value, <a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> max_value);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 19</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>value</th><td>Value to be clamped.</td></tr>
+ <tr><th>min_value</th><td>Lower bound, a scalar or matching vector.</td></tr>
+ <tr><th>max_value</th><td>High bound, must match the type of low.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Clamps a value to a specified high and low bound. clamp() returns min_value
+if value < min_value, max_value if value > max_value, otherwise value.
+</p>
+
+<p> There are two variants of clamp: one where the min and max are scalars applied
+to all entries of the value, the other where the min and max are also vectors.
+</p>
+
+<p> If min_value is greater than max_value, the results are undefined.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:clz'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>clz</span>
+ <span class='normal'>: Number of leading 0 bits</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>char clz(char value);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:char2'>char2</a> clz(<a href='rs_value_types.html#android_rs:char2'>char2</a> value);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:char3'>char3</a> clz(<a href='rs_value_types.html#android_rs:char3'>char3</a> value);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:char4'>char4</a> clz(<a href='rs_value_types.html#android_rs:char4'>char4</a> value);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>int clz(int value);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int2'>int2</a> clz(<a href='rs_value_types.html#android_rs:int2'>int2</a> value);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int3'>int3</a> clz(<a href='rs_value_types.html#android_rs:int3'>int3</a> value);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int4'>int4</a> clz(<a href='rs_value_types.html#android_rs:int4'>int4</a> value);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>short clz(short value);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:short2'>short2</a> clz(<a href='rs_value_types.html#android_rs:short2'>short2</a> value);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:short3'>short3</a> clz(<a href='rs_value_types.html#android_rs:short3'>short3</a> value);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:short4'>short4</a> clz(<a href='rs_value_types.html#android_rs:short4'>short4</a> value);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar'>uchar</a> clz(<a href='rs_value_types.html#android_rs:uchar'>uchar</a> value);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> clz(<a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> value);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> clz(<a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> value);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> clz(<a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> value);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint'>uint</a> clz(<a href='rs_value_types.html#android_rs:uint'>uint</a> value);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint2'>uint2</a> clz(<a href='rs_value_types.html#android_rs:uint2'>uint2</a> value);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint3'>uint3</a> clz(<a href='rs_value_types.html#android_rs:uint3'>uint3</a> value);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint4'>uint4</a> clz(<a href='rs_value_types.html#android_rs:uint4'>uint4</a> value);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort'>ushort</a> clz(<a href='rs_value_types.html#android_rs:ushort'>ushort</a> value);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> clz(<a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> value);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> clz(<a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> value);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> clz(<a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> value);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the number of leading 0-bits in a value.
+</p>
+
+<p> For example, <code>clz((char)0x03)</code> returns 6.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:copysign'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>copysign</span>
+ <span class='normal'>: Copies the sign of a number to another</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float copysign(float magnitude_value, float sign_value);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> copysign(<a href='rs_value_types.html#android_rs:float2'>float2</a> magnitude_value, <a href='rs_value_types.html#android_rs:float2'>float2</a> sign_value);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> copysign(<a href='rs_value_types.html#android_rs:float3'>float3</a> magnitude_value, <a href='rs_value_types.html#android_rs:float3'>float3</a> sign_value);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> copysign(<a href='rs_value_types.html#android_rs:float4'>float4</a> magnitude_value, <a href='rs_value_types.html#android_rs:float4'>float4</a> sign_value);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Copies the sign from sign_value to magnitude_value.
+</p>
+
+<p> The value returned is either magnitude_value or -magnitude_value.
+</p>
+
+<p> For example, <code>copysign(4.0f, -2.7f)</code> returns -4.0f and <code>copysign(-4.0f, 2.7f)</code> returns 4.0f.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:cos'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>cos</span>
+ <span class='normal'>: Cosine</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float cos(float v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> cos(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> cos(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> cos(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the cosine of an angle measured in radians.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:native_cos'>native_cos</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:cosh'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>cosh</span>
+ <span class='normal'>: Hypebolic cosine</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float cosh(float v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> cosh(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> cosh(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> cosh(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the hypebolic cosine of v, where v is measured in radians.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:native_cosh'>native_cosh</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:cospi'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>cospi</span>
+ <span class='normal'>: Cosine of a number multiplied by pi</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float cospi(float v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> cospi(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> cospi(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> cospi(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the cosine of <code>(v * pi)</code>, where <code>(v * pi)</code> is measured in radians.
+</p>
+
+<p> To get the cosine of a value measured in degrees, call <code>cospi(v / 180.f)</code>.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:native_cospi'>native_cospi</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:degrees'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>degrees</span>
+ <span class='normal'>: Converts radians into degrees</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float degrees(float v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> degrees(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> degrees(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> degrees(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Converts from radians to degrees.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:erf'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>erf</span>
+ <span class='normal'>: Mathematical error function</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float erf(float v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> erf(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> erf(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> erf(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the error function.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:erfc'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>erfc</span>
+ <span class='normal'>: Mathematical complementary error function</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float erfc(float v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> erfc(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> erfc(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> erfc(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the complementary error function.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:exp'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>exp</span>
+ <span class='normal'>: e raised to a number</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float exp(float v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> exp(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> exp(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> exp(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns e raised to v, i.e. e ^ v.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:native_exp'>native_exp</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:exp10'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>exp10</span>
+ <span class='normal'>: 10 raised to a number</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float exp10(float v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> exp10(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> exp10(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> exp10(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns 10 raised to v, i.e. 10.f ^ v.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:native_exp10'>native_exp10</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:exp2'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>exp2</span>
+ <span class='normal'>: 2 raised to a number</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float exp2(float v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> exp2(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> exp2(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> exp2(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns 2 raised to v, i.e. 2.f ^ v.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:native_exp2'>native_exp2</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:expm1'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>expm1</span>
+ <span class='normal'>: e raised to a number minus one</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float expm1(float v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> expm1(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> expm1(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> expm1(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns e raised to v minus 1, i.e. (e ^ v) - 1.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:native_expm1'>native_expm1</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:fabs'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>fabs</span>
+ <span class='normal'>: Absolute value of a float</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float fabs(float v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> fabs(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> fabs(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> fabs(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the absolute value of the float v.
+</p>
+
+<p> For integers, use <a href='rs_math.html#android_rs:abs'>abs</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:fdim'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>fdim</span>
+ <span class='normal'>: Positive difference between two values</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float fdim(float a, float b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> fdim(<a href='rs_value_types.html#android_rs:float2'>float2</a> a, <a href='rs_value_types.html#android_rs:float2'>float2</a> b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> fdim(<a href='rs_value_types.html#android_rs:float3'>float3</a> a, <a href='rs_value_types.html#android_rs:float3'>float3</a> b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> fdim(<a href='rs_value_types.html#android_rs:float4'>float4</a> a, <a href='rs_value_types.html#android_rs:float4'>float4</a> b);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the positive difference between two values.
+</p>
+
+<p> If a > b, returns (a - b) otherwise returns 0f.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:floor'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>floor</span>
+ <span class='normal'>: Smallest integer not greater than a value</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float floor(float v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> floor(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> floor(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> floor(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the smallest integer not greater than a value.
+</p>
+
+<p> For example, <code>floor(1.2f)</code> returns 1.f, and <code>floor(-1.2f)</code> returns -2.f.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:ceil'>ceil</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:fma'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>fma</span>
+ <span class='normal'>: Multiply and add</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float fma(float multiplicand1, float multiplicand2, float offset);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> fma(<a href='rs_value_types.html#android_rs:float2'>float2</a> multiplicand1, <a href='rs_value_types.html#android_rs:float2'>float2</a> multiplicand2, <a href='rs_value_types.html#android_rs:float2'>float2</a> offset);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> fma(<a href='rs_value_types.html#android_rs:float3'>float3</a> multiplicand1, <a href='rs_value_types.html#android_rs:float3'>float3</a> multiplicand2, <a href='rs_value_types.html#android_rs:float3'>float3</a> offset);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> fma(<a href='rs_value_types.html#android_rs:float4'>float4</a> multiplicand1, <a href='rs_value_types.html#android_rs:float4'>float4</a> multiplicand2, <a href='rs_value_types.html#android_rs:float4'>float4</a> offset);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Multiply and add. Returns <code>(multiplicand1 * multiplicand2) + offset</code>.
+</p>
+
+<p> This function is similar to <a href='rs_math.html#android_rs:mad'>mad</a>(). fma() retains full precision of the multiplied result
+and rounds only after the addition. <a href='rs_math.html#android_rs:mad'>mad</a>() rounds after the multiplication and the addition.
+This extra precision is not guaranteed in rs_fp_relaxed mode.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:fmax'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>fmax</span>
+ <span class='normal'>: Maximum of two floats</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float fmax(float a, float b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> fmax(<a href='rs_value_types.html#android_rs:float2'>float2</a> a, float b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> fmax(<a href='rs_value_types.html#android_rs:float2'>float2</a> a, <a href='rs_value_types.html#android_rs:float2'>float2</a> b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> fmax(<a href='rs_value_types.html#android_rs:float3'>float3</a> a, float b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> fmax(<a href='rs_value_types.html#android_rs:float3'>float3</a> a, <a href='rs_value_types.html#android_rs:float3'>float3</a> b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> fmax(<a href='rs_value_types.html#android_rs:float4'>float4</a> a, float b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> fmax(<a href='rs_value_types.html#android_rs:float4'>float4</a> a, <a href='rs_value_types.html#android_rs:float4'>float4</a> b);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the maximum of a and b, i.e. <code>(a < b ? b : a)</code>.
+</p>
+
+<p> The <a href='rs_math.html#android_rs:max'>max</a>() function returns identical results but can be applied to more data types.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:fmin'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>fmin</span>
+ <span class='normal'>: Minimum of two floats</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float fmin(float a, float b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> fmin(<a href='rs_value_types.html#android_rs:float2'>float2</a> a, float b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> fmin(<a href='rs_value_types.html#android_rs:float2'>float2</a> a, <a href='rs_value_types.html#android_rs:float2'>float2</a> b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> fmin(<a href='rs_value_types.html#android_rs:float3'>float3</a> a, float b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> fmin(<a href='rs_value_types.html#android_rs:float3'>float3</a> a, <a href='rs_value_types.html#android_rs:float3'>float3</a> b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> fmin(<a href='rs_value_types.html#android_rs:float4'>float4</a> a, float b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> fmin(<a href='rs_value_types.html#android_rs:float4'>float4</a> a, <a href='rs_value_types.html#android_rs:float4'>float4</a> b);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the minimum of a and b, i.e. <code>(a > b ? b : a)</code>.
+</p>
+
+<p> The <a href='rs_math.html#android_rs:min'>min</a>() function returns identical results but can be applied to more data types.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:fmod'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>fmod</span>
+ <span class='normal'>: Modulo</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float fmod(float numerator, float denominator);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> fmod(<a href='rs_value_types.html#android_rs:float2'>float2</a> numerator, <a href='rs_value_types.html#android_rs:float2'>float2</a> denominator);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> fmod(<a href='rs_value_types.html#android_rs:float3'>float3</a> numerator, <a href='rs_value_types.html#android_rs:float3'>float3</a> denominator);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> fmod(<a href='rs_value_types.html#android_rs:float4'>float4</a> numerator, <a href='rs_value_types.html#android_rs:float4'>float4</a> denominator);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the remainder of (numerator / denominator), where the quotient is rounded towards zero.
+</p>
+
+<p> The function <a href='rs_math.html#android_rs:remainder'>remainder</a>() is similar but rounds toward the closest interger.
+For example, <code>fmod(-3.8f, 2.f)</code> returns -1.8f (-3.8f - -1.f * 2.f)
+while <code><a href='rs_math.html#android_rs:remainder'>remainder</a>(-3.8f, 2.f)</code> returns 0.2f (-3.8f - -2.f * 2.f).
+</p>
+ </div>
+</div>
+
+<a name='android_rs:fract'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>fract</span>
+ <span class='normal'>: Positive fractional part</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float fract(float v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>float fract(float v, float* floor);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> fract(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> fract(<a href='rs_value_types.html#android_rs:float2'>float2</a> v, <a href='rs_value_types.html#android_rs:float2'>float2</a>* floor);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> fract(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> fract(<a href='rs_value_types.html#android_rs:float3'>float3</a> v, <a href='rs_value_types.html#android_rs:float3'>float3</a>* floor);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> fract(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> fract(<a href='rs_value_types.html#android_rs:float4'>float4</a> v, <a href='rs_value_types.html#android_rs:float4'>float4</a>* floor);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>v</th><td>Input value.</td></tr>
+ <tr><th>floor</th><td>If floor is not null, *floor will be set to the floor of v.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the positive fractional part of v, i.e. <code>v - floor(v)</code>.
+</p>
+
+<p> For example, <code>fract(1.3f, &val)</code> returns 0.3f and sets val to 1.f.
+<code>fract(-1.3f, &val)</code> returns 0.7f and sets val to -2.f.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:frexp'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>frexp</span>
+ <span class='normal'>: Binary mantissa and exponent</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float frexp(float v, int* exponent);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> frexp(<a href='rs_value_types.html#android_rs:float2'>float2</a> v, <a href='rs_value_types.html#android_rs:int2'>int2</a>* exponent);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> frexp(<a href='rs_value_types.html#android_rs:float3'>float3</a> v, <a href='rs_value_types.html#android_rs:int3'>int3</a>* exponent);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> frexp(<a href='rs_value_types.html#android_rs:float4'>float4</a> v, <a href='rs_value_types.html#android_rs:int4'>int4</a>* exponent);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>v</th><td>Input value.</td></tr>
+ <tr><th>exponent</th><td>If exponent is not null, *exponent will be set to the exponent of v.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the binary mantissa and exponent of v, i.e. <code>v == mantissa * 2 ^ exponent</code>.
+</p>
+
+<p> The mantissa is always between 0.5 (inclusive) and 1.0 (exclusive).
+</p>
+
+<p> See <a href='rs_math.html#android_rs:ldexp'>ldexp</a>() for the reverse operation. See also <a href='rs_math.html#android_rs:logb'>logb</a>() and <a href='rs_math.html#android_rs:ilogb'>ilogb</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:half_recip'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>half_recip</span>
+ <span class='normal'>: Reciprocal computed to 16 bit precision</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float half_recip(float v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> half_recip(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> half_recip(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> half_recip(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the approximate reciprocal of a value.
+</p>
+
+<p> The precision is that of a 16 bit floating point value.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:native_recip'>native_recip</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:half_rsqrt'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>half_rsqrt</span>
+ <span class='normal'>: Reciprocal of a square root computed to 16 bit precision</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float half_rsqrt(float v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> half_rsqrt(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> half_rsqrt(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> half_rsqrt(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the approximate value of <code>(1.f / sqrt(value))</code>.
+</p>
+
+<p> The precision is that of a 16 bit floating point value.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:rsqrt'>rsqrt</a>(), <a href='rs_math.html#android_rs:native_rsqrt'>native_rsqrt</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:half_sqrt'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>half_sqrt</span>
+ <span class='normal'>: Square root computed to 16 bit precision</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float half_sqrt(float v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> half_sqrt(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> half_sqrt(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> half_sqrt(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the approximate square root of a value.
+</p>
+
+<p> The precision is that of a 16 bit floating point value.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:sqrt'>sqrt</a>(), <a href='rs_math.html#android_rs:native_sqrt'>native_sqrt</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:hypot'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>hypot</span>
+ <span class='normal'>: Hypotenuse</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float hypot(float a, float b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> hypot(<a href='rs_value_types.html#android_rs:float2'>float2</a> a, <a href='rs_value_types.html#android_rs:float2'>float2</a> b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> hypot(<a href='rs_value_types.html#android_rs:float3'>float3</a> a, <a href='rs_value_types.html#android_rs:float3'>float3</a> b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> hypot(<a href='rs_value_types.html#android_rs:float4'>float4</a> a, <a href='rs_value_types.html#android_rs:float4'>float4</a> b);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the hypotenuse, i.e. <code>sqrt(a * a + b * b)</code>.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:native_hypot'>native_hypot</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:ilogb'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>ilogb</span>
+ <span class='normal'>: Base two exponent</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>int ilogb(float v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int2'>int2</a> ilogb(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int3'>int3</a> ilogb(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int4'>int4</a> ilogb(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the base two exponent of a value, where the mantissa is between
+1.f (inclusive) and 2.f (exclusive).
+</p>
+
+<p> For example, <code>ilogb(8.5f)</code> returns 3.
+</p>
+
+<p> Because of the difference in mantissa, this number is one less than is returned by <a href='rs_math.html#android_rs:frexp'>frexp</a>().
+</p>
+
+<p> <a href='rs_math.html#android_rs:logb'>logb</a>() is similar but returns a float.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:ldexp'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>ldexp</span>
+ <span class='normal'>: Creates a floating point from mantissa and exponent</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float ldexp(float mantissa, int exponent);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> ldexp(<a href='rs_value_types.html#android_rs:float2'>float2</a> mantissa, int exponent);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> ldexp(<a href='rs_value_types.html#android_rs:float2'>float2</a> mantissa, <a href='rs_value_types.html#android_rs:int2'>int2</a> exponent);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> ldexp(<a href='rs_value_types.html#android_rs:float3'>float3</a> mantissa, int exponent);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> ldexp(<a href='rs_value_types.html#android_rs:float3'>float3</a> mantissa, <a href='rs_value_types.html#android_rs:int3'>int3</a> exponent);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> ldexp(<a href='rs_value_types.html#android_rs:float4'>float4</a> mantissa, int exponent);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> ldexp(<a href='rs_value_types.html#android_rs:float4'>float4</a> mantissa, <a href='rs_value_types.html#android_rs:int4'>int4</a> exponent);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>mantissa</th><td>Mantissa.</td></tr>
+ <tr><th>exponent</th><td>Exponent, a single component or matching vector.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the floating point created from the mantissa and exponent,
+i.e. (mantissa * 2 ^ exponent).
+</p>
+
+<p> See <a href='rs_math.html#android_rs:frexp'>frexp</a>() for the reverse operation.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:lgamma'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>lgamma</span>
+ <span class='normal'>: Natural logarithm of the gamma function</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float lgamma(float v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>float lgamma(float v, int* sign_of_gamma);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> lgamma(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> lgamma(<a href='rs_value_types.html#android_rs:float2'>float2</a> v, <a href='rs_value_types.html#android_rs:int2'>int2</a>* sign_of_gamma);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> lgamma(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> lgamma(<a href='rs_value_types.html#android_rs:float3'>float3</a> v, <a href='rs_value_types.html#android_rs:int3'>int3</a>* sign_of_gamma);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> lgamma(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> lgamma(<a href='rs_value_types.html#android_rs:float4'>float4</a> v, <a href='rs_value_types.html#android_rs:int4'>int4</a>* sign_of_gamma);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>v</th><td></td></tr>
+ <tr><th>sign_of_gamma</th><td>If sign_of_gamma is not null, *sign_of_gamma will be set to -1.f if the gamma of v is negative, otherwise to 1.f.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the natural logarithm of the absolute value of the gamma function,
+i.e. <code><a href='rs_math.html#android_rs:log'>log</a>(<a href='rs_math.html#android_rs:fabs'>fabs</a>(<a href='rs_math.html#android_rs:tgamma'>tgamma</a>(v)))</code>.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:tgamma'>tgamma</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:log'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>log</span>
+ <span class='normal'>: Natural logarithm</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float log(float v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> log(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> log(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> log(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the natural logarithm.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:native_log'>native_log</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:log10'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>log10</span>
+ <span class='normal'>: Base 10 logarithm</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float log10(float v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> log10(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> log10(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> log10(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the base 10 logarithm.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:native_log10'>native_log10</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:log1p'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>log1p</span>
+ <span class='normal'>: Natural logarithm of a value plus 1</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float log1p(float v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> log1p(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> log1p(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> log1p(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the natural logarithm of <code>(v + 1.f)</code>.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:native_log1p'>native_log1p</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:log2'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>log2</span>
+ <span class='normal'>: Base 2 logarithm</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float log2(float v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> log2(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> log2(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> log2(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the base 2 logarithm.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:native_log2'>native_log2</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:logb'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>logb</span>
+ <span class='normal'>: Base two exponent</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float logb(float v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> logb(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> logb(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> logb(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the base two exponent of a value, where the mantissa is between
+1.f (inclusive) and 2.f (exclusive).
+</p>
+
+<p> For example, <code>logb(8.5f)</code> returns 3.f.
+</p>
+
+<p> Because of the difference in mantissa, this number is one less than is returned by frexp().
+</p>
+
+<p> <a href='rs_math.html#android_rs:ilogb'>ilogb</a>() is similar but returns an integer.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:mad'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>mad</span>
+ <span class='normal'>: Multiply and add</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float mad(float multiplicand1, float multiplicand2, float offset);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> mad(<a href='rs_value_types.html#android_rs:float2'>float2</a> multiplicand1, <a href='rs_value_types.html#android_rs:float2'>float2</a> multiplicand2, <a href='rs_value_types.html#android_rs:float2'>float2</a> offset);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> mad(<a href='rs_value_types.html#android_rs:float3'>float3</a> multiplicand1, <a href='rs_value_types.html#android_rs:float3'>float3</a> multiplicand2, <a href='rs_value_types.html#android_rs:float3'>float3</a> offset);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> mad(<a href='rs_value_types.html#android_rs:float4'>float4</a> multiplicand1, <a href='rs_value_types.html#android_rs:float4'>float4</a> multiplicand2, <a href='rs_value_types.html#android_rs:float4'>float4</a> offset);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Multiply and add. Returns <code>(multiplicand1 * multiplicand2) + offset</code>.
+</p>
+
+<p> This function is similar to <a href='rs_math.html#android_rs:fma'>fma</a>(). <a href='rs_math.html#android_rs:fma'>fma</a>() retains full precision of the multiplied result
+and rounds only after the addition. mad() rounds after the multiplication and the addition.
+In rs_fp_relaxed mode, mad() may not do the rounding after multiplicaiton.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:max'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>max</span>
+ <span class='normal'>: Maximum</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>char max(char a, char b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:char2'>char2</a> max(<a href='rs_value_types.html#android_rs:char2'>char2</a> a, <a href='rs_value_types.html#android_rs:char2'>char2</a> b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:char3'>char3</a> max(<a href='rs_value_types.html#android_rs:char3'>char3</a> a, <a href='rs_value_types.html#android_rs:char3'>char3</a> b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:char4'>char4</a> max(<a href='rs_value_types.html#android_rs:char4'>char4</a> a, <a href='rs_value_types.html#android_rs:char4'>char4</a> b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>float max(float a, float b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> max(<a href='rs_value_types.html#android_rs:float2'>float2</a> a, <a href='rs_value_types.html#android_rs:float2'>float2</a> b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> max(<a href='rs_value_types.html#android_rs:float3'>float3</a> a, <a href='rs_value_types.html#android_rs:float3'>float3</a> b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> max(<a href='rs_value_types.html#android_rs:float4'>float4</a> a, <a href='rs_value_types.html#android_rs:float4'>float4</a> b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>int max(int a, int b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int2'>int2</a> max(<a href='rs_value_types.html#android_rs:int2'>int2</a> a, <a href='rs_value_types.html#android_rs:int2'>int2</a> b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int3'>int3</a> max(<a href='rs_value_types.html#android_rs:int3'>int3</a> a, <a href='rs_value_types.html#android_rs:int3'>int3</a> b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int4'>int4</a> max(<a href='rs_value_types.html#android_rs:int4'>int4</a> a, <a href='rs_value_types.html#android_rs:int4'>int4</a> b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>long max(long a, long b);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:long2'>long2</a> max(<a href='rs_value_types.html#android_rs:long2'>long2</a> a, <a href='rs_value_types.html#android_rs:long2'>long2</a> b);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:long3'>long3</a> max(<a href='rs_value_types.html#android_rs:long3'>long3</a> a, <a href='rs_value_types.html#android_rs:long3'>long3</a> b);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:long4'>long4</a> max(<a href='rs_value_types.html#android_rs:long4'>long4</a> a, <a href='rs_value_types.html#android_rs:long4'>long4</a> b);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td>short max(short a, short b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:short2'>short2</a> max(<a href='rs_value_types.html#android_rs:short2'>short2</a> a, <a href='rs_value_types.html#android_rs:short2'>short2</a> b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:short3'>short3</a> max(<a href='rs_value_types.html#android_rs:short3'>short3</a> a, <a href='rs_value_types.html#android_rs:short3'>short3</a> b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:short4'>short4</a> max(<a href='rs_value_types.html#android_rs:short4'>short4</a> a, <a href='rs_value_types.html#android_rs:short4'>short4</a> b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar'>uchar</a> max(<a href='rs_value_types.html#android_rs:uchar'>uchar</a> a, <a href='rs_value_types.html#android_rs:uchar'>uchar</a> b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> max(<a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> a, <a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> max(<a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> a, <a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> max(<a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> a, <a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint'>uint</a> max(<a href='rs_value_types.html#android_rs:uint'>uint</a> a, <a href='rs_value_types.html#android_rs:uint'>uint</a> b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint2'>uint2</a> max(<a href='rs_value_types.html#android_rs:uint2'>uint2</a> a, <a href='rs_value_types.html#android_rs:uint2'>uint2</a> b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint3'>uint3</a> max(<a href='rs_value_types.html#android_rs:uint3'>uint3</a> a, <a href='rs_value_types.html#android_rs:uint3'>uint3</a> b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint4'>uint4</a> max(<a href='rs_value_types.html#android_rs:uint4'>uint4</a> a, <a href='rs_value_types.html#android_rs:uint4'>uint4</a> b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ulong'>ulong</a> max(<a href='rs_value_types.html#android_rs:ulong'>ulong</a> a, <a href='rs_value_types.html#android_rs:ulong'>ulong</a> b);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> max(<a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> a, <a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> b);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> max(<a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> a, <a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> b);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> max(<a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> a, <a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> b);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort'>ushort</a> max(<a href='rs_value_types.html#android_rs:ushort'>ushort</a> a, <a href='rs_value_types.html#android_rs:ushort'>ushort</a> b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> max(<a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> a, <a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> max(<a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> a, <a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> max(<a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> a, <a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> b);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the maximum value of two arguments.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:min'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>min</span>
+ <span class='normal'>: Minimum</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>char min(char a, char b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:char2'>char2</a> min(<a href='rs_value_types.html#android_rs:char2'>char2</a> a, <a href='rs_value_types.html#android_rs:char2'>char2</a> b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:char3'>char3</a> min(<a href='rs_value_types.html#android_rs:char3'>char3</a> a, <a href='rs_value_types.html#android_rs:char3'>char3</a> b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:char4'>char4</a> min(<a href='rs_value_types.html#android_rs:char4'>char4</a> a, <a href='rs_value_types.html#android_rs:char4'>char4</a> b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>float min(float a, float b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> min(<a href='rs_value_types.html#android_rs:float2'>float2</a> a, <a href='rs_value_types.html#android_rs:float2'>float2</a> b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> min(<a href='rs_value_types.html#android_rs:float3'>float3</a> a, <a href='rs_value_types.html#android_rs:float3'>float3</a> b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> min(<a href='rs_value_types.html#android_rs:float4'>float4</a> a, <a href='rs_value_types.html#android_rs:float4'>float4</a> b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>int min(int a, int b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int2'>int2</a> min(<a href='rs_value_types.html#android_rs:int2'>int2</a> a, <a href='rs_value_types.html#android_rs:int2'>int2</a> b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int3'>int3</a> min(<a href='rs_value_types.html#android_rs:int3'>int3</a> a, <a href='rs_value_types.html#android_rs:int3'>int3</a> b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int4'>int4</a> min(<a href='rs_value_types.html#android_rs:int4'>int4</a> a, <a href='rs_value_types.html#android_rs:int4'>int4</a> b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>long min(long a, long b);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:long2'>long2</a> min(<a href='rs_value_types.html#android_rs:long2'>long2</a> a, <a href='rs_value_types.html#android_rs:long2'>long2</a> b);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:long3'>long3</a> min(<a href='rs_value_types.html#android_rs:long3'>long3</a> a, <a href='rs_value_types.html#android_rs:long3'>long3</a> b);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:long4'>long4</a> min(<a href='rs_value_types.html#android_rs:long4'>long4</a> a, <a href='rs_value_types.html#android_rs:long4'>long4</a> b);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td>short min(short a, short b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:short2'>short2</a> min(<a href='rs_value_types.html#android_rs:short2'>short2</a> a, <a href='rs_value_types.html#android_rs:short2'>short2</a> b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:short3'>short3</a> min(<a href='rs_value_types.html#android_rs:short3'>short3</a> a, <a href='rs_value_types.html#android_rs:short3'>short3</a> b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:short4'>short4</a> min(<a href='rs_value_types.html#android_rs:short4'>short4</a> a, <a href='rs_value_types.html#android_rs:short4'>short4</a> b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar'>uchar</a> min(<a href='rs_value_types.html#android_rs:uchar'>uchar</a> a, <a href='rs_value_types.html#android_rs:uchar'>uchar</a> b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> min(<a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> a, <a href='rs_value_types.html#android_rs:uchar2'>uchar2</a> b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> min(<a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> a, <a href='rs_value_types.html#android_rs:uchar3'>uchar3</a> b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> min(<a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> a, <a href='rs_value_types.html#android_rs:uchar4'>uchar4</a> b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint'>uint</a> min(<a href='rs_value_types.html#android_rs:uint'>uint</a> a, <a href='rs_value_types.html#android_rs:uint'>uint</a> b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint2'>uint2</a> min(<a href='rs_value_types.html#android_rs:uint2'>uint2</a> a, <a href='rs_value_types.html#android_rs:uint2'>uint2</a> b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint3'>uint3</a> min(<a href='rs_value_types.html#android_rs:uint3'>uint3</a> a, <a href='rs_value_types.html#android_rs:uint3'>uint3</a> b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint4'>uint4</a> min(<a href='rs_value_types.html#android_rs:uint4'>uint4</a> a, <a href='rs_value_types.html#android_rs:uint4'>uint4</a> b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ulong'>ulong</a> min(<a href='rs_value_types.html#android_rs:ulong'>ulong</a> a, <a href='rs_value_types.html#android_rs:ulong'>ulong</a> b);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> min(<a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> a, <a href='rs_value_types.html#android_rs:ulong2'>ulong2</a> b);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> min(<a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> a, <a href='rs_value_types.html#android_rs:ulong3'>ulong3</a> b);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> min(<a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> a, <a href='rs_value_types.html#android_rs:ulong4'>ulong4</a> b);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort'>ushort</a> min(<a href='rs_value_types.html#android_rs:ushort'>ushort</a> a, <a href='rs_value_types.html#android_rs:ushort'>ushort</a> b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> min(<a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> a, <a href='rs_value_types.html#android_rs:ushort2'>ushort2</a> b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> min(<a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> a, <a href='rs_value_types.html#android_rs:ushort3'>ushort3</a> b);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> min(<a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> a, <a href='rs_value_types.html#android_rs:ushort4'>ushort4</a> b);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the minimum value of two arguments.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:mix'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>mix</span>
+ <span class='normal'>: Mixes two values</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float mix(float start, float stop, float fraction);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> mix(<a href='rs_value_types.html#android_rs:float2'>float2</a> start, <a href='rs_value_types.html#android_rs:float2'>float2</a> stop, float fraction);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> mix(<a href='rs_value_types.html#android_rs:float2'>float2</a> start, <a href='rs_value_types.html#android_rs:float2'>float2</a> stop, <a href='rs_value_types.html#android_rs:float2'>float2</a> fraction);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> mix(<a href='rs_value_types.html#android_rs:float3'>float3</a> start, <a href='rs_value_types.html#android_rs:float3'>float3</a> stop, float fraction);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> mix(<a href='rs_value_types.html#android_rs:float3'>float3</a> start, <a href='rs_value_types.html#android_rs:float3'>float3</a> stop, <a href='rs_value_types.html#android_rs:float3'>float3</a> fraction);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> mix(<a href='rs_value_types.html#android_rs:float4'>float4</a> start, <a href='rs_value_types.html#android_rs:float4'>float4</a> stop, float fraction);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> mix(<a href='rs_value_types.html#android_rs:float4'>float4</a> start, <a href='rs_value_types.html#android_rs:float4'>float4</a> stop, <a href='rs_value_types.html#android_rs:float4'>float4</a> fraction);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns start + ((stop - start) * fraction).
+</p>
+
+<p> This can be useful for mixing two values. For example, to create a new color that is
+40% color1 and 60% color2, use <code>mix(color1, color2, 0.6f)</code>.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:modf'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>modf</span>
+ <span class='normal'>: Integral and fractional components</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float modf(float v, float* integral_part);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> modf(<a href='rs_value_types.html#android_rs:float2'>float2</a> v, <a href='rs_value_types.html#android_rs:float2'>float2</a>* integral_part);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> modf(<a href='rs_value_types.html#android_rs:float3'>float3</a> v, <a href='rs_value_types.html#android_rs:float3'>float3</a>* integral_part);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> modf(<a href='rs_value_types.html#android_rs:float4'>float4</a> v, <a href='rs_value_types.html#android_rs:float4'>float4</a>* integral_part);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>v</th><td>Source value.</td></tr>
+ <tr><th>integral_part</th><td>*integral_part will be set to the integral portion of the number.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Returns</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><td>Floating point portion of the value.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the integral and fractional components of a number.
+</p>
+
+<p> Both components will have the same sign as x. For example, for an input of -3.72f,
+iret will be set to -3.f and .72f will be returned.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:nan'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>nan</span>
+ <span class='normal'>: Not a Number</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float nan(<a href='rs_value_types.html#android_rs:uint'>uint</a> v);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>v</th><td>Not used.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns a NaN value (Not a Number).
+</p>
+ </div>
+</div>
+
+<a name='android_rs:native_acos'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>native_acos</span>
+ <span class='normal'>: Approximate inverse cosine</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float native_acos(float v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_acos(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_acos(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_acos(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the approximate inverse cosine, in radians.
+</p>
+
+<p> This function yields undefined results from input values less than -1 or greater than 1.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:acos'>acos</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:native_acosh'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>native_acosh</span>
+ <span class='normal'>: Approximate inverse hyperbolic cosine</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float native_acosh(float v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_acosh(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_acosh(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_acosh(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the approximate inverse hyperbolic cosine, in radians.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:acosh'>acosh</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:native_acospi'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>native_acospi</span>
+ <span class='normal'>: Approximate inverse cosine divided by pi</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float native_acospi(float v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_acospi(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_acospi(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_acospi(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the approximate inverse cosine in radians, divided by pi.
+</p>
+
+<p> To get an inverse cosine measured in degrees, use <code>acospi(a) * 180.f</code>.
+</p>
+
+<p> This function yields undefined results from input values less than -1 or greater than 1.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:acospi'>acospi</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:native_asin'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>native_asin</span>
+ <span class='normal'>: Approximate inverse sine</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float native_asin(float v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_asin(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_asin(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_asin(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the approximate inverse sine, in radians.
+</p>
+
+<p> This function yields undefined results from input values less than -1 or greater than 1.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:asin'>asin</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:native_asinh'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>native_asinh</span>
+ <span class='normal'>: Approximate inverse hyperbolic sine</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float native_asinh(float v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_asinh(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_asinh(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_asinh(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the approximate inverse hyperbolic sine, in radians.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:asinh'>asinh</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:native_asinpi'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>native_asinpi</span>
+ <span class='normal'>: Approximate inverse sine divided by pi</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float native_asinpi(float v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_asinpi(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_asinpi(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_asinpi(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the approximate inverse sine in radians, divided by pi.
+</p>
+
+<p> To get an inverse sine measured in degrees, use <code>asinpi(a) * 180.f</code>.
+</p>
+
+<p> This function yields undefined results from input values less than -1 or greater than 1.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:asinpi'>asinpi</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:native_atan'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>native_atan</span>
+ <span class='normal'>: Approximate inverse tangent</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float native_atan(float v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_atan(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_atan(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_atan(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the approximate inverse tangent, in radians.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:atan'>atan</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:native_atan2'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>native_atan2</span>
+ <span class='normal'>: Approximate inverse tangent of a ratio</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float native_atan2(float numerator, float denominator);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_atan2(<a href='rs_value_types.html#android_rs:float2'>float2</a> numerator, <a href='rs_value_types.html#android_rs:float2'>float2</a> denominator);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_atan2(<a href='rs_value_types.html#android_rs:float3'>float3</a> numerator, <a href='rs_value_types.html#android_rs:float3'>float3</a> denominator);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_atan2(<a href='rs_value_types.html#android_rs:float4'>float4</a> numerator, <a href='rs_value_types.html#android_rs:float4'>float4</a> denominator);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>numerator</th><td>Numerator.</td></tr>
+ <tr><th>denominator</th><td>Denominator. Can be 0.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the approximate inverse tangent of <code>(numerator / denominator)</code>, in radians.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:atan2'>atan2</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:native_atan2pi'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>native_atan2pi</span>
+ <span class='normal'>: Approximate inverse tangent of a ratio, divided by pi</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float native_atan2pi(float numerator, float denominator);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_atan2pi(<a href='rs_value_types.html#android_rs:float2'>float2</a> numerator, <a href='rs_value_types.html#android_rs:float2'>float2</a> denominator);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_atan2pi(<a href='rs_value_types.html#android_rs:float3'>float3</a> numerator, <a href='rs_value_types.html#android_rs:float3'>float3</a> denominator);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_atan2pi(<a href='rs_value_types.html#android_rs:float4'>float4</a> numerator, <a href='rs_value_types.html#android_rs:float4'>float4</a> denominator);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>numerator</th><td>Numerator.</td></tr>
+ <tr><th>denominator</th><td>Denominator. Can be 0.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the approximate inverse tangent of <code>(numerator / denominator)</code>,
+in radians, divided by pi.
+</p>
+
+<p> To get an inverse tangent measured in degrees, use <code>atan2pi(n, d) * 180.f</code>.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:atan2pi'>atan2pi</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:native_atanh'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>native_atanh</span>
+ <span class='normal'>: Approximate inverse hyperbolic tangent</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float native_atanh(float v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_atanh(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_atanh(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_atanh(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the approximate inverse hyperbolic tangent, in radians.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:atanh'>atanh</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:native_atanpi'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>native_atanpi</span>
+ <span class='normal'>: Approximate inverse tangent divided by pi</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float native_atanpi(float v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_atanpi(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_atanpi(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_atanpi(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the approximate inverse tangent in radians, divided by pi.
+</p>
+
+<p> To get an inverse tangent measured in degrees, use <code>atanpi(a) * 180.f</code>.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:atanpi'>atanpi</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:native_cbrt'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>native_cbrt</span>
+ <span class='normal'>: Approximate cube root</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float native_cbrt(float v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_cbrt(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_cbrt(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_cbrt(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the approximate cubic root.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:cbrt'>cbrt</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:native_cos'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>native_cos</span>
+ <span class='normal'>: Approximate cosine</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float native_cos(float v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_cos(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_cos(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_cos(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the approximate cosine of an angle measured in radians.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:cos'>cos</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:native_cosh'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>native_cosh</span>
+ <span class='normal'>: Approximate hypebolic cosine</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float native_cosh(float v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_cosh(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_cosh(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_cosh(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the approximate hypebolic cosine.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:cosh'>cosh</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:native_cospi'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>native_cospi</span>
+ <span class='normal'>: Approximate cosine of a number multiplied by pi</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float native_cospi(float v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_cospi(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_cospi(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_cospi(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the approximate cosine of (v * pi), where (v * pi) is measured in radians.
+</p>
+
+<p> To get the cosine of a value measured in degrees, call <code>cospi(v / 180.f)</code>.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:cospi'>cospi</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:native_divide'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>native_divide</span>
+ <span class='normal'>: Approximate division</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float native_divide(float left_vector, float right_vector);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_divide(<a href='rs_value_types.html#android_rs:float2'>float2</a> left_vector, <a href='rs_value_types.html#android_rs:float2'>float2</a> right_vector);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_divide(<a href='rs_value_types.html#android_rs:float3'>float3</a> left_vector, <a href='rs_value_types.html#android_rs:float3'>float3</a> right_vector);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_divide(<a href='rs_value_types.html#android_rs:float4'>float4</a> left_vector, <a href='rs_value_types.html#android_rs:float4'>float4</a> right_vector);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Computes the approximate division of two values.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:native_exp'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>native_exp</span>
+ <span class='normal'>: Approximate e raised to a number</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float native_exp(float v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_exp(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_exp(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_exp(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Fast approximate exp.
+</p>
+
+<p> It is valid for inputs from -86.f to 86.f. The precision is no worse than what would be
+expected from using 16 bit floating point values.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:exp'>exp</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:native_exp10'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>native_exp10</span>
+ <span class='normal'>: Approximate 10 raised to a number</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float native_exp10(float v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_exp10(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_exp10(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_exp10(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Fast approximate exp10.
+</p>
+
+<p> It is valid for inputs from -37.f to 37.f. The precision is no worse than what would be
+expected from using 16 bit floating point values.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:exp10'>exp10</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:native_exp2'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>native_exp2</span>
+ <span class='normal'>: Approximate 2 raised to a number</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float native_exp2(float v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_exp2(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_exp2(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_exp2(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Fast approximate exp2.
+</p>
+
+<p> It is valid for inputs from -125.f to 125.f. The precision is no worse than what would be
+expected from using 16 bit floating point values.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:exp2'>exp2</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:native_expm1'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>native_expm1</span>
+ <span class='normal'>: Approximate e raised to a number minus one</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float native_expm1(float v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_expm1(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_expm1(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_expm1(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the approximate (e ^ v) - 1.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:expm1'>expm1</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:native_hypot'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>native_hypot</span>
+ <span class='normal'>: Approximate hypotenuse</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float native_hypot(float a, float b);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_hypot(<a href='rs_value_types.html#android_rs:float2'>float2</a> a, <a href='rs_value_types.html#android_rs:float2'>float2</a> b);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_hypot(<a href='rs_value_types.html#android_rs:float3'>float3</a> a, <a href='rs_value_types.html#android_rs:float3'>float3</a> b);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_hypot(<a href='rs_value_types.html#android_rs:float4'>float4</a> a, <a href='rs_value_types.html#android_rs:float4'>float4</a> b);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the approximate native_sqrt(a * a + b * b)
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:hypot'>hypot</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:native_log'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>native_log</span>
+ <span class='normal'>: Approximate natural logarithm</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float native_log(float v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_log(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_log(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_log(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Fast approximate log.
+</p>
+
+<p> It is not accurate for values very close to zero.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:log'>log</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:native_log10'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>native_log10</span>
+ <span class='normal'>: Approximate base 10 logarithm</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float native_log10(float v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_log10(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_log10(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_log10(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Fast approximate log10.
+</p>
+
+<p> It is not accurate for values very close to zero.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:log10'>log10</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:native_log1p'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>native_log1p</span>
+ <span class='normal'>: Approximate natural logarithm of a value plus 1</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float native_log1p(float v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_log1p(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_log1p(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_log1p(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the approximate natural logarithm of (v + 1.0f)
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:log1p'>log1p</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:native_log2'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>native_log2</span>
+ <span class='normal'>: Approximate base 2 logarithm</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float native_log2(float v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_log2(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_log2(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_log2(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Fast approximate log2.
+</p>
+
+<p> It is not accurate for values very close to zero.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:log2'>log2</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:native_powr'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>native_powr</span>
+ <span class='normal'>: Approximate positive base raised to an exponent</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float native_powr(float base, float exponent);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_powr(<a href='rs_value_types.html#android_rs:float2'>float2</a> base, <a href='rs_value_types.html#android_rs:float2'>float2</a> exponent);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_powr(<a href='rs_value_types.html#android_rs:float3'>float3</a> base, <a href='rs_value_types.html#android_rs:float3'>float3</a> exponent);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_powr(<a href='rs_value_types.html#android_rs:float4'>float4</a> base, <a href='rs_value_types.html#android_rs:float4'>float4</a> exponent);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 18</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>base</th><td>Must be between 0.f and 256.f. The function is not accurate for values very close to zero.</td></tr>
+ <tr><th>exponent</th><td>Must be between -15.f and 15.f.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Fast approximate (base ^ exponent).
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:powr'>powr</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:native_recip'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>native_recip</span>
+ <span class='normal'>: Approximate reciprocal</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float native_recip(float v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_recip(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_recip(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_recip(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the approximate approximate reciprocal of a value.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:half_recip'>half_recip</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:native_rootn'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>native_rootn</span>
+ <span class='normal'>: Approximate nth root</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float native_rootn(float v, int n);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_rootn(<a href='rs_value_types.html#android_rs:float2'>float2</a> v, <a href='rs_value_types.html#android_rs:int2'>int2</a> n);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_rootn(<a href='rs_value_types.html#android_rs:float3'>float3</a> v, <a href='rs_value_types.html#android_rs:int3'>int3</a> n);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_rootn(<a href='rs_value_types.html#android_rs:float4'>float4</a> v, <a href='rs_value_types.html#android_rs:int4'>int4</a> n);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Compute the approximate Nth root of a value.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:rootn'>rootn</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:native_rsqrt'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>native_rsqrt</span>
+ <span class='normal'>: Approximate reciprocal of a square root</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float native_rsqrt(float v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_rsqrt(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_rsqrt(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_rsqrt(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns approximate (1 / sqrt(v)).
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:rsqrt'>rsqrt</a>(), <a href='rs_math.html#android_rs:half_rsqrt'>half_rsqrt</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:native_sin'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>native_sin</span>
+ <span class='normal'>: Approximate sine</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float native_sin(float v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_sin(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_sin(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_sin(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the approximate sine of an angle measured in radians.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:sin'>sin</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:native_sincos'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>native_sincos</span>
+ <span class='normal'>: Approximate sine and cosine</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float native_sincos(float v, float* cos);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_sincos(<a href='rs_value_types.html#android_rs:float2'>float2</a> v, <a href='rs_value_types.html#android_rs:float2'>float2</a>* cos);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_sincos(<a href='rs_value_types.html#android_rs:float3'>float3</a> v, <a href='rs_value_types.html#android_rs:float3'>float3</a>* cos);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_sincos(<a href='rs_value_types.html#android_rs:float4'>float4</a> v, <a href='rs_value_types.html#android_rs:float4'>float4</a>* cos);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>v</th><td>Incoming value in radians.</td></tr>
+ <tr><th>cos</th><td>*cos will be set to the cosine value.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Returns</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><td>Sine.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the approximate sine and cosine of a value.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:sincos'>sincos</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:native_sinh'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>native_sinh</span>
+ <span class='normal'>: Approximate hyperbolic sine</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float native_sinh(float v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_sinh(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_sinh(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_sinh(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the approximate hyperbolic sine of a value specified in radians.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:sinh'>sinh</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:native_sinpi'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>native_sinpi</span>
+ <span class='normal'>: Approximate sine of a number multiplied by pi</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float native_sinpi(float v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_sinpi(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_sinpi(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_sinpi(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the approximate sine of (v * pi), where (v * pi) is measured in radians.
+</p>
+
+<p> To get the sine of a value measured in degrees, call <code>sinpi(v / 180.f)</code>.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:sinpi'>sinpi</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:native_sqrt'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>native_sqrt</span>
+ <span class='normal'>: Approximate square root</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float native_sqrt(float v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_sqrt(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_sqrt(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_sqrt(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the approximate sqrt(v).
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:sqrt'>sqrt</a>(), <a href='rs_math.html#android_rs:half_sqrt'>half_sqrt</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:native_tan'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>native_tan</span>
+ <span class='normal'>: Approximate tangent</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float native_tan(float v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_tan(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_tan(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_tan(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the approximate tangent of an angle measured in radians.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:native_tanh'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>native_tanh</span>
+ <span class='normal'>: Approximate hyperbolic tangent</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float native_tanh(float v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_tanh(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_tanh(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_tanh(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the approximate hyperbolic tangent of a value.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:tanh'>tanh</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:native_tanpi'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>native_tanpi</span>
+ <span class='normal'>: Approximate tangent of a number multiplied by pi</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float native_tanpi(float v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_tanpi(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_tanpi(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_tanpi(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the approximate tangent of (v * pi), where (v * pi) is measured in radians.
+</p>
+
+<p> To get the tangent of a value measured in degrees, call <code>tanpi(v / 180.f)</code>.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:tanpi'>tanpi</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:nextafter'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>nextafter</span>
+ <span class='normal'>: Next floating point number</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float nextafter(float v, float target);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> nextafter(<a href='rs_value_types.html#android_rs:float2'>float2</a> v, <a href='rs_value_types.html#android_rs:float2'>float2</a> target);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> nextafter(<a href='rs_value_types.html#android_rs:float3'>float3</a> v, <a href='rs_value_types.html#android_rs:float3'>float3</a> target);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> nextafter(<a href='rs_value_types.html#android_rs:float4'>float4</a> v, <a href='rs_value_types.html#android_rs:float4'>float4</a> target);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the next representable floating point number from v towards target.
+</p>
+
+<p> In rs_fp_relaxed mode, a denormalized input value may not yield the next denormalized
+value, as support of denormalized values is optional in relaxed mode.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:pow'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>pow</span>
+ <span class='normal'>: Base raised to an exponent</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float pow(float base, float exponent);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> pow(<a href='rs_value_types.html#android_rs:float2'>float2</a> base, <a href='rs_value_types.html#android_rs:float2'>float2</a> exponent);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> pow(<a href='rs_value_types.html#android_rs:float3'>float3</a> base, <a href='rs_value_types.html#android_rs:float3'>float3</a> exponent);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> pow(<a href='rs_value_types.html#android_rs:float4'>float4</a> base, <a href='rs_value_types.html#android_rs:float4'>float4</a> exponent);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns base raised to the power exponent, i.e. base ^ exponent.
+</p>
+
+<p> <a href='rs_math.html#android_rs:pown'>pown</a>() and <a href='rs_math.html#android_rs:powr'>powr</a>() are similar. <a href='rs_math.html#android_rs:pown'>pown</a>() takes an integer exponent. <a href='rs_math.html#android_rs:powr'>powr</a>() assumes the
+base to be non-negative.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:pown'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>pown</span>
+ <span class='normal'>: Base raised to an integer exponent</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float pown(float base, int exponent);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> pown(<a href='rs_value_types.html#android_rs:float2'>float2</a> base, <a href='rs_value_types.html#android_rs:int2'>int2</a> exponent);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> pown(<a href='rs_value_types.html#android_rs:float3'>float3</a> base, <a href='rs_value_types.html#android_rs:int3'>int3</a> exponent);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> pown(<a href='rs_value_types.html#android_rs:float4'>float4</a> base, <a href='rs_value_types.html#android_rs:int4'>int4</a> exponent);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns base raised to the power exponent, i.e. base ^ exponent.
+</p>
+
+<p> <a href='rs_math.html#android_rs:pow'>pow</a>() and <a href='rs_math.html#android_rs:powr'>powr</a>() are similar. The both take a float exponent. <a href='rs_math.html#android_rs:powr'>powr</a>() also assumes the
+base to be non-negative.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:powr'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>powr</span>
+ <span class='normal'>: Positive base raised to an exponent</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float powr(float base, float exponent);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> powr(<a href='rs_value_types.html#android_rs:float2'>float2</a> base, <a href='rs_value_types.html#android_rs:float2'>float2</a> exponent);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> powr(<a href='rs_value_types.html#android_rs:float3'>float3</a> base, <a href='rs_value_types.html#android_rs:float3'>float3</a> exponent);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> powr(<a href='rs_value_types.html#android_rs:float4'>float4</a> base, <a href='rs_value_types.html#android_rs:float4'>float4</a> exponent);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns base raised to the power exponent, i.e. base ^ exponent. base must be >= 0.
+</p>
+
+<p> <a href='rs_math.html#android_rs:pow'>pow</a>() and <a href='rs_math.html#android_rs:pown'>pown</a>() are similar. They both make no assumptions about the base.
+<a href='rs_math.html#android_rs:pow'>pow</a>() takes a float exponent while <a href='rs_math.html#android_rs:pown'>pown</a>() take an integer.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:native_powr'>native_powr</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:radians'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>radians</span>
+ <span class='normal'>: Converts degrees into radians</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float radians(float v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> radians(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> radians(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> radians(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Converts from degrees to radians.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:remainder'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>remainder</span>
+ <span class='normal'>: Remainder of a division</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float remainder(float numerator, float denominator);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> remainder(<a href='rs_value_types.html#android_rs:float2'>float2</a> numerator, <a href='rs_value_types.html#android_rs:float2'>float2</a> denominator);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> remainder(<a href='rs_value_types.html#android_rs:float3'>float3</a> numerator, <a href='rs_value_types.html#android_rs:float3'>float3</a> denominator);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> remainder(<a href='rs_value_types.html#android_rs:float4'>float4</a> numerator, <a href='rs_value_types.html#android_rs:float4'>float4</a> denominator);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the remainder of (numerator / denominator), where the quotient is rounded towards
+the nearest integer.
+</p>
+
+<p> The function <a href='rs_math.html#android_rs:fmod'>fmod</a>() is similar but rounds toward the closest interger.
+For example, <code><a href='rs_math.html#android_rs:fmod'>fmod</a>(-3.8f, 2.f)</code> returns -1.8f (-3.8f - -1.f * 2.f)
+while <code>remainder(-3.8f, 2.f)</code> returns 0.2f (-3.8f - -2.f * 2.f).
+</p>
+ </div>
+</div>
+
+<a name='android_rs:remquo'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>remquo</span>
+ <span class='normal'>: Remainder and quotient of a division</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float remquo(float numerator, float denominator, int* quotient);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> remquo(<a href='rs_value_types.html#android_rs:float2'>float2</a> numerator, <a href='rs_value_types.html#android_rs:float2'>float2</a> denominator, <a href='rs_value_types.html#android_rs:int2'>int2</a>* quotient);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> remquo(<a href='rs_value_types.html#android_rs:float3'>float3</a> numerator, <a href='rs_value_types.html#android_rs:float3'>float3</a> denominator, <a href='rs_value_types.html#android_rs:int3'>int3</a>* quotient);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> remquo(<a href='rs_value_types.html#android_rs:float4'>float4</a> numerator, <a href='rs_value_types.html#android_rs:float4'>float4</a> denominator, <a href='rs_value_types.html#android_rs:int4'>int4</a>* quotient);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>numerator</th><td>Numerator.</td></tr>
+ <tr><th>denominator</th><td>Denominator.</td></tr>
+ <tr><th>quotient</th><td>*quotient will be set to the integer quotient.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Returns</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><td>Remainder, precise only for the low three bits.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the quotient and the remainder of (numerator / denominator).
+</p>
+
+<p> Only the sign and lowest three bits of the quotient are guaranteed to be accurate.
+</p>
+
+<p> This function is useful for implementing periodic functions. The low three bits of the
+quotient gives the quadrant and the remainder the distance within the quadrant.
+For example, an implementation of <a href='rs_math.html#android_rs:sin'>sin</a>(x) could call <code>remquo(x, PI / 2.f, &quadrant)</code>
+to reduce very large value of x to something within a limited range.
+</p>
+
+<p> Example: <code>remquo(-23.5f, 8.f, &quot)</code> sets the lowest three bits of quot to 3
+and the sign negative. It returns 0.5f.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rint'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rint</span>
+ <span class='normal'>: Round to even</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float rint(float v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> rint(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> rint(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> rint(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Rounds to the nearest integral value.
+</p>
+
+<p> rint() rounds half values to even. For example, <code>rint(0.5f)</code> returns 0.f and
+<code>rint(1.5f)</code> returns 2.f. Similarly, <code>rint(-0.5f)</code> returns -0.f and
+<code>rint(-1.5f)</code> returns -2.f.
+</p>
+
+<p> <a href='rs_math.html#android_rs:round'>round</a>() is similar but rounds away from zero. <a href='rs_math.html#android_rs:trunc'>trunc</a>() truncates the decimal fraction.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rootn'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rootn</span>
+ <span class='normal'>: Nth root</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float rootn(float v, int n);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> rootn(<a href='rs_value_types.html#android_rs:float2'>float2</a> v, <a href='rs_value_types.html#android_rs:int2'>int2</a> n);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> rootn(<a href='rs_value_types.html#android_rs:float3'>float3</a> v, <a href='rs_value_types.html#android_rs:int3'>int3</a> n);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> rootn(<a href='rs_value_types.html#android_rs:float4'>float4</a> v, <a href='rs_value_types.html#android_rs:int4'>int4</a> n);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Compute the Nth root of a value.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:native_rootn'>native_rootn</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:round'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>round</span>
+ <span class='normal'>: Round away from zero</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float round(float v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> round(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> round(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> round(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Round to the nearest integral value.
+</p>
+
+<p> round() rounds half values away from zero. For example, <code>round(0.5f)</code> returns 1.f
+and <code>round(1.5f)</code> returns 2.f. Similarly, <code>round(-0.5f)</code> returns -1.f
+and <code>round(-1.5f)</code> returns -2.f.
+</p>
+
+<p> <a href='rs_math.html#android_rs:rint'>rint</a>() is similar but rounds half values toward even. <a href='rs_math.html#android_rs:trunc'>trunc</a>() truncates the decimal fraction.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsClamp'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsClamp</span>
+ <span class='normal'>: Restrain a value to a range</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>char rsClamp(char amount, char low, char high);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>int rsClamp(int amount, int low, int high);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>short rsClamp(short amount, short low, short high);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uchar'>uchar</a> rsClamp(<a href='rs_value_types.html#android_rs:uchar'>uchar</a> amount, <a href='rs_value_types.html#android_rs:uchar'>uchar</a> low, <a href='rs_value_types.html#android_rs:uchar'>uchar</a> high);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint'>uint</a> rsClamp(<a href='rs_value_types.html#android_rs:uint'>uint</a> amount, <a href='rs_value_types.html#android_rs:uint'>uint</a> low, <a href='rs_value_types.html#android_rs:uint'>uint</a> high);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:ushort'>ushort</a> rsClamp(<a href='rs_value_types.html#android_rs:ushort'>ushort</a> amount, <a href='rs_value_types.html#android_rs:ushort'>ushort</a> low, <a href='rs_value_types.html#android_rs:ushort'>ushort</a> high);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>amount</th><td>Value to clamp.</td></tr>
+ <tr><th>low</th><td>Lower bound.</td></tr>
+ <tr><th>high</th><td>Upper bound.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+ <p><b>Deprecated.</b> Use <a href='rs_math.html#android_rs:clamp'>clamp</a>() instead.</p>
+<p> Clamp a value between low and high.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsFrac'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsFrac</span>
+ <span class='normal'>: Returns the fractional part of a float</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float rsFrac(float v);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+ <p><b>Deprecated.</b> Use <a href='rs_math.html#android_rs:fract'>fract</a>() instead.</p>
+<p> Returns the fractional part of a float
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsRand'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsRand</span>
+ <span class='normal'>: Pseudo-random number</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float rsRand(float max_value);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>float rsRand(float min_value, float max_value);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>int rsRand(int max_value);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>int rsRand(int min_value, int max_value);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Return a random value between 0 (or min_value) and max_malue.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsqrt'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsqrt</span>
+ <span class='normal'>: Reciprocal of a square root</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float rsqrt(float v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> rsqrt(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> rsqrt(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> rsqrt(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns (1 / sqrt(v)).
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:half_rsqrt'>half_rsqrt</a>(), <a href='rs_math.html#android_rs:native_rsqrt'>native_rsqrt</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:sign'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>sign</span>
+ <span class='normal'>: Sign of a value</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float sign(float v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> sign(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> sign(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> sign(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the sign of a value.
+</p>
+
+<p> if (v < 0) return -1.f;
+else if (v > 0) return 1.f;
+else return 0.f;
+</p>
+ </div>
+</div>
+
+<a name='android_rs:sin'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>sin</span>
+ <span class='normal'>: Sine</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float sin(float v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> sin(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> sin(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> sin(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the sine of an angle measured in radians.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:native_sin'>native_sin</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:sincos'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>sincos</span>
+ <span class='normal'>: Sine and cosine</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float sincos(float v, float* cos);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> sincos(<a href='rs_value_types.html#android_rs:float2'>float2</a> v, <a href='rs_value_types.html#android_rs:float2'>float2</a>* cos);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> sincos(<a href='rs_value_types.html#android_rs:float3'>float3</a> v, <a href='rs_value_types.html#android_rs:float3'>float3</a>* cos);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> sincos(<a href='rs_value_types.html#android_rs:float4'>float4</a> v, <a href='rs_value_types.html#android_rs:float4'>float4</a>* cos);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>v</th><td>Incoming value in radians.</td></tr>
+ <tr><th>cos</th><td>*cos will be set to the cosine value.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Returns</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><td>Sine of v.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the sine and cosine of a value.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:native_sincos'>native_sincos</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:sinh'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>sinh</span>
+ <span class='normal'>: Hyperbolic sine</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float sinh(float v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> sinh(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> sinh(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> sinh(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the hyperbolic sine of v, where v is measured in radians.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:native_sinh'>native_sinh</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:sinpi'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>sinpi</span>
+ <span class='normal'>: Sine of a number multiplied by pi</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float sinpi(float v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> sinpi(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> sinpi(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> sinpi(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the sine of (v * pi), where (v * pi) is measured in radians.
+</p>
+
+<p> To get the sine of a value measured in degrees, call <code>sinpi(v / 180.f)</code>.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:native_sinpi'>native_sinpi</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:sqrt'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>sqrt</span>
+ <span class='normal'>: Square root</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float sqrt(float v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> sqrt(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> sqrt(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> sqrt(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the square root of a value.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:half_sqrt'>half_sqrt</a>(), <a href='rs_math.html#android_rs:native_sqrt'>native_sqrt</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:step'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>step</span>
+ <span class='normal'>: 0 if less than a value, 0 otherwise</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float step(float edge, float v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> step(float edge, <a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> step(<a href='rs_value_types.html#android_rs:float2'>float2</a> edge, float v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> step(<a href='rs_value_types.html#android_rs:float2'>float2</a> edge, <a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> step(float edge, <a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> step(<a href='rs_value_types.html#android_rs:float3'>float3</a> edge, float v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> step(<a href='rs_value_types.html#android_rs:float3'>float3</a> edge, <a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> step(float edge, <a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> step(<a href='rs_value_types.html#android_rs:float4'>float4</a> edge, float v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> step(<a href='rs_value_types.html#android_rs:float4'>float4</a> edge, <a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns 0.f if v < edge, 1.f otherwise.
+</p>
+
+<p> This can be useful to create conditional computations without using loops and branching
+instructions. For example, instead of computing <code>(a[i] < b[i]) ? 0.f : <a href='rs_math.html#android_rs:atan2'>atan2</a>(a[i], b[i])</code>
+for the corresponding elements of a vector, you could instead use <code>step(a, b) * <a href='rs_math.html#android_rs:atan2'>atan2</a>(a, b)</code>.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:tan'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>tan</span>
+ <span class='normal'>: Tangent</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float tan(float v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> tan(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> tan(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> tan(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the tangent of an angle measured in radians.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:native_tan'>native_tan</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:tanh'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>tanh</span>
+ <span class='normal'>: Hyperbolic tangent</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float tanh(float v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> tanh(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> tanh(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> tanh(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the hyperbolic tangent of a value.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:native_tanh'>native_tanh</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:tanpi'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>tanpi</span>
+ <span class='normal'>: Tangent of a number multiplied by pi</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float tanpi(float v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> tanpi(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> tanpi(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> tanpi(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the tangent of (v * pi), where (v * pi) is measured in radians.
+</p>
+
+<p> To get the tangent of a value measured in degrees, call <code>tanpi(v / 180.f)</code>.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:native_tanpi'>native_tanpi</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:tgamma'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>tgamma</span>
+ <span class='normal'>: Gamma function</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float tgamma(float v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> tgamma(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> tgamma(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> tgamma(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the gamma function of a value.
+</p>
+
+<p> See also <a href='rs_math.html#android_rs:lgamma'>lgamma</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:trunc'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>trunc</span>
+ <span class='normal'>: Truncates a floating point</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float trunc(float v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> trunc(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> trunc(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> trunc(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Rounds to integral using truncation.
+</p>
+
+<p> For example, <code>trunc(1.7f)</code> returns 1.f and <code>trunc(-1.7f)</code> returns -1.f.
+</p>
+
+<p> See <a href='rs_math.html#android_rs:rint'>rint</a>() and <a href='rs_math.html#android_rs:round'>round</a>() for other rounding options.
+</p>
+ </div>
+</div>
+
+</div>
diff --git a/docs/html/guide/topics/renderscript/reference/rs_matrix.jd b/docs/html/guide/topics/renderscript/reference/rs_matrix.jd
new file mode 100644
index 0000000..5d0df18
--- /dev/null
+++ b/docs/html/guide/topics/renderscript/reference/rs_matrix.jd
@@ -0,0 +1,1059 @@
+page.title=RenderScript Matrix Functions
+
+@jd:body
+
+<div class='renderscript'>
+<h2>Overview</h2>
+<p> These functions let you manipulate square matrices of rank 2x2, 3x3, and 4x4.
+They are particularly useful for graphical transformations and are compatible
+with OpenGL.
+</p>
+
+<p> We use a zero-based index for rows and columns. E.g. the last element of a
+<a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a> is found at (3, 3).
+</p>
+
+<p> RenderScript uses column-major matrices and column-based vectors. Transforming
+a vector is done by postmultiplying the vector, e.g. <code>(matrix * vector)</code>,
+as provided by <a href='rs_matrix.html#android_rs:rsMatrixMultiply'>rsMatrixMultiply</a>().
+</p>
+
+<p> To create a transformation matrix that performs two transformations at once,
+multiply the two source matrices, with the first transformation as the right
+argument. E.g. to create a transformation matrix that applies the
+transformation s1 followed by s2, call <code>rsMatrixLoadMultiply(&combined, &s2, &s1)</code>.
+This derives from <code>s2 * (s1 * v)</code>, which is <code>(s2 * s1) * v</code>.
+</p>
+
+<p> We have two style of functions to create transformation matrices:
+rsMatrixLoad<i>Transformation</i> and rsMatrix<i>Transformation</i>. The former
+style simply stores the transformation matrix in the first argument. The latter
+modifies a pre-existing transformation matrix so that the new transformation
+happens first. E.g. if you call <a href='rs_matrix.html#android_rs:rsMatrixTranslate'>rsMatrixTranslate</a>() on a matrix that already
+does a scaling, the resulting matrix when applied to a vector will first do the
+translation then the scaling.
+</p>
+<h2>Summary</h2>
+<table class='jd-sumtable'><tbody>
+ <tr><th colspan='2'>Functions</th></tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_matrix.html#android_rs:rsExtractFrustumPlanes'>rsExtractFrustumPlanes</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Compute frustum planes
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_matrix.html#android_rs:rsIsSphereInFrustum'>rsIsSphereInFrustum</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Checks if a sphere is within the frustum planes
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_matrix.html#android_rs:rsMatrixGet'>rsMatrixGet</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Get one element
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_matrix.html#android_rs:rsMatrixInverse'>rsMatrixInverse</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Inverts a matrix in place
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_matrix.html#android_rs:rsMatrixInverseTranspose'>rsMatrixInverseTranspose</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Inverts and transpose a matrix in place
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_matrix.html#android_rs:rsMatrixLoad'>rsMatrixLoad</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Load or copy a matrix
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_matrix.html#android_rs:rsMatrixLoadFrustum'>rsMatrixLoadFrustum</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Load a frustum projection matrix
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_matrix.html#android_rs:rsMatrixLoadIdentity'>rsMatrixLoadIdentity</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Load identity matrix
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_matrix.html#android_rs:rsMatrixLoadMultiply'>rsMatrixLoadMultiply</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Multiply two matrices
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_matrix.html#android_rs:rsMatrixLoadOrtho'>rsMatrixLoadOrtho</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Load an orthographic projection matrix
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_matrix.html#android_rs:rsMatrixLoadPerspective'>rsMatrixLoadPerspective</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Load a perspective projection matrix
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_matrix.html#android_rs:rsMatrixLoadRotate'>rsMatrixLoadRotate</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Load a rotation matrix
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_matrix.html#android_rs:rsMatrixLoadScale'>rsMatrixLoadScale</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Load a scaling matrix
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_matrix.html#android_rs:rsMatrixLoadTranslate'>rsMatrixLoadTranslate</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Load a translation matrix
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_matrix.html#android_rs:rsMatrixMultiply'>rsMatrixMultiply</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Multiply a matrix by a vector or another matrix
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_matrix.html#android_rs:rsMatrixRotate'>rsMatrixRotate</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Apply a rotation to a transformation matrix
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_matrix.html#android_rs:rsMatrixScale'>rsMatrixScale</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Apply a scaling to a transformation matrix
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_matrix.html#android_rs:rsMatrixSet'>rsMatrixSet</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Set one element
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_matrix.html#android_rs:rsMatrixTranslate'>rsMatrixTranslate</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Apply a translation to a transformation matrix
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_matrix.html#android_rs:rsMatrixTranspose'>rsMatrixTranspose</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Transpose a matrix place
+ </td>
+ </tr>
+</tbody></table>
+<h2>Functions</h2>
+<a name='android_rs:rsExtractFrustumPlanes'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsExtractFrustumPlanes</span>
+ <span class='normal'>: Compute frustum planes</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>void rsExtractFrustumPlanes(const <a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* viewProj, <a href='rs_value_types.html#android_rs:float4'>float4</a>* left, <a href='rs_value_types.html#android_rs:float4'>float4</a>* right, <a href='rs_value_types.html#android_rs:float4'>float4</a>* top, <a href='rs_value_types.html#android_rs:float4'>float4</a>* bottom, <a href='rs_value_types.html#android_rs:float4'>float4</a>* near, <a href='rs_value_types.html#android_rs:float4'>float4</a>* far);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>viewProj</th><td>Matrix to extract planes from.</td></tr>
+ <tr><th>left</th><td>Left plane.</td></tr>
+ <tr><th>right</th><td>Right plane.</td></tr>
+ <tr><th>top</th><td>Top plane.</td></tr>
+ <tr><th>bottom</th><td>Bottom plane.</td></tr>
+ <tr><th>near</th><td>Near plane.</td></tr>
+ <tr><th>far</th><td>Far plane.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Computes 6 frustum planes from the view projection matrix
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsIsSphereInFrustum'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsIsSphereInFrustum</span>
+ <span class='normal'>: Checks if a sphere is within the frustum planes</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>bool rsIsSphereInFrustum(<a href='rs_value_types.html#android_rs:float4'>float4</a>* sphere, <a href='rs_value_types.html#android_rs:float4'>float4</a>* left, <a href='rs_value_types.html#android_rs:float4'>float4</a>* right, <a href='rs_value_types.html#android_rs:float4'>float4</a>* top, <a href='rs_value_types.html#android_rs:float4'>float4</a>* bottom, <a href='rs_value_types.html#android_rs:float4'>float4</a>* near, <a href='rs_value_types.html#android_rs:float4'>float4</a>* far);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>sphere</th><td>float4 representing the sphere.</td></tr>
+ <tr><th>left</th><td>Left plane.</td></tr>
+ <tr><th>right</th><td>Right plane.</td></tr>
+ <tr><th>top</th><td>Top plane.</td></tr>
+ <tr><th>bottom</th><td>Bottom plane.</td></tr>
+ <tr><th>near</th><td>Near plane.</td></tr>
+ <tr><th>far</th><td>Far plane.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns true if the sphere is within the 6 frustum planes.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsMatrixGet'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsMatrixGet</span>
+ <span class='normal'>: Get one element</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float rsMatrixGet(const <a href='rs_value_types.html#android_rs:rs_matrix2x2'>rs_matrix2x2</a>* m, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> col, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> row);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>float rsMatrixGet(const <a href='rs_value_types.html#android_rs:rs_matrix3x3'>rs_matrix3x3</a>* m, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> col, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> row);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>float rsMatrixGet(const <a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* m, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> col, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> row);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>m</th><td>Matrix to extract the element from.</td></tr>
+ <tr><th>col</th><td>Zero-based column of the element to be extracted.</td></tr>
+ <tr><th>row</th><td>Zero-based row of the element to extracted.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns one element of a matrix.
+</p>
+
+<p> <b>Warning:</b> The order of the column and row parameters may be unexpected.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsMatrixInverse'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsMatrixInverse</span>
+ <span class='normal'>: Inverts a matrix in place</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>bool rsMatrixInverse(<a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* m);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>m</th><td>Matrix to invert.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns true if the matrix was successfully inverted.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsMatrixInverseTranspose'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsMatrixInverseTranspose</span>
+ <span class='normal'>: Inverts and transpose a matrix in place</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>bool rsMatrixInverseTranspose(<a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* m);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>m</th><td>Matrix to modify.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> The matrix is first inverted then transposed. Returns true if the matrix was
+successfully inverted.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsMatrixLoad'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsMatrixLoad</span>
+ <span class='normal'>: Load or copy a matrix</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>void rsMatrixLoad(<a href='rs_value_types.html#android_rs:rs_matrix2x2'>rs_matrix2x2</a>* destination, const float* array);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>void rsMatrixLoad(<a href='rs_value_types.html#android_rs:rs_matrix2x2'>rs_matrix2x2</a>* destination, const <a href='rs_value_types.html#android_rs:rs_matrix2x2'>rs_matrix2x2</a>* source);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>void rsMatrixLoad(<a href='rs_value_types.html#android_rs:rs_matrix3x3'>rs_matrix3x3</a>* destination, const float* array);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>void rsMatrixLoad(<a href='rs_value_types.html#android_rs:rs_matrix3x3'>rs_matrix3x3</a>* destination, const <a href='rs_value_types.html#android_rs:rs_matrix3x3'>rs_matrix3x3</a>* source);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>void rsMatrixLoad(<a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* destination, const float* array);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>void rsMatrixLoad(<a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* destination, const <a href='rs_value_types.html#android_rs:rs_matrix2x2'>rs_matrix2x2</a>* source);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>void rsMatrixLoad(<a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* destination, const <a href='rs_value_types.html#android_rs:rs_matrix3x3'>rs_matrix3x3</a>* source);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>void rsMatrixLoad(<a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* destination, const <a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* source);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>destination</th><td>Matrix to set.</td></tr>
+ <tr><th>array</th><td>Array of values to set the matrix to. These arrays should be 4, 9, or 16 floats long, depending on the matrix size.</td></tr>
+ <tr><th>source</th><td>Source matrix.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Set the elements of a matrix from an array of floats or from another matrix.
+</p>
+
+<p> If loading from an array, the floats should be in row-major order, i.e. the element a
+<code>row 0, column 0</code> should be first, followed by the element at
+<code>row 0, column 1</code>, etc.
+</p>
+
+<p> If loading from a matrix and the source is smaller than the destination, the rest
+of the destination is filled with elements of the identity matrix. E.g.
+loading a rs_matrix2x2 into a rs_matrix4x4 will give:
+<table style="max-width:300px">
+<tr><td>m00</td> <td>m01</td> <td>0.0</td> <td>0.0</td></tr>
+<tr><td>m10</td> <td>m11</td> <td>0.0</td> <td>0.0</td></tr>
+<tr><td>0.0</td> <td>0.0</td> <td>1.0</td> <td>0.0</td></tr>
+<tr><td>0.0</td> <td>0.0</td> <td>0.0</td> <td>1.0</td></tr>
+</table>
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsMatrixLoadFrustum'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsMatrixLoadFrustum</span>
+ <span class='normal'>: Load a frustum projection matrix</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>void rsMatrixLoadFrustum(<a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* m, float left, float right, float bottom, float top, float near, float far);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>m</th><td>Matrix to set.</td></tr>
+ <tr><th>left</th><td></td></tr>
+ <tr><th>right</th><td></td></tr>
+ <tr><th>bottom</th><td></td></tr>
+ <tr><th>top</th><td></td></tr>
+ <tr><th>near</th><td></td></tr>
+ <tr><th>far</th><td></td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Constructs a frustum projection matrix, transforming the box identified by
+the six clipping planes <code>left, right, bottom, top, near, far</code>.
+</p>
+
+<p> To apply this projection to a vector, multiply the vector by the created
+matrix using <a href='rs_matrix.html#android_rs:rsMatrixMultiply'>rsMatrixMultiply</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsMatrixLoadIdentity'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsMatrixLoadIdentity</span>
+ <span class='normal'>: Load identity matrix</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>void rsMatrixLoadIdentity(<a href='rs_value_types.html#android_rs:rs_matrix2x2'>rs_matrix2x2</a>* m);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>void rsMatrixLoadIdentity(<a href='rs_value_types.html#android_rs:rs_matrix3x3'>rs_matrix3x3</a>* m);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>void rsMatrixLoadIdentity(<a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* m);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>m</th><td>Matrix to set.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Set the elements of a matrix to the identity matrix.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsMatrixLoadMultiply'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsMatrixLoadMultiply</span>
+ <span class='normal'>: Multiply two matrices</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>void rsMatrixLoadMultiply(<a href='rs_value_types.html#android_rs:rs_matrix2x2'>rs_matrix2x2</a>* m, const <a href='rs_value_types.html#android_rs:rs_matrix2x2'>rs_matrix2x2</a>* lhs, const <a href='rs_value_types.html#android_rs:rs_matrix2x2'>rs_matrix2x2</a>* rhs);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>void rsMatrixLoadMultiply(<a href='rs_value_types.html#android_rs:rs_matrix3x3'>rs_matrix3x3</a>* m, const <a href='rs_value_types.html#android_rs:rs_matrix3x3'>rs_matrix3x3</a>* lhs, const <a href='rs_value_types.html#android_rs:rs_matrix3x3'>rs_matrix3x3</a>* rhs);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>void rsMatrixLoadMultiply(<a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* m, const <a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* lhs, const <a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* rhs);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>m</th><td>Matrix to set.</td></tr>
+ <tr><th>lhs</th><td>Left matrix of the product.</td></tr>
+ <tr><th>rhs</th><td>Right matrix of the product.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Sets m to the matrix product of <code>lhs * rhs</code>.
+</p>
+
+<p> To combine two 4x4 transformaton matrices, multiply the second transformation matrix
+by the first transformation matrix. E.g. to create a transformation matrix that applies
+the transformation s1 followed by s2, call <code>rsMatrixLoadMultiply(&combined, &s2, &s1)</code>.
+</p>
+
+<p> <b>Warning:</b> Prior to version 21, storing the result back into right matrix is not supported and
+will result in undefined behavior. Use rsMatrixMulitply instead. E.g. instead of doing
+rsMatrixLoadMultiply (&m2r, &m2r, &m2l), use rsMatrixMultiply (&m2r, &m2l).
+rsMatrixLoadMultiply (&m2l, &m2r, &m2l) works as expected.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsMatrixLoadOrtho'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsMatrixLoadOrtho</span>
+ <span class='normal'>: Load an orthographic projection matrix</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>void rsMatrixLoadOrtho(<a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* m, float left, float right, float bottom, float top, float near, float far);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>m</th><td>Matrix to set.</td></tr>
+ <tr><th>left</th><td></td></tr>
+ <tr><th>right</th><td></td></tr>
+ <tr><th>bottom</th><td></td></tr>
+ <tr><th>top</th><td></td></tr>
+ <tr><th>near</th><td></td></tr>
+ <tr><th>far</th><td></td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Constructs an orthographic projection matrix, transforming the box identified by the
+six clipping planes <code>left, right, bottom, top, near, far</code> into a unit cube
+with a corner at <code>(-1, -1, -1)</code> and the opposite at <code>(1, 1, 1)</code>.
+</p>
+
+<p> To apply this projection to a vector, multiply the vector by the created matrix
+using <a href='rs_matrix.html#android_rs:rsMatrixMultiply'>rsMatrixMultiply</a>().
+</p>
+
+<p> See https://en.wikipedia.org/wiki/Orthographic_projection .
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsMatrixLoadPerspective'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsMatrixLoadPerspective</span>
+ <span class='normal'>: Load a perspective projection matrix</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>void rsMatrixLoadPerspective(<a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* m, float fovy, float aspect, float near, float far);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>m</th><td>Matrix to set.</td></tr>
+ <tr><th>fovy</th><td>Field of view, in degrees along the Y axis.</td></tr>
+ <tr><th>aspect</th><td>Ratio of x / y.</td></tr>
+ <tr><th>near</th><td>Near clipping plane.</td></tr>
+ <tr><th>far</th><td>Far clipping plane.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Constructs a perspective projection matrix, assuming a symmetrical field of view.
+</p>
+
+<p> To apply this projection to a vector, multiply the vector by the created matrix
+using <a href='rs_matrix.html#android_rs:rsMatrixMultiply'>rsMatrixMultiply</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsMatrixLoadRotate'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsMatrixLoadRotate</span>
+ <span class='normal'>: Load a rotation matrix</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>void rsMatrixLoadRotate(<a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* m, float rot, float x, float y, float z);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>m</th><td>Matrix to set.</td></tr>
+ <tr><th>rot</th><td>How much rotation to do, in degrees.</td></tr>
+ <tr><th>x</th><td>X component of the vector that is the axis of rotation.</td></tr>
+ <tr><th>y</th><td>Y component of the vector that is the axis of rotation.</td></tr>
+ <tr><th>z</th><td>Z component of the vector that is the axis of rotation.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> This function creates a rotation matrix. The axis of rotation is the <code>(x, y, z)</code> vector.
+</p>
+
+<p> To rotate a vector, multiply the vector by the created matrix using <a href='rs_matrix.html#android_rs:rsMatrixMultiply'>rsMatrixMultiply</a>().
+</p>
+
+<p> See http://en.wikipedia.org/wiki/Rotation_matrix .
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsMatrixLoadScale'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsMatrixLoadScale</span>
+ <span class='normal'>: Load a scaling matrix</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>void rsMatrixLoadScale(<a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* m, float x, float y, float z);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>m</th><td>Matrix to set.</td></tr>
+ <tr><th>x</th><td>Multiple to scale the x components by.</td></tr>
+ <tr><th>y</th><td>Multiple to scale the y components by.</td></tr>
+ <tr><th>z</th><td>Multiple to scale the z components by.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> This function creates a scaling matrix, where each component of a vector is multiplied
+by a number. This number can be negative.
+</p>
+
+<p> To scale a vector, multiply the vector by the created matrix using <a href='rs_matrix.html#android_rs:rsMatrixMultiply'>rsMatrixMultiply</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsMatrixLoadTranslate'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsMatrixLoadTranslate</span>
+ <span class='normal'>: Load a translation matrix</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>void rsMatrixLoadTranslate(<a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* m, float x, float y, float z);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>m</th><td>Matrix to set.</td></tr>
+ <tr><th>x</th><td>Number to add to each x component.</td></tr>
+ <tr><th>y</th><td>Number to add to each y component.</td></tr>
+ <tr><th>z</th><td>Number to add to each z component.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> This function creates a translation matrix, where a number is added to each element of
+a vector.
+</p>
+
+<p> To translate a vector, multiply the vector by the created matrix using
+<a href='rs_matrix.html#android_rs:rsMatrixMultiply'>rsMatrixMultiply</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsMatrixMultiply'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsMatrixMultiply</span>
+ <span class='normal'>: Multiply a matrix by a vector or another matrix</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> rsMatrixMultiply(const <a href='rs_value_types.html#android_rs:rs_matrix2x2'>rs_matrix2x2</a>* m, <a href='rs_value_types.html#android_rs:float2'>float2</a> in);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> rsMatrixMultiply(<a href='rs_value_types.html#android_rs:rs_matrix2x2'>rs_matrix2x2</a>* m, <a href='rs_value_types.html#android_rs:float2'>float2</a> in);
+</td>
+ <td> Removed from <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> rsMatrixMultiply(const <a href='rs_value_types.html#android_rs:rs_matrix3x3'>rs_matrix3x3</a>* m, <a href='rs_value_types.html#android_rs:float2'>float2</a> in);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> rsMatrixMultiply(const <a href='rs_value_types.html#android_rs:rs_matrix3x3'>rs_matrix3x3</a>* m, <a href='rs_value_types.html#android_rs:float3'>float3</a> in);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> rsMatrixMultiply(<a href='rs_value_types.html#android_rs:rs_matrix3x3'>rs_matrix3x3</a>* m, <a href='rs_value_types.html#android_rs:float2'>float2</a> in);
+</td>
+ <td> Removed from <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> rsMatrixMultiply(<a href='rs_value_types.html#android_rs:rs_matrix3x3'>rs_matrix3x3</a>* m, <a href='rs_value_types.html#android_rs:float3'>float3</a> in);
+</td>
+ <td> Removed from <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> rsMatrixMultiply(const <a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* m, <a href='rs_value_types.html#android_rs:float2'>float2</a> in);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> rsMatrixMultiply(const <a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* m, <a href='rs_value_types.html#android_rs:float3'>float3</a> in);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> rsMatrixMultiply(const <a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* m, <a href='rs_value_types.html#android_rs:float4'>float4</a> in);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> rsMatrixMultiply(<a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* m, <a href='rs_value_types.html#android_rs:float2'>float2</a> in);
+</td>
+ <td> Removed from <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> rsMatrixMultiply(<a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* m, <a href='rs_value_types.html#android_rs:float3'>float3</a> in);
+</td>
+ <td> Removed from <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> rsMatrixMultiply(<a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* m, <a href='rs_value_types.html#android_rs:float4'>float4</a> in);
+</td>
+ <td> Removed from <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+ </td>
+ </tr>
+ <tr>
+ <td>void rsMatrixMultiply(<a href='rs_value_types.html#android_rs:rs_matrix2x2'>rs_matrix2x2</a>* m, const <a href='rs_value_types.html#android_rs:rs_matrix2x2'>rs_matrix2x2</a>* rhs);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>void rsMatrixMultiply(<a href='rs_value_types.html#android_rs:rs_matrix3x3'>rs_matrix3x3</a>* m, const <a href='rs_value_types.html#android_rs:rs_matrix3x3'>rs_matrix3x3</a>* rhs);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>void rsMatrixMultiply(<a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* m, const <a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* rhs);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>m</th><td>Left matrix of the product and the matrix to be set.</td></tr>
+ <tr><th>rhs</th><td>Right matrix of the product.</td></tr>
+ <tr><th>in</th><td></td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> For the matrix by matrix variant, sets m to the matrix product <code>m * rhs</code>.
+</p>
+
+<p> When combining two 4x4 transformation matrices using this function, the resulting
+matrix will correspond to performing the rhs transformation first followed by
+the original m transformation.
+</p>
+
+<p> For the matrix by vector variant, returns the post-multiplication of the vector
+by the matrix, ie. <code>m * in</code>.
+</p>
+
+<p> When multiplying a float3 to a <a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>, the vector is expanded with (1).
+</p>
+
+<p> When multiplying a float2 to a <a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>, the vector is expanded with (0, 1).
+</p>
+
+<p> When multiplying a float2 to a <a href='rs_value_types.html#android_rs:rs_matrix3x3'>rs_matrix3x3</a>, the vector is expanded with (0).
+</p>
+
+<p> Starting with API 14, this function takes a const matrix as the first argument.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsMatrixRotate'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsMatrixRotate</span>
+ <span class='normal'>: Apply a rotation to a transformation matrix</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>void rsMatrixRotate(<a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* m, float rot, float x, float y, float z);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>m</th><td>Matrix to modify.</td></tr>
+ <tr><th>rot</th><td>How much rotation to do, in degrees.</td></tr>
+ <tr><th>x</th><td>X component of the vector that is the axis of rotation.</td></tr>
+ <tr><th>y</th><td>Y component of the vector that is the axis of rotation.</td></tr>
+ <tr><th>z</th><td>Z component of the vector that is the axis of rotation.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Multiply the matrix m with a rotation matrix.
+</p>
+
+<p> This function modifies a transformation matrix to first do a rotation. The axis of
+rotation is the <code>(x, y, z)</code> vector.
+</p>
+
+<p> To apply this combined transformation to a vector, multiply the vector by the created
+matrix using <a href='rs_matrix.html#android_rs:rsMatrixMultiply'>rsMatrixMultiply</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsMatrixScale'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsMatrixScale</span>
+ <span class='normal'>: Apply a scaling to a transformation matrix</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>void rsMatrixScale(<a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* m, float x, float y, float z);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>m</th><td>Matrix to modify.</td></tr>
+ <tr><th>x</th><td>Multiple to scale the x components by.</td></tr>
+ <tr><th>y</th><td>Multiple to scale the y components by.</td></tr>
+ <tr><th>z</th><td>Multiple to scale the z components by.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Multiply the matrix m with a scaling matrix.
+</p>
+
+<p> This function modifies a transformation matrix to first do a scaling. When scaling,
+each component of a vector is multiplied by a number. This number can be negative.
+</p>
+
+<p> To apply this combined transformation to a vector, multiply the vector by the created
+matrix using <a href='rs_matrix.html#android_rs:rsMatrixMultiply'>rsMatrixMultiply</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsMatrixSet'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsMatrixSet</span>
+ <span class='normal'>: Set one element</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>void rsMatrixSet(<a href='rs_value_types.html#android_rs:rs_matrix2x2'>rs_matrix2x2</a>* m, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> col, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> row, float v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>void rsMatrixSet(<a href='rs_value_types.html#android_rs:rs_matrix3x3'>rs_matrix3x3</a>* m, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> col, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> row, float v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>void rsMatrixSet(<a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* m, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> col, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> row, float v);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>m</th><td>Matrix that will be modified.</td></tr>
+ <tr><th>col</th><td>Zero-based column of the element to be set.</td></tr>
+ <tr><th>row</th><td>Zero-based row of the element to be set.</td></tr>
+ <tr><th>v</th><td>Value to set.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Set an element of a matrix.
+</p>
+
+<p> <b>Warning:</b> The order of the column and row parameters may be unexpected.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsMatrixTranslate'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsMatrixTranslate</span>
+ <span class='normal'>: Apply a translation to a transformation matrix</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>void rsMatrixTranslate(<a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* m, float x, float y, float z);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>m</th><td>Matrix to modify.</td></tr>
+ <tr><th>x</th><td>Number to add to each x component.</td></tr>
+ <tr><th>y</th><td>Number to add to each y component.</td></tr>
+ <tr><th>z</th><td>Number to add to each z component.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Multiply the matrix m with a translation matrix.
+</p>
+
+<p> This function modifies a transformation matrix to first do a translation. When
+translating, a number is added to each component of a vector.
+</p>
+
+<p> To apply this combined transformation to a vector, multiply the vector by the
+created matrix using <a href='rs_matrix.html#android_rs:rsMatrixMultiply'>rsMatrixMultiply</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsMatrixTranspose'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsMatrixTranspose</span>
+ <span class='normal'>: Transpose a matrix place</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>void rsMatrixTranspose(<a href='rs_value_types.html#android_rs:rs_matrix2x2'>rs_matrix2x2</a>* m);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>void rsMatrixTranspose(<a href='rs_value_types.html#android_rs:rs_matrix3x3'>rs_matrix3x3</a>* m);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>void rsMatrixTranspose(<a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* m);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>m</th><td>Matrix to transpose.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Transpose the matrix m in place.
+</p>
+ </div>
+</div>
+
+</div>
diff --git a/docs/html/guide/topics/renderscript/reference/rs_object_info.jd b/docs/html/guide/topics/renderscript/reference/rs_object_info.jd
new file mode 100644
index 0000000..192df54
--- /dev/null
+++ b/docs/html/guide/topics/renderscript/reference/rs_object_info.jd
@@ -0,0 +1,1077 @@
+page.title=RenderScript Object Characteristics Functions
+
+@jd:body
+
+<div class='renderscript'>
+<h2>Overview</h2>
+<p> The functions below can be used to query the characteristics of an Allocation, Element,
+or Sampler object. These objects are created from Java. You can't create them from a
+script.
+</p>
+
+<p> <h5>Allocations:</h5>
+</p>
+
+<p> Allocations are the primary method used to pass data to and from RenderScript kernels.
+</p>
+
+<p> They are a structured collection of cells that can be used to store bitmaps, textures,
+arbitrary data points, etc.
+</p>
+
+<p> This collection of cells may have many dimensions (X, Y, Z, Array0, Array1, Array2, Array3),
+faces (for cubemaps), and level of details (for mipmapping).
+</p>
+
+<p> See the <a href='http://developer.android.com/reference/android/renderscript/Allocation.html'>android.renderscript.Allocation</a> for details on to create Allocations.
+</p>
+
+<p> <h5>Elements:</h5>
+</p>
+
+<p> The term "element" is used a bit ambiguously in RenderScript, as both type information
+for the cells of an Allocation and the instantiation of that type. For example:<ul>
+<li><a href='rs_object_types.html#android_rs:rs_element'>rs_element</a> is a handle to a type specification, and</li>
+<li>In functions like <a href='rs_allocation_data.html#android_rs:rsGetElementAt'>rsGetElementAt</a>(), "element" means the instantiation of the type,
+ i.e. a cell of an Allocation.</li></ul>
+</p>
+
+<p> The functions below let you query the characteristics of the type specificiation.
+</p>
+
+<p> An Element can specify a simple data types as found in C, e.g. an integer, float, or
+boolean. It can also specify a handle to a RenderScript object. See <a href='rs_object_types.html#android_rs:rs_data_type'>rs_data_type</a> for
+a list of basic types.
+</p>
+
+<p> Elements can specify fixed size vector (of size 2, 3, or 4) versions of the basic types.
+Elements can be grouped together into complex Elements, creating the equivalent of
+C structure definitions.
+</p>
+
+<p> Elements can also have a kind, which is semantic information used to interpret pixel
+data. See <a href='rs_object_types.html#android_rs:rs_data_kind'>rs_data_kind</a>.
+</p>
+
+<p> When creating Allocations of common elements, you can simply use one of the many predefined
+Elements like <a href='http://developer.android.com/reference/android/renderscript/Element.html#F32_2(android.renderscript.RenderScript)'>F32_2</a>.
+</p>
+
+<p> To create complex Elements, use the <a href='http://developer.android.com/reference/android/renderscript/Element.Builder.html'>Element.Builder</a> Java class.
+</p>
+
+<p> <h5>Samplers:</h5>
+</p>
+
+<p> Samplers objects define how Allocations can be read as structure within a kernel.
+See <a href='http://developer.android.com/reference/android/renderscript/Sampler.html'>android.renderscript.S</a>.
+</p>
+<h2>Summary</h2>
+<table class='jd-sumtable'><tbody>
+ <tr><th colspan='2'>Functions</th></tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsAllocationGetDimFaces'>rsAllocationGetDimFaces</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Presence of more than one face
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsAllocationGetDimLOD'>rsAllocationGetDimLOD</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Presence of levels of detail
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsAllocationGetDimX'>rsAllocationGetDimX</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Size of the X dimension
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsAllocationGetDimY'>rsAllocationGetDimY</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Size of the Y dimension
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsAllocationGetDimZ'>rsAllocationGetDimZ</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Size of the Z dimension
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsAllocationGetElement'>rsAllocationGetElement</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Get the object that describes the cell of an Allocation
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsClearObject'>rsClearObject</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Release an object
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsElementGetBytesSize'>rsElementGetBytesSize</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Size of an Element
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsElementGetDataKind'>rsElementGetDataKind</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Kind of an Element
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsElementGetDataType'>rsElementGetDataType</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Data type of an Element
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsElementGetSubElement'>rsElementGetSubElement</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Sub-element of a complex Element
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsElementGetSubElementArraySize'>rsElementGetSubElementArraySize</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Array size of a sub-element of a complex Element
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsElementGetSubElementCount'>rsElementGetSubElementCount</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Number of sub-elements
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsElementGetSubElementName'>rsElementGetSubElementName</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Name of a sub-element
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsElementGetSubElementNameLength'>rsElementGetSubElementNameLength</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Length of the name of a sub-element
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsElementGetSubElementOffsetBytes'>rsElementGetSubElementOffsetBytes</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Offset of the instantiated sub-element
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsElementGetVectorSize'>rsElementGetVectorSize</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Vector size of the Element
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsIsObject'>rsIsObject</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Check for an empty handle
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsSamplerGetAnisotropy'>rsSamplerGetAnisotropy</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Anisotropy of the Sampler
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsSamplerGetMagnification'>rsSamplerGetMagnification</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Sampler magnification value
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsSamplerGetMinification'>rsSamplerGetMinification</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Sampler minification value
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsSamplerGetWrapS'>rsSamplerGetWrapS</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Sampler wrap S value
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsSamplerGetWrapT'>rsSamplerGetWrapT</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Sampler wrap T value
+ </td>
+ </tr>
+</tbody></table>
+<table class='jd-sumtable'><tbody>
+ <tr><th colspan='2'>Deprecated Functions</th></tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_info.html#android_rs:rsGetAllocation'>rsGetAllocation</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ <b>Deprecated</b>. Return the Allocation for a given pointer
+ </td>
+ </tr>
+</tbody></table>
+<h2>Functions</h2>
+<a name='android_rs:rsAllocationGetDimFaces'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsAllocationGetDimFaces</span>
+ <span class='normal'>: Presence of more than one face</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> rsAllocationGetDimFaces(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Returns</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><td>Returns 1 if more than one face is present, 0 otherwise.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> If the Allocation is a cubemap, this function returns 1 if there's more than one face
+present. In all other cases, it returns 0.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsAllocationGetDimLOD'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsAllocationGetDimLOD</span>
+ <span class='normal'>: Presence of levels of detail</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> rsAllocationGetDimLOD(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Returns</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><td>Returns 1 if more than one LOD is present, 0 otherwise.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Query an Allocation for the presence of more than one Level Of Detail. This is useful
+for mipmaps.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsAllocationGetDimX'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsAllocationGetDimX</span>
+ <span class='normal'>: Size of the X dimension</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> rsAllocationGetDimX(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Returns</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><td>X dimension of the Allocation.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the size of the X dimension of the Allocation.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsAllocationGetDimY'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsAllocationGetDimY</span>
+ <span class='normal'>: Size of the Y dimension</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> rsAllocationGetDimY(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Returns</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><td>Y dimension of the Allocation.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the size of the Y dimension of the Allocation. If the Allocation has less
+than two dimensions, returns 0.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsAllocationGetDimZ'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsAllocationGetDimZ</span>
+ <span class='normal'>: Size of the Z dimension</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> rsAllocationGetDimZ(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Returns</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><td>Z dimension of the Allocation.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the size of the Z dimension of the Allocation. If the Allocation has less
+than three dimensions, returns 0.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsAllocationGetElement'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsAllocationGetElement</span>
+ <span class='normal'>: Get the object that describes the cell of an Allocation</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td><a href='rs_object_types.html#android_rs:rs_element'>rs_element</a> rsAllocationGetElement(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> a);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>a</th><td>Allocation to get data from.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Returns</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><td>Element describing Allocation layout.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Get the Element object describing the type, kind, and other characteristics of a cell
+of an Allocation. See the rsElement* functions below.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsClearObject'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsClearObject</span>
+ <span class='normal'>: Release an object</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>void rsClearObject(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a>* dst);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>void rsClearObject(<a href='rs_object_types.html#android_rs:rs_element'>rs_element</a>* dst);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>void rsClearObject(<a href='rs_graphics.html#android_rs:rs_font'>rs_font</a>* dst);
+</td>
+ <td> When compiling for 32 bits.
+ </td>
+ </tr>
+ <tr>
+ <td>void rsClearObject(<a href='rs_graphics.html#android_rs:rs_mesh'>rs_mesh</a>* dst);
+</td>
+ <td> When compiling for 32 bits.
+ </td>
+ </tr>
+ <tr>
+ <td>void rsClearObject(<a href='rs_graphics.html#android_rs:rs_program_fragment'>rs_program_fragment</a>* dst);
+</td>
+ <td> When compiling for 32 bits.
+ </td>
+ </tr>
+ <tr>
+ <td>void rsClearObject(<a href='rs_graphics.html#android_rs:rs_program_raster'>rs_program_raster</a>* dst);
+</td>
+ <td> When compiling for 32 bits.
+ </td>
+ </tr>
+ <tr>
+ <td>void rsClearObject(<a href='rs_graphics.html#android_rs:rs_program_store'>rs_program_store</a>* dst);
+</td>
+ <td> When compiling for 32 bits.
+ </td>
+ </tr>
+ <tr>
+ <td>void rsClearObject(<a href='rs_graphics.html#android_rs:rs_program_vertex'>rs_program_vertex</a>* dst);
+</td>
+ <td> When compiling for 32 bits.
+ </td>
+ </tr>
+ <tr>
+ <td>void rsClearObject(<a href='rs_object_types.html#android_rs:rs_sampler'>rs_sampler</a>* dst);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>void rsClearObject(<a href='rs_object_types.html#android_rs:rs_script'>rs_script</a>* dst);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>void rsClearObject(<a href='rs_object_types.html#android_rs:rs_type'>rs_type</a>* dst);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Tells the run time that this handle will no longer be used to access the the related
+object. If this was the last handle to that object, resource recovery may happen.
+</p>
+
+<p> After calling this function, *dst will be set to an empty handle. See <a href='rs_object_info.html#android_rs:rsIsObject'>rsIsObject</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsElementGetBytesSize'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsElementGetBytesSize</span>
+ <span class='normal'>: Size of an Element</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> rsElementGetBytesSize(<a href='rs_object_types.html#android_rs:rs_element'>rs_element</a> e);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the size in bytes that an instantiation of this Element will occupy.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsElementGetDataKind'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsElementGetDataKind</span>
+ <span class='normal'>: Kind of an Element</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td><a href='rs_object_types.html#android_rs:rs_data_kind'>rs_data_kind</a> rsElementGetDataKind(<a href='rs_object_types.html#android_rs:rs_element'>rs_element</a> e);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the Element's data kind. This is used to interpret pixel data.
+</p>
+
+<p> See <a href='rs_object_types.html#android_rs:rs_data_kind'>rs_data_kind</a>.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsElementGetDataType'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsElementGetDataType</span>
+ <span class='normal'>: Data type of an Element</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td><a href='rs_object_types.html#android_rs:rs_data_type'>rs_data_type</a> rsElementGetDataType(<a href='rs_object_types.html#android_rs:rs_element'>rs_element</a> e);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the Element's base data type. This can be a type similar to C/C++ (e.g.
+RS_TYPE_UNSIGNED_8), a handle (e.g. RS_TYPE_ALLOCATION and RS_TYPE_ELEMENT), or a
+more complex numerical type (e.g. RS_TYPE_UNSIGNED_5_6_5 and RS_TYPE_MATRIX_4X4).
+See <a href='rs_object_types.html#android_rs:rs_data_type'>rs_data_type</a>.
+</p>
+
+<p> If the Element describes a vector, this function returns the data type of one of its items.
+Use <a href='rs_object_info.html#android_rs:rsElementGetVectorSize'>rsElementGetVectorSize</a> to get the size of the vector.
+</p>
+
+<p> If the Element describes a structure, RS_TYPE_NONE is returned. Use the rsElementGetSub*
+functions to explore this complex Element.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsElementGetSubElement'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsElementGetSubElement</span>
+ <span class='normal'>: Sub-element of a complex Element</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td><a href='rs_object_types.html#android_rs:rs_element'>rs_element</a> rsElementGetSubElement(<a href='rs_object_types.html#android_rs:rs_element'>rs_element</a> e, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> index);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>e</th><td>Element to query.</td></tr>
+ <tr><th>index</th><td>Index of the sub-element to return.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Returns</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><td>Sub-element at the given index.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> For Elements that represents a structure, this function returns the sub-element at the
+specified index.
+</p>
+
+<p> If the Element is not a structure or the index is greater or equal to the number of
+sub-elements, an invalid handle is returned.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsElementGetSubElementArraySize'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsElementGetSubElementArraySize</span>
+ <span class='normal'>: Array size of a sub-element of a complex Element</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> rsElementGetSubElementArraySize(<a href='rs_object_types.html#android_rs:rs_element'>rs_element</a> e, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> index);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>e</th><td>Element to query.</td></tr>
+ <tr><th>index</th><td>Index of the sub-element.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Returns</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><td>Array size of the sub-element.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> For complex Elements, sub-elements can be statically sized arrays. This function
+returns the array size of the sub-element at the index. This sub-element repetition
+is different than fixed size vectors.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsElementGetSubElementCount'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsElementGetSubElementCount</span>
+ <span class='normal'>: Number of sub-elements</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> rsElementGetSubElementCount(<a href='rs_object_types.html#android_rs:rs_element'>rs_element</a> e);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>e</th><td>Element to get data from.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Returns</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><td>Number of sub-elements.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Elements can be simple, such as an int or a float, or a structure with multiple
+sub-elements. This function returns zero for simple Elements and the number of
+sub-elements for complex Elements.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsElementGetSubElementName'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsElementGetSubElementName</span>
+ <span class='normal'>: Name of a sub-element</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> rsElementGetSubElementName(<a href='rs_object_types.html#android_rs:rs_element'>rs_element</a> e, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> index, char* name, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> nameLength);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>e</th><td>Element to get data from.</td></tr>
+ <tr><th>index</th><td>Index of the sub-element.</td></tr>
+ <tr><th>name</th><td>Address of the array to store the name into.</td></tr>
+ <tr><th>nameLength</th><td>Length of the provided name array.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Returns</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><td>Number of characters copied, excluding the null terminator.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> For complex Elements, this function returns the name of the sub-element at the
+specified index.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsElementGetSubElementNameLength'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsElementGetSubElementNameLength</span>
+ <span class='normal'>: Length of the name of a sub-element</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> rsElementGetSubElementNameLength(<a href='rs_object_types.html#android_rs:rs_element'>rs_element</a> e, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> index);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>e</th><td>Element to get data from.</td></tr>
+ <tr><th>index</th><td>Index of the sub-element.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Returns</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><td>Length of the sub-element name including the null terminator.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> For complex Elements, this function returns the length of the name of the sub-element
+at the specified index.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsElementGetSubElementOffsetBytes'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsElementGetSubElementOffsetBytes</span>
+ <span class='normal'>: Offset of the instantiated sub-element</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> rsElementGetSubElementOffsetBytes(<a href='rs_object_types.html#android_rs:rs_element'>rs_element</a> e, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> index);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>e</th><td>Element to get data from.</td></tr>
+ <tr><th>index</th><td>Index of the sub-element.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Returns</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><td>Offset in bytes.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> This function returns the relative position of the instantiation of the specified
+sub-element within the instantiation of the Element.
+</p>
+
+<p> For example, if the Element describes a 32 bit float followed by a 32 bit integer,
+the offset return for the first will be 0 and the second 4.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsElementGetVectorSize'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsElementGetVectorSize</span>
+ <span class='normal'>: Vector size of the Element</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a> rsElementGetVectorSize(<a href='rs_object_types.html#android_rs:rs_element'>rs_element</a> e);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>e</th><td>Element to get data from.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Returns</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><td>Length of the element vector.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the Element's vector size. If the Element does not represent a vector,
+1 is returned.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsGetAllocation'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsGetAllocation</span>
+ <span class='normal'>: Return the Allocation for a given pointer</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td><a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> rsGetAllocation(const void* p);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+ <p><b>Deprecated.</b> This function is deprecated and will be removed from the SDK in a future release.</p>
+<p> Returns the Allocation for a given pointer. The pointer should point within a valid
+allocation. The results are undefined if the pointer is not from a valid Allocation.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsIsObject'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsIsObject</span>
+ <span class='normal'>: Check for an empty handle</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>bool rsIsObject(<a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>bool rsIsObject(<a href='rs_object_types.html#android_rs:rs_element'>rs_element</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>bool rsIsObject(<a href='rs_graphics.html#android_rs:rs_font'>rs_font</a> v);
+</td>
+ <td> When compiling for 32 bits.
+ </td>
+ </tr>
+ <tr>
+ <td>bool rsIsObject(<a href='rs_graphics.html#android_rs:rs_mesh'>rs_mesh</a> v);
+</td>
+ <td> When compiling for 32 bits.
+ </td>
+ </tr>
+ <tr>
+ <td>bool rsIsObject(<a href='rs_graphics.html#android_rs:rs_program_fragment'>rs_program_fragment</a> v);
+</td>
+ <td> When compiling for 32 bits.
+ </td>
+ </tr>
+ <tr>
+ <td>bool rsIsObject(<a href='rs_graphics.html#android_rs:rs_program_raster'>rs_program_raster</a> v);
+</td>
+ <td> When compiling for 32 bits.
+ </td>
+ </tr>
+ <tr>
+ <td>bool rsIsObject(<a href='rs_graphics.html#android_rs:rs_program_store'>rs_program_store</a> v);
+</td>
+ <td> When compiling for 32 bits.
+ </td>
+ </tr>
+ <tr>
+ <td>bool rsIsObject(<a href='rs_graphics.html#android_rs:rs_program_vertex'>rs_program_vertex</a> v);
+</td>
+ <td> When compiling for 32 bits.
+ </td>
+ </tr>
+ <tr>
+ <td>bool rsIsObject(<a href='rs_object_types.html#android_rs:rs_sampler'>rs_sampler</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>bool rsIsObject(<a href='rs_object_types.html#android_rs:rs_script'>rs_script</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>bool rsIsObject(<a href='rs_object_types.html#android_rs:rs_type'>rs_type</a> v);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns true if the handle contains a non-null reference.
+</p>
+
+<p> This function does not validate that the internal pointer used in the handle
+points to an actual valid object; it only checks for null.
+</p>
+
+<p> This function can be used to check the Element returned by <a href='rs_object_info.html#android_rs:rsElementGetSubElement'>rsElementGetSubElement</a>()
+or see if <a href='rs_object_info.html#android_rs:rsClearObject'>rsClearObject</a>() has been called on a handle.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsSamplerGetAnisotropy'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsSamplerGetAnisotropy</span>
+ <span class='normal'>: Anisotropy of the Sampler</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float rsSamplerGetAnisotropy(<a href='rs_object_types.html#android_rs:rs_sampler'>rs_sampler</a> s);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Get the Sampler's anisotropy.
+</p>
+
+<p> See <a href='http://developer.android.com/reference/android/renderscript/Sampler.html'>android.renderscript.S</a>.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsSamplerGetMagnification'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsSamplerGetMagnification</span>
+ <span class='normal'>: Sampler magnification value</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td><a href='rs_object_types.html#android_rs:rs_sampler_value'>rs_sampler_value</a> rsSamplerGetMagnification(<a href='rs_object_types.html#android_rs:rs_sampler'>rs_sampler</a> s);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Get the Sampler's magnification value.
+</p>
+
+<p> See <a href='http://developer.android.com/reference/android/renderscript/Sampler.html'>android.renderscript.S</a>.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsSamplerGetMinification'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsSamplerGetMinification</span>
+ <span class='normal'>: Sampler minification value</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td><a href='rs_object_types.html#android_rs:rs_sampler_value'>rs_sampler_value</a> rsSamplerGetMinification(<a href='rs_object_types.html#android_rs:rs_sampler'>rs_sampler</a> s);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Get the Sampler's minification value.
+</p>
+
+<p> See <a href='http://developer.android.com/reference/android/renderscript/Sampler.html'>android.renderscript.S</a>.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsSamplerGetWrapS'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsSamplerGetWrapS</span>
+ <span class='normal'>: Sampler wrap S value</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td><a href='rs_object_types.html#android_rs:rs_sampler_value'>rs_sampler_value</a> rsSamplerGetWrapS(<a href='rs_object_types.html#android_rs:rs_sampler'>rs_sampler</a> s);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Get the Sampler's wrap S value.
+</p>
+
+<p> See <a href='http://developer.android.com/reference/android/renderscript/Sampler.html'>android.renderscript.S</a>.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsSamplerGetWrapT'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsSamplerGetWrapT</span>
+ <span class='normal'>: Sampler wrap T value</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td><a href='rs_object_types.html#android_rs:rs_sampler_value'>rs_sampler_value</a> rsSamplerGetWrapT(<a href='rs_object_types.html#android_rs:rs_sampler'>rs_sampler</a> s);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Get the sampler's wrap T value.
+</p>
+
+<p> See <a href='http://developer.android.com/reference/android/renderscript/Sampler.html'>android.renderscript.S</a>.
+</p>
+ </div>
+</div>
+
+</div>
diff --git a/docs/html/guide/topics/renderscript/reference/rs_object_types.jd b/docs/html/guide/topics/renderscript/reference/rs_object_types.jd
new file mode 100644
index 0000000..f342896
--- /dev/null
+++ b/docs/html/guide/topics/renderscript/reference/rs_object_types.jd
@@ -0,0 +1,336 @@
+page.title=RenderScript Object Types
+
+@jd:body
+
+<div class='renderscript'>
+<h2>Overview</h2>
+<p> The types below are used to manipulate RenderScript objects like allocations, samplers,
+elements, and scripts. Most of these object are created using the Java RenderScript APIs.
+</p>
+<h2>Summary</h2>
+<table class='jd-sumtable'><tbody>
+ <tr><th colspan='2'>Types</th></tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_types.html#android_rs:rs_allocation'>rs_allocation</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Handle to an allocation
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_types.html#android_rs:rs_allocation_cubemap_face'>rs_allocation_cubemap_face</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Enum for selecting cube map faces
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_types.html#android_rs:rs_allocation_usage_type'>rs_allocation_usage_type</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Bitfield to specify how an allocation is used
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_types.html#android_rs:rs_data_kind'>rs_data_kind</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Element data kind
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_types.html#android_rs:rs_data_type'>rs_data_type</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Element basic data type
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_types.html#android_rs:rs_element'>rs_element</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Handle to an element
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_types.html#android_rs:rs_sampler'>rs_sampler</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Handle to a Sampler
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_types.html#android_rs:rs_sampler_value'>rs_sampler_value</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Sampler wrap T value
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_types.html#android_rs:rs_script'>rs_script</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Handle to a Script
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_object_types.html#android_rs:rs_type'>rs_type</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Handle to a Type
+ </td>
+ </tr>
+</tbody></table>
+<h2>Types</h2>
+<a name='android_rs:rs_allocation'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rs_allocation</span>
+ <span class='normal'>: Handle to an allocation</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>A typedef of: _RS_HANDLE </p>
+<p> An opaque handle to a RenderScript allocation.
+</p>
+
+<p> See <a href="http://developer.android.com/reference/android/renderscript/Allocation.html">android.renderscript.Allocation</a>.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rs_allocation_cubemap_face'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rs_allocation_cubemap_face</span>
+ <span class='normal'>: Enum for selecting cube map faces</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>An enum with the following values:
+ Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+</p>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X = 0</th><td></td></tr>
+ <tr><th>RS_ALLOCATION_CUBEMAP_FACE_NEGATIVE_X = 1</th><td></td></tr>
+ <tr><th>RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_Y = 2</th><td></td></tr>
+ <tr><th>RS_ALLOCATION_CUBEMAP_FACE_NEGATIVE_Y = 3</th><td></td></tr>
+ <tr><th>RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_Z = 4</th><td></td></tr>
+ <tr><th>RS_ALLOCATION_CUBEMAP_FACE_NEGATIVE_Z = 5</th><td></td></tr>
+ </tbody></table><br/>
+<p> An enum used to specify one the six faces of a cubemap.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rs_allocation_usage_type'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rs_allocation_usage_type</span>
+ <span class='normal'>: Bitfield to specify how an allocation is used</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>An enum with the following values:
+ Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 14</a>
+</p>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>RS_ALLOCATION_USAGE_SCRIPT = 0x0001</th><td>Allocation is bound to and accessed by scripts.</td></tr>
+ <tr><th>RS_ALLOCATION_USAGE_GRAPHICS_TEXTURE = 0x0002</th><td>Deprecated.</td></tr>
+ <tr><th>RS_ALLOCATION_USAGE_GRAPHICS_VERTEX = 0x0004</th><td>Deprecated.</td></tr>
+ <tr><th>RS_ALLOCATION_USAGE_GRAPHICS_CONSTANTS = 0x0008</th><td>Deprecated.</td></tr>
+ <tr><th>RS_ALLOCATION_USAGE_GRAPHICS_RENDER_TARGET = 0x0010</th><td>Deprecated.</td></tr>
+ <tr><th>RS_ALLOCATION_USAGE_IO_INPUT = 0x0020</th><td>Allocation is used as a Surface consumer.</td></tr>
+ <tr><th>RS_ALLOCATION_USAGE_IO_OUTPUT = 0x0040</th><td>Allocation is used as a Surface producer.</td></tr>
+ <tr><th>RS_ALLOCATION_USAGE_SHARED = 0x0080</th><td>Allocation's backing store is shared with another object (usually a Bitmap). Copying to or from the original source Bitmap will cause a synchronization rather than a full copy.</td></tr>
+ </tbody></table><br/>
+<p> These values are ORed together to specify which usages or memory spaces are
+relevant to an allocation or an operation on an allocation.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rs_data_kind'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rs_data_kind</span>
+ <span class='normal'>: Element data kind</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>An enum with the following values:
+ Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+</p>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>RS_KIND_USER = 0</th><td>No special interpretation.</td></tr>
+ <tr><th>RS_KIND_PIXEL_L = 7</th><td>Luminance.</td></tr>
+ <tr><th>RS_KIND_PIXEL_A = 8</th><td>Alpha.</td></tr>
+ <tr><th>RS_KIND_PIXEL_LA = 9</th><td>Luminance and Alpha.</td></tr>
+ <tr><th>RS_KIND_PIXEL_RGB = 10</th><td>Red, Green, Blue.</td></tr>
+ <tr><th>RS_KIND_PIXEL_RGBA = 11</th><td>Red, Green, Blue, and Alpha.</td></tr>
+ <tr><th>RS_KIND_PIXEL_DEPTH = 12</th><td>Depth for a depth texture.</td></tr>
+ <tr><th>RS_KIND_PIXEL_YUV = 13</th><td>Luminance and chrominance.</td></tr>
+ <tr><th>RS_KIND_INVALID = 100</th><td></td></tr>
+ </tbody></table><br/>
+<p> This enumeration is primarly useful for graphical data. It provides additional information to
+help interpret the rs_data_type.
+</p>
+
+<p> RS_KIND_USER indicates no special interpretation is expected.
+</p>
+
+<p> The RS_KIND_PIXEL_* values are used in conjunction with the standard data types for representing
+texture formats.
+</p>
+
+<p> See the <a href='http://developer.android.com/reference/android/renderscript/Element.html#createPixel(android.renderscript.RenderScript,%20android.renderscript.Element.DataType, android.renderscript.Element.DataKind)'>Element.createPixel()</a> method.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rs_data_type'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rs_data_type</span>
+ <span class='normal'>: Element basic data type</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>An enum with the following values:
+ Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+</p>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>RS_TYPE_NONE = 0</th><td>Element is a complex type, i.e. a struct.</td></tr>
+ <tr><th>RS_TYPE_FLOAT_32 = 2</th><td>A 32 bit float point value.</td></tr>
+ <tr><th>RS_TYPE_FLOAT_64 = 3</th><td>A 64 bit floating point value.</td></tr>
+ <tr><th>RS_TYPE_SIGNED_8 = 4</th><td>An 8 bit signed integer.</td></tr>
+ <tr><th>RS_TYPE_SIGNED_16 = 5</th><td>A 16 bit signed integer.</td></tr>
+ <tr><th>RS_TYPE_SIGNED_32 = 6</th><td>A 32 bit signed integer.</td></tr>
+ <tr><th>RS_TYPE_SIGNED_64 = 7</th><td>A 64 bit signed integer.</td></tr>
+ <tr><th>RS_TYPE_UNSIGNED_8 = 8</th><td>An 8 bit unsigned integer.</td></tr>
+ <tr><th>RS_TYPE_UNSIGNED_16 = 9</th><td>A 16 bit unsigned integer.</td></tr>
+ <tr><th>RS_TYPE_UNSIGNED_32 = 10</th><td>A 32 bit unsigned integer.</td></tr>
+ <tr><th>RS_TYPE_UNSIGNED_64 = 11</th><td>A 64 bit unsigned integer.</td></tr>
+ <tr><th>RS_TYPE_BOOLEAN = 12</th><td>0 or 1 (false or true) stored in an 8 bit container.</td></tr>
+ <tr><th>RS_TYPE_UNSIGNED_5_6_5 = 13</th><td>A 16 bit unsigned integer packing graphical data in 5, 6, and 5 bit sections.</td></tr>
+ <tr><th>RS_TYPE_UNSIGNED_5_5_5_1 = 14</th><td>A 16 bit unsigned integer packing graphical data in 5, 5, 5, and 1 bit sections.</td></tr>
+ <tr><th>RS_TYPE_UNSIGNED_4_4_4_4 = 15</th><td>A 16 bit unsigned integer packing graphical data in 4, 4, 4, and 4 bit sections.</td></tr>
+ <tr><th>RS_TYPE_MATRIX_4X4 = 16</th><td>A 4x4 matrix of 32 bit floats, aligned on a 32 bit boundary.</td></tr>
+ <tr><th>RS_TYPE_MATRIX_3X3 = 17</th><td>A 3x3 matrix of 32 bit floats, aligned on a 32 bit boundary.</td></tr>
+ <tr><th>RS_TYPE_MATRIX_2X2 = 18</th><td>A 2x2 matrix of 32 bit floats, aligned on a 32 bit boundary.</td></tr>
+ <tr><th>RS_TYPE_ELEMENT = 1000</th><td>A handle to an Element.</td></tr>
+ <tr><th>RS_TYPE_TYPE = 1001</th><td>A handle to a Type.</td></tr>
+ <tr><th>RS_TYPE_ALLOCATION = 1002</th><td>A handle to an Allocation.</td></tr>
+ <tr><th>RS_TYPE_SAMPLER = 1003</th><td>A handle to a Sampler.</td></tr>
+ <tr><th>RS_TYPE_SCRIPT = 1004</th><td>A handle to a Script.</td></tr>
+ <tr><th>RS_TYPE_MESH = 1005</th><td>Deprecated.</td></tr>
+ <tr><th>RS_TYPE_PROGRAM_FRAGMENT = 1006</th><td>Deprecated.</td></tr>
+ <tr><th>RS_TYPE_PROGRAM_VERTEX = 1007</th><td>Deprecated.</td></tr>
+ <tr><th>RS_TYPE_PROGRAM_RASTER = 1008</th><td>Deprecated.</td></tr>
+ <tr><th>RS_TYPE_PROGRAM_STORE = 1009</th><td>Deprecated.</td></tr>
+ <tr><th>RS_TYPE_FONT = 1010</th><td>Deprecated.</td></tr>
+ <tr><th>RS_TYPE_INVALID = 10000</th><td></td></tr>
+ </tbody></table><br/>
+<p> rs_data_type is used to encode the type information of a basic element.
+</p>
+
+<p> RS_TYPE_UNSIGNED_5_6_5, RS_TYPE_UNSIGNED_5_5_5_1, RS_TYPE_UNSIGNED_4_4_4_4 are for packed
+graphical data formats and represent vectors with per vector member sizes which are treated
+as a single unit for packing and alignment purposes.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rs_element'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rs_element</span>
+ <span class='normal'>: Handle to an element</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>A typedef of: _RS_HANDLE </p>
+<p> An opaque handle to a RenderScript element.
+</p>
+
+<p> See <a href="http://developer.android.com/reference/android/renderscript/Element.html">android.renderscript.Element</a>.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rs_sampler'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rs_sampler</span>
+ <span class='normal'>: Handle to a Sampler</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>A typedef of: _RS_HANDLE </p>
+<p> An opaque handle to a RenderScript sampler object.
+</p>
+
+<p> See <a href="http://developer.android.com/reference/android/renderscript/Sampler.html">android.renderscript.Sampler</a>.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rs_sampler_value'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rs_sampler_value</span>
+ <span class='normal'>: Sampler wrap T value</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>An enum with the following values:
+ Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 16</a>
+</p>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>RS_SAMPLER_NEAREST = 0</th><td></td></tr>
+ <tr><th>RS_SAMPLER_LINEAR = 1</th><td></td></tr>
+ <tr><th>RS_SAMPLER_LINEAR_MIP_LINEAR = 2</th><td></td></tr>
+ <tr><th>RS_SAMPLER_WRAP = 3</th><td></td></tr>
+ <tr><th>RS_SAMPLER_CLAMP = 4</th><td></td></tr>
+ <tr><th>RS_SAMPLER_LINEAR_MIP_NEAREST = 5</th><td></td></tr>
+ <tr><th>RS_SAMPLER_MIRRORED_REPEAT = 6</th><td></td></tr>
+ <tr><th>RS_SAMPLER_INVALID = 100</th><td></td></tr>
+ </tbody></table><br/>
+ </div>
+</div>
+
+<a name='android_rs:rs_script'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rs_script</span>
+ <span class='normal'>: Handle to a Script</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>A typedef of: _RS_HANDLE </p>
+<p> An opaque handle to a RenderScript script object.
+</p>
+
+<p> See <a href="http://developer.android.com/reference/android/renderscript/ScriptC.html">android.renderscript.ScriptC</a>.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rs_type'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rs_type</span>
+ <span class='normal'>: Handle to a Type</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>A typedef of: _RS_HANDLE </p>
+<p> An opaque handle to a RenderScript type.
+</p>
+
+<p> See <a href="http://developer.android.com/reference/android/renderscript/Type.html">android.renderscript.Type</a>.
+</p>
+ </div>
+</div>
+
+</div>
diff --git a/docs/html/guide/topics/renderscript/reference/rs_quaternion.jd b/docs/html/guide/topics/renderscript/reference/rs_quaternion.jd
new file mode 100644
index 0000000..020f1ad
--- /dev/null
+++ b/docs/html/guide/topics/renderscript/reference/rs_quaternion.jd
@@ -0,0 +1,387 @@
+page.title=RenderScript Quaternion Functions
+
+@jd:body
+
+<div class='renderscript'>
+<h2>Overview</h2>
+<p> The following functions manipulate quaternions.
+</p>
+<h2>Summary</h2>
+<table class='jd-sumtable'><tbody>
+ <tr><th colspan='2'>Functions</th></tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_quaternion.html#android_rs:rsQuaternionAdd'>rsQuaternionAdd</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Add two quaternions
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_quaternion.html#android_rs:rsQuaternionConjugate'>rsQuaternionConjugate</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Conjugate a quaternion
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_quaternion.html#android_rs:rsQuaternionDot'>rsQuaternionDot</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Dot product of two quaternions
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_quaternion.html#android_rs:rsQuaternionGetMatrixUnit'>rsQuaternionGetMatrixUnit</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Get a rotation matrix from a quaternion
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_quaternion.html#android_rs:rsQuaternionLoadRotate'>rsQuaternionLoadRotate</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Create a rotation quaternion
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_quaternion.html#android_rs:rsQuaternionLoadRotateUnit'>rsQuaternionLoadRotateUnit</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Quaternion that represents a rotation about an arbitrary unit vector
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_quaternion.html#android_rs:rsQuaternionMultiply'>rsQuaternionMultiply</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Multiply a quaternion by a scalar or another quaternion
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_quaternion.html#android_rs:rsQuaternionNormalize'>rsQuaternionNormalize</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Normalize a quaternion
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_quaternion.html#android_rs:rsQuaternionSet'>rsQuaternionSet</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Create a quaternion
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_quaternion.html#android_rs:rsQuaternionSlerp'>rsQuaternionSlerp</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Spherical linear interpolation between two quaternions
+ </td>
+ </tr>
+</tbody></table>
+<h2>Functions</h2>
+<a name='android_rs:rsQuaternionAdd'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsQuaternionAdd</span>
+ <span class='normal'>: Add two quaternions</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>void rsQuaternionAdd(<a href='rs_value_types.html#android_rs:rs_quaternion'>rs_quaternion</a>* q, const <a href='rs_value_types.html#android_rs:rs_quaternion'>rs_quaternion</a>* rhs);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>q</th><td>Destination quaternion to add to.</td></tr>
+ <tr><th>rhs</th><td>Quaternion to add.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Adds two quaternions, i.e. <code>*q += *rhs;</code>
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsQuaternionConjugate'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsQuaternionConjugate</span>
+ <span class='normal'>: Conjugate a quaternion</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>void rsQuaternionConjugate(<a href='rs_value_types.html#android_rs:rs_quaternion'>rs_quaternion</a>* q);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>q</th><td>Quaternion to modify.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Conjugates the quaternion.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsQuaternionDot'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsQuaternionDot</span>
+ <span class='normal'>: Dot product of two quaternions</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float rsQuaternionDot(const <a href='rs_value_types.html#android_rs:rs_quaternion'>rs_quaternion</a>* q0, const <a href='rs_value_types.html#android_rs:rs_quaternion'>rs_quaternion</a>* q1);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>q0</th><td>First quaternion.</td></tr>
+ <tr><th>q1</th><td>Second quaternion.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the dot product of two quaternions.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsQuaternionGetMatrixUnit'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsQuaternionGetMatrixUnit</span>
+ <span class='normal'>: Get a rotation matrix from a quaternion</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>void rsQuaternionGetMatrixUnit(<a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>* m, const <a href='rs_value_types.html#android_rs:rs_quaternion'>rs_quaternion</a>* q);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>m</th><td>Resulting matrix.</td></tr>
+ <tr><th>q</th><td>Normalized quaternion.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Computes a rotation matrix from the normalized quaternion.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsQuaternionLoadRotate'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsQuaternionLoadRotate</span>
+ <span class='normal'>: Create a rotation quaternion</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>void rsQuaternionLoadRotate(<a href='rs_value_types.html#android_rs:rs_quaternion'>rs_quaternion</a>* q, float rot, float x, float y, float z);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>q</th><td>Destination quaternion.</td></tr>
+ <tr><th>rot</th><td>Angle to rotate by.</td></tr>
+ <tr><th>x</th><td>X component of a vector.</td></tr>
+ <tr><th>y</th><td>Y component of a vector.</td></tr>
+ <tr><th>z</th><td>Z component of a vector.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Loads a quaternion that represents a rotation about an arbitrary vector
+(doesn't have to be unit)
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsQuaternionLoadRotateUnit'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsQuaternionLoadRotateUnit</span>
+ <span class='normal'>: Quaternion that represents a rotation about an arbitrary unit vector</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>void rsQuaternionLoadRotateUnit(<a href='rs_value_types.html#android_rs:rs_quaternion'>rs_quaternion</a>* q, float rot, float x, float y, float z);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>q</th><td>Destination quaternion.</td></tr>
+ <tr><th>rot</th><td>Angle to rotate by, in radians.</td></tr>
+ <tr><th>x</th><td>X component of the vector.</td></tr>
+ <tr><th>y</th><td>Y component of the vector.</td></tr>
+ <tr><th>z</th><td>Z component of the vector.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Loads a quaternion that represents a rotation about an arbitrary unit vector.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsQuaternionMultiply'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsQuaternionMultiply</span>
+ <span class='normal'>: Multiply a quaternion by a scalar or another quaternion</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>void rsQuaternionMultiply(<a href='rs_value_types.html#android_rs:rs_quaternion'>rs_quaternion</a>* q, const <a href='rs_value_types.html#android_rs:rs_quaternion'>rs_quaternion</a>* rhs);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>void rsQuaternionMultiply(<a href='rs_value_types.html#android_rs:rs_quaternion'>rs_quaternion</a>* q, float scalar);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>q</th><td>Destination quaternion.</td></tr>
+ <tr><th>scalar</th><td>Scalar to multiply the quaternion by.</td></tr>
+ <tr><th>rhs</th><td>Quaternion to multiply the destination quaternion by.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Multiplies a quaternion by a scalar or by another quaternion, e.g
+<code>*q = *q * scalar;</code> or <code>*q = *q * *rhs;</code>.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsQuaternionNormalize'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsQuaternionNormalize</span>
+ <span class='normal'>: Normalize a quaternion</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>void rsQuaternionNormalize(<a href='rs_value_types.html#android_rs:rs_quaternion'>rs_quaternion</a>* q);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>q</th><td>Quaternion to normalize.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Normalizes the quaternion.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsQuaternionSet'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsQuaternionSet</span>
+ <span class='normal'>: Create a quaternion</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>void rsQuaternionSet(<a href='rs_value_types.html#android_rs:rs_quaternion'>rs_quaternion</a>* q, const <a href='rs_value_types.html#android_rs:rs_quaternion'>rs_quaternion</a>* rhs);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>void rsQuaternionSet(<a href='rs_value_types.html#android_rs:rs_quaternion'>rs_quaternion</a>* q, float w, float x, float y, float z);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>q</th><td>Destination quaternion.</td></tr>
+ <tr><th>w</th><td>W component.</td></tr>
+ <tr><th>x</th><td>X component.</td></tr>
+ <tr><th>y</th><td>Y component.</td></tr>
+ <tr><th>z</th><td>Z component.</td></tr>
+ <tr><th>rhs</th><td>Source quaternion.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Creates a quaternion from its four components or from another quaternion.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsQuaternionSlerp'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsQuaternionSlerp</span>
+ <span class='normal'>: Spherical linear interpolation between two quaternions</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>void rsQuaternionSlerp(<a href='rs_value_types.html#android_rs:rs_quaternion'>rs_quaternion</a>* q, const <a href='rs_value_types.html#android_rs:rs_quaternion'>rs_quaternion</a>* q0, const <a href='rs_value_types.html#android_rs:rs_quaternion'>rs_quaternion</a>* q1, float t);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>q</th><td>Result quaternion from the interpolation.</td></tr>
+ <tr><th>q0</th><td>First input quaternion.</td></tr>
+ <tr><th>q1</th><td>Second input quaternion.</td></tr>
+ <tr><th>t</th><td>How much to interpolate by.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Performs spherical linear interpolation between two quaternions.
+</p>
+ </div>
+</div>
+
+</div>
diff --git a/docs/html/guide/topics/renderscript/reference/rs_time.jd b/docs/html/guide/topics/renderscript/reference/rs_time.jd
new file mode 100644
index 0000000..27044a3
--- /dev/null
+++ b/docs/html/guide/topics/renderscript/reference/rs_time.jd
@@ -0,0 +1,269 @@
+page.title=RenderScript Time Functions and Types
+
+@jd:body
+
+<div class='renderscript'>
+<h2>Overview</h2>
+<p> The functions below can be used to tell the current clock time and the current
+system up time. It is not recommended to call these functions inside of a kernel.
+</p>
+<h2>Summary</h2>
+<table class='jd-sumtable'><tbody>
+ <tr><th colspan='2'>Types</th></tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_time.html#android_rs:rs_time_t'>rs_time_t</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Seconds since January 1, 1970
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_time.html#android_rs:rs_tm'>rs_tm</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Date and time structure
+ </td>
+ </tr>
+</tbody></table>
+<table class='jd-sumtable'><tbody>
+ <tr><th colspan='2'>Functions</th></tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_time.html#android_rs:rsGetDt'>rsGetDt</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Elapsed time since last call
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_time.html#android_rs:rsLocaltime'>rsLocaltime</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Convert to local time
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_time.html#android_rs:rsTime'>rsTime</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Seconds since January 1, 1970
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_time.html#android_rs:rsUptimeMillis'>rsUptimeMillis</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ System uptime in milliseconds
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_time.html#android_rs:rsUptimeNanos'>rsUptimeNanos</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ System uptime in nanoseconds
+ </td>
+ </tr>
+</tbody></table>
+<h2>Types</h2>
+<a name='android_rs:rs_time_t'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rs_time_t</span>
+ <span class='normal'>: Seconds since January 1, 1970</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>A typedef of: int When compiling for 32 bits.
+</p>
+<p>A typedef of: long When compiling for 64 bits.
+</p>
+<p> Calendar time interpreted as seconds elapsed since the Epoch (00:00:00 on
+January 1, 1970, Coordinated Universal Time (UTC)).
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rs_tm'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rs_tm</span>
+ <span class='normal'>: Date and time structure</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>A structure with the following fields: </p>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>int tm_sec</th><td>Seconds after the minute. This ranges from 0 to 59, but possibly up to 60 for leap seconds.</td></tr>
+ <tr><th>int tm_min</th><td>Minutes after the hour. This ranges from 0 to 59.</td></tr>
+ <tr><th>int tm_hour</th><td>Hours past midnight. This ranges from 0 to 23.</td></tr>
+ <tr><th>int tm_mday</th><td>Day of the month. This ranges from 1 to 31.</td></tr>
+ <tr><th>int tm_mon</th><td>Months since January. This ranges from 0 to 11.</td></tr>
+ <tr><th>int tm_year</th><td>Years since 1900.</td></tr>
+ <tr><th>int tm_wday</th><td>Days since Sunday. This ranges from 0 to 6.</td></tr>
+ <tr><th>int tm_yday</th><td>Days since January 1. This ranges from 0 to 365.</td></tr>
+ <tr><th>int tm_isdst</th><td>Flag to indicate whether daylight saving time is in effect. The value is positive if it is in effect, zero if it is not, and negative if the information is not available.</td></tr>
+ </tbody></table><br/>
+<p> Data structure for broken-down time components.
+</p>
+ </div>
+</div>
+
+<h2>Functions</h2>
+<a name='android_rs:rsGetDt'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsGetDt</span>
+ <span class='normal'>: Elapsed time since last call</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float rsGetDt();
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Returns</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><td>Time in seconds.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the time in seconds since this function was last called in this script.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsLocaltime'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsLocaltime</span>
+ <span class='normal'>: Convert to local time</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td><a href='rs_time.html#android_rs:rs_tm'>rs_tm</a>* rsLocaltime(<a href='rs_time.html#android_rs:rs_tm'>rs_tm</a>* local, const <a href='rs_time.html#android_rs:rs_time_t'>rs_time_t</a>* timer);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>local</th><td>Pointer to time structure where the local time will be stored.</td></tr>
+ <tr><th>timer</th><td>Input time as a number of seconds since January 1, 1970.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Returns</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><td>Pointer to the output local time, i.e. the same value as the parameter local.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Converts the time specified by timer into a <a href='rs_time.html#android_rs:rs_tm'>rs_tm</a> structure that provides year, month,
+hour, etc. This value is stored at *local.
+</p>
+
+<p> This functions returns the same pointer that is passed as first argument. If the
+local parameter is NULL, this function does nothing and returns NULL.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsTime'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsTime</span>
+ <span class='normal'>: Seconds since January 1, 1970</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td><a href='rs_time.html#android_rs:rs_time_t'>rs_time_t</a> rsTime(<a href='rs_time.html#android_rs:rs_time_t'>rs_time_t</a>* timer);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Parameters</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>timer</th><td>Location to also store the returned calendar time.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Returns</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><td>Seconds since the Epoch, -1 if there's an error.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the number of seconds since the Epoch (00:00:00 UTC, January 1, 1970).
+</p>
+
+<p> If timer is non-NULL, the result is also stored in the memory pointed to by
+this variable.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsUptimeMillis'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsUptimeMillis</span>
+ <span class='normal'>: System uptime in milliseconds</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int64_t'>int64_t</a> rsUptimeMillis();
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Returns</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><td>Uptime in milliseconds.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the current system clock (uptime) in milliseconds.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rsUptimeNanos'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rsUptimeNanos</span>
+ <span class='normal'>: System uptime in nanoseconds</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:int64_t'>int64_t</a> rsUptimeNanos();
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata'> <h5 class='jd-tagtitle'>Returns</h5>
+ <table class='jd-tagtable'><tbody>
+ <tr><td>Uptime in nanoseconds.</td></tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Returns the current system clock (uptime) in nanoseconds.
+</p>
+
+<p> The granularity of the values return by this call may be much larger than a nanosecond.
+</p>
+ </div>
+</div>
+
+</div>
diff --git a/docs/html/guide/topics/renderscript/reference/rs_value_types.jd b/docs/html/guide/topics/renderscript/reference/rs_value_types.jd
new file mode 100644
index 0000000..a7caf10
--- /dev/null
+++ b/docs/html/guide/topics/renderscript/reference/rs_value_types.jd
@@ -0,0 +1,1172 @@
+page.title=RenderScript Numerical Types
+
+@jd:body
+
+<div class='renderscript'>
+<h2>Overview</h2>
+<p> <h5>Scalars:</h5>
+</p>
+
+<p> RenderScript supports the following scalar numerical types:
+<table>
+<tr><td> </td> <td>8 bits </td> <td>16 bits </td> <td>32 bits </td> <td>64 bits</td></tr>
+<tr><td>Integer: </td> <td>char, <a href='rs_value_types.html#android_rs:int8_t'>int8_t</a> </td> <td>short, <a href='rs_value_types.html#android_rs:int16_t'>int16_t</a> </td> <td><a href='rs_value_types.html#android_rs:int32_t'>int32_t</a> </td> <td>long, long long, <a href='rs_value_types.html#android_rs:int64_t'>int64_t</a></td></tr>
+<tr><td>Unsigned integer:</td> <td>uchar, <a href='rs_value_types.html#android_rs:uint8_t'>uint8_t</a></td> <td>ushort, <a href='rs_value_types.html#android_rs:uint16_t'>uint16_t</a></td> <td>uint, <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a></td> <td>ulong, <a href='rs_value_types.html#android_rs:uint64_t'>uint64_t</a></td></tr>
+<tr><td>Floating point: </td> <td> </td> <td> </td> <td>float </td> <td>double</td></tr>
+</table>
+</p>
+
+<p> <h5>Vectors:</h5>
+</p>
+
+<p> RenderScript supports fixed size vectors of length 2, 3, and 4.
+Vectors are declared using the common type name followed by a 2, 3, or 4.
+E.g. <a href='rs_value_types.html#android_rs:float4'>float4</a>, <a href='rs_value_types.html#android_rs:int3'>int3</a>, <a href='rs_value_types.html#android_rs:double2'>double2</a>, <a href='rs_value_types.html#android_rs:ulong4'>ulong4</a>.
+</p>
+
+<p> To create vector literals, use the vector type followed by the values enclosed
+between parentheses, e.g. <code>(float3)(1.0f, 2.0f, 3.0f)</code>.
+</p>
+
+<p> Entries of a vector can be accessed using different naming styles.
+</p>
+
+<p> Single entries can be accessed by following the variable name with a dot and:<ul>
+<li>The letters x, y, z, and w,</li>
+<li>The letters r, g, b, and a,</li>
+<li>The letter s or S, followed by a zero based index.</li></ul>
+</p>
+
+<p> For example, with <code>int4 myVar;</code> the following are equivalent:<code><br/>
+ myVar.x == myVar.r == myVar.s0 == myVar.S0<br/>
+ myVar.y == myVar.g == myVar.s1 == myVar.S1<br/>
+ myVar.z == myVar.b == myVar.s2 == myVar.S2<br/>
+ myVar.w == myVar.a == myVar.s3 == myVar.S3</code>
+</p>
+
+<p> Multiple entries of a vector can be accessed at once by using an identifier that is
+the concatenation of multiple letters or indices. The resulting vector has a size
+equal to the number of entries named.
+</p>
+
+<p> With the example above, the middle two entries can be accessed using
+<code>myVar.yz</code>, <code>myVar.gb</code>, <code>myVar.s12</code>, and <code>myVar.S12</code>.
+</p>
+
+<p> The entries don't have to be contiguous or in increasing order. Entries can even be
+repeated, as long as we're not trying to assign to it. You also can't mix the naming
+styles.
+</p>
+
+<p> Here are examples of what can or can't be done:<code><br/>
+float4 v4;<br/>
+float3 v3;<br/>
+float2 v2;<br/>
+v2 = v4.xx; // Valid<br/>
+v3 = v4.zxw; // Valid<br/>
+v3 = v4.bba; // Valid<br/>
+v3 = v4.s032; // Valid<br/>
+v3.s120 = v4.S233; // Valid<br/>
+v4.yz = v3.rg; // Valid<br/>
+v4.yzx = v3.rg; // Invalid: mismatched sizes<br/>
+v4.yzz = v3; // Invalid: z appears twice in an assignment<br/>
+v3 = v3.xas0; // Invalid: can't mix xyzw with rgba nor s0...<br/>
+v3 = v4.s034; // Invalid: the digit can only be 0, 1, 2, or 3<br/>
+</code>
+</p>
+
+<p> <h5>Matrices and Quaternions:</h5>
+</p>
+
+<p> RenderScript supports fixed size square matrices of floats of size 2x2, 3x3, and 4x4.
+The types are named <a href='rs_value_types.html#android_rs:rs_matrix2x2'>rs_matrix2x2</a>, <a href='rs_value_types.html#android_rs:rs_matrix3x3'>rs_matrix3x3</a>, and <a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>. See
+<a href='rs_matrix.html'>Matrix Functions</a> for the list of operations.
+</p>
+
+<p> Quaternions are also supported via <a href='rs_value_types.html#android_rs:rs_quaternion'>rs_quaternion</a>. See <a href='rs_quaternion.html'>Quaterion Functions</a> for the list
+of operations.
+</p>
+<h2>Summary</h2>
+<table class='jd-sumtable'><tbody>
+ <tr><th colspan='2'>Types</th></tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:char2'>char2</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Two 8 bit signed integers
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:char3'>char3</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Three 8 bit signed integers
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:char4'>char4</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Four 8 bit signed integers
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:double2'>double2</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Two 64 bit floats
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:double3'>double3</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Three 64 bit floats
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:double4'>double4</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Four 64 bit floats
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:float2'>float2</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Two 32 bit floats
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:float3'>float3</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Three 32 bit floats
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:float4'>float4</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Four 32 bit floats
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:int16_t'>int16_t</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ 16 bit signed integer
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:int2'>int2</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Two 32 bit signed integers
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:int3'>int3</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Three 32 bit signed integers
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:int32_t'>int32_t</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ 32 bit signed integer
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:int4'>int4</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Four 32 bit signed integers
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:int64_t'>int64_t</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ 64 bit signed integer
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:int8_t'>int8_t</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ 8 bit signed integer
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:long2'>long2</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Two 64 bit signed integers
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:long3'>long3</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Three 64 bit signed integers
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:long4'>long4</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Four 64 bit signed integers
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:rs_matrix2x2'>rs_matrix2x2</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ 2x2 matrix of 32 bit floats
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:rs_matrix3x3'>rs_matrix3x3</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ 3x3 matrix of 32 bit floats
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:rs_matrix4x4'>rs_matrix4x4</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ 4x4 matrix of 32 bit floats
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:rs_quaternion'>rs_quaternion</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Quaternion
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:short2'>short2</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Two 16 bit signed integers
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:short3'>short3</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Three 16 bit signed integers
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:short4'>short4</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Four 16 bit signed integers
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:size_t'>size_t</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Unsigned size type
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:ssize_t'>ssize_t</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Signed size type
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:uchar'>uchar</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ 8 bit unsigned integer
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:uchar2'>uchar2</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Two 8 bit unsigned integers
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:uchar3'>uchar3</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Three 8 bit unsigned integers
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:uchar4'>uchar4</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Four 8 bit unsigned integers
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:uint'>uint</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ 32 bit unsigned integer
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:uint16_t'>uint16_t</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ 16 bit unsigned integer
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:uint2'>uint2</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Two 32 bit unsigned integers
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:uint3'>uint3</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Three 32 bit unsigned integers
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:uint32_t'>uint32_t</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ 32 bit unsigned integer
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:uint4'>uint4</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Four 32 bit unsigned integers
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:uint64_t'>uint64_t</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ 64 bit unsigned integer
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:uint8_t'>uint8_t</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ 8 bit unsigned integer
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:ulong'>ulong</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ 64 bit unsigned integer
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:ulong2'>ulong2</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Two 64 bit unsigned integers
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:ulong3'>ulong3</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Three 64 bit unsigned integers
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:ulong4'>ulong4</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Four 64 bit unsigned integers
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:ushort'>ushort</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ 16 bit unsigned integer
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:ushort2'>ushort2</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Two 16 bit unsigned integers
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:ushort3'>ushort3</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Three 16 bit unsigned integers
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_value_types.html#android_rs:ushort4'>ushort4</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Four 16 bit unsigned integers
+ </td>
+ </tr>
+</tbody></table>
+<h2>Types</h2>
+<a name='android_rs:char2'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>char2</span>
+ <span class='normal'>: Two 8 bit signed integers</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>A typedef of: char __attribute__((ext_vector_type(2))) </p>
+<p> A vector of two chars. These two chars are packed into a single 16 bit field
+with a 16 bit alignment.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:char3'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>char3</span>
+ <span class='normal'>: Three 8 bit signed integers</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>A typedef of: char __attribute__((ext_vector_type(3))) </p>
+<p> A vector of three chars. These three chars are packed into a single 32 bit field
+with a 32 bit alignment.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:char4'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>char4</span>
+ <span class='normal'>: Four 8 bit signed integers</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>A typedef of: char __attribute__((ext_vector_type(4))) </p>
+<p> A vector of four chars. These four chars are packed into a single 32 bit field
+with a 32 bit alignment.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:double2'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>double2</span>
+ <span class='normal'>: Two 64 bit floats</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>A typedef of: double __attribute__((ext_vector_type(2))) </p>
+<p> A vector of two doubles. These two double fields packed into a single 128 bit field
+with a 128 bit alignment.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:double3'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>double3</span>
+ <span class='normal'>: Three 64 bit floats</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>A typedef of: double __attribute__((ext_vector_type(3))) </p>
+<p> A vector of three doubles. These three double fields packed into a single 256 bit field
+with a 256 bit alignment.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:double4'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>double4</span>
+ <span class='normal'>: Four 64 bit floats</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>A typedef of: double __attribute__((ext_vector_type(4))) </p>
+<p> A vector of four doubles. These four double fields packed into a single 256 bit field
+with a 256 bit alignment.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:float2'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>float2</span>
+ <span class='normal'>: Two 32 bit floats</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>A typedef of: float __attribute__((ext_vector_type(2))) </p>
+<p> A vector of two floats. These two floats are packed into a single 64 bit field
+with a 64 bit alignment.
+</p>
+
+<p> A vector of two floats. These two floats are packed into a single 64 bit field
+with a 64 bit alignment.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:float3'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>float3</span>
+ <span class='normal'>: Three 32 bit floats</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>A typedef of: float __attribute__((ext_vector_type(3))) </p>
+<p> A vector of three floats. These three floats are packed into a single 128 bit field
+with a 128 bit alignment.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:float4'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>float4</span>
+ <span class='normal'>: Four 32 bit floats</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>A typedef of: float __attribute__((ext_vector_type(4))) </p>
+<p> A vector of four floats type. These four floats are packed into a single 128 bit field
+with a 128 bit alignment.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:int16_t'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>int16_t</span>
+ <span class='normal'>: 16 bit signed integer</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>A typedef of: short </p>
+<p> A 16 bit signed integer type.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:int2'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>int2</span>
+ <span class='normal'>: Two 32 bit signed integers</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>A typedef of: int __attribute__((ext_vector_type(2))) </p>
+<p> A vector of two ints. These two ints are packed into a single 64 bit field
+with a 64 bit alignment.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:int3'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>int3</span>
+ <span class='normal'>: Three 32 bit signed integers</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>A typedef of: int __attribute__((ext_vector_type(3))) </p>
+<p> A vector of three ints. These three ints are packed into a single 128 bit field
+with a 128 bit alignment.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:int32_t'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>int32_t</span>
+ <span class='normal'>: 32 bit signed integer</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>A typedef of: int </p>
+<p> A 32 bit signed integer type.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:int4'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>int4</span>
+ <span class='normal'>: Four 32 bit signed integers</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>A typedef of: int __attribute__((ext_vector_type(4))) </p>
+<p> A vector of four ints. These two fours are packed into a single 128 bit field
+with a 128 bit alignment.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:int64_t'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>int64_t</span>
+ <span class='normal'>: 64 bit signed integer</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>A typedef of: long long Removed from <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+</p>
+<p>A typedef of: long Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+</p>
+<p> A 64 bit signed integer type.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:int8_t'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>int8_t</span>
+ <span class='normal'>: 8 bit signed integer</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>A typedef of: char </p>
+<p> 8 bit signed integer type.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:long2'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>long2</span>
+ <span class='normal'>: Two 64 bit signed integers</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>A typedef of: long __attribute__((ext_vector_type(2))) </p>
+<p> A vector of two longs. These two longs are packed into a single 128 bit field
+with a 128 bit alignment.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:long3'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>long3</span>
+ <span class='normal'>: Three 64 bit signed integers</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>A typedef of: long __attribute__((ext_vector_type(3))) </p>
+<p> A vector of three longs. These three longs are packed into a single 256 bit field
+with a 256 bit alignment.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:long4'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>long4</span>
+ <span class='normal'>: Four 64 bit signed integers</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>A typedef of: long __attribute__((ext_vector_type(4))) </p>
+<p> A vector of four longs. These four longs are packed into a single 256 bit field
+with a 256 bit alignment.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rs_matrix2x2'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rs_matrix2x2</span>
+ <span class='normal'>: 2x2 matrix of 32 bit floats</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>A structure with the following fields: </p>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>float m[4]</th><td></td></tr>
+ </tbody></table><br/>
+<p> A square 2x2 matrix of floats. The entries are stored in the array at the
+location [row*2 + col].
+</p>
+
+<p> See <a href='rs_matrix.html'>Matrix Functions</a>.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rs_matrix3x3'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rs_matrix3x3</span>
+ <span class='normal'>: 3x3 matrix of 32 bit floats</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>A structure with the following fields: </p>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>float m[9]</th><td></td></tr>
+ </tbody></table><br/>
+<p> A square 3x3 matrix of floats. The entries are stored in the array at the
+location [row*3 + col].
+</p>
+
+<p> See <a href='rs_matrix.html'>Matrix Functions</a>.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rs_matrix4x4'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rs_matrix4x4</span>
+ <span class='normal'>: 4x4 matrix of 32 bit floats</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>A structure with the following fields: </p>
+ <table class='jd-tagtable'><tbody>
+ <tr><th>float m[16]</th><td></td></tr>
+ </tbody></table><br/>
+<p> A square 4x4 matrix of floats. The entries are stored in the array at the
+location [row*4 + col].
+</p>
+
+<p> See <a href='rs_matrix.html'>Matrix Functions</a>.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:rs_quaternion'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>rs_quaternion</span>
+ <span class='normal'>: Quaternion</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>A typedef of: float4 </p>
+<p> A square 4x4 matrix of floats that represents a quaternion.
+</p>
+
+<p> See <a href='rs_quaternion.html'>Quaternion Functions</a>.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:short2'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>short2</span>
+ <span class='normal'>: Two 16 bit signed integers</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>A typedef of: short __attribute__((ext_vector_type(2))) </p>
+<p> A vector of two shorts. These two shorts are packed into a single 32 bit field
+with a 32 bit alignment.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:short3'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>short3</span>
+ <span class='normal'>: Three 16 bit signed integers</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>A typedef of: short __attribute__((ext_vector_type(3))) </p>
+<p> A vector of three shorts. These three short fields packed into a single 64 bit field
+with a 64 bit alignment.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:short4'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>short4</span>
+ <span class='normal'>: Four 16 bit signed integers</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>A typedef of: short __attribute__((ext_vector_type(4))) </p>
+<p> A vector of four shorts. These four short fields packed into a single 64 bit field
+with a 64 bit alignment.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:size_t'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>size_t</span>
+ <span class='normal'>: Unsigned size type</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>A typedef of: uint64_t When compiling for 64 bits.
+</p>
+<p>A typedef of: uint32_t When compiling for 32 bits.
+</p>
+<p> Unsigned size type. The number of bits depend on the compilation flags.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:ssize_t'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>ssize_t</span>
+ <span class='normal'>: Signed size type</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>A typedef of: int64_t When compiling for 64 bits.
+</p>
+<p>A typedef of: int32_t When compiling for 32 bits.
+</p>
+<p> Signed size type. The number of bits depend on the compilation flags.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:uchar'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>uchar</span>
+ <span class='normal'>: 8 bit unsigned integer</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>A typedef of: uint8_t </p>
+<p> 8 bit unsigned integer type.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:uchar2'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>uchar2</span>
+ <span class='normal'>: Two 8 bit unsigned integers</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>A typedef of: uchar __attribute__((ext_vector_type(2))) </p>
+<p> A vector of two uchars. These two uchar fields packed into a single 16 bit field
+with a 16 bit alignment.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:uchar3'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>uchar3</span>
+ <span class='normal'>: Three 8 bit unsigned integers</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>A typedef of: uchar __attribute__((ext_vector_type(3))) </p>
+<p> A vector of three uchars. These three uchar fields packed into a single 32 bit field
+with a 32 bit alignment.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:uchar4'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>uchar4</span>
+ <span class='normal'>: Four 8 bit unsigned integers</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>A typedef of: uchar __attribute__((ext_vector_type(4))) </p>
+<p> A vector of four uchars. These four uchar fields packed into a single 32 bit field
+with a 32 bit alignment.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:uint'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>uint</span>
+ <span class='normal'>: 32 bit unsigned integer</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>A typedef of: uint32_t </p>
+<p> A 32 bit unsigned integer type.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:uint16_t'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>uint16_t</span>
+ <span class='normal'>: 16 bit unsigned integer</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>A typedef of: unsigned short </p>
+<p> A 16 bit unsigned integer type.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:uint2'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>uint2</span>
+ <span class='normal'>: Two 32 bit unsigned integers</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>A typedef of: uint __attribute__((ext_vector_type(2))) </p>
+<p> A vector of two uints. These two uints are packed into a single 64 bit field
+with a 64 bit alignment.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:uint3'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>uint3</span>
+ <span class='normal'>: Three 32 bit unsigned integers</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>A typedef of: uint __attribute__((ext_vector_type(3))) </p>
+<p> A vector of three uints. These three uints are packed into a single 128 bit field
+with a 128 bit alignment.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:uint32_t'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>uint32_t</span>
+ <span class='normal'>: 32 bit unsigned integer</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>A typedef of: unsigned int </p>
+<p> A 32 bit unsigned integer type.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:uint4'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>uint4</span>
+ <span class='normal'>: Four 32 bit unsigned integers</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>A typedef of: uint __attribute__((ext_vector_type(4))) </p>
+<p> A vector of four uints. These four uints are packed into a single 128 bit field
+with a 128 bit alignment.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:uint64_t'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>uint64_t</span>
+ <span class='normal'>: 64 bit unsigned integer</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>A typedef of: unsigned long long Removed from <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+</p>
+<p>A typedef of: unsigned long Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+</p>
+<p> A 64 bit unsigned integer type.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:uint8_t'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>uint8_t</span>
+ <span class='normal'>: 8 bit unsigned integer</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>A typedef of: unsigned char </p>
+<p> 8 bit unsigned integer type.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:ulong'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>ulong</span>
+ <span class='normal'>: 64 bit unsigned integer</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>A typedef of: uint64_t </p>
+<p> A 64 bit unsigned integer type.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:ulong2'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>ulong2</span>
+ <span class='normal'>: Two 64 bit unsigned integers</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>A typedef of: ulong __attribute__((ext_vector_type(2))) </p>
+<p> A vector of two ulongs. These two ulongs are packed into a single 128 bit field
+with a 128 bit alignment.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:ulong3'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>ulong3</span>
+ <span class='normal'>: Three 64 bit unsigned integers</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>A typedef of: ulong __attribute__((ext_vector_type(3))) </p>
+<p> A vector of three ulongs. These three ulong fields packed into a single 256 bit field
+with a 256 bit alignment.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:ulong4'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>ulong4</span>
+ <span class='normal'>: Four 64 bit unsigned integers</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>A typedef of: ulong __attribute__((ext_vector_type(4))) </p>
+<p> A vector of four ulongs. These four ulong fields packed into a single 256 bit field
+with a 256 bit alignment.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:ushort'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>ushort</span>
+ <span class='normal'>: 16 bit unsigned integer</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>A typedef of: uint16_t </p>
+<p> A 16 bit unsigned integer type.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:ushort2'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>ushort2</span>
+ <span class='normal'>: Two 16 bit unsigned integers</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>A typedef of: ushort __attribute__((ext_vector_type(2))) </p>
+<p> A vector of two ushorts. These two ushort fields packed into a single 32 bit field
+with a 32 bit alignment.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:ushort3'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>ushort3</span>
+ <span class='normal'>: Three 16 bit unsigned integers</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>A typedef of: ushort __attribute__((ext_vector_type(3))) </p>
+<p> A vector of three ushorts. These three ushort fields packed into a single 64 bit field
+with a 64 bit alignment.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:ushort4'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>ushort4</span>
+ <span class='normal'>: Four 16 bit unsigned integers</span>
+ </h4>
+ <div class='jd-details-descr'>
+<p>A typedef of: ushort __attribute__((ext_vector_type(4))) </p>
+<p> A vector of four ushorts. These four ushort fields packed into a single 64 bit field
+with a 64 bit alignment.
+</p>
+ </div>
+</div>
+
+</div>
diff --git a/docs/html/guide/topics/renderscript/reference/rs_vector_math.jd b/docs/html/guide/topics/renderscript/reference/rs_vector_math.jd
new file mode 100644
index 0000000..cb90e9d
--- /dev/null
+++ b/docs/html/guide/topics/renderscript/reference/rs_vector_math.jd
@@ -0,0 +1,574 @@
+page.title=RenderScript Vector Math Functions
+
+@jd:body
+
+<div class='renderscript'>
+<h2>Overview</h2>
+<p> These functions interpret the input arguments as representation of vectors in
+n-dimensional space.
+</p>
+
+<p> The precision of the mathematical operations on 32 bit floats is affected by the pragmas
+rs_fp_relaxed and rs_fp_full. See <a href='rs_math.html'>Mathematical Constants and Functions</a> for details.
+</p>
+
+<p> Different precision/speed tradeoffs can be achieved by using variants of the common math
+functions. Functions with a name starting with<ul>
+<li>native_: May have custom hardware implementations with weaker precision. Additionally,
+ subnormal values may be flushed to zero, rounding towards zero may be used, and NaN and
+ infinity input may not be handled correctly.</li>
+<li>fast_: May perform internal computations using 16 bit floats. Additionally, subnormal
+ values may be flushed to zero, and rounding towards zero may be used.</li>
+</ul>
+</p>
+<h2>Summary</h2>
+<table class='jd-sumtable'><tbody>
+ <tr><th colspan='2'>Functions</th></tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_vector_math.html#android_rs:cross'>cross</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Cross product of two vectors
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_vector_math.html#android_rs:distance'>distance</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Distance between two points
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_vector_math.html#android_rs:dot'>dot</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Dot product of two vectors
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_vector_math.html#android_rs:fast_distance'>fast_distance</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate distance between two points
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_vector_math.html#android_rs:fast_length'>fast_length</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate length of a vector
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_vector_math.html#android_rs:fast_normalize'>fast_normalize</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate normalized vector
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_vector_math.html#android_rs:length'>length</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Length of a vector
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_vector_math.html#android_rs:native_distance'>native_distance</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate distance between two points
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_vector_math.html#android_rs:native_length'>native_length</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximate length of a vector
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_vector_math.html#android_rs:native_normalize'>native_normalize</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Approximately normalize a vector
+ </td>
+ </tr>
+ <tr class='alt-color api apilevel-1'>
+ <td class='jd-linkcol'>
+ <a href='rs_vector_math.html#android_rs:normalize'>normalize</a>
+ </td>
+ <td class='jd-descrcol' width='100%'>
+ Normalize a vector
+ </td>
+ </tr>
+</tbody></table>
+<h2>Functions</h2>
+<a name='android_rs:cross'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>cross</span>
+ <span class='normal'>: Cross product of two vectors</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> cross(<a href='rs_value_types.html#android_rs:float3'>float3</a> left_vector, <a href='rs_value_types.html#android_rs:float3'>float3</a> right_vector);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> cross(<a href='rs_value_types.html#android_rs:float4'>float4</a> left_vector, <a href='rs_value_types.html#android_rs:float4'>float4</a> right_vector);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Computes the cross product of two vectors.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:distance'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>distance</span>
+ <span class='normal'>: Distance between two points</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float distance(float left_vector, float right_vector);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>float distance(<a href='rs_value_types.html#android_rs:float2'>float2</a> left_vector, <a href='rs_value_types.html#android_rs:float2'>float2</a> right_vector);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>float distance(<a href='rs_value_types.html#android_rs:float3'>float3</a> left_vector, <a href='rs_value_types.html#android_rs:float3'>float3</a> right_vector);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>float distance(<a href='rs_value_types.html#android_rs:float4'>float4</a> left_vector, <a href='rs_value_types.html#android_rs:float4'>float4</a> right_vector);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Compute the distance between two points.
+</p>
+
+<p> See also <a href='rs_vector_math.html#android_rs:fast_distance'>fast_distance</a>(), <a href='rs_vector_math.html#android_rs:native_distance'>native_distance</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:dot'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>dot</span>
+ <span class='normal'>: Dot product of two vectors</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float dot(float left_vector, float right_vector);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>float dot(<a href='rs_value_types.html#android_rs:float2'>float2</a> left_vector, <a href='rs_value_types.html#android_rs:float2'>float2</a> right_vector);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>float dot(<a href='rs_value_types.html#android_rs:float3'>float3</a> left_vector, <a href='rs_value_types.html#android_rs:float3'>float3</a> right_vector);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>float dot(<a href='rs_value_types.html#android_rs:float4'>float4</a> left_vector, <a href='rs_value_types.html#android_rs:float4'>float4</a> right_vector);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Computes the dot product of two vectors.
+</p>
+ </div>
+</div>
+
+<a name='android_rs:fast_distance'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>fast_distance</span>
+ <span class='normal'>: Approximate distance between two points</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float fast_distance(float left_vector, float right_vector);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+ </td>
+ </tr>
+ <tr>
+ <td>float fast_distance(<a href='rs_value_types.html#android_rs:float2'>float2</a> left_vector, <a href='rs_value_types.html#android_rs:float2'>float2</a> right_vector);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+ </td>
+ </tr>
+ <tr>
+ <td>float fast_distance(<a href='rs_value_types.html#android_rs:float3'>float3</a> left_vector, <a href='rs_value_types.html#android_rs:float3'>float3</a> right_vector);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+ </td>
+ </tr>
+ <tr>
+ <td>float fast_distance(<a href='rs_value_types.html#android_rs:float4'>float4</a> left_vector, <a href='rs_value_types.html#android_rs:float4'>float4</a> right_vector);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Computes the approximate distance between two points.
+</p>
+
+<p> The precision is what would be expected from doing the computation using 16 bit floating
+point values.
+</p>
+
+<p> See also <a href='rs_vector_math.html#android_rs:distance'>distance</a>(), <a href='rs_vector_math.html#android_rs:native_distance'>native_distance</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:fast_length'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>fast_length</span>
+ <span class='normal'>: Approximate length of a vector</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float fast_length(float v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+ </td>
+ </tr>
+ <tr>
+ <td>float fast_length(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+ </td>
+ </tr>
+ <tr>
+ <td>float fast_length(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+ </td>
+ </tr>
+ <tr>
+ <td>float fast_length(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Computes the approximate length of a vector.
+</p>
+
+<p> The precision is what would be expected from doing the computation using 16 bit floating
+point values.
+</p>
+
+<p> See also <a href='rs_vector_math.html#android_rs:length'>length</a>(), <a href='rs_vector_math.html#android_rs:native_length'>native_length</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:fast_normalize'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>fast_normalize</span>
+ <span class='normal'>: Approximate normalized vector</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float fast_normalize(float v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> fast_normalize(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> fast_normalize(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> fast_normalize(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 17</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Approximately normalizes a vector.
+</p>
+
+<p> For vectors of size 1, returns -1.f for negative values, 0.f for null values, and 1.f for
+positive values.
+</p>
+
+<p> The precision is what would be expected from doing the computation using 16 bit floating
+point values.
+</p>
+
+<p> See also <a href='rs_vector_math.html#android_rs:normalize'>normalize</a>(), <a href='rs_vector_math.html#android_rs:native_normalize'>native_normalize</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:length'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>length</span>
+ <span class='normal'>: Length of a vector</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float length(float v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>float length(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>float length(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>float length(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Computes the length of a vector.
+</p>
+
+<p> See also <a href='rs_vector_math.html#android_rs:fast_length'>fast_length</a>(), <a href='rs_vector_math.html#android_rs:native_length'>native_length</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:native_distance'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>native_distance</span>
+ <span class='normal'>: Approximate distance between two points</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float native_distance(float left_vector, float right_vector);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td>float native_distance(<a href='rs_value_types.html#android_rs:float2'>float2</a> left_vector, <a href='rs_value_types.html#android_rs:float2'>float2</a> right_vector);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td>float native_distance(<a href='rs_value_types.html#android_rs:float3'>float3</a> left_vector, <a href='rs_value_types.html#android_rs:float3'>float3</a> right_vector);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td>float native_distance(<a href='rs_value_types.html#android_rs:float4'>float4</a> left_vector, <a href='rs_value_types.html#android_rs:float4'>float4</a> right_vector);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Computes the approximate distance between two points.
+</p>
+
+<p> See also <a href='rs_vector_math.html#android_rs:distance'>distance</a>(), <a href='rs_vector_math.html#android_rs:fast_distance'>fast_distance</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:native_length'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>native_length</span>
+ <span class='normal'>: Approximate length of a vector</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float native_length(float v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td>float native_length(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td>float native_length(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td>float native_length(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Compute the approximate length of a vector.
+</p>
+
+<p> See also <a href='rs_vector_math.html#android_rs:length'>length</a>(), <a href='rs_vector_math.html#android_rs:fast_length'>fast_length</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:native_normalize'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>native_normalize</span>
+ <span class='normal'>: Approximately normalize a vector</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float native_normalize(float v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> native_normalize(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> native_normalize(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> native_normalize(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> Added in <a href='http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels'>API level 21</a>
+ </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Approximately normalizes a vector.
+</p>
+
+<p> See also <a href='rs_vector_math.html#android_rs:normalize'>normalize</a>(), <a href='rs_vector_math.html#android_rs:fast_normalize'>fast_normalize</a>().
+</p>
+ </div>
+</div>
+
+<a name='android_rs:normalize'></a>
+<div class='jd-details'>
+ <h4 class='jd-details-title'>
+ <span class='sympad'>normalize</span>
+ <span class='normal'>: Normalize a vector</span>
+ </h4>
+ <div class='jd-details-descr'>
+ <table class='jd-tagtable'><tbody>
+ <tr>
+ <td>float normalize(float v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float2'>float2</a> normalize(<a href='rs_value_types.html#android_rs:float2'>float2</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float3'>float3</a> normalize(<a href='rs_value_types.html#android_rs:float3'>float3</a> v);
+</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td><a href='rs_value_types.html#android_rs:float4'>float4</a> normalize(<a href='rs_value_types.html#android_rs:float4'>float4</a> v);
+</td>
+ <td> </td>
+ </tr>
+ </tbody></table>
+ </div>
+ <div class='jd-tagdata jd-tagdescr'>
+<p> Normalize a vector.
+</p>
+
+<p> For vectors of size 1, returns -1.f for negative values, 0.f for null values, and 1.f for
+positive values.
+</p>
+
+<p> See also <a href='rs_vector_math.html#android_rs:fast_normalize'>fast_normalize</a>(), <a href='rs_vector_math.html#android_rs:native_normalize'>native_normalize</a>().
+</p>
+ </div>
+</div>
+
+</div>
diff --git a/docs/html/reference/renderscript/annotated.html b/docs/html/reference/renderscript/annotated.html
deleted file mode 100644
index 9ddbc81..0000000
--- a/docs/html/reference/renderscript/annotated.html
+++ /dev/null
@@ -1,53 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>Data Structures</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
- <div id="navrow1" class="tabs">
- <ul class="tablist">
- <li><a href="index.html"><span>Overview</span></a></li>
- <li><a href="globals.html"><span>Globals</span></a></li>
- <li class="current"><a href="annotated.html"><span>Structs</span></a></li>
- </ul>
- </div>
-</div>
-<div class="header">
- <div class="headertitle">
-<div class="title">Data Structures</div> </div>
-</div>
-<div class="contents">
-<div class="textblock"> </div><table>
- <tr><td class="indexkey"><a class="el" href="structrs__allocation.html">rs_allocation</a></td><td class="indexvalue">Opaque handle to a RenderScript allocation </td></tr>
- <tr><td class="indexkey"><a class="el" href="structrs__element.html">rs_element</a></td><td class="indexvalue">Opaque handle to a RenderScript element </td></tr>
- <tr><td class="indexkey"><a class="el" href="structrs__font.html">rs_font</a></td><td class="indexvalue">Opaque handle to a RenderScript font object </td></tr>
- <tr><td class="indexkey"><a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a></td><td class="indexvalue">2x2 float matrix </td></tr>
- <tr><td class="indexkey"><a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a></td><td class="indexvalue">3x3 float matrix </td></tr>
- <tr><td class="indexkey"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a></td><td class="indexvalue">4x4 float matrix </td></tr>
- <tr><td class="indexkey"><a class="el" href="structrs__mesh.html">rs_mesh</a></td><td class="indexvalue">Opaque handle to a RenderScript mesh object </td></tr>
- <tr><td class="indexkey"><a class="el" href="structrs__path.html">rs_path</a></td><td class="indexvalue">Opaque handle to a RenderScript Path object </td></tr>
- <tr><td class="indexkey"><a class="el" href="structrs__program__fragment.html">rs_program_fragment</a></td><td class="indexvalue">Opaque handle to a RenderScript ProgramFragment object </td></tr>
- <tr><td class="indexkey"><a class="el" href="structrs__program__raster.html">rs_program_raster</a></td><td class="indexvalue">Opaque handle to a RenderScript ProgramRaster object </td></tr>
- <tr><td class="indexkey"><a class="el" href="structrs__program__store.html">rs_program_store</a></td><td class="indexvalue">Opaque handle to a RenderScript ProgramStore object </td></tr>
- <tr><td class="indexkey"><a class="el" href="structrs__program__vertex.html">rs_program_vertex</a></td><td class="indexvalue">Opaque handle to a RenderScript ProgramVertex object </td></tr>
- <tr><td class="indexkey"><a class="el" href="structrs__sampler.html">rs_sampler</a></td><td class="indexvalue">Opaque handle to a RenderScript sampler object </td></tr>
- <tr><td class="indexkey"><a class="el" href="structrs__script.html">rs_script</a></td><td class="indexvalue">Opaque handle to a RenderScript script object </td></tr>
- <tr><td class="indexkey"><a class="el" href="structrs__script__call.html">rs_script_call</a></td><td class="indexvalue"></td></tr>
- <tr><td class="indexkey"><a class="el" href="structrs__tm.html">rs_tm</a></td><td class="indexvalue"></td></tr>
- <tr><td class="indexkey"><a class="el" href="structrs__type.html">rs_type</a></td><td class="indexvalue">Opaque handle to a RenderScript type </td></tr>
-</table>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/doxygen.css b/docs/html/reference/renderscript/doxygen.css
deleted file mode 100644
index 22c7b5c..0000000
--- a/docs/html/reference/renderscript/doxygen.css
+++ /dev/null
@@ -1,946 +0,0 @@
-/* The standard CSS for doxygen */
-
-body, table, div, p, dl {
- font-family: Lucida Grande, Verdana, Geneva, Arial, sans-serif;
- font-size: 12px;
-}
-
-/* @group Heading Levels */
-
-h1 {
- font-size: 150%;
-}
-
-.title {
- font-size: 150%;
- font-weight: bold;
- margin: 10px 2px;
-}
-
-h2 {
- font-size: 120%;
-}
-
-h3 {
- font-size: 100%;
-}
-
-dt {
- font-weight: bold;
-}
-
-div.multicol {
- -moz-column-gap: 1em;
- -webkit-column-gap: 1em;
- -moz-column-count: 3;
- -webkit-column-count: 3;
-}
-
-p.startli, p.startdd, p.starttd {
- margin-top: 2px;
-}
-
-p.endli {
- margin-bottom: 0px;
-}
-
-p.enddd {
- margin-bottom: 4px;
-}
-
-p.endtd {
- margin-bottom: 2px;
-}
-
-/* @end */
-
-caption {
- font-weight: bold;
-}
-
-span.legend {
- font-size: 70%;
- text-align: center;
-}
-
-h3.version {
- font-size: 90%;
- text-align: center;
-}
-
-div.qindex, div.navtab{
- background-color: #EBEFF6;
- border: 1px solid #A3B4D7;
- text-align: center;
-}
-
-div.qindex, div.navpath {
- width: 100%;
- line-height: 140%;
-}
-
-div.navtab {
- margin-right: 15px;
-}
-
-/* @group Link Styling */
-
-a {
- color: #3D578C;
- font-weight: normal;
- text-decoration: none;
-}
-
-.contents a:visited {
- color: #4665A2;
-}
-
-a:hover {
- text-decoration: underline;
-}
-
-a.qindex {
- font-weight: bold;
-}
-
-a.qindexHL {
- font-weight: bold;
- background-color: #9CAFD4;
- color: #ffffff;
- border: 1px double #869DCA;
-}
-
-.contents a.qindexHL:visited {
- color: #ffffff;
-}
-
-a.el {
- font-weight: bold;
-}
-
-a.elRef {
-}
-
-a.code {
- color: #4665A2;
-}
-
-a.codeRef {
- color: #4665A2;
-}
-
-/* @end */
-
-dl.el {
- margin-left: -1cm;
-}
-
-.fragment {
- font-family: monospace, fixed;
- font-size: 105%;
-}
-
-pre.fragment {
- border: 1px solid #C4CFE5;
- background-color: #FBFCFD;
- padding: 4px 6px;
- margin: 4px 8px 4px 2px;
- overflow: auto;
- word-wrap: break-word;
- font-size: 9pt;
- line-height: 125%;
-}
-
-div.ah {
- background-color: black;
- font-weight: bold;
- color: #ffffff;
- margin-bottom: 3px;
- margin-top: 3px;
- padding: 0.2em;
- border: solid thin #333;
- border-radius: 0.5em;
- -webkit-border-radius: .5em;
- -moz-border-radius: .5em;
- box-shadow: 2px 2px 3px #999;
- -webkit-box-shadow: 2px 2px 3px #999;
- -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
- background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444));
- background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000);
-}
-
-div.groupHeader {
- margin-left: 16px;
- margin-top: 12px;
- font-weight: bold;
-}
-
-div.groupText {
- margin-left: 16px;
- font-style: italic;
-}
-
-body {
- background-color: white;
- color: black;
- margin: 0;
-}
-
-div.contents {
- margin-top: 10px;
- margin-left: 8px;
- margin-right: 8px;
-}
-
-td.indexkey {
- background-color: #EBEFF6;
- font-weight: bold;
- border: 1px solid #C4CFE5;
- margin: 2px 0px 2px 0;
- padding: 2px 10px;
-}
-
-td.indexvalue {
- background-color: #EBEFF6;
- border: 1px solid #C4CFE5;
- padding: 2px 10px;
- margin: 2px 0px;
-}
-
-tr.memlist {
- background-color: #EEF1F7;
-}
-
-p.formulaDsp {
- text-align: center;
-}
-
-img.formulaDsp {
-
-}
-
-img.formulaInl {
- vertical-align: middle;
-}
-
-div.center {
- text-align: center;
- margin-top: 0px;
- margin-bottom: 0px;
- padding: 0px;
-}
-
-div.center img {
- border: 0px;
-}
-
-address.footer {
- text-align: right;
- padding-right: 12px;
-}
-
-img.footer {
- border: 0px;
- vertical-align: middle;
-}
-
-/* @group Code Colorization */
-
-span.keyword {
- color: #008000
-}
-
-span.keywordtype {
- color: #604020
-}
-
-span.keywordflow {
- color: #e08000
-}
-
-span.comment {
- color: #800000
-}
-
-span.preprocessor {
- color: #806020
-}
-
-span.stringliteral {
- color: #002080
-}
-
-span.charliteral {
- color: #008080
-}
-
-span.vhdldigit {
- color: #ff00ff
-}
-
-span.vhdlchar {
- color: #000000
-}
-
-span.vhdlkeyword {
- color: #700070
-}
-
-span.vhdllogic {
- color: #ff0000
-}
-
-/* @end */
-
-/*
-.search {
- color: #003399;
- font-weight: bold;
-}
-
-form.search {
- margin-bottom: 0px;
- margin-top: 0px;
-}
-
-input.search {
- font-size: 75%;
- color: #000080;
- font-weight: normal;
- background-color: #e8eef2;
-}
-*/
-
-td.tiny {
- font-size: 75%;
-}
-
-.dirtab {
- padding: 4px;
- border-collapse: collapse;
- border: 1px solid #A3B4D7;
-}
-
-th.dirtab {
- background: #EBEFF6;
- font-weight: bold;
-}
-
-hr {
- height: 0px;
- border: none;
- border-top: 1px solid #4A6AAA;
-}
-
-hr.footer {
- height: 1px;
-}
-
-/* @group Member Descriptions */
-
-table.memberdecls {
- border-spacing: 0px;
- padding: 0px;
-}
-
-.mdescLeft, .mdescRight,
-.memItemLeft, .memItemRight,
-.memTemplItemLeft, .memTemplItemRight, .memTemplParams {
- background-color: #F9FAFC;
- border: none;
- margin: 4px;
- padding: 1px 0 0 8px;
-}
-
-.mdescLeft, .mdescRight {
- padding: 0px 8px 4px 8px;
- color: #555;
-}
-
-.memItemLeft, .memItemRight, .memTemplParams {
- border-top: 1px solid #C4CFE5;
-}
-
-.memItemLeft, .memTemplItemLeft {
- white-space: nowrap;
-}
-
-.memItemRight {
- width: 100%;
-}
-
-.memTemplParams {
- color: #4665A2;
- white-space: nowrap;
-}
-
-/* @end */
-
-/* @group Member Details */
-
-/* Styles for detailed member documentation */
-
-.memtemplate {
- font-size: 80%;
- color: #4665A2;
- font-weight: normal;
- margin-left: 9px;
-}
-
-.memnav {
- background-color: #EBEFF6;
- border: 1px solid #A3B4D7;
- text-align: center;
- margin: 2px;
- margin-right: 15px;
- padding: 2px;
-}
-
-.mempage {
- width: 100%;
-}
-
-.memitem {
- padding: 0;
- margin-bottom: 10px;
- margin-right: 5px;
-}
-
-.memname {
- white-space: nowrap;
- font-weight: bold;
- margin-left: 6px;
-}
-
-.memproto, dl.reflist dt {
- border-top: 1px solid #A8B8D9;
- border-left: 1px solid #A8B8D9;
- border-right: 1px solid #A8B8D9;
- padding: 6px 0px 6px 0px;
- color: #253555;
- font-weight: bold;
- text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
- /* opera specific markup */
- box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
- border-top-right-radius: 8px;
- border-top-left-radius: 8px;
- /* firefox specific markup */
- -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
- -moz-border-radius-topright: 8px;
- -moz-border-radius-topleft: 8px;
- /* webkit specific markup */
- -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
- -webkit-border-top-right-radius: 8px;
- -webkit-border-top-left-radius: 8px;
- background-image:url('nav_f.png');
- background-repeat:repeat-x;
- background-color: #E2E8F2;
-
-}
-
-.memdoc, dl.reflist dd {
- border-bottom: 1px solid #A8B8D9;
- border-left: 1px solid #A8B8D9;
- border-right: 1px solid #A8B8D9;
- padding: 2px 5px;
- background-color: #FBFCFD;
- border-top-width: 0;
- /* opera specific markup */
- border-bottom-left-radius: 8px;
- border-bottom-right-radius: 8px;
- box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
- /* firefox specific markup */
- -moz-border-radius-bottomleft: 8px;
- -moz-border-radius-bottomright: 8px;
- -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
- background-image: -moz-linear-gradient(center top, #FFFFFF 0%, #FFFFFF 60%, #F7F8FB 95%, #EEF1F7);
- /* webkit specific markup */
- -webkit-border-bottom-left-radius: 8px;
- -webkit-border-bottom-right-radius: 8px;
- -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
- background-image: -webkit-gradient(linear,center top,center bottom,from(#FFFFFF), color-stop(0.6,#FFFFFF), color-stop(0.60,#FFFFFF), color-stop(0.95,#F7F8FB), to(#EEF1F7));
-}
-
-dl.reflist dt {
- padding: 5px;
-}
-
-dl.reflist dd {
- margin: 0px 0px 10px 0px;
- padding: 5px;
-}
-
-.paramkey {
- text-align: right;
-}
-
-.paramtype {
- white-space: nowrap;
-}
-
-.paramname {
- color: #602020;
- white-space: nowrap;
-}
-.paramname em {
- font-style: normal;
-}
-
-.params, .retval, .exception, .tparams {
- border-spacing: 6px 2px;
-}
-
-.params .paramname, .retval .paramname {
- font-weight: bold;
- vertical-align: top;
-}
-
-.params .paramtype {
- font-style: italic;
- vertical-align: top;
-}
-
-.params .paramdir {
- font-family: "courier new",courier,monospace;
- vertical-align: top;
-}
-
-
-
-
-/* @end */
-
-/* @group Directory (tree) */
-
-/* for the tree view */
-
-.ftvtree {
- font-family: sans-serif;
- margin: 0px;
-}
-
-/* these are for tree view when used as main index */
-
-.directory {
- font-size: 9pt;
- font-weight: bold;
- margin: 5px;
-}
-
-.directory h3 {
- margin: 0px;
- margin-top: 1em;
- font-size: 11pt;
-}
-
-/*
-The following two styles can be used to replace the root node title
-with an image of your choice. Simply uncomment the next two styles,
-specify the name of your image and be sure to set 'height' to the
-proper pixel height of your image.
-*/
-
-/*
-.directory h3.swap {
- height: 61px;
- background-repeat: no-repeat;
- background-image: url("yourimage.gif");
-}
-.directory h3.swap span {
- display: none;
-}
-*/
-
-.directory > h3 {
- margin-top: 0;
-}
-
-.directory p {
- margin: 0px;
- white-space: nowrap;
-}
-
-.directory div {
- display: none;
- margin: 0px;
-}
-
-.directory img {
- vertical-align: -30%;
-}
-
-/* these are for tree view when not used as main index */
-
-.directory-alt {
- font-size: 100%;
- font-weight: bold;
-}
-
-.directory-alt h3 {
- margin: 0px;
- margin-top: 1em;
- font-size: 11pt;
-}
-
-.directory-alt > h3 {
- margin-top: 0;
-}
-
-.directory-alt p {
- margin: 0px;
- white-space: nowrap;
-}
-
-.directory-alt div {
- display: none;
- margin: 0px;
-}
-
-.directory-alt img {
- vertical-align: -30%;
-}
-
-/* @end */
-
-div.dynheader {
- margin-top: 8px;
-}
-
-address {
- font-style: normal;
- color: #2A3D61;
-}
-
-table.doxtable {
- border-collapse:collapse;
-}
-
-table.doxtable td, table.doxtable th {
- border: 1px solid #2D4068;
- padding: 3px 7px 2px;
-}
-
-table.doxtable th {
- background-color: #374F7F;
- color: #FFFFFF;
- font-size: 110%;
- padding-bottom: 4px;
- padding-top: 5px;
- text-align:left;
-}
-
-table.fieldtable {
- width: 100%;
- margin-bottom: 10px;
- border: 1px solid #A8B8D9;
- border-spacing: 0px;
- -moz-border-radius: 4px;
- -webkit-border-radius: 4px;
- border-radius: 4px;
- -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
- -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
- box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
-}
-
-.fieldtable td, .fieldtable th {
- padding: 3px 7px 2px;
-}
-
-.fieldtable td.fieldtype, .fieldtable td.fieldname {
- white-space: nowrap;
- border-right: 1px solid #A8B8D9;
- border-bottom: 1px solid #A8B8D9;
- vertical-align: top;
-}
-
-.fieldtable td.fielddoc {
- border-bottom: 1px solid #A8B8D9;
- width: 100%;
-}
-
-.fieldtable tr:last-child td {
- border-bottom: none;
-}
-
-.fieldtable th {
- background-image:url('nav_f.png');
- background-repeat:repeat-x;
- background-color: #E2E8F2;
- font-size: 90%;
- color: #253555;
- padding-bottom: 4px;
- padding-top: 5px;
- text-align:left;
- -moz-border-radius-topleft: 4px;
- -moz-border-radius-topright: 4px;
- -webkit-border-top-left-radius: 4px;
- -webkit-border-top-right-radius: 4px;
- border-top-left-radius: 4px;
- border-top-right-radius: 4px;
- border-bottom: 1px solid #A8B8D9;
-}
-
-
-.tabsearch {
- top: 0px;
- left: 10px;
- height: 36px;
- background-image: url('tab_b.png');
- z-index: 101;
- overflow: hidden;
- font-size: 13px;
-}
-
-.navpath ul
-{
- font-size: 11px;
- background-image:url('tab_b.png');
- background-repeat:repeat-x;
- height:30px;
- line-height:30px;
- color:#8AA0CC;
- border:solid 1px #C2CDE4;
- overflow:hidden;
- margin:0px;
- padding:0px;
-}
-
-.navpath li
-{
- list-style-type:none;
- float:left;
- padding-left:10px;
- padding-right:15px;
- background-image:url('bc_s.png');
- background-repeat:no-repeat;
- background-position:right;
- color:#364D7C;
-}
-
-.navpath li.navelem a
-{
- height:32px;
- display:block;
- text-decoration: none;
- outline: none;
-}
-
-.navpath li.navelem a:hover
-{
- color:#6884BD;
-}
-
-.navpath li.footer
-{
- list-style-type:none;
- float:right;
- padding-left:10px;
- padding-right:15px;
- background-image:none;
- background-repeat:no-repeat;
- background-position:right;
- color:#364D7C;
- font-size: 8pt;
-}
-
-
-div.summary
-{
- float: right;
- font-size: 8pt;
- padding-right: 5px;
- width: 50%;
- text-align: right;
-}
-
-div.summary a
-{
- white-space: nowrap;
-}
-
-div.ingroups
-{
- margin-left: 5px;
- font-size: 8pt;
- padding-left: 5px;
- width: 50%;
- text-align: left;
-}
-
-div.ingroups a
-{
- white-space: nowrap;
-}
-
-div.header
-{
- background-image:url('nav_h.png');
- background-repeat:repeat-x;
- background-color: #F9FAFC;
- margin: 0px;
- border-bottom: 1px solid #C4CFE5;
-}
-
-div.headertitle
-{
- padding: 5px 5px 5px 7px;
-}
-
-dl
-{
- padding: 0 0 0 10px;
-}
-
-dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug
-{
- border-left:4px solid;
- padding: 0 0 0 6px;
-}
-
-dl.note
-{
- border-color: #D0C000;
-}
-
-dl.warning, dl.attention
-{
- border-color: #FF0000;
-}
-
-dl.pre, dl.post, dl.invariant
-{
- border-color: #00D000;
-}
-
-dl.deprecated
-{
- border-color: #505050;
-}
-
-dl.todo
-{
- border-color: #00C0E0;
-}
-
-dl.test
-{
- border-color: #3030E0;
-}
-
-dl.bug
-{
- border-color: #C08050;
-}
-
-#projectlogo
-{
- text-align: center;
- vertical-align: bottom;
- border-collapse: separate;
-}
-
-#projectlogo img
-{
- border: 0px none;
-}
-
-#projectname
-{
- font: 300% Tahoma, Arial,sans-serif;
- margin: 0px;
- padding: 2px 0px;
-}
-
-#projectbrief
-{
- font: 120% Tahoma, Arial,sans-serif;
- margin: 0px;
- padding: 0px;
-}
-
-#projectnumber
-{
- font: 50% Tahoma, Arial,sans-serif;
- margin: 0px;
- padding: 0px;
-}
-
-#titlearea
-{
- padding: 0px;
- margin: 0px;
- width: 100%;
- border-bottom: 1px solid #5373B4;
-}
-
-.image
-{
- text-align: center;
-}
-
-.dotgraph
-{
- text-align: center;
-}
-
-.mscgraph
-{
- text-align: center;
-}
-
-.caption
-{
- font-weight: bold;
-}
-
-div.zoom
-{
- border: 1px solid #90A5CE;
-}
-
-dl.citelist {
- margin-bottom:50px;
-}
-
-dl.citelist dt {
- color:#334975;
- float:left;
- font-weight:bold;
- margin-right:10px;
- padding:5px;
-}
-
-dl.citelist dd {
- margin:2px 0;
- padding:5px 0;
-}
-
-@media print
-{
- #top { display: none; }
- #side-nav { display: none; }
- #nav-path { display: none; }
- body { overflow:visible; }
- h1, h2, h3, h4, h5, h6 { page-break-after: avoid; }
- .summary { display: none; }
- .memitem { page-break-inside: avoid; }
- #doc-content
- {
- margin-left:0 !important;
- height:auto !important;
- width:auto !important;
- overflow:inherit;
- display:inline;
- }
- pre.fragment
- {
- overflow: visible;
- text-wrap: unrestricted;
- white-space: -moz-pre-wrap; /* Moz */
- white-space: -pre-wrap; /* Opera 4-6 */
- white-space: -o-pre-wrap; /* Opera 7 */
- white-space: pre-wrap; /* CSS3 */
- word-wrap: break-word; /* IE 5.5+ */
- }
-}
-
diff --git a/docs/html/reference/renderscript/globals.html b/docs/html/reference/renderscript/globals.html
deleted file mode 100644
index d149a0d..0000000
--- a/docs/html/reference/renderscript/globals.html
+++ /dev/null
@@ -1,919 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>Members</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
- <div id="navrow1" class="tabs">
- <ul class="tablist">
- <li><a href="index.html"><span>Overview</span></a></li>
- <li class="current"><a href="globals.html"><span>Globals</span></a></li>
- <li><a href="annotated.html"><span>Structs</span></a></li>
- </ul>
- </div>
- <div id="navrow3" class="tabs2">
- <ul class="tablist">
- <li class="current"><a href="globals.html"><span>All</span></a></li>
- <li><a href="globals_func.html"><span>Functions</span></a></li>
- <li><a href="globals_type.html"><span>Typedefs</span></a></li>
- <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
- <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
- </ul>
- </div>
- <div id="navrow4" class="tabs3">
- <ul class="tablist">
- <li><a href="#index_a"><span>a</span></a></li>
- <li><a href="#index_c"><span>c</span></a></li>
- <li><a href="#index_d"><span>d</span></a></li>
- <li><a href="#index_e"><span>e</span></a></li>
- <li><a href="#index_f"><span>f</span></a></li>
- <li><a href="#index_h"><span>h</span></a></li>
- <li><a href="#index_i"><span>i</span></a></li>
- <li><a href="#index_l"><span>l</span></a></li>
- <li><a href="#index_m"><span>m</span></a></li>
- <li><a href="#index_n"><span>n</span></a></li>
- <li><a href="#index_p"><span>p</span></a></li>
- <li><a href="#index_r"><span>r</span></a></li>
- <li><a href="#index_s"><span>s</span></a></li>
- <li><a href="#index_t"><span>t</span></a></li>
- <li><a href="#index_u"><span>u</span></a></li>
- </ul>
- </div>
-</div>
-<div class="contents">
-<div class="textblock"> </div>
-
-<h3><a class="anchor" id="index_a"></a>- a -</h3><ul>
-<li>abs()
-: <a class="el" href="rs__cl_8rsh.html#a1ed0afedda2068ad1f9ad14ef3449e50">rs_cl.rsh</a>
-</li>
-<li>acos()
-: <a class="el" href="rs__cl_8rsh.html#a07648648c7f857cfd1479821d4389751">rs_cl.rsh</a>
-</li>
-<li>acosh()
-: <a class="el" href="rs__cl_8rsh.html#a6575106413ec72448439ef67f1309424">rs_cl.rsh</a>
-</li>
-<li>acospi()
-: <a class="el" href="rs__cl_8rsh.html#a2c9092eb07e9df891935e93469e70d4e">rs_cl.rsh</a>
-</li>
-<li>asin()
-: <a class="el" href="rs__cl_8rsh.html#a78b9d0583bd0699e2eac30d2a136817a">rs_cl.rsh</a>
-</li>
-<li>asinh()
-: <a class="el" href="rs__cl_8rsh.html#a4e3fe465ed5541af53192c59c80af1a0">rs_cl.rsh</a>
-</li>
-<li>asinpi()
-: <a class="el" href="rs__cl_8rsh.html#a812eb4521e65a451161417f9898384f7">rs_cl.rsh</a>
-</li>
-<li>atan()
-: <a class="el" href="rs__cl_8rsh.html#ab790c3a7df8fcbeab77f6c0e3b4dcada">rs_cl.rsh</a>
-</li>
-<li>atan2()
-: <a class="el" href="rs__cl_8rsh.html#aaf4b636b09041878e1542054c73d81e9">rs_cl.rsh</a>
-</li>
-<li>atan2pi()
-: <a class="el" href="rs__cl_8rsh.html#a89ec5f6a2f64a0f9e97438fbd41aaace">rs_cl.rsh</a>
-</li>
-<li>atanh()
-: <a class="el" href="rs__cl_8rsh.html#a83bdf415cc561ff6237a124273d9fb0d">rs_cl.rsh</a>
-</li>
-<li>atanpi()
-: <a class="el" href="rs__cl_8rsh.html#a5052e31ce616d35aee25a3a83f6fc117">rs_cl.rsh</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_c"></a>- c -</h3><ul>
-<li>cbrt()
-: <a class="el" href="rs__cl_8rsh.html#ae9d1787b55c2587478a24d96573225df">rs_cl.rsh</a>
-</li>
-<li>ceil()
-: <a class="el" href="rs__cl_8rsh.html#aa8fc6daff743a1b635ccbf9af83fe4e4">rs_cl.rsh</a>
-</li>
-<li>char2
-: <a class="el" href="rs__types_8rsh.html#ac532b4c1895c8bd4fb75dc370c484351">rs_types.rsh</a>
-</li>
-<li>char3
-: <a class="el" href="rs__types_8rsh.html#a4617fb31f4c03402515efee0a9b56210">rs_types.rsh</a>
-</li>
-<li>char4
-: <a class="el" href="rs__types_8rsh.html#aecb498648daac97c7cc5f31c242dfa03">rs_types.rsh</a>
-</li>
-<li>clamp()
-: <a class="el" href="rs__cl_8rsh.html#afae5eac13e35acd0f47d7e3c601e16ed">rs_cl.rsh</a>
-</li>
-<li>clz()
-: <a class="el" href="rs__cl_8rsh.html#a8a0f94dce3caa2a50cbf2d9f4bc674ac">rs_cl.rsh</a>
-</li>
-<li>convert_char2()
-: <a class="el" href="rs__cl_8rsh.html#a67421c4b17df15a1c726d912770e5ca4">rs_cl.rsh</a>
-</li>
-<li>convert_float2()
-: <a class="el" href="rs__cl_8rsh.html#a1ad62d449c1e3548573c2f9c1a5cb13a">rs_cl.rsh</a>
-</li>
-<li>convert_int2()
-: <a class="el" href="rs__cl_8rsh.html#a9d2e4b8f0f25a7ccaed05248edc21f06">rs_cl.rsh</a>
-</li>
-<li>convert_short2()
-: <a class="el" href="rs__cl_8rsh.html#a83e89db1940f3190fbec5bd823a99fc5">rs_cl.rsh</a>
-</li>
-<li>convert_uchar2()
-: <a class="el" href="rs__cl_8rsh.html#a833bb5476683ec5692feaf0cd5dcdd80">rs_cl.rsh</a>
-</li>
-<li>convert_uint2()
-: <a class="el" href="rs__cl_8rsh.html#a01ff256469203ba33ba0f220b54e70d1">rs_cl.rsh</a>
-</li>
-<li>convert_ushort2()
-: <a class="el" href="rs__cl_8rsh.html#a6862ea6ddfba8a59796bc681a544fb4f">rs_cl.rsh</a>
-</li>
-<li>copysign()
-: <a class="el" href="rs__cl_8rsh.html#a29f2602d95aa7b3950e2b77b3e268f7e">rs_cl.rsh</a>
-</li>
-<li>cos()
-: <a class="el" href="rs__cl_8rsh.html#a8eec7aeb4b0c46b06cbcd1a3ac3e6f05">rs_cl.rsh</a>
-</li>
-<li>cosh()
-: <a class="el" href="rs__cl_8rsh.html#ac8d88d83182afd591401eaed101d9670">rs_cl.rsh</a>
-</li>
-<li>cospi()
-: <a class="el" href="rs__cl_8rsh.html#a258d2c828fd46eae2867373884d834a9">rs_cl.rsh</a>
-</li>
-<li>cross()
-: <a class="el" href="rs__cl_8rsh.html#add745d593bc2b23285bd10e52a204e25">rs_cl.rsh</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_d"></a>- d -</h3><ul>
-<li>degrees()
-: <a class="el" href="rs__cl_8rsh.html#a0276b63d6905fa802032f1490a24515b">rs_cl.rsh</a>
-</li>
-<li>distance()
-: <a class="el" href="rs__cl_8rsh.html#a412bf215ae838c65079560bbefefaca7">rs_cl.rsh</a>
-</li>
-<li>dot()
-: <a class="el" href="rs__cl_8rsh.html#aa26d85eac3067e9769b33b6914b180f2">rs_cl.rsh</a>
-</li>
-<li>double2
-: <a class="el" href="rs__types_8rsh.html#a75ef868cedebc2a6eeb1bc6ca6ca49c3">rs_types.rsh</a>
-</li>
-<li>double3
-: <a class="el" href="rs__types_8rsh.html#aa3c90d5a23d674185a13e95402eda7eb">rs_types.rsh</a>
-</li>
-<li>double4
-: <a class="el" href="rs__types_8rsh.html#a60f4b04e076f0dd0ecc99c365fc4ca21">rs_types.rsh</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_e"></a>- e -</h3><ul>
-<li>erf()
-: <a class="el" href="rs__cl_8rsh.html#a139f102df651c25c26dd35d549173f57">rs_cl.rsh</a>
-</li>
-<li>erfc()
-: <a class="el" href="rs__cl_8rsh.html#a2e24dc8594e758b64c340153f67a533c">rs_cl.rsh</a>
-</li>
-<li>exp()
-: <a class="el" href="rs__cl_8rsh.html#a6d9aac64c2686961ca8f30e3c34fef36">rs_cl.rsh</a>
-</li>
-<li>exp10()
-: <a class="el" href="rs__cl_8rsh.html#a0225ff40d79f78260293e776c6a77422">rs_cl.rsh</a>
-</li>
-<li>exp2()
-: <a class="el" href="rs__cl_8rsh.html#a39bca19ee2b1aa95144e58eb4a1e4f88">rs_cl.rsh</a>
-</li>
-<li>expm1()
-: <a class="el" href="rs__cl_8rsh.html#a7996044b67be921a5e58e2fe76af66e2">rs_cl.rsh</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_f"></a>- f -</h3><ul>
-<li>fabs()
-: <a class="el" href="rs__cl_8rsh.html#ad6e897f1acae252ec0901e3b122992ea">rs_cl.rsh</a>
-</li>
-<li>fast_distance()
-: <a class="el" href="rs__cl_8rsh.html#a4fcbdb9099e7d653a951cb344ba3c3c9">rs_cl.rsh</a>
-</li>
-<li>fast_length()
-: <a class="el" href="rs__cl_8rsh.html#a7c8f2f987044a360b5f616a80a74a4d5">rs_cl.rsh</a>
-</li>
-<li>fast_normalize()
-: <a class="el" href="rs__cl_8rsh.html#a3878bee2879351f518be68e015d76a35">rs_cl.rsh</a>
-</li>
-<li>fdim()
-: <a class="el" href="rs__cl_8rsh.html#ae7a7bac0f4e244594078f87b42c8716a">rs_cl.rsh</a>
-</li>
-<li>float2
-: <a class="el" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">rs_types.rsh</a>
-</li>
-<li>float3
-: <a class="el" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">rs_types.rsh</a>
-</li>
-<li>float4
-: <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">rs_types.rsh</a>
-</li>
-<li>floor()
-: <a class="el" href="rs__cl_8rsh.html#aae2da38a7246378dff8014ec407a30c3">rs_cl.rsh</a>
-</li>
-<li>fma()
-: <a class="el" href="rs__cl_8rsh.html#ac42909daec463fe449743e70baf8360d">rs_cl.rsh</a>
-</li>
-<li>fmax()
-: <a class="el" href="rs__cl_8rsh.html#a60f2072d8a746e7fe05cd46dea0fefcc">rs_cl.rsh</a>
-</li>
-<li>fmin()
-: <a class="el" href="rs__cl_8rsh.html#a1fd9d57c6c992866bf5161be2cf4c447">rs_cl.rsh</a>
-</li>
-<li>fmod()
-: <a class="el" href="rs__cl_8rsh.html#a31d5e179730ae44e1dbc74c1535f392e">rs_cl.rsh</a>
-</li>
-<li>fract()
-: <a class="el" href="rs__cl_8rsh.html#a9374786a1bbe3d2dd886cfad642bfec6">rs_cl.rsh</a>
-</li>
-<li>frexp()
-: <a class="el" href="rs__cl_8rsh.html#a778635fffed3cee8ab0800482ba53a30">rs_cl.rsh</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_h"></a>- h -</h3><ul>
-<li>half_recip()
-: <a class="el" href="rs__cl_8rsh.html#a49050a8e32c95f60df4eaba9d7dfdca6">rs_cl.rsh</a>
-</li>
-<li>half_rsqrt()
-: <a class="el" href="rs__cl_8rsh.html#a0925ceb22d33dcbb45914350ffa2edea">rs_cl.rsh</a>
-</li>
-<li>half_sqrt()
-: <a class="el" href="rs__cl_8rsh.html#a26e2c17b20ee4c98b78c365d390e4fb8">rs_cl.rsh</a>
-</li>
-<li>hypot()
-: <a class="el" href="rs__cl_8rsh.html#a147f38d6e41f45de9b5e7c6f3dcac010">rs_cl.rsh</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_i"></a>- i -</h3><ul>
-<li>ilogb()
-: <a class="el" href="rs__cl_8rsh.html#aad9a8beba52acb77b1efeba432e6cc2c">rs_cl.rsh</a>
-</li>
-<li>int16_t
-: <a class="el" href="rs__types_8rsh.html#aa343fa3b3d06292b959ffdd4c4703b06">rs_types.rsh</a>
-</li>
-<li>int2
-: <a class="el" href="rs__types_8rsh.html#a6bc1fa1354fe2145b8f12b4bbfafcf4c">rs_types.rsh</a>
-</li>
-<li>int3
-: <a class="el" href="rs__types_8rsh.html#ad5512266b63fd06dcf450f6c9d5326c8">rs_types.rsh</a>
-</li>
-<li>int32_t
-: <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">rs_types.rsh</a>
-</li>
-<li>int4
-: <a class="el" href="rs__types_8rsh.html#a897deab71f679999ed99d4153c797e70">rs_types.rsh</a>
-</li>
-<li>int64_t
-: <a class="el" href="rs__types_8rsh.html#a996e72f71b11a5bb8b3b7b6936b1516d">rs_types.rsh</a>
-</li>
-<li>int8_t
-: <a class="el" href="rs__types_8rsh.html#ad566f6541e98b74246db1a3a3a85ad49">rs_types.rsh</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_l"></a>- l -</h3><ul>
-<li>ldexp()
-: <a class="el" href="rs__cl_8rsh.html#a013bc1dcda984cbc608e123ed38491e6">rs_cl.rsh</a>
-</li>
-<li>length()
-: <a class="el" href="rs__cl_8rsh.html#a902d4d2fab31ba8f9631b1f681e99baa">rs_cl.rsh</a>
-</li>
-<li>lgamma()
-: <a class="el" href="rs__cl_8rsh.html#a735f4e14e33c50348ef41220f9210bcc">rs_cl.rsh</a>
-</li>
-<li>log()
-: <a class="el" href="rs__cl_8rsh.html#a3ff85f5f4b206ecf9ec9d128d7d18a08">rs_cl.rsh</a>
-</li>
-<li>log10()
-: <a class="el" href="rs__cl_8rsh.html#af5c1bdba2a13aa2e2b0722287f6a919f">rs_cl.rsh</a>
-</li>
-<li>log1p()
-: <a class="el" href="rs__cl_8rsh.html#ae10541ede49062ef7f977712c4878c1f">rs_cl.rsh</a>
-</li>
-<li>log2()
-: <a class="el" href="rs__cl_8rsh.html#aab1c4f06daf6f2a50fd73f0c28929213">rs_cl.rsh</a>
-</li>
-<li>logb()
-: <a class="el" href="rs__cl_8rsh.html#a28742d6ce2f20a61f16ecc08ed499871">rs_cl.rsh</a>
-</li>
-<li>long2
-: <a class="el" href="rs__types_8rsh.html#afd55d62cee0785034b73375acd0df9da">rs_types.rsh</a>
-</li>
-<li>long3
-: <a class="el" href="rs__types_8rsh.html#ad9cedbf4050fad14138d1dcb3428ec18">rs_types.rsh</a>
-</li>
-<li>long4
-: <a class="el" href="rs__types_8rsh.html#ae177e4918f36e5c9da36d524cdb7a2e7">rs_types.rsh</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_m"></a>- m -</h3><ul>
-<li>mad()
-: <a class="el" href="rs__cl_8rsh.html#a4f9086698f1eb466ba2dccf7e331cdc3">rs_cl.rsh</a>
-</li>
-<li>max()
-: <a class="el" href="rs__cl_8rsh.html#a616bf7a90d8d3c73a48d2c395d9dc4ea">rs_cl.rsh</a>
-</li>
-<li>min()
-: <a class="el" href="rs__cl_8rsh.html#a5f61ca44b3ad4b11365b0c4137a22658">rs_cl.rsh</a>
-</li>
-<li>mix()
-: <a class="el" href="rs__cl_8rsh.html#a254612a612ff7539b01a1478e03d8697">rs_cl.rsh</a>
-</li>
-<li>modf()
-: <a class="el" href="rs__cl_8rsh.html#a841633bcdcaeb6a514d9c6460f0adf2d">rs_cl.rsh</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_n"></a>- n -</h3><ul>
-<li>native_exp()
-: <a class="el" href="rs__cl_8rsh.html#a45d8176823a05b891313f3d96decf491">rs_cl.rsh</a>
-</li>
-<li>native_exp10()
-: <a class="el" href="rs__cl_8rsh.html#a601ee3d2bf769f1cdc39a886f7a6c986">rs_cl.rsh</a>
-</li>
-<li>native_exp2()
-: <a class="el" href="rs__cl_8rsh.html#ab354691ecd844549b27ef9202e17f7ac">rs_cl.rsh</a>
-</li>
-<li>nextafter()
-: <a class="el" href="rs__cl_8rsh.html#adb11df05fb9985595af0a7bd882bdeac">rs_cl.rsh</a>
-</li>
-<li>normalize()
-: <a class="el" href="rs__cl_8rsh.html#a69c2a56f743593439d5ae5e3ec8e517f">rs_cl.rsh</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_p"></a>- p -</h3><ul>
-<li>pow()
-: <a class="el" href="rs__cl_8rsh.html#a9243de1d67fcc847a89f95748d664b19">rs_cl.rsh</a>
-</li>
-<li>pown()
-: <a class="el" href="rs__cl_8rsh.html#a67d1fe795e092003f687f3cc6d3c407a">rs_cl.rsh</a>
-</li>
-<li>powr()
-: <a class="el" href="rs__cl_8rsh.html#a316c30ba3e6bc11673bfd34bb4746d24">rs_cl.rsh</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_r"></a>- r -</h3><ul>
-<li>radians()
-: <a class="el" href="rs__cl_8rsh.html#aceb63a0da6393b8ac2ed229bae6232d6">rs_cl.rsh</a>
-</li>
-<li>remainder()
-: <a class="el" href="rs__cl_8rsh.html#a5188ac0e3af95b0956c6abeafb74fda9">rs_cl.rsh</a>
-</li>
-<li>rint()
-: <a class="el" href="rs__cl_8rsh.html#adb0ffe344ae56ca7fc9083c1f2943e55">rs_cl.rsh</a>
-</li>
-<li>rootn()
-: <a class="el" href="rs__cl_8rsh.html#a2776b517528b8185a6bb50753af0f6cf">rs_cl.rsh</a>
-</li>
-<li>round()
-: <a class="el" href="rs__cl_8rsh.html#aff4846ab5b947550814d5414a2c3626f">rs_cl.rsh</a>
-</li>
-<li>rs_allocation_cubemap_face
-: <a class="el" href="rs__types_8rsh.html#acc6f9a94176656c73fd74f789cfa2229">rs_types.rsh</a>
-</li>
-<li>rs_allocation_usage_type
-: <a class="el" href="rs__types_8rsh.html#af8c988b9715d55b6e41e0ee1925fb171">rs_types.rsh</a>
-</li>
-<li>rs_data_kind
-: <a class="el" href="rs__types_8rsh.html#a1692d177c4a3fe1544bd91172056581a">rs_types.rsh</a>
-</li>
-<li>rs_data_type
-: <a class="el" href="rs__types_8rsh.html#ae7551db5705f864fde49c13660aff647">rs_types.rsh</a>
-</li>
-<li>rs_depth_func
-: <a class="el" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bf">rs_types.rsh</a>
-</li>
-<li>RS_DEPTH_FUNC_ALWAYS
-: <a class="el" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bfa8d469fa992bac113a001d75aa7cfbb5a">rs_types.rsh</a>
-</li>
-<li>RS_DEPTH_FUNC_EQUAL
-: <a class="el" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bfa56339400e4089e546199547717bdcd21">rs_types.rsh</a>
-</li>
-<li>RS_DEPTH_FUNC_GEQUAL
-: <a class="el" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bfa2858ef91becfeb84d8f34a1458a4126d">rs_types.rsh</a>
-</li>
-<li>RS_DEPTH_FUNC_GREATER
-: <a class="el" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bfa412bb65be35e058a7699b8211cc2ef7d">rs_types.rsh</a>
-</li>
-<li>RS_DEPTH_FUNC_INVALID
-: <a class="el" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bfadfc3917c562a540b4114181440b909e3">rs_types.rsh</a>
-</li>
-<li>RS_DEPTH_FUNC_LEQUAL
-: <a class="el" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bfa62459990f41930a88542b878ddd53d9f">rs_types.rsh</a>
-</li>
-<li>RS_DEPTH_FUNC_LESS
-: <a class="el" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bfac1ddb06fe80be898bf8d4a517187575a">rs_types.rsh</a>
-</li>
-<li>RS_DEPTH_FUNC_NOTEQUAL
-: <a class="el" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bfa2105e438ae89b89a2f4361483e65966d">rs_types.rsh</a>
-</li>
-<li>rs_for_each_strategy
-: <a class="el" href="rs__core_8rsh.html#ae1755c901e8acb42510ad10b4e104746">rs_core.rsh</a>
-</li>
-<li>rs_primitive
-: <a class="el" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951">rs_types.rsh</a>
-</li>
-<li>RS_PRIMITIVE_INVALID
-: <a class="el" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951a136481c7695b09f01126da71bb132c9d">rs_types.rsh</a>
-</li>
-<li>RS_PRIMITIVE_LINE
-: <a class="el" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951a09a49eaa42585d6181c8a2f711b63ddf">rs_types.rsh</a>
-</li>
-<li>RS_PRIMITIVE_LINE_STRIP
-: <a class="el" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951abe563a9f68706a5aa567793a5088b4da">rs_types.rsh</a>
-</li>
-<li>RS_PRIMITIVE_POINT
-: <a class="el" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951a337ab7046b7cb5cc9eb14bc325ae3158">rs_types.rsh</a>
-</li>
-<li>RS_PRIMITIVE_TRIANGLE
-: <a class="el" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951aeb062ef8811156915afccfc5f4259b79">rs_types.rsh</a>
-</li>
-<li>RS_PRIMITIVE_TRIANGLE_FAN
-: <a class="el" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951afadd96d3a17724e061d9eb07bfca4a01">rs_types.rsh</a>
-</li>
-<li>RS_PRIMITIVE_TRIANGLE_STRIP
-: <a class="el" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951a497d5376ef6c9f9ead810a053b9b35d9">rs_types.rsh</a>
-</li>
-<li>rs_quaternion
-: <a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_types.rsh</a>
-</li>
-<li>rs_script_call_t
-: <a class="el" href="rs__core_8rsh.html#ae8756b32e23445f287960b9d0ffb449c">rs_core.rsh</a>
-</li>
-<li>rs_time_t
-: <a class="el" href="rs__time_8rsh.html#ad2b4759a0a6a98bd79b7ad82a4b057d6">rs_time.rsh</a>
-</li>
-<li>rsAllocationCopy1DRange()
-: <a class="el" href="rs__allocation_8rsh.html#a3a1098a3ea3a5106955dd4398b8904e1">rs_allocation.rsh</a>
-</li>
-<li>rsAllocationCopy2DRange()
-: <a class="el" href="rs__allocation_8rsh.html#a7f7e2369b3ed7d7db31729b6db7ba07e">rs_allocation.rsh</a>
-</li>
-<li>rsAllocationGetDimFaces()
-: <a class="el" href="rs__allocation_8rsh.html#ac85f7ed88f38b35482c6d63b56d470fe">rs_allocation.rsh</a>
-</li>
-<li>rsAllocationGetDimLOD()
-: <a class="el" href="rs__allocation_8rsh.html#ac42a07c079d6b3c6bb21975170d4e11c">rs_allocation.rsh</a>
-</li>
-<li>rsAllocationGetDimX()
-: <a class="el" href="rs__allocation_8rsh.html#a3ca7f505a97d5b7f477bc65b9e77dafb">rs_allocation.rsh</a>
-</li>
-<li>rsAllocationGetDimY()
-: <a class="el" href="rs__allocation_8rsh.html#ac889b866b465580eb313e5d2a9fcac3d">rs_allocation.rsh</a>
-</li>
-<li>rsAllocationGetDimZ()
-: <a class="el" href="rs__allocation_8rsh.html#acd6f1a2b2443e6ea39e6154577645d2c">rs_allocation.rsh</a>
-</li>
-<li>rsAllocationGetElement()
-: <a class="el" href="rs__allocation_8rsh.html#a6a3b6512bc269f6b369bdc54d12a45ff">rs_allocation.rsh</a>
-</li>
-<li>rsAllocationIoReceive()
-: <a class="el" href="rs__allocation_8rsh.html#a05f7391230a92d239fdb619d791162b5">rs_allocation.rsh</a>
-</li>
-<li>rsAllocationIoSend()
-: <a class="el" href="rs__allocation_8rsh.html#afe9ebb2f89c6366c59f5e05ee4849c0a">rs_allocation.rsh</a>
-</li>
-<li>rsAtomicAdd()
-: <a class="el" href="rs__atomic_8rsh.html#ab46665eff81030200f86db9c2181072a">rs_atomic.rsh</a>
-</li>
-<li>rsAtomicAnd()
-: <a class="el" href="rs__atomic_8rsh.html#a7fdf5633662dd5b0898ad5a149e3c8ad">rs_atomic.rsh</a>
-</li>
-<li>rsAtomicCas()
-: <a class="el" href="rs__atomic_8rsh.html#a205d66a8eb29eee8968f886e488b4402">rs_atomic.rsh</a>
-</li>
-<li>rsAtomicDec()
-: <a class="el" href="rs__atomic_8rsh.html#a16a69784a343d7c11bf6bd7fec9686ca">rs_atomic.rsh</a>
-</li>
-<li>rsAtomicInc()
-: <a class="el" href="rs__atomic_8rsh.html#a619e7a489500a650569a76ccd93e105f">rs_atomic.rsh</a>
-</li>
-<li>rsAtomicMax()
-: <a class="el" href="rs__atomic_8rsh.html#a1d49d69d14956152fcde34efe9cdff87">rs_atomic.rsh</a>
-</li>
-<li>rsAtomicMin()
-: <a class="el" href="rs__atomic_8rsh.html#a9f3cddc86f1075ca194a762fb8a3330a">rs_atomic.rsh</a>
-</li>
-<li>rsAtomicOr()
-: <a class="el" href="rs__atomic_8rsh.html#a477f6eb17c4806bb715bfd975b6369cd">rs_atomic.rsh</a>
-</li>
-<li>rsAtomicSub()
-: <a class="el" href="rs__atomic_8rsh.html#a800dced6abbf09716391f35bc488900b">rs_atomic.rsh</a>
-</li>
-<li>rsAtomicXor()
-: <a class="el" href="rs__atomic_8rsh.html#a5590505ea65c53b3bb26fa48a6b9c313">rs_atomic.rsh</a>
-</li>
-<li>rsClamp()
-: <a class="el" href="rs__math_8rsh.html#a40eddbf6c2462eada177a581a49bd3c6">rs_math.rsh</a>
-</li>
-<li>rsClearObject()
-: <a class="el" href="rs__object_8rsh.html#aab5f47dc11b9044b3d02c4ed818fe6e7">rs_object.rsh</a>
-</li>
-<li>rsDebug()
-: <a class="el" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rs_debug.rsh</a>
-</li>
-<li>rsElementGetBytesSize()
-: <a class="el" href="rs__element_8rsh.html#ac54592168af5896d3fba5283af286f98">rs_element.rsh</a>
-</li>
-<li>rsElementGetDataKind()
-: <a class="el" href="rs__element_8rsh.html#af072702a530e158093d69353072da5f9">rs_element.rsh</a>
-</li>
-<li>rsElementGetDataType()
-: <a class="el" href="rs__element_8rsh.html#a9a3569d242be363517ea2354d98cf382">rs_element.rsh</a>
-</li>
-<li>rsElementGetSubElement()
-: <a class="el" href="rs__element_8rsh.html#a8c690bce7d32be759fd787740c270c92">rs_element.rsh</a>
-</li>
-<li>rsElementGetSubElementArraySize()
-: <a class="el" href="rs__element_8rsh.html#a9c3140c18139db451279d9b221808eee">rs_element.rsh</a>
-</li>
-<li>rsElementGetSubElementCount()
-: <a class="el" href="rs__element_8rsh.html#a2ecab064ea2b720bc3af27b523388f31">rs_element.rsh</a>
-</li>
-<li>rsElementGetSubElementName()
-: <a class="el" href="rs__element_8rsh.html#a3c1446166c43aa6ba3d5359f6c982f02">rs_element.rsh</a>
-</li>
-<li>rsElementGetSubElementNameLength()
-: <a class="el" href="rs__element_8rsh.html#a94834eb1d91b50a5df3cbe161c22e37d">rs_element.rsh</a>
-</li>
-<li>rsElementGetSubElementOffsetBytes()
-: <a class="el" href="rs__element_8rsh.html#a840d53f1e91bb6887b40a4d8983c53ed">rs_element.rsh</a>
-</li>
-<li>rsElementGetVectorSize()
-: <a class="el" href="rs__element_8rsh.html#a727997de25ae43c07dffcfd484928d53">rs_element.rsh</a>
-</li>
-<li>rsExtractFrustumPlanes()
-: <a class="el" href="rs__math_8rsh.html#a191f9c687c56322c18b7d71491602122">rs_math.rsh</a>
-</li>
-<li>rsForEach()
-: <a class="el" href="rs__core_8rsh.html#a64271d266928b06ebd82ec90b756eb23">rs_core.rsh</a>
-</li>
-<li>rsFrac()
-: <a class="el" href="rs__math_8rsh.html#ac4f127e78da0849321c7f6db14f9e989">rs_math.rsh</a>
-</li>
-<li>rsGetAllocation()
-: <a class="el" href="rs__allocation_8rsh.html#aadad7654929c451be299df125061c9ba">rs_allocation.rsh</a>
-</li>
-<li>rsGetDt()
-: <a class="el" href="rs__time_8rsh.html#adea2682186fd903752431ad848bd8bf4">rs_time.rsh</a>
-</li>
-<li>rsGetElementAt()
-: <a class="el" href="rs__allocation_8rsh.html#a56157b6ddef754b36833ca1f8e66aec2">rs_allocation.rsh</a>
-</li>
-<li>rsGetElementAtYuv_uchar_U()
-: <a class="el" href="rs__allocation_8rsh.html#a41f61be02113ee22c039ea51fdedb20e">rs_allocation.rsh</a>
-</li>
-<li>rsGetElementAtYuv_uchar_V()
-: <a class="el" href="rs__allocation_8rsh.html#af03cadb582fa80bbf7f39177d96df17e">rs_allocation.rsh</a>
-</li>
-<li>rsGetElementAtYuv_uchar_Y()
-: <a class="el" href="rs__allocation_8rsh.html#ad7ffa1aa16511a75b4bc2c05bd0e0a75">rs_allocation.rsh</a>
-</li>
-<li>rsgMeshGetIndexAllocation()
-: <a class="el" href="rs__mesh_8rsh.html#a05257c9252e7804397d6a6f7549bae5a">rs_mesh.rsh</a>
-</li>
-<li>rsgMeshGetPrimitive()
-: <a class="el" href="rs__mesh_8rsh.html#af467f1c21cc9221071334f8234c29466">rs_mesh.rsh</a>
-</li>
-<li>rsgMeshGetPrimitiveCount()
-: <a class="el" href="rs__mesh_8rsh.html#ae0a0178cc02508517013486be4500d7f">rs_mesh.rsh</a>
-</li>
-<li>rsgMeshGetVertexAllocation()
-: <a class="el" href="rs__mesh_8rsh.html#a43e1d84147176cb0a1659552fa8da49f">rs_mesh.rsh</a>
-</li>
-<li>rsgMeshGetVertexAllocationCount()
-: <a class="el" href="rs__mesh_8rsh.html#a7578d6d93154ac881715ab511449fab9">rs_mesh.rsh</a>
-</li>
-<li>rsgProgramRasterGetCullMode()
-: <a class="el" href="rs__program_8rsh.html#a633d6dbdec98ef89c2b70c92ea707502">rs_program.rsh</a>
-</li>
-<li>rsgProgramRasterIsPointSpriteEnabled()
-: <a class="el" href="rs__program_8rsh.html#a86aeccd846ed2cd2c9498ab57e2535f3">rs_program.rsh</a>
-</li>
-<li>rsgProgramStoreGetBlendDstFunc()
-: <a class="el" href="rs__program_8rsh.html#a0ad38d595e35712f24c384ef20b69025">rs_program.rsh</a>
-</li>
-<li>rsgProgramStoreGetBlendSrcFunc()
-: <a class="el" href="rs__program_8rsh.html#afb38256c5804cdb9b410419c43ce03ab">rs_program.rsh</a>
-</li>
-<li>rsgProgramStoreGetDepthFunc()
-: <a class="el" href="rs__program_8rsh.html#a6a9c06c54d230f61edc0667a091aac77">rs_program.rsh</a>
-</li>
-<li>rsgProgramStoreIsColorMaskAlphaEnabled()
-: <a class="el" href="rs__program_8rsh.html#ab038edb7399044a3ea96ebb17d7b6601">rs_program.rsh</a>
-</li>
-<li>rsgProgramStoreIsColorMaskBlueEnabled()
-: <a class="el" href="rs__program_8rsh.html#a279ad1b4611aca268053337f6719a22c">rs_program.rsh</a>
-</li>
-<li>rsgProgramStoreIsColorMaskGreenEnabled()
-: <a class="el" href="rs__program_8rsh.html#a1a57f706bc42ce49b545021c8403964c">rs_program.rsh</a>
-</li>
-<li>rsgProgramStoreIsColorMaskRedEnabled()
-: <a class="el" href="rs__program_8rsh.html#a4a50df1d2495567536dd6f394d38ee5d">rs_program.rsh</a>
-</li>
-<li>rsgProgramStoreIsDepthMaskEnabled()
-: <a class="el" href="rs__program_8rsh.html#afa27fa6103c9e29f5e098e2d99663f0b">rs_program.rsh</a>
-</li>
-<li>rsgProgramStoreIsDitherEnabled()
-: <a class="el" href="rs__program_8rsh.html#abe7c55547a72dd291e0996de050bb749">rs_program.rsh</a>
-</li>
-<li>rsIsObject()
-: <a class="el" href="rs__object_8rsh.html#a81f862730b961bd93ac132c24cbc0f82">rs_object.rsh</a>
-</li>
-<li>rsIsSphereInFrustum()
-: <a class="el" href="rs__math_8rsh.html#a7bbeaf44838e08e68d5cf3e3d7b0818c">rs_math.rsh</a>
-</li>
-<li>rsLocaltime()
-: <a class="el" href="rs__time_8rsh.html#a08a8fcadae964f7416aef487da624110">rs_time.rsh</a>
-</li>
-<li>rsMatrixGet()
-: <a class="el" href="rs__matrix_8rsh.html#a22e983b67d3089c5cb97032e249ca335">rs_matrix.rsh</a>
-</li>
-<li>rsMatrixInverse()
-: <a class="el" href="rs__matrix_8rsh.html#a00b6a334ba5ac94d84850f22ec9f4de5">rs_matrix.rsh</a>
-</li>
-<li>rsMatrixInverseTranspose()
-: <a class="el" href="rs__matrix_8rsh.html#ac05080d52da2d99a759ef34fa0655e82">rs_matrix.rsh</a>
-</li>
-<li>rsMatrixLoad()
-: <a class="el" href="rs__matrix_8rsh.html#ac380c4117e047da494a74f0dad20fab3">rs_matrix.rsh</a>
-</li>
-<li>rsMatrixLoadFrustum()
-: <a class="el" href="rs__matrix_8rsh.html#ad25760aaf01e95d0055237afab41bbb3">rs_matrix.rsh</a>
-</li>
-<li>rsMatrixLoadIdentity()
-: <a class="el" href="rs__matrix_8rsh.html#a5b31e83553efa947db2198674d5db043">rs_matrix.rsh</a>
-</li>
-<li>rsMatrixLoadMultiply()
-: <a class="el" href="rs__matrix_8rsh.html#a78872343ea6a5c1a846160ccdc4add52">rs_matrix.rsh</a>
-</li>
-<li>rsMatrixLoadOrtho()
-: <a class="el" href="rs__matrix_8rsh.html#a4c59884a0e534dbbcdc5655842732d43">rs_matrix.rsh</a>
-</li>
-<li>rsMatrixLoadPerspective()
-: <a class="el" href="rs__matrix_8rsh.html#aa404c34d7478f2921f7415d2da95d02b">rs_matrix.rsh</a>
-</li>
-<li>rsMatrixLoadRotate()
-: <a class="el" href="rs__matrix_8rsh.html#a268032f3ac6d766b1d7fe72a6cb50464">rs_matrix.rsh</a>
-</li>
-<li>rsMatrixLoadScale()
-: <a class="el" href="rs__matrix_8rsh.html#acaf51d1f9ad5041ce01fbf8b7c5923fd">rs_matrix.rsh</a>
-</li>
-<li>rsMatrixLoadTranslate()
-: <a class="el" href="rs__matrix_8rsh.html#a1b521c8a3d1260fa732cbf0a71af0e74">rs_matrix.rsh</a>
-</li>
-<li>rsMatrixMultiply()
-: <a class="el" href="rs__matrix_8rsh.html#a88ae2ed203769cb4a7917f84f6c1a2e2">rs_matrix.rsh</a>
-</li>
-<li>rsMatrixRotate()
-: <a class="el" href="rs__matrix_8rsh.html#ad5ed05ca4880397fb29615e3c6798de1">rs_matrix.rsh</a>
-</li>
-<li>rsMatrixScale()
-: <a class="el" href="rs__matrix_8rsh.html#a94cc6b22bd1a6c07a9a1c1d21afb392c">rs_matrix.rsh</a>
-</li>
-<li>rsMatrixSet()
-: <a class="el" href="rs__matrix_8rsh.html#ab69543f85a673f23fbb5f893e5824395">rs_matrix.rsh</a>
-</li>
-<li>rsMatrixTranslate()
-: <a class="el" href="rs__matrix_8rsh.html#a4df5f9b5bb6044f3c3426f2f58b94405">rs_matrix.rsh</a>
-</li>
-<li>rsMatrixTranspose()
-: <a class="el" href="rs__matrix_8rsh.html#a88095c70f1550c760844b3e32e41a31a">rs_matrix.rsh</a>
-</li>
-<li>rsPackColorTo8888()
-: <a class="el" href="rs__math_8rsh.html#ac30a8c020eade2b57fd5966cb7c8665e">rs_math.rsh</a>
-</li>
-<li>rsqrt()
-: <a class="el" href="rs__cl_8rsh.html#a8a3992b97cb199b1c8d598996b600988">rs_cl.rsh</a>
-</li>
-<li>rsQuaternionAdd()
-: <a class="el" href="rs__quaternion_8rsh.html#a5e6e493b9917336b0d9118fdd4e91444">rs_quaternion.rsh</a>
-</li>
-<li>rsQuaternionConjugate()
-: <a class="el" href="rs__quaternion_8rsh.html#acd670264e49743d35f38028b8e2a8800">rs_quaternion.rsh</a>
-</li>
-<li>rsQuaternionDot()
-: <a class="el" href="rs__quaternion_8rsh.html#aa810f8857439564e7b3be771f47b40ca">rs_quaternion.rsh</a>
-</li>
-<li>rsQuaternionGetMatrixUnit()
-: <a class="el" href="rs__quaternion_8rsh.html#a7726c524868c49892976fec53ea0693b">rs_quaternion.rsh</a>
-</li>
-<li>rsQuaternionLoadRotate()
-: <a class="el" href="rs__quaternion_8rsh.html#adf4423c521e34f3cf29d5dd5b5a93de0">rs_quaternion.rsh</a>
-</li>
-<li>rsQuaternionLoadRotateUnit()
-: <a class="el" href="rs__quaternion_8rsh.html#aa72a43cf3d7b5924de1ddfaa5766db09">rs_quaternion.rsh</a>
-</li>
-<li>rsQuaternionMultiply()
-: <a class="el" href="rs__quaternion_8rsh.html#a8bbbb286a2e2cb71b416c053f44844c3">rs_quaternion.rsh</a>
-</li>
-<li>rsQuaternionNormalize()
-: <a class="el" href="rs__quaternion_8rsh.html#abb31aad2416044ad5bbf44ee7c838e2a">rs_quaternion.rsh</a>
-</li>
-<li>rsQuaternionSet()
-: <a class="el" href="rs__quaternion_8rsh.html#a5ff868dbc33e710a666a102fdcc6670a">rs_quaternion.rsh</a>
-</li>
-<li>rsQuaternionSlerp()
-: <a class="el" href="rs__quaternion_8rsh.html#a7da94a30e287cbb8148771a5cd768dbd">rs_quaternion.rsh</a>
-</li>
-<li>rsRand()
-: <a class="el" href="rs__math_8rsh.html#a84b2e7468314873b3aa02969e310d9e4">rs_math.rsh</a>
-</li>
-<li>rsSample()
-: <a class="el" href="rs__allocation_8rsh.html#a1ed04c0bfab4044b875bb31577b53407">rs_allocation.rsh</a>
-</li>
-<li>rsSamplerGetAnisotropy()
-: <a class="el" href="rs__sampler_8rsh.html#ab1e79984609469604cba8e2b76a98844">rs_sampler.rsh</a>
-</li>
-<li>rsSamplerGetMagnification()
-: <a class="el" href="rs__sampler_8rsh.html#a5bddb73826cd20a79c31f012a4637e83">rs_sampler.rsh</a>
-</li>
-<li>rsSamplerGetMinification()
-: <a class="el" href="rs__sampler_8rsh.html#acb1bec2c3d1edd752dd60499c8db58a4">rs_sampler.rsh</a>
-</li>
-<li>rsSamplerGetWrapS()
-: <a class="el" href="rs__sampler_8rsh.html#a68a7ab6724019c6e72fae8eb45aa48dd">rs_sampler.rsh</a>
-</li>
-<li>rsSamplerGetWrapT()
-: <a class="el" href="rs__sampler_8rsh.html#ab6b25d3b9afa16f418e2dee78ebb4a75">rs_sampler.rsh</a>
-</li>
-<li>rsSendToClient()
-: <a class="el" href="rs__core_8rsh.html#a508003cadad2d37d41e2de7e9226f859">rs_core.rsh</a>
-</li>
-<li>rsSendToClientBlocking()
-: <a class="el" href="rs__core_8rsh.html#a6e4ff6388e8c6978ed17447214f2a2e2">rs_core.rsh</a>
-</li>
-<li>rsSetElementAt()
-: <a class="el" href="rs__allocation_8rsh.html#a351627f335b9a091a5152db7ac9134dc">rs_allocation.rsh</a>
-</li>
-<li>rsSetObject()
-: <a class="el" href="rs__object_8rsh.html#a5132f90b4aaf8d2e35e6ad021fb08175">rs_object.rsh</a>
-</li>
-<li>rsTime()
-: <a class="el" href="rs__time_8rsh.html#a555f9324acb8c3d0c6f09a1d05478ce2">rs_time.rsh</a>
-</li>
-<li>rsUnpackColor8888()
-: <a class="el" href="rs__math_8rsh.html#a48bb0c2e7b1f2b62b2a8970c7d709eca">rs_math.rsh</a>
-</li>
-<li>rsUptimeMillis()
-: <a class="el" href="rs__time_8rsh.html#a3c406e51a769718dd1c760518b9cad44">rs_time.rsh</a>
-</li>
-<li>rsUptimeNanos()
-: <a class="el" href="rs__time_8rsh.html#a24e2cc12acf1e7fdd857d1a48981395d">rs_time.rsh</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_s"></a>- s -</h3><ul>
-<li>short2
-: <a class="el" href="rs__types_8rsh.html#a303d3ad18aaeacfcfeda2b8580b98796">rs_types.rsh</a>
-</li>
-<li>short3
-: <a class="el" href="rs__types_8rsh.html#a3f4967691ae2b249511b5f3dd9e18793">rs_types.rsh</a>
-</li>
-<li>short4
-: <a class="el" href="rs__types_8rsh.html#a198219da0b1d51c8d7f8f12aad7e502d">rs_types.rsh</a>
-</li>
-<li>sign()
-: <a class="el" href="rs__cl_8rsh.html#a9fe423cc7d4c6d767f8a608d2ee76657">rs_cl.rsh</a>
-</li>
-<li>sin()
-: <a class="el" href="rs__cl_8rsh.html#a8c8cd526b44eb55aede77cf659f24306">rs_cl.rsh</a>
-</li>
-<li>sincos()
-: <a class="el" href="rs__cl_8rsh.html#a892c91a30bbc713aa77105d8e9e25881">rs_cl.rsh</a>
-</li>
-<li>sinh()
-: <a class="el" href="rs__cl_8rsh.html#ae686e0cc567f7ee2b0a84706aa486e4a">rs_cl.rsh</a>
-</li>
-<li>sinpi()
-: <a class="el" href="rs__cl_8rsh.html#a9ca027af0acf3ff22d91cd9489766976">rs_cl.rsh</a>
-</li>
-<li>size_t
-: <a class="el" href="rs__types_8rsh.html#a29d85914ddff32967d85ada69854206d">rs_types.rsh</a>
-</li>
-<li>sqrt()
-: <a class="el" href="rs__cl_8rsh.html#a92da0faef80c4d8f66e954c8c169a729">rs_cl.rsh</a>
-</li>
-<li>ssize_t
-: <a class="el" href="rs__types_8rsh.html#a170745d0d946e79c4c2a056d1d158996">rs_types.rsh</a>
-</li>
-<li>step()
-: <a class="el" href="rs__cl_8rsh.html#a9f40337dfee48d1881b87b35aa8133dd">rs_cl.rsh</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_t"></a>- t -</h3><ul>
-<li>tan()
-: <a class="el" href="rs__cl_8rsh.html#af12e245af8ff9bb72b5000e7c26cd8fe">rs_cl.rsh</a>
-</li>
-<li>tanh()
-: <a class="el" href="rs__cl_8rsh.html#abc36e89ddb87ea78451d1c5921ddbd8d">rs_cl.rsh</a>
-</li>
-<li>tanpi()
-: <a class="el" href="rs__cl_8rsh.html#aee96c8910a7d8b0082574813b6b68b9a">rs_cl.rsh</a>
-</li>
-<li>tgamma()
-: <a class="el" href="rs__cl_8rsh.html#ab9f4cbfd2470420ee302f28cf3de6dd0">rs_cl.rsh</a>
-</li>
-<li>trunc()
-: <a class="el" href="rs__cl_8rsh.html#ad1a7c65693231219db1babeae1c41f15">rs_cl.rsh</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_u"></a>- u -</h3><ul>
-<li>uchar
-: <a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">rs_types.rsh</a>
-</li>
-<li>uchar2
-: <a class="el" href="rs__types_8rsh.html#aff5eb7cd53a34bb01924bf64485296de">rs_types.rsh</a>
-</li>
-<li>uchar3
-: <a class="el" href="rs__types_8rsh.html#a247b5eacf2b662849668cbc33120343f">rs_types.rsh</a>
-</li>
-<li>uchar4
-: <a class="el" href="rs__types_8rsh.html#ae6ed52a87d4ff920c303b13b00f7396d">rs_types.rsh</a>
-</li>
-<li>uint
-: <a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">rs_types.rsh</a>
-</li>
-<li>uint16_t
-: <a class="el" href="rs__types_8rsh.html#a273cf69d639a59973b6019625df33e30">rs_types.rsh</a>
-</li>
-<li>uint2
-: <a class="el" href="rs__types_8rsh.html#aaf90cd1f01a121e824fc6e1b927e7683">rs_types.rsh</a>
-</li>
-<li>uint3
-: <a class="el" href="rs__types_8rsh.html#ae80e36ac834c891aa76b09a220344e78">rs_types.rsh</a>
-</li>
-<li>uint32_t
-: <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">rs_types.rsh</a>
-</li>
-<li>uint4
-: <a class="el" href="rs__types_8rsh.html#ad92f0ec6c2cdc1f11a6d7fe321047462">rs_types.rsh</a>
-</li>
-<li>uint64_t
-: <a class="el" href="rs__types_8rsh.html#aaa5d1cd013383c889537491c3cfd9aad">rs_types.rsh</a>
-</li>
-<li>uint8_t
-: <a class="el" href="rs__types_8rsh.html#aba7bc1797add20fe3efdf37ced1182c5">rs_types.rsh</a>
-</li>
-<li>ulong
-: <a class="el" href="rs__types_8rsh.html#ab46637ef82283186e57f54756fe67203">rs_types.rsh</a>
-</li>
-<li>ulong2
-: <a class="el" href="rs__types_8rsh.html#a56988b12ab16acf753356f7a5c70565a">rs_types.rsh</a>
-</li>
-<li>ulong3
-: <a class="el" href="rs__types_8rsh.html#ac623a569c28935fbedd3a8ed27ae0696">rs_types.rsh</a>
-</li>
-<li>ulong4
-: <a class="el" href="rs__types_8rsh.html#a3029c54b8e1779a1ddbdfe875432d137">rs_types.rsh</a>
-</li>
-<li>ushort
-: <a class="el" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">rs_types.rsh</a>
-</li>
-<li>ushort2
-: <a class="el" href="rs__types_8rsh.html#a24a9d78cfc32475e2c6eb1cdec239bf2">rs_types.rsh</a>
-</li>
-<li>ushort3
-: <a class="el" href="rs__types_8rsh.html#ab78391445785d2ca0276392a9c97fcba">rs_types.rsh</a>
-</li>
-<li>ushort4
-: <a class="el" href="rs__types_8rsh.html#a77a09fa01d7fc721bbc44c32aac2d487">rs_types.rsh</a>
-</li>
-</ul>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/globals_enum.html b/docs/html/reference/renderscript/globals_enum.html
deleted file mode 100644
index 500d6c4..0000000
--- a/docs/html/reference/renderscript/globals_enum.html
+++ /dev/null
@@ -1,62 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>Members</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
- <div id="navrow1" class="tabs">
- <ul class="tablist">
- <li><a href="index.html"><span>Overview</span></a></li>
- <li class="current"><a href="globals.html"><span>Globals</span></a></li>
- <li><a href="annotated.html"><span>Structs</span></a></li>
- </ul>
- </div>
- <div id="navrow3" class="tabs2">
- <ul class="tablist">
- <li><a href="globals.html"><span>All</span></a></li>
- <li><a href="globals_func.html"><span>Functions</span></a></li>
- <li><a href="globals_type.html"><span>Typedefs</span></a></li>
- <li class="current"><a href="globals_enum.html"><span>Enumerations</span></a></li>
- <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
- </ul>
- </div>
-</div>
-<div class="contents">
- <ul>
-<li>rs_allocation_cubemap_face
-: <a class="el" href="rs__types_8rsh.html#acc6f9a94176656c73fd74f789cfa2229">rs_types.rsh</a>
-</li>
-<li>rs_allocation_usage_type
-: <a class="el" href="rs__types_8rsh.html#af8c988b9715d55b6e41e0ee1925fb171">rs_types.rsh</a>
-</li>
-<li>rs_data_kind
-: <a class="el" href="rs__types_8rsh.html#a1692d177c4a3fe1544bd91172056581a">rs_types.rsh</a>
-</li>
-<li>rs_data_type
-: <a class="el" href="rs__types_8rsh.html#ae7551db5705f864fde49c13660aff647">rs_types.rsh</a>
-</li>
-<li>rs_depth_func
-: <a class="el" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bf">rs_types.rsh</a>
-</li>
-<li>rs_for_each_strategy
-: <a class="el" href="rs__core_8rsh.html#ae1755c901e8acb42510ad10b4e104746">rs_core.rsh</a>
-</li>
-<li>rs_primitive
-: <a class="el" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951">rs_types.rsh</a>
-</li>
-</ul>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/globals_func.html b/docs/html/reference/renderscript/globals_func.html
deleted file mode 100644
index bed106a..0000000
--- a/docs/html/reference/renderscript/globals_func.html
+++ /dev/null
@@ -1,707 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>Members</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
- <div id="navrow1" class="tabs">
- <ul class="tablist">
- <li><a href="index.html"><span>Overview</span></a></li>
- <li class="current"><a href="globals.html"><span>Globals</span></a></li>
- <li><a href="annotated.html"><span>Structs</span></a></li>
- </ul>
- </div>
- <div id="navrow3" class="tabs2">
- <ul class="tablist">
- <li><a href="globals.html"><span>All</span></a></li>
- <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
- <li><a href="globals_type.html"><span>Typedefs</span></a></li>
- <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
- <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
- </ul>
- </div>
- <div id="navrow4" class="tabs3">
- <ul class="tablist">
- <li><a href="#index_a"><span>a</span></a></li>
- <li><a href="#index_c"><span>c</span></a></li>
- <li><a href="#index_d"><span>d</span></a></li>
- <li><a href="#index_e"><span>e</span></a></li>
- <li><a href="#index_f"><span>f</span></a></li>
- <li><a href="#index_h"><span>h</span></a></li>
- <li><a href="#index_i"><span>i</span></a></li>
- <li><a href="#index_l"><span>l</span></a></li>
- <li><a href="#index_m"><span>m</span></a></li>
- <li><a href="#index_n"><span>n</span></a></li>
- <li><a href="#index_p"><span>p</span></a></li>
- <li><a href="#index_r"><span>r</span></a></li>
- <li><a href="#index_s"><span>s</span></a></li>
- <li><a href="#index_t"><span>t</span></a></li>
- </ul>
- </div>
-</div>
-<div class="contents">
- 
-
-<h3><a class="anchor" id="index_a"></a>- a -</h3><ul>
-<li>abs()
-: <a class="el" href="rs__cl_8rsh.html#a1ed0afedda2068ad1f9ad14ef3449e50">rs_cl.rsh</a>
-</li>
-<li>acos()
-: <a class="el" href="rs__cl_8rsh.html#a07648648c7f857cfd1479821d4389751">rs_cl.rsh</a>
-</li>
-<li>acosh()
-: <a class="el" href="rs__cl_8rsh.html#a6575106413ec72448439ef67f1309424">rs_cl.rsh</a>
-</li>
-<li>acospi()
-: <a class="el" href="rs__cl_8rsh.html#a2c9092eb07e9df891935e93469e70d4e">rs_cl.rsh</a>
-</li>
-<li>asin()
-: <a class="el" href="rs__cl_8rsh.html#a78b9d0583bd0699e2eac30d2a136817a">rs_cl.rsh</a>
-</li>
-<li>asinh()
-: <a class="el" href="rs__cl_8rsh.html#a4e3fe465ed5541af53192c59c80af1a0">rs_cl.rsh</a>
-</li>
-<li>asinpi()
-: <a class="el" href="rs__cl_8rsh.html#a812eb4521e65a451161417f9898384f7">rs_cl.rsh</a>
-</li>
-<li>atan()
-: <a class="el" href="rs__cl_8rsh.html#ab790c3a7df8fcbeab77f6c0e3b4dcada">rs_cl.rsh</a>
-</li>
-<li>atan2()
-: <a class="el" href="rs__cl_8rsh.html#aaf4b636b09041878e1542054c73d81e9">rs_cl.rsh</a>
-</li>
-<li>atan2pi()
-: <a class="el" href="rs__cl_8rsh.html#a89ec5f6a2f64a0f9e97438fbd41aaace">rs_cl.rsh</a>
-</li>
-<li>atanh()
-: <a class="el" href="rs__cl_8rsh.html#a83bdf415cc561ff6237a124273d9fb0d">rs_cl.rsh</a>
-</li>
-<li>atanpi()
-: <a class="el" href="rs__cl_8rsh.html#a5052e31ce616d35aee25a3a83f6fc117">rs_cl.rsh</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_c"></a>- c -</h3><ul>
-<li>cbrt()
-: <a class="el" href="rs__cl_8rsh.html#ae9d1787b55c2587478a24d96573225df">rs_cl.rsh</a>
-</li>
-<li>ceil()
-: <a class="el" href="rs__cl_8rsh.html#aa8fc6daff743a1b635ccbf9af83fe4e4">rs_cl.rsh</a>
-</li>
-<li>clamp()
-: <a class="el" href="rs__cl_8rsh.html#afae5eac13e35acd0f47d7e3c601e16ed">rs_cl.rsh</a>
-</li>
-<li>clz()
-: <a class="el" href="rs__cl_8rsh.html#a8a0f94dce3caa2a50cbf2d9f4bc674ac">rs_cl.rsh</a>
-</li>
-<li>convert_char2()
-: <a class="el" href="rs__cl_8rsh.html#a67421c4b17df15a1c726d912770e5ca4">rs_cl.rsh</a>
-</li>
-<li>convert_float2()
-: <a class="el" href="rs__cl_8rsh.html#a1ad62d449c1e3548573c2f9c1a5cb13a">rs_cl.rsh</a>
-</li>
-<li>convert_int2()
-: <a class="el" href="rs__cl_8rsh.html#a9d2e4b8f0f25a7ccaed05248edc21f06">rs_cl.rsh</a>
-</li>
-<li>convert_short2()
-: <a class="el" href="rs__cl_8rsh.html#a83e89db1940f3190fbec5bd823a99fc5">rs_cl.rsh</a>
-</li>
-<li>convert_uchar2()
-: <a class="el" href="rs__cl_8rsh.html#a833bb5476683ec5692feaf0cd5dcdd80">rs_cl.rsh</a>
-</li>
-<li>convert_uint2()
-: <a class="el" href="rs__cl_8rsh.html#a01ff256469203ba33ba0f220b54e70d1">rs_cl.rsh</a>
-</li>
-<li>convert_ushort2()
-: <a class="el" href="rs__cl_8rsh.html#a6862ea6ddfba8a59796bc681a544fb4f">rs_cl.rsh</a>
-</li>
-<li>copysign()
-: <a class="el" href="rs__cl_8rsh.html#a29f2602d95aa7b3950e2b77b3e268f7e">rs_cl.rsh</a>
-</li>
-<li>cos()
-: <a class="el" href="rs__cl_8rsh.html#a8eec7aeb4b0c46b06cbcd1a3ac3e6f05">rs_cl.rsh</a>
-</li>
-<li>cosh()
-: <a class="el" href="rs__cl_8rsh.html#ac8d88d83182afd591401eaed101d9670">rs_cl.rsh</a>
-</li>
-<li>cospi()
-: <a class="el" href="rs__cl_8rsh.html#a258d2c828fd46eae2867373884d834a9">rs_cl.rsh</a>
-</li>
-<li>cross()
-: <a class="el" href="rs__cl_8rsh.html#add745d593bc2b23285bd10e52a204e25">rs_cl.rsh</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_d"></a>- d -</h3><ul>
-<li>degrees()
-: <a class="el" href="rs__cl_8rsh.html#a0276b63d6905fa802032f1490a24515b">rs_cl.rsh</a>
-</li>
-<li>distance()
-: <a class="el" href="rs__cl_8rsh.html#a412bf215ae838c65079560bbefefaca7">rs_cl.rsh</a>
-</li>
-<li>dot()
-: <a class="el" href="rs__cl_8rsh.html#aa26d85eac3067e9769b33b6914b180f2">rs_cl.rsh</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_e"></a>- e -</h3><ul>
-<li>erf()
-: <a class="el" href="rs__cl_8rsh.html#a139f102df651c25c26dd35d549173f57">rs_cl.rsh</a>
-</li>
-<li>erfc()
-: <a class="el" href="rs__cl_8rsh.html#a2e24dc8594e758b64c340153f67a533c">rs_cl.rsh</a>
-</li>
-<li>exp()
-: <a class="el" href="rs__cl_8rsh.html#a6d9aac64c2686961ca8f30e3c34fef36">rs_cl.rsh</a>
-</li>
-<li>exp10()
-: <a class="el" href="rs__cl_8rsh.html#a0225ff40d79f78260293e776c6a77422">rs_cl.rsh</a>
-</li>
-<li>exp2()
-: <a class="el" href="rs__cl_8rsh.html#a39bca19ee2b1aa95144e58eb4a1e4f88">rs_cl.rsh</a>
-</li>
-<li>expm1()
-: <a class="el" href="rs__cl_8rsh.html#a7996044b67be921a5e58e2fe76af66e2">rs_cl.rsh</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_f"></a>- f -</h3><ul>
-<li>fabs()
-: <a class="el" href="rs__cl_8rsh.html#ad6e897f1acae252ec0901e3b122992ea">rs_cl.rsh</a>
-</li>
-<li>fast_distance()
-: <a class="el" href="rs__cl_8rsh.html#a4fcbdb9099e7d653a951cb344ba3c3c9">rs_cl.rsh</a>
-</li>
-<li>fast_length()
-: <a class="el" href="rs__cl_8rsh.html#a7c8f2f987044a360b5f616a80a74a4d5">rs_cl.rsh</a>
-</li>
-<li>fast_normalize()
-: <a class="el" href="rs__cl_8rsh.html#a3878bee2879351f518be68e015d76a35">rs_cl.rsh</a>
-</li>
-<li>fdim()
-: <a class="el" href="rs__cl_8rsh.html#ae7a7bac0f4e244594078f87b42c8716a">rs_cl.rsh</a>
-</li>
-<li>floor()
-: <a class="el" href="rs__cl_8rsh.html#aae2da38a7246378dff8014ec407a30c3">rs_cl.rsh</a>
-</li>
-<li>fma()
-: <a class="el" href="rs__cl_8rsh.html#ac42909daec463fe449743e70baf8360d">rs_cl.rsh</a>
-</li>
-<li>fmax()
-: <a class="el" href="rs__cl_8rsh.html#a60f2072d8a746e7fe05cd46dea0fefcc">rs_cl.rsh</a>
-</li>
-<li>fmin()
-: <a class="el" href="rs__cl_8rsh.html#a1fd9d57c6c992866bf5161be2cf4c447">rs_cl.rsh</a>
-</li>
-<li>fmod()
-: <a class="el" href="rs__cl_8rsh.html#a31d5e179730ae44e1dbc74c1535f392e">rs_cl.rsh</a>
-</li>
-<li>fract()
-: <a class="el" href="rs__cl_8rsh.html#a9374786a1bbe3d2dd886cfad642bfec6">rs_cl.rsh</a>
-</li>
-<li>frexp()
-: <a class="el" href="rs__cl_8rsh.html#a778635fffed3cee8ab0800482ba53a30">rs_cl.rsh</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_h"></a>- h -</h3><ul>
-<li>half_recip()
-: <a class="el" href="rs__cl_8rsh.html#a49050a8e32c95f60df4eaba9d7dfdca6">rs_cl.rsh</a>
-</li>
-<li>half_rsqrt()
-: <a class="el" href="rs__cl_8rsh.html#a0925ceb22d33dcbb45914350ffa2edea">rs_cl.rsh</a>
-</li>
-<li>half_sqrt()
-: <a class="el" href="rs__cl_8rsh.html#a26e2c17b20ee4c98b78c365d390e4fb8">rs_cl.rsh</a>
-</li>
-<li>hypot()
-: <a class="el" href="rs__cl_8rsh.html#a147f38d6e41f45de9b5e7c6f3dcac010">rs_cl.rsh</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_i"></a>- i -</h3><ul>
-<li>ilogb()
-: <a class="el" href="rs__cl_8rsh.html#aad9a8beba52acb77b1efeba432e6cc2c">rs_cl.rsh</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_l"></a>- l -</h3><ul>
-<li>ldexp()
-: <a class="el" href="rs__cl_8rsh.html#a013bc1dcda984cbc608e123ed38491e6">rs_cl.rsh</a>
-</li>
-<li>length()
-: <a class="el" href="rs__cl_8rsh.html#a902d4d2fab31ba8f9631b1f681e99baa">rs_cl.rsh</a>
-</li>
-<li>lgamma()
-: <a class="el" href="rs__cl_8rsh.html#a735f4e14e33c50348ef41220f9210bcc">rs_cl.rsh</a>
-</li>
-<li>log()
-: <a class="el" href="rs__cl_8rsh.html#a3ff85f5f4b206ecf9ec9d128d7d18a08">rs_cl.rsh</a>
-</li>
-<li>log10()
-: <a class="el" href="rs__cl_8rsh.html#af5c1bdba2a13aa2e2b0722287f6a919f">rs_cl.rsh</a>
-</li>
-<li>log1p()
-: <a class="el" href="rs__cl_8rsh.html#ae10541ede49062ef7f977712c4878c1f">rs_cl.rsh</a>
-</li>
-<li>log2()
-: <a class="el" href="rs__cl_8rsh.html#aab1c4f06daf6f2a50fd73f0c28929213">rs_cl.rsh</a>
-</li>
-<li>logb()
-: <a class="el" href="rs__cl_8rsh.html#a28742d6ce2f20a61f16ecc08ed499871">rs_cl.rsh</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_m"></a>- m -</h3><ul>
-<li>mad()
-: <a class="el" href="rs__cl_8rsh.html#a4f9086698f1eb466ba2dccf7e331cdc3">rs_cl.rsh</a>
-</li>
-<li>max()
-: <a class="el" href="rs__cl_8rsh.html#a616bf7a90d8d3c73a48d2c395d9dc4ea">rs_cl.rsh</a>
-</li>
-<li>min()
-: <a class="el" href="rs__cl_8rsh.html#a5f61ca44b3ad4b11365b0c4137a22658">rs_cl.rsh</a>
-</li>
-<li>mix()
-: <a class="el" href="rs__cl_8rsh.html#a254612a612ff7539b01a1478e03d8697">rs_cl.rsh</a>
-</li>
-<li>modf()
-: <a class="el" href="rs__cl_8rsh.html#a841633bcdcaeb6a514d9c6460f0adf2d">rs_cl.rsh</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_n"></a>- n -</h3><ul>
-<li>native_exp()
-: <a class="el" href="rs__cl_8rsh.html#a45d8176823a05b891313f3d96decf491">rs_cl.rsh</a>
-</li>
-<li>native_exp10()
-: <a class="el" href="rs__cl_8rsh.html#a601ee3d2bf769f1cdc39a886f7a6c986">rs_cl.rsh</a>
-</li>
-<li>native_exp2()
-: <a class="el" href="rs__cl_8rsh.html#ab354691ecd844549b27ef9202e17f7ac">rs_cl.rsh</a>
-</li>
-<li>nextafter()
-: <a class="el" href="rs__cl_8rsh.html#adb11df05fb9985595af0a7bd882bdeac">rs_cl.rsh</a>
-</li>
-<li>normalize()
-: <a class="el" href="rs__cl_8rsh.html#a69c2a56f743593439d5ae5e3ec8e517f">rs_cl.rsh</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_p"></a>- p -</h3><ul>
-<li>pow()
-: <a class="el" href="rs__cl_8rsh.html#a9243de1d67fcc847a89f95748d664b19">rs_cl.rsh</a>
-</li>
-<li>pown()
-: <a class="el" href="rs__cl_8rsh.html#a67d1fe795e092003f687f3cc6d3c407a">rs_cl.rsh</a>
-</li>
-<li>powr()
-: <a class="el" href="rs__cl_8rsh.html#a316c30ba3e6bc11673bfd34bb4746d24">rs_cl.rsh</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_r"></a>- r -</h3><ul>
-<li>radians()
-: <a class="el" href="rs__cl_8rsh.html#aceb63a0da6393b8ac2ed229bae6232d6">rs_cl.rsh</a>
-</li>
-<li>remainder()
-: <a class="el" href="rs__cl_8rsh.html#a5188ac0e3af95b0956c6abeafb74fda9">rs_cl.rsh</a>
-</li>
-<li>rint()
-: <a class="el" href="rs__cl_8rsh.html#adb0ffe344ae56ca7fc9083c1f2943e55">rs_cl.rsh</a>
-</li>
-<li>rootn()
-: <a class="el" href="rs__cl_8rsh.html#a2776b517528b8185a6bb50753af0f6cf">rs_cl.rsh</a>
-</li>
-<li>round()
-: <a class="el" href="rs__cl_8rsh.html#aff4846ab5b947550814d5414a2c3626f">rs_cl.rsh</a>
-</li>
-<li>rsAllocationCopy1DRange()
-: <a class="el" href="rs__allocation_8rsh.html#a3a1098a3ea3a5106955dd4398b8904e1">rs_allocation.rsh</a>
-</li>
-<li>rsAllocationCopy2DRange()
-: <a class="el" href="rs__allocation_8rsh.html#a7f7e2369b3ed7d7db31729b6db7ba07e">rs_allocation.rsh</a>
-</li>
-<li>rsAllocationGetDimFaces()
-: <a class="el" href="rs__allocation_8rsh.html#ac85f7ed88f38b35482c6d63b56d470fe">rs_allocation.rsh</a>
-</li>
-<li>rsAllocationGetDimLOD()
-: <a class="el" href="rs__allocation_8rsh.html#ac42a07c079d6b3c6bb21975170d4e11c">rs_allocation.rsh</a>
-</li>
-<li>rsAllocationGetDimX()
-: <a class="el" href="rs__allocation_8rsh.html#a3ca7f505a97d5b7f477bc65b9e77dafb">rs_allocation.rsh</a>
-</li>
-<li>rsAllocationGetDimY()
-: <a class="el" href="rs__allocation_8rsh.html#ac889b866b465580eb313e5d2a9fcac3d">rs_allocation.rsh</a>
-</li>
-<li>rsAllocationGetDimZ()
-: <a class="el" href="rs__allocation_8rsh.html#acd6f1a2b2443e6ea39e6154577645d2c">rs_allocation.rsh</a>
-</li>
-<li>rsAllocationGetElement()
-: <a class="el" href="rs__allocation_8rsh.html#a6a3b6512bc269f6b369bdc54d12a45ff">rs_allocation.rsh</a>
-</li>
-<li>rsAllocationIoReceive()
-: <a class="el" href="rs__allocation_8rsh.html#a05f7391230a92d239fdb619d791162b5">rs_allocation.rsh</a>
-</li>
-<li>rsAllocationIoSend()
-: <a class="el" href="rs__allocation_8rsh.html#afe9ebb2f89c6366c59f5e05ee4849c0a">rs_allocation.rsh</a>
-</li>
-<li>rsAtomicAdd()
-: <a class="el" href="rs__atomic_8rsh.html#ab46665eff81030200f86db9c2181072a">rs_atomic.rsh</a>
-</li>
-<li>rsAtomicAnd()
-: <a class="el" href="rs__atomic_8rsh.html#a7fdf5633662dd5b0898ad5a149e3c8ad">rs_atomic.rsh</a>
-</li>
-<li>rsAtomicCas()
-: <a class="el" href="rs__atomic_8rsh.html#a205d66a8eb29eee8968f886e488b4402">rs_atomic.rsh</a>
-</li>
-<li>rsAtomicDec()
-: <a class="el" href="rs__atomic_8rsh.html#a16a69784a343d7c11bf6bd7fec9686ca">rs_atomic.rsh</a>
-</li>
-<li>rsAtomicInc()
-: <a class="el" href="rs__atomic_8rsh.html#a619e7a489500a650569a76ccd93e105f">rs_atomic.rsh</a>
-</li>
-<li>rsAtomicMax()
-: <a class="el" href="rs__atomic_8rsh.html#a1d49d69d14956152fcde34efe9cdff87">rs_atomic.rsh</a>
-</li>
-<li>rsAtomicMin()
-: <a class="el" href="rs__atomic_8rsh.html#a9f3cddc86f1075ca194a762fb8a3330a">rs_atomic.rsh</a>
-</li>
-<li>rsAtomicOr()
-: <a class="el" href="rs__atomic_8rsh.html#a477f6eb17c4806bb715bfd975b6369cd">rs_atomic.rsh</a>
-</li>
-<li>rsAtomicSub()
-: <a class="el" href="rs__atomic_8rsh.html#a800dced6abbf09716391f35bc488900b">rs_atomic.rsh</a>
-</li>
-<li>rsAtomicXor()
-: <a class="el" href="rs__atomic_8rsh.html#a5590505ea65c53b3bb26fa48a6b9c313">rs_atomic.rsh</a>
-</li>
-<li>rsClamp()
-: <a class="el" href="rs__math_8rsh.html#a5de277f7518a61646c3d74f3a0b9e893">rs_math.rsh</a>
-</li>
-<li>rsClearObject()
-: <a class="el" href="rs__object_8rsh.html#aab5f47dc11b9044b3d02c4ed818fe6e7">rs_object.rsh</a>
-</li>
-<li>rsDebug()
-: <a class="el" href="rs__debug_8rsh.html#aa75aa9faf7646ceeafeb19279416e9e8">rs_debug.rsh</a>
-</li>
-<li>rsElementGetBytesSize()
-: <a class="el" href="rs__element_8rsh.html#ac54592168af5896d3fba5283af286f98">rs_element.rsh</a>
-</li>
-<li>rsElementGetDataKind()
-: <a class="el" href="rs__element_8rsh.html#af072702a530e158093d69353072da5f9">rs_element.rsh</a>
-</li>
-<li>rsElementGetDataType()
-: <a class="el" href="rs__element_8rsh.html#a9a3569d242be363517ea2354d98cf382">rs_element.rsh</a>
-</li>
-<li>rsElementGetSubElement()
-: <a class="el" href="rs__element_8rsh.html#a8c690bce7d32be759fd787740c270c92">rs_element.rsh</a>
-</li>
-<li>rsElementGetSubElementArraySize()
-: <a class="el" href="rs__element_8rsh.html#a9c3140c18139db451279d9b221808eee">rs_element.rsh</a>
-</li>
-<li>rsElementGetSubElementCount()
-: <a class="el" href="rs__element_8rsh.html#a2ecab064ea2b720bc3af27b523388f31">rs_element.rsh</a>
-</li>
-<li>rsElementGetSubElementName()
-: <a class="el" href="rs__element_8rsh.html#a3c1446166c43aa6ba3d5359f6c982f02">rs_element.rsh</a>
-</li>
-<li>rsElementGetSubElementNameLength()
-: <a class="el" href="rs__element_8rsh.html#a94834eb1d91b50a5df3cbe161c22e37d">rs_element.rsh</a>
-</li>
-<li>rsElementGetSubElementOffsetBytes()
-: <a class="el" href="rs__element_8rsh.html#a840d53f1e91bb6887b40a4d8983c53ed">rs_element.rsh</a>
-</li>
-<li>rsElementGetVectorSize()
-: <a class="el" href="rs__element_8rsh.html#a727997de25ae43c07dffcfd484928d53">rs_element.rsh</a>
-</li>
-<li>rsExtractFrustumPlanes()
-: <a class="el" href="rs__math_8rsh.html#a191f9c687c56322c18b7d71491602122">rs_math.rsh</a>
-</li>
-<li>rsForEach()
-: <a class="el" href="rs__core_8rsh.html#a64271d266928b06ebd82ec90b756eb23">rs_core.rsh</a>
-</li>
-<li>rsFrac()
-: <a class="el" href="rs__math_8rsh.html#ac4f127e78da0849321c7f6db14f9e989">rs_math.rsh</a>
-</li>
-<li>rsGetAllocation()
-: <a class="el" href="rs__allocation_8rsh.html#aadad7654929c451be299df125061c9ba">rs_allocation.rsh</a>
-</li>
-<li>rsGetDt()
-: <a class="el" href="rs__time_8rsh.html#adea2682186fd903752431ad848bd8bf4">rs_time.rsh</a>
-</li>
-<li>rsGetElementAt()
-: <a class="el" href="rs__allocation_8rsh.html#a56157b6ddef754b36833ca1f8e66aec2">rs_allocation.rsh</a>
-</li>
-<li>rsGetElementAtYuv_uchar_U()
-: <a class="el" href="rs__allocation_8rsh.html#a41f61be02113ee22c039ea51fdedb20e">rs_allocation.rsh</a>
-</li>
-<li>rsGetElementAtYuv_uchar_V()
-: <a class="el" href="rs__allocation_8rsh.html#af03cadb582fa80bbf7f39177d96df17e">rs_allocation.rsh</a>
-</li>
-<li>rsGetElementAtYuv_uchar_Y()
-: <a class="el" href="rs__allocation_8rsh.html#ad7ffa1aa16511a75b4bc2c05bd0e0a75">rs_allocation.rsh</a>
-</li>
-<li>rsgMeshGetIndexAllocation()
-: <a class="el" href="rs__mesh_8rsh.html#a05257c9252e7804397d6a6f7549bae5a">rs_mesh.rsh</a>
-</li>
-<li>rsgMeshGetPrimitive()
-: <a class="el" href="rs__mesh_8rsh.html#af467f1c21cc9221071334f8234c29466">rs_mesh.rsh</a>
-</li>
-<li>rsgMeshGetPrimitiveCount()
-: <a class="el" href="rs__mesh_8rsh.html#ae0a0178cc02508517013486be4500d7f">rs_mesh.rsh</a>
-</li>
-<li>rsgMeshGetVertexAllocation()
-: <a class="el" href="rs__mesh_8rsh.html#a43e1d84147176cb0a1659552fa8da49f">rs_mesh.rsh</a>
-</li>
-<li>rsgMeshGetVertexAllocationCount()
-: <a class="el" href="rs__mesh_8rsh.html#a7578d6d93154ac881715ab511449fab9">rs_mesh.rsh</a>
-</li>
-<li>rsgProgramRasterGetCullMode()
-: <a class="el" href="rs__program_8rsh.html#a633d6dbdec98ef89c2b70c92ea707502">rs_program.rsh</a>
-</li>
-<li>rsgProgramRasterIsPointSpriteEnabled()
-: <a class="el" href="rs__program_8rsh.html#a86aeccd846ed2cd2c9498ab57e2535f3">rs_program.rsh</a>
-</li>
-<li>rsgProgramStoreGetBlendDstFunc()
-: <a class="el" href="rs__program_8rsh.html#a0ad38d595e35712f24c384ef20b69025">rs_program.rsh</a>
-</li>
-<li>rsgProgramStoreGetBlendSrcFunc()
-: <a class="el" href="rs__program_8rsh.html#afb38256c5804cdb9b410419c43ce03ab">rs_program.rsh</a>
-</li>
-<li>rsgProgramStoreGetDepthFunc()
-: <a class="el" href="rs__program_8rsh.html#a6a9c06c54d230f61edc0667a091aac77">rs_program.rsh</a>
-</li>
-<li>rsgProgramStoreIsColorMaskAlphaEnabled()
-: <a class="el" href="rs__program_8rsh.html#ab038edb7399044a3ea96ebb17d7b6601">rs_program.rsh</a>
-</li>
-<li>rsgProgramStoreIsColorMaskBlueEnabled()
-: <a class="el" href="rs__program_8rsh.html#a279ad1b4611aca268053337f6719a22c">rs_program.rsh</a>
-</li>
-<li>rsgProgramStoreIsColorMaskGreenEnabled()
-: <a class="el" href="rs__program_8rsh.html#a1a57f706bc42ce49b545021c8403964c">rs_program.rsh</a>
-</li>
-<li>rsgProgramStoreIsColorMaskRedEnabled()
-: <a class="el" href="rs__program_8rsh.html#a4a50df1d2495567536dd6f394d38ee5d">rs_program.rsh</a>
-</li>
-<li>rsgProgramStoreIsDepthMaskEnabled()
-: <a class="el" href="rs__program_8rsh.html#afa27fa6103c9e29f5e098e2d99663f0b">rs_program.rsh</a>
-</li>
-<li>rsgProgramStoreIsDitherEnabled()
-: <a class="el" href="rs__program_8rsh.html#abe7c55547a72dd291e0996de050bb749">rs_program.rsh</a>
-</li>
-<li>rsIsObject()
-: <a class="el" href="rs__object_8rsh.html#a547cd0a8071d895139893f1e10f5c3fd">rs_object.rsh</a>
-</li>
-<li>rsIsSphereInFrustum()
-: <a class="el" href="rs__math_8rsh.html#a7bbeaf44838e08e68d5cf3e3d7b0818c">rs_math.rsh</a>
-</li>
-<li>rsLocaltime()
-: <a class="el" href="rs__time_8rsh.html#a08a8fcadae964f7416aef487da624110">rs_time.rsh</a>
-</li>
-<li>rsMatrixGet()
-: <a class="el" href="rs__matrix_8rsh.html#ad485084684991796cffdd8a008557569">rs_matrix.rsh</a>
-</li>
-<li>rsMatrixInverse()
-: <a class="el" href="rs__matrix_8rsh.html#a00b6a334ba5ac94d84850f22ec9f4de5">rs_matrix.rsh</a>
-</li>
-<li>rsMatrixInverseTranspose()
-: <a class="el" href="rs__matrix_8rsh.html#ac05080d52da2d99a759ef34fa0655e82">rs_matrix.rsh</a>
-</li>
-<li>rsMatrixLoad()
-: <a class="el" href="rs__matrix_8rsh.html#a5f3697805c794c9c9f2f8cfdde4b9a44">rs_matrix.rsh</a>
-</li>
-<li>rsMatrixLoadFrustum()
-: <a class="el" href="rs__matrix_8rsh.html#ad25760aaf01e95d0055237afab41bbb3">rs_matrix.rsh</a>
-</li>
-<li>rsMatrixLoadIdentity()
-: <a class="el" href="rs__matrix_8rsh.html#a0ffd9de971cf10d0a663ff565be8d3cc">rs_matrix.rsh</a>
-</li>
-<li>rsMatrixLoadMultiply()
-: <a class="el" href="rs__matrix_8rsh.html#a79f14c4c0f5ecc1bbd0bf54da8b653ef">rs_matrix.rsh</a>
-</li>
-<li>rsMatrixLoadOrtho()
-: <a class="el" href="rs__matrix_8rsh.html#a4c59884a0e534dbbcdc5655842732d43">rs_matrix.rsh</a>
-</li>
-<li>rsMatrixLoadPerspective()
-: <a class="el" href="rs__matrix_8rsh.html#aa404c34d7478f2921f7415d2da95d02b">rs_matrix.rsh</a>
-</li>
-<li>rsMatrixLoadRotate()
-: <a class="el" href="rs__matrix_8rsh.html#a268032f3ac6d766b1d7fe72a6cb50464">rs_matrix.rsh</a>
-</li>
-<li>rsMatrixLoadScale()
-: <a class="el" href="rs__matrix_8rsh.html#acaf51d1f9ad5041ce01fbf8b7c5923fd">rs_matrix.rsh</a>
-</li>
-<li>rsMatrixLoadTranslate()
-: <a class="el" href="rs__matrix_8rsh.html#a1b521c8a3d1260fa732cbf0a71af0e74">rs_matrix.rsh</a>
-</li>
-<li>rsMatrixMultiply()
-: <a class="el" href="rs__matrix_8rsh.html#ab1973ad3efa0ab2d53f466dd9fb190bb">rs_matrix.rsh</a>
-</li>
-<li>rsMatrixRotate()
-: <a class="el" href="rs__matrix_8rsh.html#ad5ed05ca4880397fb29615e3c6798de1">rs_matrix.rsh</a>
-</li>
-<li>rsMatrixScale()
-: <a class="el" href="rs__matrix_8rsh.html#a94cc6b22bd1a6c07a9a1c1d21afb392c">rs_matrix.rsh</a>
-</li>
-<li>rsMatrixSet()
-: <a class="el" href="rs__matrix_8rsh.html#ad6ea242218e0f1a031f754df0317e6e7">rs_matrix.rsh</a>
-</li>
-<li>rsMatrixTranslate()
-: <a class="el" href="rs__matrix_8rsh.html#a4df5f9b5bb6044f3c3426f2f58b94405">rs_matrix.rsh</a>
-</li>
-<li>rsMatrixTranspose()
-: <a class="el" href="rs__matrix_8rsh.html#a49164dd4d4e85b212196028b1fd89dc1">rs_matrix.rsh</a>
-</li>
-<li>rsPackColorTo8888()
-: <a class="el" href="rs__math_8rsh.html#a1f1107cf778cf1f614edfb5b8ac436a0">rs_math.rsh</a>
-</li>
-<li>rsqrt()
-: <a class="el" href="rs__cl_8rsh.html#a8a3992b97cb199b1c8d598996b600988">rs_cl.rsh</a>
-</li>
-<li>rsQuaternionAdd()
-: <a class="el" href="rs__quaternion_8rsh.html#a5e6e493b9917336b0d9118fdd4e91444">rs_quaternion.rsh</a>
-</li>
-<li>rsQuaternionConjugate()
-: <a class="el" href="rs__quaternion_8rsh.html#acd670264e49743d35f38028b8e2a8800">rs_quaternion.rsh</a>
-</li>
-<li>rsQuaternionDot()
-: <a class="el" href="rs__quaternion_8rsh.html#aa810f8857439564e7b3be771f47b40ca">rs_quaternion.rsh</a>
-</li>
-<li>rsQuaternionGetMatrixUnit()
-: <a class="el" href="rs__quaternion_8rsh.html#a7726c524868c49892976fec53ea0693b">rs_quaternion.rsh</a>
-</li>
-<li>rsQuaternionLoadRotate()
-: <a class="el" href="rs__quaternion_8rsh.html#adf4423c521e34f3cf29d5dd5b5a93de0">rs_quaternion.rsh</a>
-</li>
-<li>rsQuaternionLoadRotateUnit()
-: <a class="el" href="rs__quaternion_8rsh.html#aa72a43cf3d7b5924de1ddfaa5766db09">rs_quaternion.rsh</a>
-</li>
-<li>rsQuaternionMultiply()
-: <a class="el" href="rs__quaternion_8rsh.html#a8bbbb286a2e2cb71b416c053f44844c3">rs_quaternion.rsh</a>
-</li>
-<li>rsQuaternionNormalize()
-: <a class="el" href="rs__quaternion_8rsh.html#abb31aad2416044ad5bbf44ee7c838e2a">rs_quaternion.rsh</a>
-</li>
-<li>rsQuaternionSet()
-: <a class="el" href="rs__quaternion_8rsh.html#a5ff868dbc33e710a666a102fdcc6670a">rs_quaternion.rsh</a>
-</li>
-<li>rsQuaternionSlerp()
-: <a class="el" href="rs__quaternion_8rsh.html#a7da94a30e287cbb8148771a5cd768dbd">rs_quaternion.rsh</a>
-</li>
-<li>rsRand()
-: <a class="el" href="rs__math_8rsh.html#a03e898d810ac44158e7461b2b2b1c356">rs_math.rsh</a>
-</li>
-<li>rsSample()
-: <a class="el" href="rs__allocation_8rsh.html#a1ed04c0bfab4044b875bb31577b53407">rs_allocation.rsh</a>
-</li>
-<li>rsSamplerGetAnisotropy()
-: <a class="el" href="rs__sampler_8rsh.html#ab1e79984609469604cba8e2b76a98844">rs_sampler.rsh</a>
-</li>
-<li>rsSamplerGetMagnification()
-: <a class="el" href="rs__sampler_8rsh.html#a5bddb73826cd20a79c31f012a4637e83">rs_sampler.rsh</a>
-</li>
-<li>rsSamplerGetMinification()
-: <a class="el" href="rs__sampler_8rsh.html#acb1bec2c3d1edd752dd60499c8db58a4">rs_sampler.rsh</a>
-</li>
-<li>rsSamplerGetWrapS()
-: <a class="el" href="rs__sampler_8rsh.html#a68a7ab6724019c6e72fae8eb45aa48dd">rs_sampler.rsh</a>
-</li>
-<li>rsSamplerGetWrapT()
-: <a class="el" href="rs__sampler_8rsh.html#ab6b25d3b9afa16f418e2dee78ebb4a75">rs_sampler.rsh</a>
-</li>
-<li>rsSendToClient()
-: <a class="el" href="rs__core_8rsh.html#a91cfbca99f87ef144bea2cdf1e8473ca">rs_core.rsh</a>
-</li>
-<li>rsSendToClientBlocking()
-: <a class="el" href="rs__core_8rsh.html#afc93b00be08f58512a6ab6a87feb9515">rs_core.rsh</a>
-</li>
-<li>rsSetElementAt()
-: <a class="el" href="rs__allocation_8rsh.html#a351627f335b9a091a5152db7ac9134dc">rs_allocation.rsh</a>
-</li>
-<li>rsSetObject()
-: <a class="el" href="rs__object_8rsh.html#af6983a1578621ce283acc07f876cda62">rs_object.rsh</a>
-</li>
-<li>rsTime()
-: <a class="el" href="rs__time_8rsh.html#a555f9324acb8c3d0c6f09a1d05478ce2">rs_time.rsh</a>
-</li>
-<li>rsUnpackColor8888()
-: <a class="el" href="rs__math_8rsh.html#a48bb0c2e7b1f2b62b2a8970c7d709eca">rs_math.rsh</a>
-</li>
-<li>rsUptimeMillis()
-: <a class="el" href="rs__time_8rsh.html#a3c406e51a769718dd1c760518b9cad44">rs_time.rsh</a>
-</li>
-<li>rsUptimeNanos()
-: <a class="el" href="rs__time_8rsh.html#a24e2cc12acf1e7fdd857d1a48981395d">rs_time.rsh</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_s"></a>- s -</h3><ul>
-<li>sign()
-: <a class="el" href="rs__cl_8rsh.html#a9fe423cc7d4c6d767f8a608d2ee76657">rs_cl.rsh</a>
-</li>
-<li>sin()
-: <a class="el" href="rs__cl_8rsh.html#a8c8cd526b44eb55aede77cf659f24306">rs_cl.rsh</a>
-</li>
-<li>sincos()
-: <a class="el" href="rs__cl_8rsh.html#a892c91a30bbc713aa77105d8e9e25881">rs_cl.rsh</a>
-</li>
-<li>sinh()
-: <a class="el" href="rs__cl_8rsh.html#ae686e0cc567f7ee2b0a84706aa486e4a">rs_cl.rsh</a>
-</li>
-<li>sinpi()
-: <a class="el" href="rs__cl_8rsh.html#a9ca027af0acf3ff22d91cd9489766976">rs_cl.rsh</a>
-</li>
-<li>sqrt()
-: <a class="el" href="rs__cl_8rsh.html#a92da0faef80c4d8f66e954c8c169a729">rs_cl.rsh</a>
-</li>
-<li>step()
-: <a class="el" href="rs__cl_8rsh.html#a9f40337dfee48d1881b87b35aa8133dd">rs_cl.rsh</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_t"></a>- t -</h3><ul>
-<li>tan()
-: <a class="el" href="rs__cl_8rsh.html#af12e245af8ff9bb72b5000e7c26cd8fe">rs_cl.rsh</a>
-</li>
-<li>tanh()
-: <a class="el" href="rs__cl_8rsh.html#abc36e89ddb87ea78451d1c5921ddbd8d">rs_cl.rsh</a>
-</li>
-<li>tanpi()
-: <a class="el" href="rs__cl_8rsh.html#aee96c8910a7d8b0082574813b6b68b9a">rs_cl.rsh</a>
-</li>
-<li>tgamma()
-: <a class="el" href="rs__cl_8rsh.html#ab9f4cbfd2470420ee302f28cf3de6dd0">rs_cl.rsh</a>
-</li>
-<li>trunc()
-: <a class="el" href="rs__cl_8rsh.html#ad1a7c65693231219db1babeae1c41f15">rs_cl.rsh</a>
-</li>
-</ul>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/globals_type.html b/docs/html/reference/renderscript/globals_type.html
deleted file mode 100644
index 1d1ffd7..0000000
--- a/docs/html/reference/renderscript/globals_type.html
+++ /dev/null
@@ -1,224 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>Members</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
- <div id="navrow1" class="tabs">
- <ul class="tablist">
- <li><a href="index.html"><span>Overview</span></a></li>
- <li class="current"><a href="globals.html"><span>Globals</span></a></li>
- <li><a href="annotated.html"><span>Structs</span></a></li>
- </ul>
- </div>
- <div id="navrow3" class="tabs2">
- <ul class="tablist">
- <li><a href="globals.html"><span>All</span></a></li>
- <li><a href="globals_func.html"><span>Functions</span></a></li>
- <li class="current"><a href="globals_type.html"><span>Typedefs</span></a></li>
- <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
- <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
- </ul>
- </div>
- <div id="navrow4" class="tabs3">
- <ul class="tablist">
- <li><a href="#index_c"><span>c</span></a></li>
- <li><a href="#index_d"><span>d</span></a></li>
- <li><a href="#index_f"><span>f</span></a></li>
- <li><a href="#index_i"><span>i</span></a></li>
- <li><a href="#index_l"><span>l</span></a></li>
- <li><a href="#index_r"><span>r</span></a></li>
- <li><a href="#index_s"><span>s</span></a></li>
- <li><a href="#index_u"><span>u</span></a></li>
- </ul>
- </div>
-</div>
-<div class="contents">
- 
-
-<h3><a class="anchor" id="index_c"></a>- c -</h3><ul>
-<li>char2
-: <a class="el" href="rs__types_8rsh.html#ac532b4c1895c8bd4fb75dc370c484351">rs_types.rsh</a>
-</li>
-<li>char3
-: <a class="el" href="rs__types_8rsh.html#a4617fb31f4c03402515efee0a9b56210">rs_types.rsh</a>
-</li>
-<li>char4
-: <a class="el" href="rs__types_8rsh.html#aecb498648daac97c7cc5f31c242dfa03">rs_types.rsh</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_d"></a>- d -</h3><ul>
-<li>double2
-: <a class="el" href="rs__types_8rsh.html#a75ef868cedebc2a6eeb1bc6ca6ca49c3">rs_types.rsh</a>
-</li>
-<li>double3
-: <a class="el" href="rs__types_8rsh.html#aa3c90d5a23d674185a13e95402eda7eb">rs_types.rsh</a>
-</li>
-<li>double4
-: <a class="el" href="rs__types_8rsh.html#a60f4b04e076f0dd0ecc99c365fc4ca21">rs_types.rsh</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_f"></a>- f -</h3><ul>
-<li>float2
-: <a class="el" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">rs_types.rsh</a>
-</li>
-<li>float3
-: <a class="el" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">rs_types.rsh</a>
-</li>
-<li>float4
-: <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">rs_types.rsh</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_i"></a>- i -</h3><ul>
-<li>int16_t
-: <a class="el" href="rs__types_8rsh.html#aa343fa3b3d06292b959ffdd4c4703b06">rs_types.rsh</a>
-</li>
-<li>int2
-: <a class="el" href="rs__types_8rsh.html#a6bc1fa1354fe2145b8f12b4bbfafcf4c">rs_types.rsh</a>
-</li>
-<li>int3
-: <a class="el" href="rs__types_8rsh.html#ad5512266b63fd06dcf450f6c9d5326c8">rs_types.rsh</a>
-</li>
-<li>int32_t
-: <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">rs_types.rsh</a>
-</li>
-<li>int4
-: <a class="el" href="rs__types_8rsh.html#a897deab71f679999ed99d4153c797e70">rs_types.rsh</a>
-</li>
-<li>int64_t
-: <a class="el" href="rs__types_8rsh.html#a996e72f71b11a5bb8b3b7b6936b1516d">rs_types.rsh</a>
-</li>
-<li>int8_t
-: <a class="el" href="rs__types_8rsh.html#ad566f6541e98b74246db1a3a3a85ad49">rs_types.rsh</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_l"></a>- l -</h3><ul>
-<li>long2
-: <a class="el" href="rs__types_8rsh.html#afd55d62cee0785034b73375acd0df9da">rs_types.rsh</a>
-</li>
-<li>long3
-: <a class="el" href="rs__types_8rsh.html#ad9cedbf4050fad14138d1dcb3428ec18">rs_types.rsh</a>
-</li>
-<li>long4
-: <a class="el" href="rs__types_8rsh.html#ae177e4918f36e5c9da36d524cdb7a2e7">rs_types.rsh</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_r"></a>- r -</h3><ul>
-<li>rs_quaternion
-: <a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_types.rsh</a>
-</li>
-<li>rs_script_call_t
-: <a class="el" href="rs__core_8rsh.html#ae8756b32e23445f287960b9d0ffb449c">rs_core.rsh</a>
-</li>
-<li>rs_time_t
-: <a class="el" href="rs__time_8rsh.html#ad2b4759a0a6a98bd79b7ad82a4b057d6">rs_time.rsh</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_s"></a>- s -</h3><ul>
-<li>short2
-: <a class="el" href="rs__types_8rsh.html#a303d3ad18aaeacfcfeda2b8580b98796">rs_types.rsh</a>
-</li>
-<li>short3
-: <a class="el" href="rs__types_8rsh.html#a3f4967691ae2b249511b5f3dd9e18793">rs_types.rsh</a>
-</li>
-<li>short4
-: <a class="el" href="rs__types_8rsh.html#a198219da0b1d51c8d7f8f12aad7e502d">rs_types.rsh</a>
-</li>
-<li>size_t
-: <a class="el" href="rs__types_8rsh.html#a29d85914ddff32967d85ada69854206d">rs_types.rsh</a>
-</li>
-<li>ssize_t
-: <a class="el" href="rs__types_8rsh.html#a170745d0d946e79c4c2a056d1d158996">rs_types.rsh</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_u"></a>- u -</h3><ul>
-<li>uchar
-: <a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">rs_types.rsh</a>
-</li>
-<li>uchar2
-: <a class="el" href="rs__types_8rsh.html#aff5eb7cd53a34bb01924bf64485296de">rs_types.rsh</a>
-</li>
-<li>uchar3
-: <a class="el" href="rs__types_8rsh.html#a247b5eacf2b662849668cbc33120343f">rs_types.rsh</a>
-</li>
-<li>uchar4
-: <a class="el" href="rs__types_8rsh.html#ae6ed52a87d4ff920c303b13b00f7396d">rs_types.rsh</a>
-</li>
-<li>uint
-: <a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">rs_types.rsh</a>
-</li>
-<li>uint16_t
-: <a class="el" href="rs__types_8rsh.html#a273cf69d639a59973b6019625df33e30">rs_types.rsh</a>
-</li>
-<li>uint2
-: <a class="el" href="rs__types_8rsh.html#aaf90cd1f01a121e824fc6e1b927e7683">rs_types.rsh</a>
-</li>
-<li>uint3
-: <a class="el" href="rs__types_8rsh.html#ae80e36ac834c891aa76b09a220344e78">rs_types.rsh</a>
-</li>
-<li>uint32_t
-: <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">rs_types.rsh</a>
-</li>
-<li>uint4
-: <a class="el" href="rs__types_8rsh.html#ad92f0ec6c2cdc1f11a6d7fe321047462">rs_types.rsh</a>
-</li>
-<li>uint64_t
-: <a class="el" href="rs__types_8rsh.html#aaa5d1cd013383c889537491c3cfd9aad">rs_types.rsh</a>
-</li>
-<li>uint8_t
-: <a class="el" href="rs__types_8rsh.html#aba7bc1797add20fe3efdf37ced1182c5">rs_types.rsh</a>
-</li>
-<li>ulong
-: <a class="el" href="rs__types_8rsh.html#ab46637ef82283186e57f54756fe67203">rs_types.rsh</a>
-</li>
-<li>ulong2
-: <a class="el" href="rs__types_8rsh.html#a56988b12ab16acf753356f7a5c70565a">rs_types.rsh</a>
-</li>
-<li>ulong3
-: <a class="el" href="rs__types_8rsh.html#ac623a569c28935fbedd3a8ed27ae0696">rs_types.rsh</a>
-</li>
-<li>ulong4
-: <a class="el" href="rs__types_8rsh.html#a3029c54b8e1779a1ddbdfe875432d137">rs_types.rsh</a>
-</li>
-<li>ushort
-: <a class="el" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">rs_types.rsh</a>
-</li>
-<li>ushort2
-: <a class="el" href="rs__types_8rsh.html#a24a9d78cfc32475e2c6eb1cdec239bf2">rs_types.rsh</a>
-</li>
-<li>ushort3
-: <a class="el" href="rs__types_8rsh.html#ab78391445785d2ca0276392a9c97fcba">rs_types.rsh</a>
-</li>
-<li>ushort4
-: <a class="el" href="rs__types_8rsh.html#a77a09fa01d7fc721bbc44c32aac2d487">rs_types.rsh</a>
-</li>
-</ul>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/index.html b/docs/html/reference/renderscript/index.html
deleted file mode 100644
index 2e3a449..0000000
--- a/docs/html/reference/renderscript/index.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>Main Page</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
- <div id="navrow1" class="tabs">
- <ul class="tablist">
- <li class="current"><a href="index.html"><span>Overview</span></a></li>
- <li><a href="globals.html"><span>Globals</span></a></li>
- <li><a href="annotated.html"><span>Structs</span></a></li>
- </ul>
- </div>
-</div>
-<div class="contents">
-<div class="textblock"><p>RenderScript is a high-performance runtime that provides compute operations at the native level. RenderScript code is compiled on devices at runtime to allow platform-independence as well. This reference documentation describes the RenderScript runtime APIs, which you can utilize to write RenderScript code in C99. The RenderScript compute header files are automatically included for you.</p>
-<p>To use RenderScript, you need to utilize the RenderScript runtime APIs documented here as well as the Android framework APIs for RenderScript. For documentation on the Android framework APIs, see the <a href="http://developer.android.com/reference/android/renderscript/package-summary.html" target="_parent">android.renderscript</a> package reference. For more information on how to develop with RenderScript and how the runtime and Android framework APIs interact, see the <a href="http://developer.android.com/guide/topics/renderscript/index.html" target="_parent">RenderScript developer guide</a> and the <a href="http://developer.android.com/resources/samples/RenderScript/index.html" target="_parent">RenderScript samples</a>. </p>
-</div></div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/rs__allocation_8rsh.html b/docs/html/reference/renderscript/rs__allocation_8rsh.html
deleted file mode 100644
index 31736a6..0000000
--- a/docs/html/reference/renderscript/rs__allocation_8rsh.html
+++ /dev/null
@@ -1,818 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_allocation.rsh File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
- <div id="navrow1" class="tabs">
- <ul class="tablist">
- <li><a href="index.html"><span>Overview</span></a></li>
- <li class="current"><a href="globals.html"><span>Globals</span></a></li>
- <li><a href="annotated.html"><span>Structs</span></a></li>
- </ul>
- </div>
-</div>
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle">
-<div class="title">/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_allocation.rsh File Reference</div> </div>
-</div>
-<div class="contents">
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="structrs__allocation.html">rs_allocation</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__allocation_8rsh.html#aadad7654929c451be299df125061c9ba">rsGetAllocation</a> (const void *)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__allocation_8rsh.html#a3ca7f505a97d5b7f477bc65b9e77dafb">rsAllocationGetDimX</a> (<a class="el" href="structrs__allocation.html">rs_allocation</a>)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__allocation_8rsh.html#ac889b866b465580eb313e5d2a9fcac3d">rsAllocationGetDimY</a> (<a class="el" href="structrs__allocation.html">rs_allocation</a>)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__allocation_8rsh.html#acd6f1a2b2443e6ea39e6154577645d2c">rsAllocationGetDimZ</a> (<a class="el" href="structrs__allocation.html">rs_allocation</a>)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__allocation_8rsh.html#ac42a07c079d6b3c6bb21975170d4e11c">rsAllocationGetDimLOD</a> (<a class="el" href="structrs__allocation.html">rs_allocation</a>)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__allocation_8rsh.html#ac85f7ed88f38b35482c6d63b56d470fe">rsAllocationGetDimFaces</a> (<a class="el" href="structrs__allocation.html">rs_allocation</a>)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__allocation_8rsh.html#a3a1098a3ea3a5106955dd4398b8904e1">rsAllocationCopy1DRange</a> (<a class="el" href="structrs__allocation.html">rs_allocation</a> dstAlloc, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> dstOff, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> dstMip, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> count, <a class="el" href="structrs__allocation.html">rs_allocation</a> srcAlloc, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> srcOff, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> srcMip)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__allocation_8rsh.html#a7f7e2369b3ed7d7db31729b6db7ba07e">rsAllocationCopy2DRange</a> (<a class="el" href="structrs__allocation.html">rs_allocation</a> dstAlloc, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> dstXoff, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> dstYoff, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> dstMip, <a class="el" href="rs__types_8rsh.html#acc6f9a94176656c73fd74f789cfa2229">rs_allocation_cubemap_face</a> dstFace, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> width, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> height, <a class="el" href="structrs__allocation.html">rs_allocation</a> srcAlloc, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> srcXoff, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> srcYoff, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> srcMip, <a class="el" href="rs__types_8rsh.html#acc6f9a94176656c73fd74f789cfa2229">rs_allocation_cubemap_face</a> srcFace)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">const void * </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__allocation_8rsh.html#a56157b6ddef754b36833ca1f8e66aec2">rsGetElementAt</a> (<a class="el" href="structrs__allocation.html">rs_allocation</a> a, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> x)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">const void * </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__allocation_8rsh.html#aea4f2338fb36faf73021ff7179fa5930">rsGetElementAt</a> (<a class="el" href="structrs__allocation.html">rs_allocation</a> a, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> x, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> y)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">const void * </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__allocation_8rsh.html#a4256e51301797517cafd5474d7d4b26f">rsGetElementAt</a> (<a class="el" href="structrs__allocation.html">rs_allocation</a> a, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> x, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> y, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> z)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">const void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__allocation_8rsh.html#afe9ebb2f89c6366c59f5e05ee4849c0a">rsAllocationIoSend</a> (<a class="el" href="structrs__allocation.html">rs_allocation</a> a)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">const void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__allocation_8rsh.html#a05f7391230a92d239fdb619d791162b5">rsAllocationIoReceive</a> (<a class="el" href="structrs__allocation.html">rs_allocation</a> a)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="structrs__element.html">rs_element</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__allocation_8rsh.html#a6a3b6512bc269f6b369bdc54d12a45ff">rsAllocationGetElement</a> (<a class="el" href="structrs__allocation.html">rs_allocation</a> a)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">const <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__allocation_8rsh.html#a1ed04c0bfab4044b875bb31577b53407">rsSample</a> (<a class="el" href="structrs__allocation.html">rs_allocation</a> a, <a class="el" href="structrs__sampler.html">rs_sampler</a> s, float location)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">const <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__allocation_8rsh.html#aa9574fd5f1655f6e74b4872aace618bf">rsSample</a> (<a class="el" href="structrs__allocation.html">rs_allocation</a> a, <a class="el" href="structrs__sampler.html">rs_sampler</a> s, float location, float lod)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__allocation_8rsh.html#a36ef1e609e360a9a5a5ff5dce13b5100">rsSetElementAt</a> (<a class="el" href="structrs__allocation.html">rs_allocation</a> a, void *ptr, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> x)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__allocation_8rsh.html#a351627f335b9a091a5152db7ac9134dc">rsSetElementAt</a> (<a class="el" href="structrs__allocation.html">rs_allocation</a> a, void *ptr, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> x, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> y)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">const <a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__allocation_8rsh.html#ad7ffa1aa16511a75b4bc2c05bd0e0a75">rsGetElementAtYuv_uchar_Y</a> (<a class="el" href="structrs__allocation.html">rs_allocation</a> a, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> x, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> y)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">const <a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__allocation_8rsh.html#a41f61be02113ee22c039ea51fdedb20e">rsGetElementAtYuv_uchar_U</a> (<a class="el" href="structrs__allocation.html">rs_allocation</a> a, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> x, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> y)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">const <a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__allocation_8rsh.html#af03cadb582fa80bbf7f39177d96df17e">rsGetElementAtYuv_uchar_V</a> (<a class="el" href="structrs__allocation.html">rs_allocation</a> a, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> x, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> y)</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Allocation routines. </p>
-
-<p>Definition in file <a class="el" href="rs__allocation_8rsh_source.html">rs_allocation.rsh</a>.</p>
-</div><hr/><h2>Function Documentation</h2>
-<a class="anchor" id="a3a1098a3ea3a5106955dd4398b8904e1"></a><!-- doxytag: member="rs_allocation.rsh::rsAllocationCopy1DRange" ref="a3a1098a3ea3a5106955dd4398b8904e1" args="(rs_allocation dstAlloc, uint32_t dstOff, uint32_t dstMip, uint32_t count, rs_allocation srcAlloc, uint32_t srcOff, uint32_t srcMip)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsAllocationCopy1DRange </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a> </td>
- <td class="paramname"><em>dstAlloc</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
- <td class="paramname"><em>dstOff</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
- <td class="paramname"><em>dstMip</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
- <td class="paramname"><em>count</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a> </td>
- <td class="paramname"><em>srcAlloc</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
- <td class="paramname"><em>srcOff</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
- <td class="paramname"><em>srcMip</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Copy part of an allocation from another allocation.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">dstAlloc</td><td>Allocation to copy data into. </td></tr>
- <tr><td class="paramname">dstOff</td><td>The offset of the first element to be copied in the destination allocation. </td></tr>
- <tr><td class="paramname">dstMip</td><td>Mip level in the destination allocation. </td></tr>
- <tr><td class="paramname">count</td><td>The number of elements to be copied. </td></tr>
- <tr><td class="paramname">srcAlloc</td><td>The source data allocation. </td></tr>
- <tr><td class="paramname">srcOff</td><td>The offset of the first element in data to be copied in the source allocation. </td></tr>
- <tr><td class="paramname">srcMip</td><td>Mip level in the source allocation. </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a7f7e2369b3ed7d7db31729b6db7ba07e"></a><!-- doxytag: member="rs_allocation.rsh::rsAllocationCopy2DRange" ref="a7f7e2369b3ed7d7db31729b6db7ba07e" args="(rs_allocation dstAlloc, uint32_t dstXoff, uint32_t dstYoff, uint32_t dstMip, rs_allocation_cubemap_face dstFace, uint32_t width, uint32_t height, rs_allocation srcAlloc, uint32_t srcXoff, uint32_t srcYoff, uint32_t srcMip, rs_allocation_cubemap_face srcFace)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsAllocationCopy2DRange </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a> </td>
- <td class="paramname"><em>dstAlloc</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
- <td class="paramname"><em>dstXoff</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
- <td class="paramname"><em>dstYoff</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
- <td class="paramname"><em>dstMip</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#acc6f9a94176656c73fd74f789cfa2229">rs_allocation_cubemap_face</a> </td>
- <td class="paramname"><em>dstFace</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
- <td class="paramname"><em>width</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
- <td class="paramname"><em>height</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a> </td>
- <td class="paramname"><em>srcAlloc</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
- <td class="paramname"><em>srcXoff</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
- <td class="paramname"><em>srcYoff</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
- <td class="paramname"><em>srcMip</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#acc6f9a94176656c73fd74f789cfa2229">rs_allocation_cubemap_face</a> </td>
- <td class="paramname"><em>srcFace</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Copy a rectangular region into the allocation from another allocation.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">dstAlloc</td><td>allocation to copy data into. </td></tr>
- <tr><td class="paramname">dstXoff</td><td>X offset of the region to update in the destination allocation. </td></tr>
- <tr><td class="paramname">dstYoff</td><td>Y offset of the region to update in the destination allocation. </td></tr>
- <tr><td class="paramname">dstMip</td><td>Mip level in the destination allocation. </td></tr>
- <tr><td class="paramname">dstFace</td><td>Cubemap face of the destination allocation, ignored for allocations that aren't cubemaps. </td></tr>
- <tr><td class="paramname">width</td><td>Width of the incoming region to update. </td></tr>
- <tr><td class="paramname">height</td><td>Height of the incoming region to update. </td></tr>
- <tr><td class="paramname">srcAlloc</td><td>The source data allocation. </td></tr>
- <tr><td class="paramname">srcXoff</td><td>X offset in data of the source allocation. </td></tr>
- <tr><td class="paramname">srcYoff</td><td>Y offset in data of the source allocation. </td></tr>
- <tr><td class="paramname">srcMip</td><td>Mip level in the source allocation. </td></tr>
- <tr><td class="paramname">srcFace</td><td>Cubemap face of the source allocation, ignored for allocations that aren't cubemaps. </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="ac85f7ed88f38b35482c6d63b56d470fe"></a><!-- doxytag: member="rs_allocation.rsh::rsAllocationGetDimFaces" ref="ac85f7ed88f38b35482c6d63b56d470fe" args="(rs_allocation)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> rsAllocationGetDimFaces </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a> </td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Query an allocation for the presence of more than one face.</p>
-<dl class="return"><dt><b>Returns:</b></dt><dd>uint32_t Returns 1 if more than one face is present, 0 otherwise. </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="ac42a07c079d6b3c6bb21975170d4e11c"></a><!-- doxytag: member="rs_allocation.rsh::rsAllocationGetDimLOD" ref="ac42a07c079d6b3c6bb21975170d4e11c" args="(rs_allocation)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> rsAllocationGetDimLOD </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a> </td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Query an allocation for the presence of more than one LOD.</p>
-<dl class="return"><dt><b>Returns:</b></dt><dd>uint32_t Returns 1 if more than one LOD is present, 0 otherwise. </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a3ca7f505a97d5b7f477bc65b9e77dafb"></a><!-- doxytag: member="rs_allocation.rsh::rsAllocationGetDimX" ref="a3ca7f505a97d5b7f477bc65b9e77dafb" args="(rs_allocation)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> rsAllocationGetDimX </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a> </td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Query the dimension of an allocation.</p>
-<dl class="return"><dt><b>Returns:</b></dt><dd>uint32_t The X dimension of the allocation. </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="ac889b866b465580eb313e5d2a9fcac3d"></a><!-- doxytag: member="rs_allocation.rsh::rsAllocationGetDimY" ref="ac889b866b465580eb313e5d2a9fcac3d" args="(rs_allocation)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> rsAllocationGetDimY </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a> </td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Query the dimension of an allocation.</p>
-<dl class="return"><dt><b>Returns:</b></dt><dd>uint32_t The Y dimension of the allocation. </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="acd6f1a2b2443e6ea39e6154577645d2c"></a><!-- doxytag: member="rs_allocation.rsh::rsAllocationGetDimZ" ref="acd6f1a2b2443e6ea39e6154577645d2c" args="(rs_allocation)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> rsAllocationGetDimZ </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a> </td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Query the dimension of an allocation.</p>
-<dl class="return"><dt><b>Returns:</b></dt><dd>uint32_t The Z dimension of the allocation. </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a6a3b6512bc269f6b369bdc54d12a45ff"></a><!-- doxytag: member="rs_allocation.rsh::rsAllocationGetElement" ref="a6a3b6512bc269f6b369bdc54d12a45ff" args="(rs_allocation a)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="structrs__element.html">rs_element</a> rsAllocationGetElement </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a> </td>
- <td class="paramname"><em>a</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Get the element object describing the allocation's layout </p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">a</td><td>allocation to get data from </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>element describing allocation layout </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a05f7391230a92d239fdb619d791162b5"></a><!-- doxytag: member="rs_allocation.rsh::rsAllocationIoReceive" ref="a05f7391230a92d239fdb619d791162b5" args="(rs_allocation a)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">const void rsAllocationIoReceive </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a> </td>
- <td class="paramname"><em>a</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Receive a new set of contents from the queue. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">a</td><td>allocation to work on </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="afe9ebb2f89c6366c59f5e05ee4849c0a"></a><!-- doxytag: member="rs_allocation.rsh::rsAllocationIoSend" ref="afe9ebb2f89c6366c59f5e05ee4849c0a" args="(rs_allocation a)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">const void rsAllocationIoSend </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a> </td>
- <td class="paramname"><em>a</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Send the contents of the Allocation to the queue. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">a</td><td>allocation to work on </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="aadad7654929c451be299df125061c9ba"></a><!-- doxytag: member="rs_allocation.rsh::rsGetAllocation" ref="aadad7654929c451be299df125061c9ba" args="(const void *)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="structrs__allocation.html">rs_allocation</a> rsGetAllocation </td>
- <td>(</td>
- <td class="paramtype">const void * </td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Returns the Allocation for a given pointer. The pointer should point within a valid allocation. The results are undefined if the pointer is not from a valid allocation.</p>
-<p>This function is deprecated and will be removed in the SDK from a future release. </p>
-
-</div>
-</div>
-<a class="anchor" id="a56157b6ddef754b36833ca1f8e66aec2"></a><!-- doxytag: member="rs_allocation.rsh::rsGetElementAt" ref="a56157b6ddef754b36833ca1f8e66aec2" args="(rs_allocation a, uint32_t x)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">const void* rsGetElementAt </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a> </td>
- <td class="paramname"><em>a</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
- <td class="paramname"><em>x</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Extract a single element from an allocation. </p>
-
-</div>
-</div>
-<a class="anchor" id="aea4f2338fb36faf73021ff7179fa5930"></a><!-- doxytag: member="rs_allocation.rsh::rsGetElementAt" ref="aea4f2338fb36faf73021ff7179fa5930" args="(rs_allocation a, uint32_t x, uint32_t y)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">const void* rsGetElementAt </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a> </td>
- <td class="paramname"><em>a</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
- <td class="paramname"><em>x</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
- <td class="paramname"><em>y</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a4256e51301797517cafd5474d7d4b26f"></a><!-- doxytag: member="rs_allocation.rsh::rsGetElementAt" ref="a4256e51301797517cafd5474d7d4b26f" args="(rs_allocation a, uint32_t x, uint32_t y, uint32_t z)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">const void* rsGetElementAt </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a> </td>
- <td class="paramname"><em>a</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
- <td class="paramname"><em>x</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
- <td class="paramname"><em>y</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
- <td class="paramname"><em>z</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a41f61be02113ee22c039ea51fdedb20e"></a><!-- doxytag: member="rs_allocation.rsh::rsGetElementAtYuv_uchar_U" ref="a41f61be02113ee22c039ea51fdedb20e" args="(rs_allocation a, uint32_t x, uint32_t y)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">const <a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> rsGetElementAtYuv_uchar_U </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a> </td>
- <td class="paramname"><em>a</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
- <td class="paramname"><em>x</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
- <td class="paramname"><em>y</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Extract a single element from an allocation.</p>
-<p>Coordinates are in the dimensions of the Y plane </p>
-
-</div>
-</div>
-<a class="anchor" id="af03cadb582fa80bbf7f39177d96df17e"></a><!-- doxytag: member="rs_allocation.rsh::rsGetElementAtYuv_uchar_V" ref="af03cadb582fa80bbf7f39177d96df17e" args="(rs_allocation a, uint32_t x, uint32_t y)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">const <a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> rsGetElementAtYuv_uchar_V </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a> </td>
- <td class="paramname"><em>a</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
- <td class="paramname"><em>x</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
- <td class="paramname"><em>y</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Extract a single element from an allocation.</p>
-<p>Coordinates are in the dimensions of the Y plane </p>
-
-</div>
-</div>
-<a class="anchor" id="ad7ffa1aa16511a75b4bc2c05bd0e0a75"></a><!-- doxytag: member="rs_allocation.rsh::rsGetElementAtYuv_uchar_Y" ref="ad7ffa1aa16511a75b4bc2c05bd0e0a75" args="(rs_allocation a, uint32_t x, uint32_t y)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">const <a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> rsGetElementAtYuv_uchar_Y </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a> </td>
- <td class="paramname"><em>a</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
- <td class="paramname"><em>x</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
- <td class="paramname"><em>y</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Extract a single element from an allocation. </p>
-
-</div>
-</div>
-<a class="anchor" id="a1ed04c0bfab4044b875bb31577b53407"></a><!-- doxytag: member="rs_allocation.rsh::rsSample" ref="a1ed04c0bfab4044b875bb31577b53407" args="(rs_allocation a, rs_sampler s, float location)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">const <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> rsSample </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a> </td>
- <td class="paramname"><em>a</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="structrs__sampler.html">rs_sampler</a> </td>
- <td class="paramname"><em>s</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>location</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Fetch allocation in a way described by the sampler </p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">a</td><td>1D allocation to sample from </td></tr>
- <tr><td class="paramname">s</td><td>sampler state </td></tr>
- <tr><td class="paramname">location</td><td>to sample from</td></tr>
- </table>
- </dd>
-</dl>
-<p>Fetch allocation in a way described by the sampler </p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">a</td><td>2D allocation to sample from </td></tr>
- <tr><td class="paramname">s</td><td>sampler state </td></tr>
- <tr><td class="paramname">location</td><td>to sample from </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="aa9574fd5f1655f6e74b4872aace618bf"></a><!-- doxytag: member="rs_allocation.rsh::rsSample" ref="aa9574fd5f1655f6e74b4872aace618bf" args="(rs_allocation a, rs_sampler s, float location, float lod)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">const <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> rsSample </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a> </td>
- <td class="paramname"><em>a</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="structrs__sampler.html">rs_sampler</a> </td>
- <td class="paramname"><em>s</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>location</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>lod</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Fetch allocation in a way described by the sampler </p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">a</td><td>1D allocation to sample from </td></tr>
- <tr><td class="paramname">s</td><td>sampler state </td></tr>
- <tr><td class="paramname">location</td><td>to sample from </td></tr>
- <tr><td class="paramname">lod</td><td>mip level to sample from, for fractional values mip levels will be interpolated if RS_SAMPLER_LINEAR_MIP_LINEAR is used</td></tr>
- </table>
- </dd>
-</dl>
-<p>Fetch allocation in a way described by the sampler </p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">a</td><td>2D allocation to sample from </td></tr>
- <tr><td class="paramname">s</td><td>sampler state </td></tr>
- <tr><td class="paramname">location</td><td>to sample from </td></tr>
- <tr><td class="paramname">lod</td><td>mip level to sample from, for fractional values mip levels will be interpolated if RS_SAMPLER_LINEAR_MIP_LINEAR is used </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a36ef1e609e360a9a5a5ff5dce13b5100"></a><!-- doxytag: member="rs_allocation.rsh::rsSetElementAt" ref="a36ef1e609e360a9a5a5ff5dce13b5100" args="(rs_allocation a, void *ptr, uint32_t x)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsSetElementAt </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a> </td>
- <td class="paramname"><em>a</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">void * </td>
- <td class="paramname"><em>ptr</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
- <td class="paramname"><em>x</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Set single element of an allocation. </p>
-
-</div>
-</div>
-<a class="anchor" id="a351627f335b9a091a5152db7ac9134dc"></a><!-- doxytag: member="rs_allocation.rsh::rsSetElementAt" ref="a351627f335b9a091a5152db7ac9134dc" args="(rs_allocation a, void *ptr, uint32_t x, uint32_t y)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsSetElementAt </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a> </td>
- <td class="paramname"><em>a</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">void * </td>
- <td class="paramname"><em>ptr</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
- <td class="paramname"><em>x</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
- <td class="paramname"><em>y</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/rs__allocation_8rsh_source.html b/docs/html/reference/renderscript/rs__allocation_8rsh_source.html
deleted file mode 100644
index 6d925a8..0000000
--- a/docs/html/reference/renderscript/rs__allocation_8rsh_source.html
+++ /dev/null
@@ -1,268 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_allocation.rsh Source File</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
- <div id="navrow1" class="tabs">
- <ul class="tablist">
- <li><a href="index.html"><span>Overview</span></a></li>
- <li class="current"><a href="globals.html"><span>Globals</span></a></li>
- <li><a href="annotated.html"><span>Structs</span></a></li>
- </ul>
- </div>
-<div class="header">
- <div class="headertitle">
-<div class="title">/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_allocation.rsh</div> </div>
-</div>
-<div class="contents">
-<a href="rs__allocation_8rsh.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * Copyright (C) 2011 The Android Open Source Project</span>
-<a name="l00003"></a>00003 <span class="comment"> *</span>
-<a name="l00004"></a>00004 <span class="comment"> * Licensed under the Apache License, Version 2.0 (the "License");</span>
-<a name="l00005"></a>00005 <span class="comment"> * you may not use this file except in compliance with the License.</span>
-<a name="l00006"></a>00006 <span class="comment"> * You may obtain a copy of the License at</span>
-<a name="l00007"></a>00007 <span class="comment"> *</span>
-<a name="l00008"></a>00008 <span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span>
-<a name="l00011"></a>00011 <span class="comment"> * distributed under the License is distributed on an "AS IS" BASIS,</span>
-<a name="l00012"></a>00012 <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
-<a name="l00013"></a>00013 <span class="comment"> * See the License for the specific language governing permissions and</span>
-<a name="l00014"></a>00014 <span class="comment"> * limitations under the License.</span>
-<a name="l00015"></a>00015 <span class="comment"> */</span>
-<a name="l00016"></a>00016
-<a name="l00023"></a>00023 <span class="preprocessor">#ifndef __RS_ALLOCATION_RSH__</span>
-<a name="l00024"></a>00024 <span class="preprocessor"></span><span class="preprocessor">#define __RS_ALLOCATION_RSH__</span>
-<a name="l00025"></a>00025 <span class="preprocessor"></span>
-<a name="l00034"></a>00034 <span class="keyword">extern</span> <a class="code" href="structrs__allocation.html" title="Opaque handle to a RenderScript allocation.">rs_allocation</a> __attribute__((overloadable))
-<a name="l00035"></a>00035 <a class="code" href="rs__allocation_8rsh.html#aadad7654929c451be299df125061c9ba">rsGetAllocation</a>(const <span class="keywordtype">void</span> *);
-<a name="l00036"></a>00036
-<a name="l00042"></a>00042 extern <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> __attribute__((overloadable))
-<a name="l00043"></a>00043 <a class="code" href="rs__allocation_8rsh.html#a3ca7f505a97d5b7f477bc65b9e77dafb">rsAllocationGetDimX</a>(<a class="code" href="structrs__allocation.html" title="Opaque handle to a RenderScript allocation.">rs_allocation</a>);
-<a name="l00044"></a>00044
-<a name="l00050"></a>00050 extern <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> __attribute__((overloadable))
-<a name="l00051"></a>00051 <a class="code" href="rs__allocation_8rsh.html#ac889b866b465580eb313e5d2a9fcac3d">rsAllocationGetDimY</a>(rs_allocation);
-<a name="l00052"></a>00052
-<a name="l00058"></a>00058 extern <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> __attribute__((overloadable))
-<a name="l00059"></a>00059 <a class="code" href="rs__allocation_8rsh.html#acd6f1a2b2443e6ea39e6154577645d2c">rsAllocationGetDimZ</a>(rs_allocation);
-<a name="l00060"></a>00060
-<a name="l00066"></a>00066 extern <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> __attribute__((overloadable))
-<a name="l00067"></a>00067 <a class="code" href="rs__allocation_8rsh.html#ac42a07c079d6b3c6bb21975170d4e11c">rsAllocationGetDimLOD</a>(rs_allocation);
-<a name="l00068"></a>00068
-<a name="l00074"></a>00074 extern <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> __attribute__((overloadable))
-<a name="l00075"></a>00075 <a class="code" href="rs__allocation_8rsh.html#ac85f7ed88f38b35482c6d63b56d470fe">rsAllocationGetDimFaces</a>(rs_allocation);
-<a name="l00076"></a>00076
-<a name="l00077"></a>00077 <span class="preprocessor">#if (defined(RS_VERSION) && (RS_VERSION >= 14))</span>
-<a name="l00078"></a>00078 <span class="preprocessor"></span>
-<a name="l00092"></a>00092 <span class="keyword">extern</span> <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00093"></a>00093 <a class="code" href="rs__allocation_8rsh.html#a3a1098a3ea3a5106955dd4398b8904e1">rsAllocationCopy1DRange</a>(rs_allocation dstAlloc,
-<a name="l00094"></a>00094 <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> dstOff, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> dstMip,
-<a name="l00095"></a>00095 <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> count,
-<a name="l00096"></a>00096 rs_allocation srcAlloc,
-<a name="l00097"></a>00097 <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> srcOff, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> srcMip);
-<a name="l00098"></a>00098
-<a name="l00120"></a>00120 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00121"></a>00121 <a class="code" href="rs__allocation_8rsh.html#a7f7e2369b3ed7d7db31729b6db7ba07e">rsAllocationCopy2DRange</a>(rs_allocation dstAlloc,
-<a name="l00122"></a>00122 <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> dstXoff, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> dstYoff,
-<a name="l00123"></a>00123 <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> dstMip,
-<a name="l00124"></a>00124 <a class="code" href="rs__types_8rsh.html#acc6f9a94176656c73fd74f789cfa2229" title="Enum for selecting cube map faces.">rs_allocation_cubemap_face</a> dstFace,
-<a name="l00125"></a>00125 <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> width, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> height,
-<a name="l00126"></a>00126 rs_allocation srcAlloc,
-<a name="l00127"></a>00127 <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> srcXoff, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> srcYoff,
-<a name="l00128"></a>00128 <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> srcMip,
-<a name="l00129"></a>00129 <a class="code" href="rs__types_8rsh.html#acc6f9a94176656c73fd74f789cfa2229" title="Enum for selecting cube map faces.">rs_allocation_cubemap_face</a> srcFace);
-<a name="l00130"></a>00130
-<a name="l00131"></a>00131 <span class="preprocessor">#endif //defined(RS_VERSION) && (RS_VERSION >= 14)</span>
-<a name="l00132"></a>00132 <span class="preprocessor"></span>
-<a name="l00136"></a>00136 <span class="keyword">extern</span> <span class="keyword">const</span> <span class="keywordtype">void</span> * __attribute__((overloadable))
-<a name="l00137"></a>00137 <a class="code" href="rs__allocation_8rsh.html#a56157b6ddef754b36833ca1f8e66aec2">rsGetElementAt</a>(rs_allocation a, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> x);
-<a name="l00141"></a>00141 extern const <span class="keywordtype">void</span> * __attribute__((overloadable))
-<a name="l00142"></a>00142 <a class="code" href="rs__allocation_8rsh.html#a56157b6ddef754b36833ca1f8e66aec2">rsGetElementAt</a>(rs_allocation a, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> x, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> y);
-<a name="l00146"></a>00146 extern const <span class="keywordtype">void</span> * __attribute__((overloadable))
-<a name="l00147"></a>00147 <a class="code" href="rs__allocation_8rsh.html#a56157b6ddef754b36833ca1f8e66aec2">rsGetElementAt</a>(rs_allocation a, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> x, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> y, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> z);
-<a name="l00148"></a>00148
-<a name="l00149"></a>00149
-<a name="l00150"></a>00150 <span class="preprocessor">#if (defined(RS_VERSION) && (RS_VERSION >= 18))</span>
-<a name="l00151"></a>00151 <span class="preprocessor"></span><span class="preprocessor"> #define GET_ELEMENT_AT(T) \</span>
-<a name="l00152"></a>00152 <span class="preprocessor"> extern T __attribute__((overloadable)) \</span>
-<a name="l00153"></a>00153 <span class="preprocessor"> rsGetElementAt_##T(rs_allocation a, uint32_t x); \</span>
-<a name="l00154"></a>00154 <span class="preprocessor"> extern T __attribute__((overloadable)) \</span>
-<a name="l00155"></a>00155 <span class="preprocessor"> rsGetElementAt_##T(rs_allocation a, uint32_t x, uint32_t y); \</span>
-<a name="l00156"></a>00156 <span class="preprocessor"> extern T __attribute__((overloadable)) \</span>
-<a name="l00157"></a>00157 <span class="preprocessor"> rsGetElementAt_##T(rs_allocation a, uint32_t x, uint32_t y, uint32_t z);</span>
-<a name="l00158"></a>00158 <span class="preprocessor"></span><span class="preprocessor">#else</span>
-<a name="l00159"></a>00159 <span class="preprocessor"></span><span class="preprocessor"> #define GET_ELEMENT_AT(T) \</span>
-<a name="l00160"></a>00160 <span class="preprocessor"> static inline T __attribute__((overloadable)) \</span>
-<a name="l00161"></a>00161 <span class="preprocessor"> rsGetElementAt_##T(rs_allocation a, uint32_t x) { \</span>
-<a name="l00162"></a>00162 <span class="preprocessor"> return ((T *)rsGetElementAt(a, x))[0]; \</span>
-<a name="l00163"></a>00163 <span class="preprocessor"> } \</span>
-<a name="l00164"></a>00164 <span class="preprocessor"> static inline T __attribute__((overloadable)) \</span>
-<a name="l00165"></a>00165 <span class="preprocessor"> rsGetElementAt_##T(rs_allocation a, uint32_t x, uint32_t y) { \</span>
-<a name="l00166"></a>00166 <span class="preprocessor"> return ((T *)rsGetElementAt(a, x, y))[0]; \</span>
-<a name="l00167"></a>00167 <span class="preprocessor"> } \</span>
-<a name="l00168"></a>00168 <span class="preprocessor"> static inline T __attribute__((overloadable)) \</span>
-<a name="l00169"></a>00169 <span class="preprocessor"> rsGetElementAt_##T(rs_allocation a, uint32_t x, uint32_t y, uint32_t z) { \</span>
-<a name="l00170"></a>00170 <span class="preprocessor"> return ((T *)rsGetElementAt(a, x, y, z))[0]; \</span>
-<a name="l00171"></a>00171 <span class="preprocessor"> }</span>
-<a name="l00172"></a>00172 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00173"></a>00173 <span class="preprocessor"></span>
-<a name="l00174"></a>00174 GET_ELEMENT_AT(<span class="keywordtype">char</span>)
-<a name="l00175"></a>00175 GET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#ac532b4c1895c8bd4fb75dc370c484351">char2</a>)
-<a name="l00176"></a>00176 GET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a4617fb31f4c03402515efee0a9b56210">char3</a>)
-<a name="l00177"></a>00177 GET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#aecb498648daac97c7cc5f31c242dfa03">char4</a>)
-<a name="l00178"></a>00178 GET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a>)
-<a name="l00179"></a>00179 GET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#aff5eb7cd53a34bb01924bf64485296de">uchar2</a>)
-<a name="l00180"></a>00180 GET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a247b5eacf2b662849668cbc33120343f">uchar3</a>)
-<a name="l00181"></a>00181 GET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#ae6ed52a87d4ff920c303b13b00f7396d">uchar4</a>)
-<a name="l00182"></a>00182 GET_ELEMENT_AT(<span class="keywordtype">short</span>)
-<a name="l00183"></a>00183 GET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a303d3ad18aaeacfcfeda2b8580b98796">short2</a>)
-<a name="l00184"></a>00184 GET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a3f4967691ae2b249511b5f3dd9e18793">short3</a>)
-<a name="l00185"></a>00185 GET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a198219da0b1d51c8d7f8f12aad7e502d">short4</a>)
-<a name="l00186"></a>00186 GET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a>)
-<a name="l00187"></a>00187 GET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a24a9d78cfc32475e2c6eb1cdec239bf2">ushort2</a>)
-<a name="l00188"></a>00188 GET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#ab78391445785d2ca0276392a9c97fcba">ushort3</a>)
-<a name="l00189"></a>00189 GET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a77a09fa01d7fc721bbc44c32aac2d487">ushort4</a>)
-<a name="l00190"></a>00190 GET_ELEMENT_AT(<span class="keywordtype">int</span>)
-<a name="l00191"></a>00191 GET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a6bc1fa1354fe2145b8f12b4bbfafcf4c">int2</a>)
-<a name="l00192"></a>00192 GET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#ad5512266b63fd06dcf450f6c9d5326c8">int3</a>)
-<a name="l00193"></a>00193 GET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a897deab71f679999ed99d4153c797e70">int4</a>)
-<a name="l00194"></a>00194 GET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a>)
-<a name="l00195"></a>00195 GET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#aaf90cd1f01a121e824fc6e1b927e7683">uint2</a>)
-<a name="l00196"></a>00196 GET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#ae80e36ac834c891aa76b09a220344e78">uint3</a>)
-<a name="l00197"></a>00197 GET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#ad92f0ec6c2cdc1f11a6d7fe321047462">uint4</a>)
-<a name="l00198"></a>00198 GET_ELEMENT_AT(<span class="keywordtype">long</span>)
-<a name="l00199"></a>00199 GET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#afd55d62cee0785034b73375acd0df9da">long2</a>)
-<a name="l00200"></a>00200 GET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#ad9cedbf4050fad14138d1dcb3428ec18">long3</a>)
-<a name="l00201"></a>00201 GET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#ae177e4918f36e5c9da36d524cdb7a2e7">long4</a>)
-<a name="l00202"></a>00202 GET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#ab46637ef82283186e57f54756fe67203">ulong</a>)
-<a name="l00203"></a>00203 GET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a56988b12ab16acf753356f7a5c70565a">ulong2</a>)
-<a name="l00204"></a>00204 GET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#ac623a569c28935fbedd3a8ed27ae0696">ulong3</a>)
-<a name="l00205"></a>00205 GET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a3029c54b8e1779a1ddbdfe875432d137">ulong4</a>)
-<a name="l00206"></a>00206 GET_ELEMENT_AT(<span class="keywordtype">float</span>)
-<a name="l00207"></a>00207 GET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a>)
-<a name="l00208"></a>00208 GET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a>)
-<a name="l00209"></a>00209 GET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a>)
-<a name="l00210"></a>00210 GET_ELEMENT_AT(<span class="keywordtype">double</span>)
-<a name="l00211"></a>00211 GET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a75ef868cedebc2a6eeb1bc6ca6ca49c3">double2</a>)
-<a name="l00212"></a>00212 GET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#aa3c90d5a23d674185a13e95402eda7eb">double3</a>)
-<a name="l00213"></a>00213 GET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a60f4b04e076f0dd0ecc99c365fc4ca21">double4</a>)
-<a name="l00214"></a>00214
-<a name="l00215"></a>00215 <span class="preprocessor">#undef GET_ELEMENT_AT</span>
-<a name="l00216"></a>00216 <span class="preprocessor"></span>
-<a name="l00217"></a>00217 <span class="comment">// Jelly Bean</span>
-<a name="l00218"></a>00218 <span class="preprocessor">#if (defined(RS_VERSION) && (RS_VERSION >= 16))</span>
-<a name="l00219"></a>00219 <span class="preprocessor"></span>
-<a name="l00224"></a>00224 <span class="keyword">extern</span> <span class="keyword">const</span> <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00225"></a>00225 <a class="code" href="rs__allocation_8rsh.html#afe9ebb2f89c6366c59f5e05ee4849c0a">rsAllocationIoSend</a>(rs_allocation a);
-<a name="l00226"></a>00226
-<a name="l00231"></a>00231 extern const <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00232"></a>00232 <a class="code" href="rs__allocation_8rsh.html#a05f7391230a92d239fdb619d791162b5">rsAllocationIoReceive</a>(rs_allocation a);
-<a name="l00233"></a>00233
-<a name="l00234"></a>00234
-<a name="l00240"></a>00240 extern <a class="code" href="structrs__element.html" title="Opaque handle to a RenderScript element.">rs_element</a> __attribute__((overloadable))
-<a name="l00241"></a>00241 <a class="code" href="rs__allocation_8rsh.html#a6a3b6512bc269f6b369bdc54d12a45ff">rsAllocationGetElement</a>(rs_allocation a);
-<a name="l00242"></a>00242
-<a name="l00249"></a>00249 extern const <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> __attribute__((overloadable))
-<a name="l00250"></a>00250 <a class="code" href="rs__allocation_8rsh.html#a1ed04c0bfab4044b875bb31577b53407">rsSample</a>(rs_allocation a, <a class="code" href="structrs__sampler.html" title="Opaque handle to a RenderScript sampler object.">rs_sampler</a> s, <span class="keywordtype">float</span> location);
-<a name="l00260"></a>00260 extern const <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> __attribute__((overloadable))
-<a name="l00261"></a>00261 <a class="code" href="rs__allocation_8rsh.html#a1ed04c0bfab4044b875bb31577b53407">rsSample</a>(rs_allocation a, <a class="code" href="structrs__sampler.html" title="Opaque handle to a RenderScript sampler object.">rs_sampler</a> s, <span class="keywordtype">float</span> location, <span class="keywordtype">float</span> lod);
-<a name="l00262"></a>00262
-<a name="l00269"></a>00269 extern const <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> __attribute__((overloadable))
-<a name="l00270"></a>00270 <a class="code" href="rs__allocation_8rsh.html#a1ed04c0bfab4044b875bb31577b53407">rsSample</a>(rs_allocation a, <a class="code" href="structrs__sampler.html" title="Opaque handle to a RenderScript sampler object.">rs_sampler</a> s, <a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> location);
-<a name="l00271"></a>00271
-<a name="l00281"></a>00281 extern const <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> __attribute__((overloadable))
-<a name="l00282"></a>00282 <a class="code" href="rs__allocation_8rsh.html#a1ed04c0bfab4044b875bb31577b53407">rsSample</a>(rs_allocation a, <a class="code" href="structrs__sampler.html" title="Opaque handle to a RenderScript sampler object.">rs_sampler</a> s, <a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> location, <span class="keywordtype">float</span> lod);
-<a name="l00283"></a>00283
-<a name="l00284"></a>00284 <span class="preprocessor">#endif // (defined(RS_VERSION) && (RS_VERSION >= 16))</span>
-<a name="l00285"></a>00285 <span class="preprocessor"></span>
-<a name="l00286"></a>00286 <span class="preprocessor">#if (defined(RS_VERSION) && (RS_VERSION >= 18))</span>
-<a name="l00287"></a>00287 <span class="preprocessor"></span>
-<a name="l00291"></a>00291 <span class="keyword">extern</span> <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00292"></a>00292 <a class="code" href="rs__allocation_8rsh.html#a36ef1e609e360a9a5a5ff5dce13b5100">rsSetElementAt</a>(rs_allocation a, <span class="keywordtype">void</span>* ptr, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> x);
-<a name="l00293"></a>00293
-<a name="l00297"></a>00297 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00298"></a>00298 <a class="code" href="rs__allocation_8rsh.html#a36ef1e609e360a9a5a5ff5dce13b5100">rsSetElementAt</a>(rs_allocation a, <span class="keywordtype">void</span>* ptr, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> x, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> y);
-<a name="l00299"></a>00299
-<a name="l00300"></a>00300 <span class="preprocessor">#define SET_ELEMENT_AT(T) \</span>
-<a name="l00301"></a>00301 <span class="preprocessor"> extern void __attribute__((overloadable)) \</span>
-<a name="l00302"></a>00302 <span class="preprocessor"> rsSetElementAt_##T(rs_allocation a, T val, uint32_t x); \</span>
-<a name="l00303"></a>00303 <span class="preprocessor"> extern void __attribute__((overloadable)) \</span>
-<a name="l00304"></a>00304 <span class="preprocessor"> rsSetElementAt_##T(rs_allocation a, T val, uint32_t x, uint32_t y); \</span>
-<a name="l00305"></a>00305 <span class="preprocessor"> extern void __attribute__((overloadable)) \</span>
-<a name="l00306"></a>00306 <span class="preprocessor"> rsSetElementAt_##T(rs_allocation a, T val, uint32_t x, uint32_t y, uint32_t z);</span>
-<a name="l00307"></a>00307 <span class="preprocessor"></span>
-<a name="l00308"></a>00308
-<a name="l00309"></a>00309 SET_ELEMENT_AT(<span class="keywordtype">char</span>)
-<a name="l00310"></a>00310 SET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#ac532b4c1895c8bd4fb75dc370c484351">char2</a>)
-<a name="l00311"></a>00311 SET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a4617fb31f4c03402515efee0a9b56210">char3</a>)
-<a name="l00312"></a>00312 SET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#aecb498648daac97c7cc5f31c242dfa03">char4</a>)
-<a name="l00313"></a>00313 SET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a>)
-<a name="l00314"></a>00314 SET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#aff5eb7cd53a34bb01924bf64485296de">uchar2</a>)
-<a name="l00315"></a>00315 SET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a247b5eacf2b662849668cbc33120343f">uchar3</a>)
-<a name="l00316"></a>00316 SET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#ae6ed52a87d4ff920c303b13b00f7396d">uchar4</a>)
-<a name="l00317"></a>00317 SET_ELEMENT_AT(<span class="keywordtype">short</span>)
-<a name="l00318"></a>00318 SET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a303d3ad18aaeacfcfeda2b8580b98796">short2</a>)
-<a name="l00319"></a>00319 SET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a3f4967691ae2b249511b5f3dd9e18793">short3</a>)
-<a name="l00320"></a>00320 SET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a198219da0b1d51c8d7f8f12aad7e502d">short4</a>)
-<a name="l00321"></a>00321 SET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a>)
-<a name="l00322"></a>00322 SET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a24a9d78cfc32475e2c6eb1cdec239bf2">ushort2</a>)
-<a name="l00323"></a>00323 SET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#ab78391445785d2ca0276392a9c97fcba">ushort3</a>)
-<a name="l00324"></a>00324 SET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a77a09fa01d7fc721bbc44c32aac2d487">ushort4</a>)
-<a name="l00325"></a>00325 SET_ELEMENT_AT(<span class="keywordtype">int</span>)
-<a name="l00326"></a>00326 SET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a6bc1fa1354fe2145b8f12b4bbfafcf4c">int2</a>)
-<a name="l00327"></a>00327 SET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#ad5512266b63fd06dcf450f6c9d5326c8">int3</a>)
-<a name="l00328"></a>00328 SET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a897deab71f679999ed99d4153c797e70">int4</a>)
-<a name="l00329"></a>00329 SET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a>)
-<a name="l00330"></a>00330 SET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#aaf90cd1f01a121e824fc6e1b927e7683">uint2</a>)
-<a name="l00331"></a>00331 SET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#ae80e36ac834c891aa76b09a220344e78">uint3</a>)
-<a name="l00332"></a>00332 SET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#ad92f0ec6c2cdc1f11a6d7fe321047462">uint4</a>)
-<a name="l00333"></a>00333 SET_ELEMENT_AT(<span class="keywordtype">long</span>)
-<a name="l00334"></a>00334 SET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#afd55d62cee0785034b73375acd0df9da">long2</a>)
-<a name="l00335"></a>00335 SET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#ad9cedbf4050fad14138d1dcb3428ec18">long3</a>)
-<a name="l00336"></a>00336 SET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#ae177e4918f36e5c9da36d524cdb7a2e7">long4</a>)
-<a name="l00337"></a>00337 SET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#ab46637ef82283186e57f54756fe67203">ulong</a>)
-<a name="l00338"></a>00338 SET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a56988b12ab16acf753356f7a5c70565a">ulong2</a>)
-<a name="l00339"></a>00339 SET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#ac623a569c28935fbedd3a8ed27ae0696">ulong3</a>)
-<a name="l00340"></a>00340 SET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a3029c54b8e1779a1ddbdfe875432d137">ulong4</a>)
-<a name="l00341"></a>00341 SET_ELEMENT_AT(<span class="keywordtype">float</span>)
-<a name="l00342"></a>00342 SET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a>)
-<a name="l00343"></a>00343 SET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a>)
-<a name="l00344"></a>00344 SET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a>)
-<a name="l00345"></a>00345 SET_ELEMENT_AT(<span class="keywordtype">double</span>)
-<a name="l00346"></a>00346 SET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a75ef868cedebc2a6eeb1bc6ca6ca49c3">double2</a>)
-<a name="l00347"></a>00347 SET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#aa3c90d5a23d674185a13e95402eda7eb">double3</a>)
-<a name="l00348"></a>00348 SET_ELEMENT_AT(<a class="code" href="rs__types_8rsh.html#a60f4b04e076f0dd0ecc99c365fc4ca21">double4</a>)
-<a name="l00349"></a>00349
-<a name="l00350"></a>00350 <span class="preprocessor">#undef SET_ELEMENT_AT</span>
-<a name="l00351"></a>00351 <span class="preprocessor"></span>
-<a name="l00352"></a>00352
-<a name="l00356"></a>00356 <span class="keyword">extern</span> <span class="keyword">const</span> <a class="code" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> __attribute__((overloadable))
-<a name="l00357"></a>00357 <a class="code" href="rs__allocation_8rsh.html#ad7ffa1aa16511a75b4bc2c05bd0e0a75">rsGetElementAtYuv_uchar_Y</a>(rs_allocation a, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> x, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> y);
-<a name="l00358"></a>00358
-<a name="l00364"></a>00364 extern const <a class="code" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> __attribute__((overloadable))
-<a name="l00365"></a>00365 <a class="code" href="rs__allocation_8rsh.html#a41f61be02113ee22c039ea51fdedb20e">rsGetElementAtYuv_uchar_U</a>(rs_allocation a, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> x, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> y);
-<a name="l00366"></a>00366
-<a name="l00372"></a>00372 extern const <a class="code" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> __attribute__((overloadable))
-<a name="l00373"></a>00373 <a class="code" href="rs__allocation_8rsh.html#af03cadb582fa80bbf7f39177d96df17e">rsGetElementAtYuv_uchar_V</a>(rs_allocation a, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> x, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> y);
-<a name="l00374"></a>00374
-<a name="l00375"></a>00375 <span class="preprocessor">#endif // (defined(RS_VERSION) && (RS_VERSION >= 18))</span>
-<a name="l00376"></a>00376 <span class="preprocessor"></span>
-<a name="l00377"></a>00377 <span class="preprocessor">#endif</span>
-<a name="l00378"></a>00378 <span class="preprocessor"></span>
-</pre></div></div>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/rs__atomic_8rsh.html b/docs/html/reference/renderscript/rs__atomic_8rsh.html
deleted file mode 100644
index 94c16ef..0000000
--- a/docs/html/reference/renderscript/rs__atomic_8rsh.html
+++ /dev/null
@@ -1,757 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_atomic.rsh File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
- <div id="navrow1" class="tabs">
- <ul class="tablist">
- <li><a href="index.html"><span>Overview</span></a></li>
- <li class="current"><a href="globals.html"><span>Globals</span></a></li>
- <li><a href="annotated.html"><span>Structs</span></a></li>
- </ul>
- </div>
-</div>
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle">
-<div class="title">/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_atomic.rsh File Reference</div> </div>
-</div>
-<div class="contents">
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__atomic_8rsh.html#a619e7a489500a650569a76ccd93e105f">rsAtomicInc</a> (volatile <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> *addr)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__atomic_8rsh.html#a9c7a2b449852ba9d3297747ec3ca06e3">rsAtomicInc</a> (volatile <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> *addr)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__atomic_8rsh.html#a16a69784a343d7c11bf6bd7fec9686ca">rsAtomicDec</a> (volatile <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> *addr)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__atomic_8rsh.html#a77902e5015557fa7336a7926ebdccdae">rsAtomicDec</a> (volatile <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> *addr)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__atomic_8rsh.html#ab46665eff81030200f86db9c2181072a">rsAtomicAdd</a> (volatile <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> *addr, <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> value)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__atomic_8rsh.html#ab206947a5a724f02cb1ab36dd7df82d7">rsAtomicAdd</a> (volatile <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> *addr, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> value)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__atomic_8rsh.html#a800dced6abbf09716391f35bc488900b">rsAtomicSub</a> (volatile <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> *addr, <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> value)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__atomic_8rsh.html#ae5770ea0b22cb47e517b3391763c14a5">rsAtomicSub</a> (volatile <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> *addr, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> value)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__atomic_8rsh.html#a7fdf5633662dd5b0898ad5a149e3c8ad">rsAtomicAnd</a> (volatile <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> *addr, <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> value)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__atomic_8rsh.html#a9d4e93fa4b55b49c75d4d1bd7708cf41">rsAtomicAnd</a> (volatile <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> *addr, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> value)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__atomic_8rsh.html#a477f6eb17c4806bb715bfd975b6369cd">rsAtomicOr</a> (volatile <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> *addr, <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> value)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__atomic_8rsh.html#a611cde98a711ba690e1c07ddb502ce97">rsAtomicOr</a> (volatile <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> *addr, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> value)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__atomic_8rsh.html#a5590505ea65c53b3bb26fa48a6b9c313">rsAtomicXor</a> (volatile <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> *addr, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> value)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__atomic_8rsh.html#ab9fe2263cd7814fc5292c6af81ed69eb">rsAtomicXor</a> (volatile <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> *addr, <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> value)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__atomic_8rsh.html#a9f3cddc86f1075ca194a762fb8a3330a">rsAtomicMin</a> (volatile <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> *addr, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> value)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__atomic_8rsh.html#a8de83596fd23f119ab8620a8dad223b1">rsAtomicMin</a> (volatile <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> *addr, <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> value)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__atomic_8rsh.html#a1d49d69d14956152fcde34efe9cdff87">rsAtomicMax</a> (volatile <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> *addr, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> value)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__atomic_8rsh.html#a6d4cb5118131a8f1e73b704c093401aa">rsAtomicMax</a> (volatile <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> *addr, <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> value)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__atomic_8rsh.html#a205d66a8eb29eee8968f886e488b4402">rsAtomicCas</a> (volatile <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> *addr, <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> compareValue, <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> newValue)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__atomic_8rsh.html#aa46bb0a2933a93bed2858585a088b173">rsAtomicCas</a> (volatile <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> *addr, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> compareValue, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> newValue)</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Atomic routines. </p>
-
-<p>Definition in file <a class="el" href="rs__atomic_8rsh_source.html">rs_atomic.rsh</a>.</p>
-</div><hr/><h2>Function Documentation</h2>
-<a class="anchor" id="ab46665eff81030200f86db9c2181072a"></a><!-- doxytag: member="rs_atomic.rsh::rsAtomicAdd" ref="ab46665eff81030200f86db9c2181072a" args="(volatile int32_t *addr, int32_t value)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> rsAtomicAdd </td>
- <td>(</td>
- <td class="paramtype">volatile <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> * </td>
- <td class="paramname"><em>addr</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> </td>
- <td class="paramname"><em>value</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Atomic add a value to the value at addr. addr[0] += value</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">addr</td><td>Address of value to modify </td></tr>
- <tr><td class="paramname">value</td><td>Amount to add to the value at addr</td></tr>
- </table>
- </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>old value </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="ab206947a5a724f02cb1ab36dd7df82d7"></a><!-- doxytag: member="rs_atomic.rsh::rsAtomicAdd" ref="ab206947a5a724f02cb1ab36dd7df82d7" args="(volatile uint32_t *addr, uint32_t value)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> rsAtomicAdd </td>
- <td>(</td>
- <td class="paramtype">volatile <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> * </td>
- <td class="paramname"><em>addr</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
- <td class="paramname"><em>value</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Atomic add a value to the value at addr. addr[0] += value</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">addr</td><td>Address of value to modify </td></tr>
- <tr><td class="paramname">value</td><td>Amount to add to the value at addr</td></tr>
- </table>
- </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>old value </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a7fdf5633662dd5b0898ad5a149e3c8ad"></a><!-- doxytag: member="rs_atomic.rsh::rsAtomicAnd" ref="a7fdf5633662dd5b0898ad5a149e3c8ad" args="(volatile int32_t *addr, int32_t value)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> rsAtomicAnd </td>
- <td>(</td>
- <td class="paramtype">volatile <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> * </td>
- <td class="paramname"><em>addr</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> </td>
- <td class="paramname"><em>value</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Atomic Bitwise and a value from the value at addr. addr[0] &= value</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">addr</td><td>Address of value to modify </td></tr>
- <tr><td class="paramname">value</td><td>Amount to and with the value at addr</td></tr>
- </table>
- </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>old value </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a9d4e93fa4b55b49c75d4d1bd7708cf41"></a><!-- doxytag: member="rs_atomic.rsh::rsAtomicAnd" ref="a9d4e93fa4b55b49c75d4d1bd7708cf41" args="(volatile uint32_t *addr, uint32_t value)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> rsAtomicAnd </td>
- <td>(</td>
- <td class="paramtype">volatile <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> * </td>
- <td class="paramname"><em>addr</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
- <td class="paramname"><em>value</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Atomic Bitwise and a value from the value at addr. addr[0] &= value</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">addr</td><td>Address of value to modify </td></tr>
- <tr><td class="paramname">value</td><td>Amount to and with the value at addr</td></tr>
- </table>
- </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>old value </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a205d66a8eb29eee8968f886e488b4402"></a><!-- doxytag: member="rs_atomic.rsh::rsAtomicCas" ref="a205d66a8eb29eee8968f886e488b4402" args="(volatile int32_t *addr, int32_t compareValue, int32_t newValue)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> rsAtomicCas </td>
- <td>(</td>
- <td class="paramtype">volatile <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> * </td>
- <td class="paramname"><em>addr</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> </td>
- <td class="paramname"><em>compareValue</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> </td>
- <td class="paramname"><em>newValue</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Compare-and-set operation with a full memory barrier.</p>
-<p>If the value at addr matches compareValue then newValue is written.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">addr</td><td>The address to compare and replace if the compare passes. </td></tr>
- <tr><td class="paramname">compareValue</td><td>The value to test addr[0] against. </td></tr>
- <tr><td class="paramname">newValue</td><td>The value to write if the test passes.</td></tr>
- </table>
- </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>old value </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="aa46bb0a2933a93bed2858585a088b173"></a><!-- doxytag: member="rs_atomic.rsh::rsAtomicCas" ref="aa46bb0a2933a93bed2858585a088b173" args="(volatile uint32_t *addr, uint32_t compareValue, uint32_t newValue)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> rsAtomicCas </td>
- <td>(</td>
- <td class="paramtype">volatile <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> * </td>
- <td class="paramname"><em>addr</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
- <td class="paramname"><em>compareValue</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
- <td class="paramname"><em>newValue</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Compare-and-set operation with a full memory barrier.</p>
-<p>If the value at addr matches compareValue then newValue is written.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">addr</td><td>The address to compare and replace if the compare passes. </td></tr>
- <tr><td class="paramname">compareValue</td><td>The value to test addr[0] against. </td></tr>
- <tr><td class="paramname">newValue</td><td>The value to write if the test passes.</td></tr>
- </table>
- </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>old value </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a16a69784a343d7c11bf6bd7fec9686ca"></a><!-- doxytag: member="rs_atomic.rsh::rsAtomicDec" ref="a16a69784a343d7c11bf6bd7fec9686ca" args="(volatile int32_t *addr)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> rsAtomicDec </td>
- <td>(</td>
- <td class="paramtype">volatile <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> * </td>
- <td class="paramname"><em>addr</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Atomic subtract one from the value at addr. Equal to rsAtomicSub(addr, 1)</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">addr</td><td>Address of value to decrement</td></tr>
- </table>
- </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>old value </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a77902e5015557fa7336a7926ebdccdae"></a><!-- doxytag: member="rs_atomic.rsh::rsAtomicDec" ref="a77902e5015557fa7336a7926ebdccdae" args="(volatile uint32_t *addr)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> rsAtomicDec </td>
- <td>(</td>
- <td class="paramtype">volatile <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> * </td>
- <td class="paramname"><em>addr</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Atomic subtract one from the value at addr. Equal to rsAtomicSub(addr, 1)</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">addr</td><td>Address of value to decrement</td></tr>
- </table>
- </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>old value </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a619e7a489500a650569a76ccd93e105f"></a><!-- doxytag: member="rs_atomic.rsh::rsAtomicInc" ref="a619e7a489500a650569a76ccd93e105f" args="(volatile int32_t *addr)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> rsAtomicInc </td>
- <td>(</td>
- <td class="paramtype">volatile <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> * </td>
- <td class="paramname"><em>addr</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Atomic add one to the value at addr. Equal to rsAtomicAdd(addr, 1)</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">addr</td><td>Address of value to increment</td></tr>
- </table>
- </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>old value </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a9c7a2b449852ba9d3297747ec3ca06e3"></a><!-- doxytag: member="rs_atomic.rsh::rsAtomicInc" ref="a9c7a2b449852ba9d3297747ec3ca06e3" args="(volatile uint32_t *addr)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> rsAtomicInc </td>
- <td>(</td>
- <td class="paramtype">volatile <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> * </td>
- <td class="paramname"><em>addr</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Atomic add one to the value at addr. Equal to rsAtomicAdd(addr, 1)</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">addr</td><td>Address of value to increment</td></tr>
- </table>
- </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>old value </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a1d49d69d14956152fcde34efe9cdff87"></a><!-- doxytag: member="rs_atomic.rsh::rsAtomicMax" ref="a1d49d69d14956152fcde34efe9cdff87" args="(volatile uint32_t *addr, uint32_t value)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> rsAtomicMax </td>
- <td>(</td>
- <td class="paramtype">volatile <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> * </td>
- <td class="paramname"><em>addr</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
- <td class="paramname"><em>value</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Atomic Set the value at addr to the max of addr and value addr[0] = rsMax(addr[0], value)</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">addr</td><td>Address of value to modify </td></tr>
- <tr><td class="paramname">value</td><td>comparison value</td></tr>
- </table>
- </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>old value </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a6d4cb5118131a8f1e73b704c093401aa"></a><!-- doxytag: member="rs_atomic.rsh::rsAtomicMax" ref="a6d4cb5118131a8f1e73b704c093401aa" args="(volatile int32_t *addr, int32_t value)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> rsAtomicMax </td>
- <td>(</td>
- <td class="paramtype">volatile <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> * </td>
- <td class="paramname"><em>addr</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> </td>
- <td class="paramname"><em>value</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Atomic Set the value at addr to the max of addr and value addr[0] = rsMin(addr[0], value)</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">addr</td><td>Address of value to modify </td></tr>
- <tr><td class="paramname">value</td><td>comparison value</td></tr>
- </table>
- </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>old value </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a9f3cddc86f1075ca194a762fb8a3330a"></a><!-- doxytag: member="rs_atomic.rsh::rsAtomicMin" ref="a9f3cddc86f1075ca194a762fb8a3330a" args="(volatile uint32_t *addr, uint32_t value)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> rsAtomicMin </td>
- <td>(</td>
- <td class="paramtype">volatile <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> * </td>
- <td class="paramname"><em>addr</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
- <td class="paramname"><em>value</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Atomic Set the value at addr to the min of addr and value addr[0] = rsMin(addr[0], value)</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">addr</td><td>Address of value to modify </td></tr>
- <tr><td class="paramname">value</td><td>comparison value</td></tr>
- </table>
- </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>old value </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a8de83596fd23f119ab8620a8dad223b1"></a><!-- doxytag: member="rs_atomic.rsh::rsAtomicMin" ref="a8de83596fd23f119ab8620a8dad223b1" args="(volatile int32_t *addr, int32_t value)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> rsAtomicMin </td>
- <td>(</td>
- <td class="paramtype">volatile <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> * </td>
- <td class="paramname"><em>addr</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> </td>
- <td class="paramname"><em>value</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Atomic Set the value at addr to the min of addr and value addr[0] = rsMin(addr[0], value)</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">addr</td><td>Address of value to modify </td></tr>
- <tr><td class="paramname">value</td><td>comparison value</td></tr>
- </table>
- </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>old value </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a477f6eb17c4806bb715bfd975b6369cd"></a><!-- doxytag: member="rs_atomic.rsh::rsAtomicOr" ref="a477f6eb17c4806bb715bfd975b6369cd" args="(volatile int32_t *addr, int32_t value)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> rsAtomicOr </td>
- <td>(</td>
- <td class="paramtype">volatile <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> * </td>
- <td class="paramname"><em>addr</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> </td>
- <td class="paramname"><em>value</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Atomic Bitwise or a value from the value at addr. addr[0] |= value</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">addr</td><td>Address of value to modify </td></tr>
- <tr><td class="paramname">value</td><td>Amount to or with the value at addr</td></tr>
- </table>
- </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>old value </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a611cde98a711ba690e1c07ddb502ce97"></a><!-- doxytag: member="rs_atomic.rsh::rsAtomicOr" ref="a611cde98a711ba690e1c07ddb502ce97" args="(volatile uint32_t *addr, uint32_t value)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> rsAtomicOr </td>
- <td>(</td>
- <td class="paramtype">volatile <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> * </td>
- <td class="paramname"><em>addr</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
- <td class="paramname"><em>value</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Atomic Bitwise or a value from the value at addr. addr[0] |= value</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">addr</td><td>Address of value to modify </td></tr>
- <tr><td class="paramname">value</td><td>Amount to or with the value at addr</td></tr>
- </table>
- </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>old value </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a800dced6abbf09716391f35bc488900b"></a><!-- doxytag: member="rs_atomic.rsh::rsAtomicSub" ref="a800dced6abbf09716391f35bc488900b" args="(volatile int32_t *addr, int32_t value)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> rsAtomicSub </td>
- <td>(</td>
- <td class="paramtype">volatile <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> * </td>
- <td class="paramname"><em>addr</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> </td>
- <td class="paramname"><em>value</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Atomic Subtract a value from the value at addr. addr[0] -= value</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">addr</td><td>Address of value to modify </td></tr>
- <tr><td class="paramname">value</td><td>Amount to subtract from the value at addr</td></tr>
- </table>
- </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>old value </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="ae5770ea0b22cb47e517b3391763c14a5"></a><!-- doxytag: member="rs_atomic.rsh::rsAtomicSub" ref="ae5770ea0b22cb47e517b3391763c14a5" args="(volatile uint32_t *addr, uint32_t value)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> rsAtomicSub </td>
- <td>(</td>
- <td class="paramtype">volatile <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> * </td>
- <td class="paramname"><em>addr</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
- <td class="paramname"><em>value</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Atomic Subtract a value from the value at addr. addr[0] -= value</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">addr</td><td>Address of value to modify </td></tr>
- <tr><td class="paramname">value</td><td>Amount to subtract from the value at addr</td></tr>
- </table>
- </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>old value </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a5590505ea65c53b3bb26fa48a6b9c313"></a><!-- doxytag: member="rs_atomic.rsh::rsAtomicXor" ref="a5590505ea65c53b3bb26fa48a6b9c313" args="(volatile uint32_t *addr, uint32_t value)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> rsAtomicXor </td>
- <td>(</td>
- <td class="paramtype">volatile <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> * </td>
- <td class="paramname"><em>addr</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
- <td class="paramname"><em>value</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Atomic Bitwise xor a value from the value at addr. addr[0] ^= value</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">addr</td><td>Address of value to modify </td></tr>
- <tr><td class="paramname">value</td><td>Amount to xor with the value at addr</td></tr>
- </table>
- </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>old value </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="ab9fe2263cd7814fc5292c6af81ed69eb"></a><!-- doxytag: member="rs_atomic.rsh::rsAtomicXor" ref="ab9fe2263cd7814fc5292c6af81ed69eb" args="(volatile int32_t *addr, int32_t value)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> rsAtomicXor </td>
- <td>(</td>
- <td class="paramtype">volatile <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> * </td>
- <td class="paramname"><em>addr</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> </td>
- <td class="paramname"><em>value</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Atomic Bitwise xor a value from the value at addr. addr[0] ^= value</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">addr</td><td>Address of value to modify </td></tr>
- <tr><td class="paramname">value</td><td>Amount to xor with the value at addr</td></tr>
- </table>
- </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>old value </dd></dl>
-
-</div>
-</div>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/rs__atomic_8rsh_source.html b/docs/html/reference/renderscript/rs__atomic_8rsh_source.html
deleted file mode 100644
index 2136df4..0000000
--- a/docs/html/reference/renderscript/rs__atomic_8rsh_source.html
+++ /dev/null
@@ -1,110 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_atomic.rsh Source File</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
- <div id="navrow1" class="tabs">
- <ul class="tablist">
- <li><a href="index.html"><span>Overview</span></a></li>
- <li class="current"><a href="globals.html"><span>Globals</span></a></li>
- <li><a href="annotated.html"><span>Structs</span></a></li>
- </ul>
- </div>
-<div class="header">
- <div class="headertitle">
-<div class="title">/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_atomic.rsh</div> </div>
-</div>
-<div class="contents">
-<a href="rs__atomic_8rsh.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * Copyright (C) 2011 The Android Open Source Project</span>
-<a name="l00003"></a>00003 <span class="comment"> *</span>
-<a name="l00004"></a>00004 <span class="comment"> * Licensed under the Apache License, Version 2.0 (the "License");</span>
-<a name="l00005"></a>00005 <span class="comment"> * you may not use this file except in compliance with the License.</span>
-<a name="l00006"></a>00006 <span class="comment"> * You may obtain a copy of the License at</span>
-<a name="l00007"></a>00007 <span class="comment"> *</span>
-<a name="l00008"></a>00008 <span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span>
-<a name="l00011"></a>00011 <span class="comment"> * distributed under the License is distributed on an "AS IS" BASIS,</span>
-<a name="l00012"></a>00012 <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
-<a name="l00013"></a>00013 <span class="comment"> * See the License for the specific language governing permissions and</span>
-<a name="l00014"></a>00014 <span class="comment"> * limitations under the License.</span>
-<a name="l00015"></a>00015 <span class="comment"> */</span>
-<a name="l00016"></a>00016
-<a name="l00023"></a>00023 <span class="preprocessor">#ifndef __RS_ATOMIC_RSH__</span>
-<a name="l00024"></a>00024 <span class="preprocessor"></span><span class="preprocessor">#define __RS_ATOMIC_RSH__</span>
-<a name="l00025"></a>00025 <span class="preprocessor"></span>
-<a name="l00026"></a>00026 <span class="preprocessor">#if (defined(RS_VERSION) && (RS_VERSION >= 14))</span>
-<a name="l00027"></a>00027 <span class="preprocessor"></span>
-<a name="l00036"></a>00036 <span class="keyword">extern</span> <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> __attribute__((overloadable))
-<a name="l00037"></a>00037 <a class="code" href="rs__atomic_8rsh.html#a619e7a489500a650569a76ccd93e105f">rsAtomicInc</a>(volatile <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a>* addr);
-<a name="l00046"></a>00046 extern <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> __attribute__((overloadable))
-<a name="l00047"></a>00047 <a class="code" href="rs__atomic_8rsh.html#a619e7a489500a650569a76ccd93e105f">rsAtomicInc</a>(volatile <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>* addr);
-<a name="l00048"></a>00048
-<a name="l00056"></a>00056 extern <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> __attribute__((overloadable))
-<a name="l00057"></a>00057 <a class="code" href="rs__atomic_8rsh.html#a16a69784a343d7c11bf6bd7fec9686ca">rsAtomicDec</a>(volatile <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a>* addr);
-<a name="l00065"></a>00065 extern <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> __attribute__((overloadable))
-<a name="l00066"></a>00066 <a class="code" href="rs__atomic_8rsh.html#a16a69784a343d7c11bf6bd7fec9686ca">rsAtomicDec</a>(volatile <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>* addr);
-<a name="l00067"></a>00067
-<a name="l00076"></a>00076 extern <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> __attribute__((overloadable))
-<a name="l00077"></a>00077 <a class="code" href="rs__atomic_8rsh.html#ab46665eff81030200f86db9c2181072a">rsAtomicAdd</a>(volatile <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a>* addr, <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> value);
-<a name="l00086"></a>00086 extern <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> __attribute__((overloadable))
-<a name="l00087"></a>00087 <a class="code" href="rs__atomic_8rsh.html#ab46665eff81030200f86db9c2181072a">rsAtomicAdd</a>(volatile <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>* addr, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> value);
-<a name="l00088"></a>00088
-<a name="l00097"></a>00097 extern <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> __attribute__((overloadable))
-<a name="l00098"></a>00098 <a class="code" href="rs__atomic_8rsh.html#a800dced6abbf09716391f35bc488900b">rsAtomicSub</a>(volatile <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a>* addr, <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> value);
-<a name="l00107"></a>00107 extern <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> __attribute__((overloadable))
-<a name="l00108"></a>00108 <a class="code" href="rs__atomic_8rsh.html#a800dced6abbf09716391f35bc488900b">rsAtomicSub</a>(volatile <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>* addr, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> value);
-<a name="l00109"></a>00109
-<a name="l00118"></a>00118 extern <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> __attribute__((overloadable))
-<a name="l00119"></a>00119 <a class="code" href="rs__atomic_8rsh.html#a7fdf5633662dd5b0898ad5a149e3c8ad">rsAtomicAnd</a>(volatile <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a>* addr, <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> value);
-<a name="l00128"></a>00128 extern <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> __attribute__((overloadable))
-<a name="l00129"></a>00129 <a class="code" href="rs__atomic_8rsh.html#a7fdf5633662dd5b0898ad5a149e3c8ad">rsAtomicAnd</a>(volatile <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>* addr, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> value);
-<a name="l00130"></a>00130
-<a name="l00139"></a>00139 extern <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> __attribute__((overloadable))
-<a name="l00140"></a>00140 <a class="code" href="rs__atomic_8rsh.html#a477f6eb17c4806bb715bfd975b6369cd">rsAtomicOr</a>(volatile <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a>* addr, <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> value);
-<a name="l00149"></a>00149 extern <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> __attribute__((overloadable))
-<a name="l00150"></a>00150 <a class="code" href="rs__atomic_8rsh.html#a477f6eb17c4806bb715bfd975b6369cd">rsAtomicOr</a>(volatile <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>* addr, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> value);
-<a name="l00151"></a>00151
-<a name="l00160"></a>00160 extern <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> __attribute__((overloadable))
-<a name="l00161"></a>00161 <a class="code" href="rs__atomic_8rsh.html#a5590505ea65c53b3bb26fa48a6b9c313">rsAtomicXor</a>(volatile <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>* addr, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> value);
-<a name="l00170"></a>00170 extern <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> __attribute__((overloadable))
-<a name="l00171"></a>00171 <a class="code" href="rs__atomic_8rsh.html#a5590505ea65c53b3bb26fa48a6b9c313">rsAtomicXor</a>(volatile <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a>* addr, <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> value);
-<a name="l00172"></a>00172
-<a name="l00182"></a>00182 extern <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> __attribute__((overloadable))
-<a name="l00183"></a>00183 <a class="code" href="rs__atomic_8rsh.html#a9f3cddc86f1075ca194a762fb8a3330a">rsAtomicMin</a>(volatile <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>* addr, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> value);
-<a name="l00193"></a>00193 extern <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> __attribute__((overloadable))
-<a name="l00194"></a>00194 <a class="code" href="rs__atomic_8rsh.html#a9f3cddc86f1075ca194a762fb8a3330a">rsAtomicMin</a>(volatile <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a>* addr, <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> value);
-<a name="l00195"></a>00195
-<a name="l00205"></a>00205 extern <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> __attribute__((overloadable))
-<a name="l00206"></a>00206 <a class="code" href="rs__atomic_8rsh.html#a1d49d69d14956152fcde34efe9cdff87">rsAtomicMax</a>(volatile <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>* addr, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> value);
-<a name="l00216"></a>00216 extern <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> __attribute__((overloadable))
-<a name="l00217"></a>00217 <a class="code" href="rs__atomic_8rsh.html#a1d49d69d14956152fcde34efe9cdff87">rsAtomicMax</a>(volatile <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a>* addr, <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> value);
-<a name="l00218"></a>00218
-<a name="l00230"></a>00230 extern <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> __attribute__((overloadable))
-<a name="l00231"></a>00231 <a class="code" href="rs__atomic_8rsh.html#a205d66a8eb29eee8968f886e488b4402">rsAtomicCas</a>(volatile <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a>* addr, <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> compareValue, <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> newValue);
-<a name="l00232"></a>00232
-<a name="l00244"></a>00244 extern <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> __attribute__((overloadable))
-<a name="l00245"></a>00245 <a class="code" href="rs__atomic_8rsh.html#a205d66a8eb29eee8968f886e488b4402">rsAtomicCas</a>(volatile <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>* addr, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> compareValue, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> newValue);
-<a name="l00246"></a>00246
-<a name="l00247"></a>00247 <span class="preprocessor">#endif //defined(RS_VERSION) && (RS_VERSION >= 14)</span>
-<a name="l00248"></a>00248 <span class="preprocessor"></span>
-<a name="l00249"></a>00249 <span class="preprocessor">#endif</span>
-<a name="l00250"></a>00250 <span class="preprocessor"></span>
-</pre></div></div>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/rs__cl_8rsh.html b/docs/html/reference/renderscript/rs__cl_8rsh.html
deleted file mode 100644
index 2a781b6..0000000
--- a/docs/html/reference/renderscript/rs__cl_8rsh.html
+++ /dev/null
@@ -1,2384 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_cl.rsh File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
- <div id="navrow1" class="tabs">
- <ul class="tablist">
- <li><a href="index.html"><span>Overview</span></a></li>
- <li class="current"><a href="globals.html"><span>Globals</span></a></li>
- <li><a href="annotated.html"><span>Structs</span></a></li>
- </ul>
- </div>
-</div>
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle">
-<div class="title">/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_cl.rsh File Reference</div> </div>
-</div>
-<div class="contents">
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#ac532b4c1895c8bd4fb75dc370c484351">char2</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a67421c4b17df15a1c726d912770e5ca4">convert_char2</a> (<a class="el" href="rs__types_8rsh.html#aff5eb7cd53a34bb01924bf64485296de">uchar2</a> v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#aff5eb7cd53a34bb01924bf64485296de">uchar2</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a833bb5476683ec5692feaf0cd5dcdd80">convert_uchar2</a> (<a class="el" href="rs__types_8rsh.html#aff5eb7cd53a34bb01924bf64485296de">uchar2</a> v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a303d3ad18aaeacfcfeda2b8580b98796">short2</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a83e89db1940f3190fbec5bd823a99fc5">convert_short2</a> (<a class="el" href="rs__types_8rsh.html#aff5eb7cd53a34bb01924bf64485296de">uchar2</a> v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a24a9d78cfc32475e2c6eb1cdec239bf2">ushort2</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a6862ea6ddfba8a59796bc681a544fb4f">convert_ushort2</a> (<a class="el" href="rs__types_8rsh.html#aff5eb7cd53a34bb01924bf64485296de">uchar2</a> v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a6bc1fa1354fe2145b8f12b4bbfafcf4c">int2</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a9d2e4b8f0f25a7ccaed05248edc21f06">convert_int2</a> (<a class="el" href="rs__types_8rsh.html#aff5eb7cd53a34bb01924bf64485296de">uchar2</a> v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#aaf90cd1f01a121e824fc6e1b927e7683">uint2</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a01ff256469203ba33ba0f220b54e70d1">convert_uint2</a> (<a class="el" href="rs__types_8rsh.html#aff5eb7cd53a34bb01924bf64485296de">uchar2</a> v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a1ad62d449c1e3548573c2f9c1a5cb13a">convert_float2</a> (<a class="el" href="rs__types_8rsh.html#aff5eb7cd53a34bb01924bf64485296de">uchar2</a> v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a07648648c7f857cfd1479821d4389751">acos</a> (float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a6575106413ec72448439ef67f1309424">acosh</a> (float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a2c9092eb07e9df891935e93469e70d4e">acospi</a> (float v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a78b9d0583bd0699e2eac30d2a136817a">asin</a> (float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a4e3fe465ed5541af53192c59c80af1a0">asinh</a> (float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a812eb4521e65a451161417f9898384f7">asinpi</a> (float v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#ab790c3a7df8fcbeab77f6c0e3b4dcada">atan</a> (float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#aaf4b636b09041878e1542054c73d81e9">atan2</a> (float y, float x)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a83bdf415cc561ff6237a124273d9fb0d">atanh</a> (float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a5052e31ce616d35aee25a3a83f6fc117">atanpi</a> (float v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a89ec5f6a2f64a0f9e97438fbd41aaace">atan2pi</a> (float y, float x)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#ae9d1787b55c2587478a24d96573225df">cbrt</a> (float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#aa8fc6daff743a1b635ccbf9af83fe4e4">ceil</a> (float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a29f2602d95aa7b3950e2b77b3e268f7e">copysign</a> (float x, float y)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a8eec7aeb4b0c46b06cbcd1a3ac3e6f05">cos</a> (float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#ac8d88d83182afd591401eaed101d9670">cosh</a> (float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a258d2c828fd46eae2867373884d834a9">cospi</a> (float v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a2e24dc8594e758b64c340153f67a533c">erfc</a> (float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a139f102df651c25c26dd35d549173f57">erf</a> (float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a6d9aac64c2686961ca8f30e3c34fef36">exp</a> (float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a39bca19ee2b1aa95144e58eb4a1e4f88">exp2</a> (float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a9243de1d67fcc847a89f95748d664b19">pow</a> (float x, float y)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a0225ff40d79f78260293e776c6a77422">exp10</a> (float v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a7996044b67be921a5e58e2fe76af66e2">expm1</a> (float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#ad6e897f1acae252ec0901e3b122992ea">fabs</a> (float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#ae7a7bac0f4e244594078f87b42c8716a">fdim</a> (float, float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#aae2da38a7246378dff8014ec407a30c3">floor</a> (float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#ac42909daec463fe449743e70baf8360d">fma</a> (float a, float b, float c)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a60f2072d8a746e7fe05cd46dea0fefcc">fmax</a> (float x, float y)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a1fd9d57c6c992866bf5161be2cf4c447">fmin</a> (float x, float y)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a31d5e179730ae44e1dbc74c1535f392e">fmod</a> (float x, float y)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a9374786a1bbe3d2dd886cfad642bfec6">fract</a> (float v, float *iptr)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a84b546baf72a871a5ba688d434d6ce2b">fract</a> (float v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a778635fffed3cee8ab0800482ba53a30">frexp</a> (float v, int *iptr)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a147f38d6e41f45de9b5e7c6f3dcac010">hypot</a> (float x, float y)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#aad9a8beba52acb77b1efeba432e6cc2c">ilogb</a> (float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a013bc1dcda984cbc608e123ed38491e6">ldexp</a> (float x, int y)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a3ff36f9b21927d6b4b58616e48fddcb4">lgamma</a> (float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a735f4e14e33c50348ef41220f9210bcc">lgamma</a> (float x, int *y)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a3ff85f5f4b206ecf9ec9d128d7d18a08">log</a> (float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#af5c1bdba2a13aa2e2b0722287f6a919f">log10</a> (float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#aab1c4f06daf6f2a50fd73f0c28929213">log2</a> (float v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#ae10541ede49062ef7f977712c4878c1f">log1p</a> (float v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a28742d6ce2f20a61f16ecc08ed499871">logb</a> (float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a4f9086698f1eb466ba2dccf7e331cdc3">mad</a> (float a, float b, float c)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a841633bcdcaeb6a514d9c6460f0adf2d">modf</a> (float x, float *iret)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#adb11df05fb9985595af0a7bd882bdeac">nextafter</a> (float x, float y)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a67d1fe795e092003f687f3cc6d3c407a">pown</a> (float v, int p)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a316c30ba3e6bc11673bfd34bb4746d24">powr</a> (float v, float p)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a5188ac0e3af95b0956c6abeafb74fda9">remainder</a> (float x, float y)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#adb0ffe344ae56ca7fc9083c1f2943e55">rint</a> (float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a2776b517528b8185a6bb50753af0f6cf">rootn</a> (float v, int n)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#aff4846ab5b947550814d5414a2c3626f">round</a> (float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a92da0faef80c4d8f66e954c8c169a729">sqrt</a> (float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a8a3992b97cb199b1c8d598996b600988">rsqrt</a> (float v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a8c8cd526b44eb55aede77cf659f24306">sin</a> (float v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a892c91a30bbc713aa77105d8e9e25881">sincos</a> (float v, float *cosptr)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#ae686e0cc567f7ee2b0a84706aa486e4a">sinh</a> (float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a9ca027af0acf3ff22d91cd9489766976">sinpi</a> (float v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#af12e245af8ff9bb72b5000e7c26cd8fe">tan</a> (float v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#abc36e89ddb87ea78451d1c5921ddbd8d">tanh</a> (float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#aee96c8910a7d8b0082574813b6b68b9a">tanpi</a> (float v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#ab9f4cbfd2470420ee302f28cf3de6dd0">tgamma</a> (float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#ad1a7c65693231219db1babeae1c41f15">trunc</a> (float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a1ed0afedda2068ad1f9ad14ef3449e50">abs</a> (char v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a8a0f94dce3caa2a50cbf2d9f4bc674ac">clz</a> (<a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a5f61ca44b3ad4b11365b0c4137a22658">min</a> (<a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> v1, <a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> v2)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a616bf7a90d8d3c73a48d2c395d9dc4ea">max</a> (<a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> v1, <a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> v2)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#afae5eac13e35acd0f47d7e3c601e16ed">clamp</a> (float amount, float low, float high)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a0276b63d6905fa802032f1490a24515b">degrees</a> (float radians)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a254612a612ff7539b01a1478e03d8697">mix</a> (float start, float stop, float amount)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#aceb63a0da6393b8ac2ed229bae6232d6">radians</a> (float degrees)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a9f40337dfee48d1881b87b35aa8133dd">step</a> (float edge, float v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a9fe423cc7d4c6d767f8a608d2ee76657">sign</a> (float v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#add745d593bc2b23285bd10e52a204e25">cross</a> (<a class="el" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> lhs, <a class="el" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> rhs)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#aa26d85eac3067e9769b33b6914b180f2">dot</a> (float lhs, float rhs)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a902d4d2fab31ba8f9631b1f681e99baa">length</a> (float v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a412bf215ae838c65079560bbefefaca7">distance</a> (float lhs, float rhs)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a69c2a56f743593439d5ae5e3ec8e517f">normalize</a> (float v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a49050a8e32c95f60df4eaba9d7dfdca6">half_recip</a> (float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a26e2c17b20ee4c98b78c365d390e4fb8">half_sqrt</a> (float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a0925ceb22d33dcbb45914350ffa2edea">half_rsqrt</a> (float v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a7c8f2f987044a360b5f616a80a74a4d5">fast_length</a> (float v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a4fcbdb9099e7d653a951cb344ba3c3c9">fast_distance</a> (float lhs, float rhs)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a3878bee2879351f518be68e015d76a35">fast_normalize</a> (float v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#ab354691ecd844549b27ef9202e17f7ac">native_exp2</a> (float v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a45d8176823a05b891313f3d96decf491">native_exp</a> (float v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__cl_8rsh.html#a601ee3d2bf769f1cdc39a886f7a6c986">native_exp10</a> (float v)</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Basic math functions. </p>
-
-<p>Definition in file <a class="el" href="rs__cl_8rsh_source.html">rs_cl.rsh</a>.</p>
-</div><hr/><h2>Function Documentation</h2>
-<a class="anchor" id="a1ed0afedda2068ad1f9ad14ef3449e50"></a><!-- doxytag: member="rs_cl.rsh::abs" ref="a1ed0afedda2068ad1f9ad14ef3449e50" args="(char v)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> abs </td>
- <td>(</td>
- <td class="paramtype">char </td>
- <td class="paramname"><em>v</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Return the absolute value of a value.</p>
-<p>Supports 1,2,3,4 components of char, short, int. </p>
-
-</div>
-</div>
-<a class="anchor" id="a07648648c7f857cfd1479821d4389751"></a><!-- doxytag: member="rs_cl.rsh::acos" ref="a07648648c7f857cfd1479821d4389751" args="(float)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float acos </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Return the inverse cosine.</p>
-<p>Supports float, float2, float3, float4 </p>
-
-</div>
-</div>
-<a class="anchor" id="a6575106413ec72448439ef67f1309424"></a><!-- doxytag: member="rs_cl.rsh::acosh" ref="a6575106413ec72448439ef67f1309424" args="(float)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float acosh </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Return the inverse hyperbolic cosine.</p>
-<p>Supports float, float2, float3, float4 </p>
-
-</div>
-</div>
-<a class="anchor" id="a2c9092eb07e9df891935e93469e70d4e"></a><!-- doxytag: member="rs_cl.rsh::acospi" ref="a2c9092eb07e9df891935e93469e70d4e" args="(float v)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float acospi </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>v</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Return the inverse cosine divided by PI.</p>
-<p>Supports float, float2, float3, float4 </p>
-
-</div>
-</div>
-<a class="anchor" id="a78b9d0583bd0699e2eac30d2a136817a"></a><!-- doxytag: member="rs_cl.rsh::asin" ref="a78b9d0583bd0699e2eac30d2a136817a" args="(float)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float asin </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Return the inverse sine.</p>
-<p>Supports float, float2, float3, float4 </p>
-
-</div>
-</div>
-<a class="anchor" id="a4e3fe465ed5541af53192c59c80af1a0"></a><!-- doxytag: member="rs_cl.rsh::asinh" ref="a4e3fe465ed5541af53192c59c80af1a0" args="(float)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float asinh </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Return the inverse hyperbolic sine.</p>
-<p>Supports float, float2, float3, float4 </p>
-
-</div>
-</div>
-<a class="anchor" id="a812eb4521e65a451161417f9898384f7"></a><!-- doxytag: member="rs_cl.rsh::asinpi" ref="a812eb4521e65a451161417f9898384f7" args="(float v)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float asinpi </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>v</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Return the inverse sine divided by PI.</p>
-<p>Supports float, float2, float3, float4 </p>
-
-</div>
-</div>
-<a class="anchor" id="ab790c3a7df8fcbeab77f6c0e3b4dcada"></a><!-- doxytag: member="rs_cl.rsh::atan" ref="ab790c3a7df8fcbeab77f6c0e3b4dcada" args="(float)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float atan </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Return the inverse tangent.</p>
-<p>Supports float, float2, float3, float4 </p>
-
-</div>
-</div>
-<a class="anchor" id="aaf4b636b09041878e1542054c73d81e9"></a><!-- doxytag: member="rs_cl.rsh::atan2" ref="aaf4b636b09041878e1542054c73d81e9" args="(float y, float x)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float atan2 </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>y</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>x</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Return the inverse tangent of y / x.</p>
-<p>Supports float, float2, float3, float4. Both arguments must be of the same type.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">y</td><td></td></tr>
- <tr><td class="paramname">x</td><td></td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a89ec5f6a2f64a0f9e97438fbd41aaace"></a><!-- doxytag: member="rs_cl.rsh::atan2pi" ref="a89ec5f6a2f64a0f9e97438fbd41aaace" args="(float y, float x)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float atan2pi </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>y</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>x</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Return the inverse tangent of y / x, divided by PI.</p>
-<p>Supports float, float2, float3, float4. Both arguments must be of the same type.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">y</td><td></td></tr>
- <tr><td class="paramname">x</td><td></td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a83bdf415cc561ff6237a124273d9fb0d"></a><!-- doxytag: member="rs_cl.rsh::atanh" ref="a83bdf415cc561ff6237a124273d9fb0d" args="(float)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float atanh </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Return the inverse hyperbolic tangent.</p>
-<p>Supports float, float2, float3, float4 </p>
-
-</div>
-</div>
-<a class="anchor" id="a5052e31ce616d35aee25a3a83f6fc117"></a><!-- doxytag: member="rs_cl.rsh::atanpi" ref="a5052e31ce616d35aee25a3a83f6fc117" args="(float v)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float atanpi </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>v</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Return the inverse tangent divided by PI.</p>
-<p>Supports float, float2, float3, float4 </p>
-
-</div>
-</div>
-<a class="anchor" id="ae9d1787b55c2587478a24d96573225df"></a><!-- doxytag: member="rs_cl.rsh::cbrt" ref="ae9d1787b55c2587478a24d96573225df" args="(float)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float cbrt </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Return the cube root.</p>
-<p>Supports float, float2, float3, float4. </p>
-
-</div>
-</div>
-<a class="anchor" id="aa8fc6daff743a1b635ccbf9af83fe4e4"></a><!-- doxytag: member="rs_cl.rsh::ceil" ref="aa8fc6daff743a1b635ccbf9af83fe4e4" args="(float)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float ceil </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Return the smallest integer not less than a value.</p>
-<p>Supports float, float2, float3, float4. </p>
-
-</div>
-</div>
-<a class="anchor" id="afae5eac13e35acd0f47d7e3c601e16ed"></a><!-- doxytag: member="rs_cl.rsh::clamp" ref="afae5eac13e35acd0f47d7e3c601e16ed" args="(float amount, float low, float high)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float clamp </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>amount</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>low</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>high</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Clamp a value to a specified high and low bound.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">amount</td><td>value to be clamped. Supports 1,2,3,4 components </td></tr>
- <tr><td class="paramname">low</td><td>Lower bound, must be scalar or matching vector. </td></tr>
- <tr><td class="paramname">high</td><td>High bound, must match type of low </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a8a0f94dce3caa2a50cbf2d9f4bc674ac"></a><!-- doxytag: member="rs_cl.rsh::clz" ref="a8a0f94dce3caa2a50cbf2d9f4bc674ac" args="(uchar v)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> clz </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> </td>
- <td class="paramname"><em>v</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Return the number of leading 0-bits in a value.</p>
-<p>Supports 1,2,3,4 components of uchar, char, ushort, short, uint, int. </p>
-
-</div>
-</div>
-<a class="anchor" id="a67421c4b17df15a1c726d912770e5ca4"></a><!-- doxytag: member="rs_cl.rsh::convert_char2" ref="a67421c4b17df15a1c726d912770e5ca4" args="(uchar2 v)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="rs__types_8rsh.html#ac532b4c1895c8bd4fb75dc370c484351">char2</a> convert_char2 </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#aff5eb7cd53a34bb01924bf64485296de">uchar2</a> </td>
- <td class="paramname"><em>v</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Convert to char.</p>
-<p>Supports 2,3,4 components of uchar, char, ushort, short, uint, int, float. </p>
-
-</div>
-</div>
-<a class="anchor" id="a1ad62d449c1e3548573c2f9c1a5cb13a"></a><!-- doxytag: member="rs_cl.rsh::convert_float2" ref="a1ad62d449c1e3548573c2f9c1a5cb13a" args="(uchar2 v)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> convert_float2 </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#aff5eb7cd53a34bb01924bf64485296de">uchar2</a> </td>
- <td class="paramname"><em>v</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Convert to float.</p>
-<p>Supports 2,3,4 components of uchar, char, ushort, short, uint, int, float. </p>
-
-</div>
-</div>
-<a class="anchor" id="a9d2e4b8f0f25a7ccaed05248edc21f06"></a><!-- doxytag: member="rs_cl.rsh::convert_int2" ref="a9d2e4b8f0f25a7ccaed05248edc21f06" args="(uchar2 v)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="rs__types_8rsh.html#a6bc1fa1354fe2145b8f12b4bbfafcf4c">int2</a> convert_int2 </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#aff5eb7cd53a34bb01924bf64485296de">uchar2</a> </td>
- <td class="paramname"><em>v</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Convert to int.</p>
-<p>Supports 2,3,4 components of uchar, char, ushort, short, uint, int, float. </p>
-
-</div>
-</div>
-<a class="anchor" id="a83e89db1940f3190fbec5bd823a99fc5"></a><!-- doxytag: member="rs_cl.rsh::convert_short2" ref="a83e89db1940f3190fbec5bd823a99fc5" args="(uchar2 v)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="rs__types_8rsh.html#a303d3ad18aaeacfcfeda2b8580b98796">short2</a> convert_short2 </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#aff5eb7cd53a34bb01924bf64485296de">uchar2</a> </td>
- <td class="paramname"><em>v</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Convert to short.</p>
-<p>Supports 2,3,4 components of uchar, char, ushort, short, uint, int, float. </p>
-
-</div>
-</div>
-<a class="anchor" id="a833bb5476683ec5692feaf0cd5dcdd80"></a><!-- doxytag: member="rs_cl.rsh::convert_uchar2" ref="a833bb5476683ec5692feaf0cd5dcdd80" args="(uchar2 v)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="rs__types_8rsh.html#aff5eb7cd53a34bb01924bf64485296de">uchar2</a> convert_uchar2 </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#aff5eb7cd53a34bb01924bf64485296de">uchar2</a> </td>
- <td class="paramname"><em>v</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Convert to unsigned char.</p>
-<p>Supports 2,3,4 components of uchar, char, ushort, short, uint, int, float. </p>
-
-</div>
-</div>
-<a class="anchor" id="a01ff256469203ba33ba0f220b54e70d1"></a><!-- doxytag: member="rs_cl.rsh::convert_uint2" ref="a01ff256469203ba33ba0f220b54e70d1" args="(uchar2 v)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="rs__types_8rsh.html#aaf90cd1f01a121e824fc6e1b927e7683">uint2</a> convert_uint2 </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#aff5eb7cd53a34bb01924bf64485296de">uchar2</a> </td>
- <td class="paramname"><em>v</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Convert to unsigned int.</p>
-<p>Supports 2,3,4 components of uchar, char, ushort, short, uint, int, float. </p>
-
-</div>
-</div>
-<a class="anchor" id="a6862ea6ddfba8a59796bc681a544fb4f"></a><!-- doxytag: member="rs_cl.rsh::convert_ushort2" ref="a6862ea6ddfba8a59796bc681a544fb4f" args="(uchar2 v)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="rs__types_8rsh.html#a24a9d78cfc32475e2c6eb1cdec239bf2">ushort2</a> convert_ushort2 </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#aff5eb7cd53a34bb01924bf64485296de">uchar2</a> </td>
- <td class="paramname"><em>v</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Convert to unsigned short.</p>
-<p>Supports 2,3,4 components of uchar, char, ushort, short, uint, int, float. </p>
-
-</div>
-</div>
-<a class="anchor" id="a29f2602d95aa7b3950e2b77b3e268f7e"></a><!-- doxytag: member="rs_cl.rsh::copysign" ref="a29f2602d95aa7b3950e2b77b3e268f7e" args="(float x, float y)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float copysign </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>x</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>y</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Copy the sign bit from y to x.</p>
-<p>Supports float, float2, float3, float4. Both arguments must be of the same type.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">x</td><td></td></tr>
- <tr><td class="paramname">y</td><td></td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a8eec7aeb4b0c46b06cbcd1a3ac3e6f05"></a><!-- doxytag: member="rs_cl.rsh::cos" ref="a8eec7aeb4b0c46b06cbcd1a3ac3e6f05" args="(float)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float cos </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Return the cosine.</p>
-<p>Supports float, float2, float3, float4. </p>
-
-</div>
-</div>
-<a class="anchor" id="ac8d88d83182afd591401eaed101d9670"></a><!-- doxytag: member="rs_cl.rsh::cosh" ref="ac8d88d83182afd591401eaed101d9670" args="(float)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float cosh </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Return the hypebolic cosine.</p>
-<p>Supports float, float2, float3, float4. </p>
-
-</div>
-</div>
-<a class="anchor" id="a258d2c828fd46eae2867373884d834a9"></a><!-- doxytag: member="rs_cl.rsh::cospi" ref="a258d2c828fd46eae2867373884d834a9" args="(float v)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float cospi </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>v</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Return the cosine of the value * PI.</p>
-<p>Supports float, float2, float3, float4. </p>
-
-</div>
-</div>
-<a class="anchor" id="add745d593bc2b23285bd10e52a204e25"></a><!-- doxytag: member="rs_cl.rsh::cross" ref="add745d593bc2b23285bd10e52a204e25" args="(float3 lhs, float3 rhs)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> cross </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> </td>
- <td class="paramname"><em>lhs</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> </td>
- <td class="paramname"><em>rhs</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Compute the cross product of two vectors.</p>
-<p>Supports 3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="a0276b63d6905fa802032f1490a24515b"></a><!-- doxytag: member="rs_cl.rsh::degrees" ref="a0276b63d6905fa802032f1490a24515b" args="(float radians)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float degrees </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>radians</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Convert from radians to degrees.</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="a412bf215ae838c65079560bbefefaca7"></a><!-- doxytag: member="rs_cl.rsh::distance" ref="a412bf215ae838c65079560bbefefaca7" args="(float lhs, float rhs)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float distance </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>lhs</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>rhs</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Compute the distance between two points.</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="aa26d85eac3067e9769b33b6914b180f2"></a><!-- doxytag: member="rs_cl.rsh::dot" ref="aa26d85eac3067e9769b33b6914b180f2" args="(float lhs, float rhs)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float dot </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>lhs</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>rhs</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Compute the dot product of two vectors.</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="a139f102df651c25c26dd35d549173f57"></a><!-- doxytag: member="rs_cl.rsh::erf" ref="a139f102df651c25c26dd35d549173f57" args="(float)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float erf </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Return the error function.</p>
-<p>Supports float, float2, float3, float4. </p>
-
-</div>
-</div>
-<a class="anchor" id="a2e24dc8594e758b64c340153f67a533c"></a><!-- doxytag: member="rs_cl.rsh::erfc" ref="a2e24dc8594e758b64c340153f67a533c" args="(float)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float erfc </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Return the complementary error function.</p>
-<p>Supports float, float2, float3, float4. </p>
-
-</div>
-</div>
-<a class="anchor" id="a6d9aac64c2686961ca8f30e3c34fef36"></a><!-- doxytag: member="rs_cl.rsh::exp" ref="a6d9aac64c2686961ca8f30e3c34fef36" args="(float)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float exp </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Return e ^ value.</p>
-<p>Supports float, float2, float3, float4. </p>
-
-</div>
-</div>
-<a class="anchor" id="a0225ff40d79f78260293e776c6a77422"></a><!-- doxytag: member="rs_cl.rsh::exp10" ref="a0225ff40d79f78260293e776c6a77422" args="(float v)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float exp10 </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>v</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Return 10 ^ value.</p>
-<p>Supports float, float2, float3, float4. </p>
-
-</div>
-</div>
-<a class="anchor" id="a39bca19ee2b1aa95144e58eb4a1e4f88"></a><!-- doxytag: member="rs_cl.rsh::exp2" ref="a39bca19ee2b1aa95144e58eb4a1e4f88" args="(float)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float exp2 </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Return 2 ^ value.</p>
-<p>Supports float, float2, float3, float4. </p>
-
-</div>
-</div>
-<a class="anchor" id="a7996044b67be921a5e58e2fe76af66e2"></a><!-- doxytag: member="rs_cl.rsh::expm1" ref="a7996044b67be921a5e58e2fe76af66e2" args="(float)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float expm1 </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Return (e ^ value) - 1.</p>
-<p>Supports float, float2, float3, float4. </p>
-
-</div>
-</div>
-<a class="anchor" id="ad6e897f1acae252ec0901e3b122992ea"></a><!-- doxytag: member="rs_cl.rsh::fabs" ref="ad6e897f1acae252ec0901e3b122992ea" args="(float)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float fabs </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Return the absolute value of a value.</p>
-<p>Supports float, float2, float3, float4. </p>
-
-</div>
-</div>
-<a class="anchor" id="a4fcbdb9099e7d653a951cb344ba3c3c9"></a><!-- doxytag: member="rs_cl.rsh::fast_distance" ref="a4fcbdb9099e7d653a951cb344ba3c3c9" args="(float lhs, float rhs)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float fast_distance </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>lhs</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>rhs</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Compute the approximate distance between two points.</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="a7c8f2f987044a360b5f616a80a74a4d5"></a><!-- doxytag: member="rs_cl.rsh::fast_length" ref="a7c8f2f987044a360b5f616a80a74a4d5" args="(float v)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float fast_length </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>v</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Compute the approximate length of a vector.</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="a3878bee2879351f518be68e015d76a35"></a><!-- doxytag: member="rs_cl.rsh::fast_normalize" ref="a3878bee2879351f518be68e015d76a35" args="(float v)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float fast_normalize </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>v</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Approximately normalize a vector.</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="ae7a7bac0f4e244594078f87b42c8716a"></a><!-- doxytag: member="rs_cl.rsh::fdim" ref="ae7a7bac0f4e244594078f87b42c8716a" args="(float, float)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float fdim </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname">, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Return the positive difference between two values.</p>
-<p>Supports float, float2, float3, float4. Both arguments must be of the same type. </p>
-
-</div>
-</div>
-<a class="anchor" id="aae2da38a7246378dff8014ec407a30c3"></a><!-- doxytag: member="rs_cl.rsh::floor" ref="aae2da38a7246378dff8014ec407a30c3" args="(float)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float floor </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Return the smallest integer not greater than a value.</p>
-<p>Supports float, float2, float3, float4. </p>
-
-</div>
-</div>
-<a class="anchor" id="ac42909daec463fe449743e70baf8360d"></a><!-- doxytag: member="rs_cl.rsh::fma" ref="ac42909daec463fe449743e70baf8360d" args="(float a, float b, float c)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float fma </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>a</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>b</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>c</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Return a*b + c.</p>
-<p>Supports float, float2, float3, float4. </p>
-
-</div>
-</div>
-<a class="anchor" id="a60f2072d8a746e7fe05cd46dea0fefcc"></a><!-- doxytag: member="rs_cl.rsh::fmax" ref="a60f2072d8a746e7fe05cd46dea0fefcc" args="(float x, float y)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float fmax </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>x</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>y</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Return (x < y ? y : x)</p>
-<p>Supports float, float2, float3, float4. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">x,:</td><td>may be float, float2, float3, float4 </td></tr>
- <tr><td class="paramname">y,:</td><td>may be float or vector. If vector must match type of x. </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a1fd9d57c6c992866bf5161be2cf4c447"></a><!-- doxytag: member="rs_cl.rsh::fmin" ref="a1fd9d57c6c992866bf5161be2cf4c447" args="(float x, float y)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float fmin </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>x</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>y</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Return (x > y ? y : x)</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">x,:</td><td>may be float, float2, float3, float4 </td></tr>
- <tr><td class="paramname">y,:</td><td>may be float or vector. If vector must match type of x. </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a31d5e179730ae44e1dbc74c1535f392e"></a><!-- doxytag: member="rs_cl.rsh::fmod" ref="a31d5e179730ae44e1dbc74c1535f392e" args="(float x, float y)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float fmod </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>x</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>y</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Return the remainder from x / y</p>
-<p>Supports float, float2, float3, float4. </p>
-
-</div>
-</div>
-<a class="anchor" id="a9374786a1bbe3d2dd886cfad642bfec6"></a><!-- doxytag: member="rs_cl.rsh::fract" ref="a9374786a1bbe3d2dd886cfad642bfec6" args="(float v, float *iptr)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float fract </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>v</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float * </td>
- <td class="paramname"><em>iptr</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Return fractional part of v</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">iptr</td><td>iptr[0] will be set to the floor of the input value. Supports float, float2, float3, float4. </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a84b546baf72a871a5ba688d434d6ce2b"></a><!-- doxytag: member="rs_cl.rsh::fract" ref="a84b546baf72a871a5ba688d434d6ce2b" args="(float v)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">static <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> fract </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>v</em></td><td>)</td>
- <td><code> [inline, static]</code></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Return fractional part of v</p>
-<p>Supports float, float2, float3, float4. </p>
-
-<p>Definition at line <a class="el" href="rs__cl_8rsh_source.html#l00485">485</a> of file <a class="el" href="rs__cl_8rsh_source.html">rs_cl.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a778635fffed3cee8ab0800482ba53a30"></a><!-- doxytag: member="rs_cl.rsh::frexp" ref="a778635fffed3cee8ab0800482ba53a30" args="(float v, int *iptr)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float frexp </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>v</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">int * </td>
- <td class="paramname"><em>iptr</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Return the mantissa and place the exponent into iptr[0]</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">v</td><td>Supports float, float2, float3, float4. </td></tr>
- <tr><td class="paramname">iptr</td><td>Must have the same vector size as v. </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a49050a8e32c95f60df4eaba9d7dfdca6"></a><!-- doxytag: member="rs_cl.rsh::half_recip" ref="a49050a8e32c95f60df4eaba9d7dfdca6" args="(float)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float half_recip </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Return the approximate reciprocal of a value.</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="a0925ceb22d33dcbb45914350ffa2edea"></a><!-- doxytag: member="rs_cl.rsh::half_rsqrt" ref="a0925ceb22d33dcbb45914350ffa2edea" args="(float v)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float half_rsqrt </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>v</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Return the approximate value of (1 / sqrt(value)).</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="a26e2c17b20ee4c98b78c365d390e4fb8"></a><!-- doxytag: member="rs_cl.rsh::half_sqrt" ref="a26e2c17b20ee4c98b78c365d390e4fb8" args="(float)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float half_sqrt </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Return the approximate square root of a value.</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="a147f38d6e41f45de9b5e7c6f3dcac010"></a><!-- doxytag: member="rs_cl.rsh::hypot" ref="a147f38d6e41f45de9b5e7c6f3dcac010" args="(float x, float y)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float hypot </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>x</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>y</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Return sqrt(x*x + y*y)</p>
-<p>Supports float, float2, float3, float4. </p>
-
-</div>
-</div>
-<a class="anchor" id="aad9a8beba52acb77b1efeba432e6cc2c"></a><!-- doxytag: member="rs_cl.rsh::ilogb" ref="aad9a8beba52acb77b1efeba432e6cc2c" args="(float)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">int ilogb </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Return the integer exponent of a value</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="a013bc1dcda984cbc608e123ed38491e6"></a><!-- doxytag: member="rs_cl.rsh::ldexp" ref="a013bc1dcda984cbc608e123ed38491e6" args="(float x, int y)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float ldexp </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>x</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">int </td>
- <td class="paramname"><em>y</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Return (x * 2^y)</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">x</td><td>Supports 1,2,3,4 components </td></tr>
- <tr><td class="paramname">y</td><td>Supports single component or matching vector. </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a902d4d2fab31ba8f9631b1f681e99baa"></a><!-- doxytag: member="rs_cl.rsh::length" ref="a902d4d2fab31ba8f9631b1f681e99baa" args="(float v)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float length </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>v</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Compute the length of a vector.</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="a3ff36f9b21927d6b4b58616e48fddcb4"></a><!-- doxytag: member="rs_cl.rsh::lgamma" ref="a3ff36f9b21927d6b4b58616e48fddcb4" args="(float)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float lgamma </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Return the log gamma</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="a735f4e14e33c50348ef41220f9210bcc"></a><!-- doxytag: member="rs_cl.rsh::lgamma" ref="a735f4e14e33c50348ef41220f9210bcc" args="(float x, int *y)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float lgamma </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>x</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">int * </td>
- <td class="paramname"><em>y</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Return the log gamma and sign</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">x</td><td>Supports 1,2,3,4 components </td></tr>
- <tr><td class="paramname">y</td><td>Supports matching vector. </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a3ff85f5f4b206ecf9ec9d128d7d18a08"></a><!-- doxytag: member="rs_cl.rsh::log" ref="a3ff85f5f4b206ecf9ec9d128d7d18a08" args="(float)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float log </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Return the natural logarithm</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="af5c1bdba2a13aa2e2b0722287f6a919f"></a><!-- doxytag: member="rs_cl.rsh::log10" ref="af5c1bdba2a13aa2e2b0722287f6a919f" args="(float)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float log10 </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Return the base 10 logarithm</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="ae10541ede49062ef7f977712c4878c1f"></a><!-- doxytag: member="rs_cl.rsh::log1p" ref="ae10541ede49062ef7f977712c4878c1f" args="(float v)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float log1p </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>v</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Return the natural logarithm of (v + 1.0f)</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="aab1c4f06daf6f2a50fd73f0c28929213"></a><!-- doxytag: member="rs_cl.rsh::log2" ref="aab1c4f06daf6f2a50fd73f0c28929213" args="(float v)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float log2 </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>v</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Return the base 2 logarithm</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="a28742d6ce2f20a61f16ecc08ed499871"></a><!-- doxytag: member="rs_cl.rsh::logb" ref="a28742d6ce2f20a61f16ecc08ed499871" args="(float)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float logb </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Compute the exponent of the value.</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="a4f9086698f1eb466ba2dccf7e331cdc3"></a><!-- doxytag: member="rs_cl.rsh::mad" ref="a4f9086698f1eb466ba2dccf7e331cdc3" args="(float a, float b, float c)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float mad </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>a</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>b</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>c</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Compute (a * b) + c</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="a616bf7a90d8d3c73a48d2c395d9dc4ea"></a><!-- doxytag: member="rs_cl.rsh::max" ref="a616bf7a90d8d3c73a48d2c395d9dc4ea" args="(uchar v1, uchar v2)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> max </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> </td>
- <td class="paramname"><em>v1</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> </td>
- <td class="paramname"><em>v2</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Return the maximum of two values.</p>
-<p>Supports 1,2,3,4 components of uchar, char, ushort, short, uint, int, float. </p>
-
-</div>
-</div>
-<a class="anchor" id="a5f61ca44b3ad4b11365b0c4137a22658"></a><!-- doxytag: member="rs_cl.rsh::min" ref="a5f61ca44b3ad4b11365b0c4137a22658" args="(uchar v1, uchar v2)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> min </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> </td>
- <td class="paramname"><em>v1</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> </td>
- <td class="paramname"><em>v2</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Return the minimum of two values.</p>
-<p>Supports 1,2,3,4 components of uchar, char, ushort, short, uint, int, float. </p>
-
-</div>
-</div>
-<a class="anchor" id="a254612a612ff7539b01a1478e03d8697"></a><!-- doxytag: member="rs_cl.rsh::mix" ref="a254612a612ff7539b01a1478e03d8697" args="(float start, float stop, float amount)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float mix </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>start</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>stop</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>amount</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>return start + ((stop - start) * amount);</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="a841633bcdcaeb6a514d9c6460f0adf2d"></a><!-- doxytag: member="rs_cl.rsh::modf" ref="a841633bcdcaeb6a514d9c6460f0adf2d" args="(float x, float *iret)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float modf </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>x</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float * </td>
- <td class="paramname"><em>iret</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Return the integral and fractional components of a number. Supports 1,2,3,4 components</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">x</td><td>Source value </td></tr>
- <tr><td class="paramname">iret</td><td>iret[0] will be set to the integral portion of the number. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>The floating point portion of the value. </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a45d8176823a05b891313f3d96decf491"></a><!-- doxytag: member="rs_cl.rsh::native_exp" ref="a45d8176823a05b891313f3d96decf491" args="(float v)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float native_exp </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>v</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Fast approximate exp valid for inputs -86.f to 86.f Max 8192 ulps of error</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="a601ee3d2bf769f1cdc39a886f7a6c986"></a><!-- doxytag: member="rs_cl.rsh::native_exp10" ref="a601ee3d2bf769f1cdc39a886f7a6c986" args="(float v)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float native_exp10 </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>v</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Fast approximate exp10 valid for inputs -37.f to 37.f Max 8192 ulps of error</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="ab354691ecd844549b27ef9202e17f7ac"></a><!-- doxytag: member="rs_cl.rsh::native_exp2" ref="ab354691ecd844549b27ef9202e17f7ac" args="(float v)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float native_exp2 </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>v</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Fast approximate exp2 valid for inputs -125.f to 125.f Max 8192 ulps of error</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="adb11df05fb9985595af0a7bd882bdeac"></a><!-- doxytag: member="rs_cl.rsh::nextafter" ref="adb11df05fb9985595af0a7bd882bdeac" args="(float x, float y)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float nextafter </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>x</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>y</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Return the next floating point number from x towards y.</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="a69c2a56f743593439d5ae5e3ec8e517f"></a><!-- doxytag: member="rs_cl.rsh::normalize" ref="a69c2a56f743593439d5ae5e3ec8e517f" args="(float v)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float normalize </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>v</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Normalize a vector.</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="a9243de1d67fcc847a89f95748d664b19"></a><!-- doxytag: member="rs_cl.rsh::pow" ref="a9243de1d67fcc847a89f95748d664b19" args="(float x, float y)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float pow </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>x</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>y</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Return x ^ y.</p>
-<p>Supports float, float2, float3, float4. Both arguments must be of the same type. </p>
-
-</div>
-</div>
-<a class="anchor" id="a67d1fe795e092003f687f3cc6d3c407a"></a><!-- doxytag: member="rs_cl.rsh::pown" ref="a67d1fe795e092003f687f3cc6d3c407a" args="(float v, int p)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float pown </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>v</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">int </td>
- <td class="paramname"><em>p</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Return (v ^ p).</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="a316c30ba3e6bc11673bfd34bb4746d24"></a><!-- doxytag: member="rs_cl.rsh::powr" ref="a316c30ba3e6bc11673bfd34bb4746d24" args="(float v, float p)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float powr </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>v</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>p</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Return (v ^ p). </p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">v</td><td>must be greater than 0.</td></tr>
- </table>
- </dd>
-</dl>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="aceb63a0da6393b8ac2ed229bae6232d6"></a><!-- doxytag: member="rs_cl.rsh::radians" ref="aceb63a0da6393b8ac2ed229bae6232d6" args="(float degrees)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float radians </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>degrees</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Convert from degrees to radians.</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="a5188ac0e3af95b0956c6abeafb74fda9"></a><!-- doxytag: member="rs_cl.rsh::remainder" ref="a5188ac0e3af95b0956c6abeafb74fda9" args="(float x, float y)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float remainder </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>x</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>y</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Return round x/y to the nearest integer then compute the remander.</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="adb0ffe344ae56ca7fc9083c1f2943e55"></a><!-- doxytag: member="rs_cl.rsh::rint" ref="adb0ffe344ae56ca7fc9083c1f2943e55" args="(float)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float rint </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Round to the nearest integral value.</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="a2776b517528b8185a6bb50753af0f6cf"></a><!-- doxytag: member="rs_cl.rsh::rootn" ref="a2776b517528b8185a6bb50753af0f6cf" args="(float v, int n)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float rootn </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>v</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">int </td>
- <td class="paramname"><em>n</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Compute the Nth root of a value.</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="aff4846ab5b947550814d5414a2c3626f"></a><!-- doxytag: member="rs_cl.rsh::round" ref="aff4846ab5b947550814d5414a2c3626f" args="(float)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float round </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Round to the nearest integral value. Half values are rounded away from zero.</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="a8a3992b97cb199b1c8d598996b600988"></a><!-- doxytag: member="rs_cl.rsh::rsqrt" ref="a8a3992b97cb199b1c8d598996b600988" args="(float v)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float rsqrt </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>v</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Return (1 / sqrt(value)).</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="a9fe423cc7d4c6d767f8a608d2ee76657"></a><!-- doxytag: member="rs_cl.rsh::sign" ref="a9fe423cc7d4c6d767f8a608d2ee76657" args="(float v)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float sign </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>v</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Return the sign of a value.</p>
-<p>if (v < 0) return -1.f; else if (v > 0) return 1.f; else return 0.f;</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="a8c8cd526b44eb55aede77cf659f24306"></a><!-- doxytag: member="rs_cl.rsh::sin" ref="a8c8cd526b44eb55aede77cf659f24306" args="(float v)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float sin </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>v</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Return the sine of a value specified in radians.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">v</td><td>The incoming value in radians Supports 1,2,3,4 components </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a892c91a30bbc713aa77105d8e9e25881"></a><!-- doxytag: member="rs_cl.rsh::sincos" ref="a892c91a30bbc713aa77105d8e9e25881" args="(float v, float *cosptr)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float sincos </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>v</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float * </td>
- <td class="paramname"><em>cosptr</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Return the sine and cosine of a value.</p>
-<dl class="return"><dt><b>Returns:</b></dt><dd>sine </dd></dl>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">v</td><td>The incoming value in radians </td></tr>
- <tr><td class="paramname">*cosptr</td><td>cosptr[0] will be set to the cosine value.</td></tr>
- </table>
- </dd>
-</dl>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="ae686e0cc567f7ee2b0a84706aa486e4a"></a><!-- doxytag: member="rs_cl.rsh::sinh" ref="ae686e0cc567f7ee2b0a84706aa486e4a" args="(float)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float sinh </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Return the hyperbolic sine of a value specified in radians.</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="a9ca027af0acf3ff22d91cd9489766976"></a><!-- doxytag: member="rs_cl.rsh::sinpi" ref="a9ca027af0acf3ff22d91cd9489766976" args="(float v)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float sinpi </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>v</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Return the sin(v * PI).</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="a92da0faef80c4d8f66e954c8c169a729"></a><!-- doxytag: member="rs_cl.rsh::sqrt" ref="a92da0faef80c4d8f66e954c8c169a729" args="(float)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float sqrt </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Return the square root of a value.</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="a9f40337dfee48d1881b87b35aa8133dd"></a><!-- doxytag: member="rs_cl.rsh::step" ref="a9f40337dfee48d1881b87b35aa8133dd" args="(float edge, float v)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float step </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>edge</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>v</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>if (v < edge) return 0.f; else return 1.f;</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="af12e245af8ff9bb72b5000e7c26cd8fe"></a><!-- doxytag: member="rs_cl.rsh::tan" ref="af12e245af8ff9bb72b5000e7c26cd8fe" args="(float v)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float tan </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>v</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Return the tangent of a value.</p>
-<p>Supports 1,2,3,4 components </p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">v</td><td>The incoming value in radians </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="abc36e89ddb87ea78451d1c5921ddbd8d"></a><!-- doxytag: member="rs_cl.rsh::tanh" ref="abc36e89ddb87ea78451d1c5921ddbd8d" args="(float)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float tanh </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Return the hyperbolic tangent of a value.</p>
-<p>Supports 1,2,3,4 components </p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">v</td><td>The incoming value in radians </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="aee96c8910a7d8b0082574813b6b68b9a"></a><!-- doxytag: member="rs_cl.rsh::tanpi" ref="aee96c8910a7d8b0082574813b6b68b9a" args="(float v)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float tanpi </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>v</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Return tan(v * PI)</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="ab9f4cbfd2470420ee302f28cf3de6dd0"></a><!-- doxytag: member="rs_cl.rsh::tgamma" ref="ab9f4cbfd2470420ee302f28cf3de6dd0" args="(float)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float tgamma </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Compute the gamma function of a value.</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-<a class="anchor" id="ad1a7c65693231219db1babeae1c41f15"></a><!-- doxytag: member="rs_cl.rsh::trunc" ref="ad1a7c65693231219db1babeae1c41f15" args="(float)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float trunc </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Round to integral using truncation.</p>
-<p>Supports 1,2,3,4 components </p>
-
-</div>
-</div>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/rs__cl_8rsh_source.html b/docs/html/reference/renderscript/rs__cl_8rsh_source.html
deleted file mode 100644
index ae5f70e..0000000
--- a/docs/html/reference/renderscript/rs__cl_8rsh_source.html
+++ /dev/null
@@ -1,602 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_cl.rsh Source File</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
- <div id="navrow1" class="tabs">
- <ul class="tablist">
- <li><a href="index.html"><span>Overview</span></a></li>
- <li class="current"><a href="globals.html"><span>Globals</span></a></li>
- <li><a href="annotated.html"><span>Structs</span></a></li>
- </ul>
- </div>
-<div class="header">
- <div class="headertitle">
-<div class="title">/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_cl.rsh</div> </div>
-</div>
-<div class="contents">
-<a href="rs__cl_8rsh.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * Copyright (C) 2011-2012 The Android Open Source Project</span>
-<a name="l00003"></a>00003 <span class="comment"> *</span>
-<a name="l00004"></a>00004 <span class="comment"> * Licensed under the Apache License, Version 2.0 (the "License");</span>
-<a name="l00005"></a>00005 <span class="comment"> * you may not use this file except in compliance with the License.</span>
-<a name="l00006"></a>00006 <span class="comment"> * You may obtain a copy of the License at</span>
-<a name="l00007"></a>00007 <span class="comment"> *</span>
-<a name="l00008"></a>00008 <span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span>
-<a name="l00011"></a>00011 <span class="comment"> * distributed under the License is distributed on an "AS IS" BASIS,</span>
-<a name="l00012"></a>00012 <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
-<a name="l00013"></a>00013 <span class="comment"> * See the License for the specific language governing permissions and</span>
-<a name="l00014"></a>00014 <span class="comment"> * limitations under the License.</span>
-<a name="l00015"></a>00015 <span class="comment"> */</span>
-<a name="l00016"></a>00016
-<a name="l00023"></a>00023 <span class="preprocessor">#ifndef __RS_CL_RSH__</span>
-<a name="l00024"></a>00024 <span class="preprocessor"></span><span class="preprocessor">#define __RS_CL_RSH__</span>
-<a name="l00025"></a>00025 <span class="preprocessor"></span>
-<a name="l00026"></a>00026 <span class="comment">// Conversions</span>
-<a name="l00027"></a>00027 <span class="preprocessor">#define CVT_FUNC_2(typeout, typein) \</span>
-<a name="l00028"></a>00028 <span class="preprocessor">_RS_RUNTIME typeout##2 __attribute__((overloadable)) \</span>
-<a name="l00029"></a>00029 <span class="preprocessor"> convert_##typeout##2(typein##2 v); \</span>
-<a name="l00030"></a>00030 <span class="preprocessor">_RS_RUNTIME typeout##3 __attribute__((overloadable)) \</span>
-<a name="l00031"></a>00031 <span class="preprocessor"> convert_##typeout##3(typein##3 v); \</span>
-<a name="l00032"></a>00032 <span class="preprocessor">_RS_RUNTIME typeout##4 __attribute__((overloadable)) \</span>
-<a name="l00033"></a>00033 <span class="preprocessor"> convert_##typeout##4(typein##4 v);</span>
-<a name="l00034"></a>00034 <span class="preprocessor"></span>
-<a name="l00035"></a>00035
-<a name="l00036"></a>00036 <span class="preprocessor">#define CVT_FUNC(type) CVT_FUNC_2(type, uchar) \</span>
-<a name="l00037"></a>00037 <span class="preprocessor"> CVT_FUNC_2(type, char) \</span>
-<a name="l00038"></a>00038 <span class="preprocessor"> CVT_FUNC_2(type, ushort) \</span>
-<a name="l00039"></a>00039 <span class="preprocessor"> CVT_FUNC_2(type, short) \</span>
-<a name="l00040"></a>00040 <span class="preprocessor"> CVT_FUNC_2(type, uint) \</span>
-<a name="l00041"></a>00041 <span class="preprocessor"> CVT_FUNC_2(type, int) \</span>
-<a name="l00042"></a>00042 <span class="preprocessor"> CVT_FUNC_2(type, float)</span>
-<a name="l00043"></a>00043 <span class="preprocessor"></span>
-<a name="l00049"></a>00049 CVT_FUNC(<span class="keywordtype">char</span>)
-<a name="l00050"></a>00050
-<a name="l00051"></a>00051
-<a name="l00056"></a>00056 CVT_FUNC(<a class="code" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a>)
-<a name="l00057"></a>00057
-<a name="l00063"></a>00063 CVT_FUNC(<span class="keywordtype">short</span>)
-<a name="l00064"></a>00064
-<a name="l00070"></a>00070 CVT_FUNC(<a class="code" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a>)
-<a name="l00071"></a>00071
-<a name="l00077"></a>00077 CVT_FUNC(<span class="keywordtype">int</span>)
-<a name="l00078"></a>00078
-<a name="l00084"></a>00084 CVT_FUNC(<a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a>)
-<a name="l00085"></a>00085
-<a name="l00091"></a>00091 CVT_FUNC(<span class="keywordtype">float</span>)
-<a name="l00092"></a>00092
-<a name="l00093"></a>00093 <span class="comment">// Float ops, 6.11.2</span>
-<a name="l00094"></a>00094
-<a name="l00095"></a>00095 <span class="preprocessor">#ifdef DOXYGEN</span>
-<a name="l00096"></a>00096 <span class="preprocessor"></span>
-<a name="l00097"></a>00097 <span class="preprocessor">#define FN_FUNC_FN(fnc)</span>
-<a name="l00098"></a>00098 <span class="preprocessor"></span><span class="preprocessor">#define F_FUNC_FN(fnc)</span>
-<a name="l00099"></a>00099 <span class="preprocessor"></span><span class="preprocessor">#define IN_FUNC_FN(fnc)</span>
-<a name="l00100"></a>00100 <span class="preprocessor"></span><span class="preprocessor">#define FN_FUNC_FN_FN(fnc)</span>
-<a name="l00101"></a>00101 <span class="preprocessor"></span><span class="preprocessor">#define F_FUNC_FN_FN(fnc)</span>
-<a name="l00102"></a>00102 <span class="preprocessor"></span><span class="preprocessor">#define FN_FUNC_FN_F(fnc)</span>
-<a name="l00103"></a>00103 <span class="preprocessor"></span><span class="preprocessor">#define FN_FUNC_FN_IN(fnc)</span>
-<a name="l00104"></a>00104 <span class="preprocessor"></span><span class="preprocessor">#define FN_FUNC_FN_I(fnc)</span>
-<a name="l00105"></a>00105 <span class="preprocessor"></span><span class="preprocessor">#define FN_FUNC_FN_PFN(fnc)</span>
-<a name="l00106"></a>00106 <span class="preprocessor"></span><span class="preprocessor">#define FN_FUNC_FN_PIN(fnc)</span>
-<a name="l00107"></a>00107 <span class="preprocessor"></span><span class="preprocessor">#define FN_FUNC_FN_FN_FN(fnc)</span>
-<a name="l00108"></a>00108 <span class="preprocessor"></span><span class="preprocessor">#define FN_FUNC_FN_FN_F(fnc)</span>
-<a name="l00109"></a>00109 <span class="preprocessor"></span><span class="preprocessor">#define FN_FUNC_FN_F_F(fnc)</span>
-<a name="l00110"></a>00110 <span class="preprocessor"></span><span class="preprocessor">#define FN_FUNC_FN_FN_PIN(fnc)</span>
-<a name="l00111"></a>00111 <span class="preprocessor"></span>
-<a name="l00112"></a>00112 <span class="preprocessor">#else</span>
-<a name="l00113"></a>00113 <span class="preprocessor"></span>
-<a name="l00114"></a>00114 <span class="preprocessor">#define FN_FUNC_FN(fnc) \</span>
-<a name="l00115"></a>00115 <span class="preprocessor">_RS_RUNTIME float2 __attribute__((overloadable)) fnc(float2 v); \</span>
-<a name="l00116"></a>00116 <span class="preprocessor">_RS_RUNTIME float3 __attribute__((overloadable)) fnc(float3 v); \</span>
-<a name="l00117"></a>00117 <span class="preprocessor">_RS_RUNTIME float4 __attribute__((overloadable)) fnc(float4 v);</span>
-<a name="l00118"></a>00118 <span class="preprocessor"></span>
-<a name="l00119"></a>00119 <span class="preprocessor">#define F_FUNC_FN(fnc) \</span>
-<a name="l00120"></a>00120 <span class="preprocessor">_RS_RUNTIME float __attribute__((overloadable)) fnc(float2 v); \</span>
-<a name="l00121"></a>00121 <span class="preprocessor">_RS_RUNTIME float __attribute__((overloadable)) fnc(float3 v); \</span>
-<a name="l00122"></a>00122 <span class="preprocessor">_RS_RUNTIME float __attribute__((overloadable)) fnc(float4 v);</span>
-<a name="l00123"></a>00123 <span class="preprocessor"></span>
-<a name="l00124"></a>00124 <span class="preprocessor">#define IN_FUNC_FN(fnc) \</span>
-<a name="l00125"></a>00125 <span class="preprocessor">_RS_RUNTIME int2 __attribute__((overloadable)) fnc(float2 v); \</span>
-<a name="l00126"></a>00126 <span class="preprocessor">_RS_RUNTIME int3 __attribute__((overloadable)) fnc(float3 v); \</span>
-<a name="l00127"></a>00127 <span class="preprocessor">_RS_RUNTIME int4 __attribute__((overloadable)) fnc(float4 v);</span>
-<a name="l00128"></a>00128 <span class="preprocessor"></span>
-<a name="l00129"></a>00129 <span class="preprocessor">#define FN_FUNC_FN_FN(fnc) \</span>
-<a name="l00130"></a>00130 <span class="preprocessor">_RS_RUNTIME float2 __attribute__((overloadable)) fnc(float2 v1, float2 v2); \</span>
-<a name="l00131"></a>00131 <span class="preprocessor">_RS_RUNTIME float3 __attribute__((overloadable)) fnc(float3 v1, float3 v2); \</span>
-<a name="l00132"></a>00132 <span class="preprocessor">_RS_RUNTIME float4 __attribute__((overloadable)) fnc(float4 v1, float4 v2);</span>
-<a name="l00133"></a>00133 <span class="preprocessor"></span>
-<a name="l00134"></a>00134 <span class="preprocessor">#define F_FUNC_FN_FN(fnc) \</span>
-<a name="l00135"></a>00135 <span class="preprocessor">_RS_RUNTIME float __attribute__((overloadable)) fnc(float2 v1, float2 v2); \</span>
-<a name="l00136"></a>00136 <span class="preprocessor">_RS_RUNTIME float __attribute__((overloadable)) fnc(float3 v1, float3 v2); \</span>
-<a name="l00137"></a>00137 <span class="preprocessor">_RS_RUNTIME float __attribute__((overloadable)) fnc(float4 v1, float4 v2);</span>
-<a name="l00138"></a>00138 <span class="preprocessor"></span>
-<a name="l00139"></a>00139 <span class="preprocessor">#define FN_FUNC_FN_F(fnc) \</span>
-<a name="l00140"></a>00140 <span class="preprocessor">_RS_RUNTIME float2 __attribute__((overloadable)) fnc(float2 v1, float v2); \</span>
-<a name="l00141"></a>00141 <span class="preprocessor">_RS_RUNTIME float3 __attribute__((overloadable)) fnc(float3 v1, float v2); \</span>
-<a name="l00142"></a>00142 <span class="preprocessor">_RS_RUNTIME float4 __attribute__((overloadable)) fnc(float4 v1, float v2);</span>
-<a name="l00143"></a>00143 <span class="preprocessor"></span>
-<a name="l00144"></a>00144 <span class="preprocessor">#define FN_FUNC_FN_IN(fnc) \</span>
-<a name="l00145"></a>00145 <span class="preprocessor">_RS_RUNTIME float2 __attribute__((overloadable)) fnc(float2 v1, int2 v2); \</span>
-<a name="l00146"></a>00146 <span class="preprocessor">_RS_RUNTIME float3 __attribute__((overloadable)) fnc(float3 v1, int3 v2); \</span>
-<a name="l00147"></a>00147 <span class="preprocessor">_RS_RUNTIME float4 __attribute__((overloadable)) fnc(float4 v1, int4 v2); \</span>
-<a name="l00148"></a>00148 <span class="preprocessor"></span>
-<a name="l00149"></a>00149 <span class="preprocessor"></span><span class="preprocessor">#define FN_FUNC_FN_I(fnc) \</span>
-<a name="l00150"></a>00150 <span class="preprocessor">_RS_RUNTIME float2 __attribute__((overloadable)) fnc(float2 v1, int v2); \</span>
-<a name="l00151"></a>00151 <span class="preprocessor">_RS_RUNTIME float3 __attribute__((overloadable)) fnc(float3 v1, int v2); \</span>
-<a name="l00152"></a>00152 <span class="preprocessor">_RS_RUNTIME float4 __attribute__((overloadable)) fnc(float4 v1, int v2);</span>
-<a name="l00153"></a>00153 <span class="preprocessor"></span>
-<a name="l00154"></a>00154 <span class="preprocessor">#define FN_FUNC_FN_PFN(fnc) \</span>
-<a name="l00155"></a>00155 <span class="preprocessor">_RS_RUNTIME float2 __attribute__((overloadable)) \</span>
-<a name="l00156"></a>00156 <span class="preprocessor"> fnc(float2 v1, float2 *v2); \</span>
-<a name="l00157"></a>00157 <span class="preprocessor">_RS_RUNTIME float3 __attribute__((overloadable)) \</span>
-<a name="l00158"></a>00158 <span class="preprocessor"> fnc(float3 v1, float3 *v2); \</span>
-<a name="l00159"></a>00159 <span class="preprocessor">_RS_RUNTIME float4 __attribute__((overloadable)) \</span>
-<a name="l00160"></a>00160 <span class="preprocessor"> fnc(float4 v1, float4 *v2);</span>
-<a name="l00161"></a>00161 <span class="preprocessor"></span>
-<a name="l00162"></a>00162 <span class="preprocessor">#define FN_FUNC_FN_PIN(fnc) \</span>
-<a name="l00163"></a>00163 <span class="preprocessor">_RS_RUNTIME float2 __attribute__((overloadable)) fnc(float2 v1, int2 *v2); \</span>
-<a name="l00164"></a>00164 <span class="preprocessor">_RS_RUNTIME float3 __attribute__((overloadable)) fnc(float3 v1, int3 *v2); \</span>
-<a name="l00165"></a>00165 <span class="preprocessor">_RS_RUNTIME float4 __attribute__((overloadable)) fnc(float4 v1, int4 *v2);</span>
-<a name="l00166"></a>00166 <span class="preprocessor"></span>
-<a name="l00167"></a>00167 <span class="preprocessor">#define FN_FUNC_FN_FN_FN(fnc) \</span>
-<a name="l00168"></a>00168 <span class="preprocessor">_RS_RUNTIME float2 __attribute__((overloadable)) \</span>
-<a name="l00169"></a>00169 <span class="preprocessor"> fnc(float2 v1, float2 v2, float2 v3); \</span>
-<a name="l00170"></a>00170 <span class="preprocessor">_RS_RUNTIME float3 __attribute__((overloadable)) \</span>
-<a name="l00171"></a>00171 <span class="preprocessor"> fnc(float3 v1, float3 v2, float3 v3); \</span>
-<a name="l00172"></a>00172 <span class="preprocessor">_RS_RUNTIME float4 __attribute__((overloadable)) \</span>
-<a name="l00173"></a>00173 <span class="preprocessor"> fnc(float4 v1, float4 v2, float4 v3);</span>
-<a name="l00174"></a>00174 <span class="preprocessor"></span>
-<a name="l00175"></a>00175 <span class="preprocessor">#define FN_FUNC_FN_FN_F(fnc) \</span>
-<a name="l00176"></a>00176 <span class="preprocessor">_RS_RUNTIME float2 __attribute__((overloadable)) \</span>
-<a name="l00177"></a>00177 <span class="preprocessor"> fnc(float2 v1, float2 v2, float v3); \</span>
-<a name="l00178"></a>00178 <span class="preprocessor">_RS_RUNTIME float3 __attribute__((overloadable)) \</span>
-<a name="l00179"></a>00179 <span class="preprocessor"> fnc(float3 v1, float3 v2, float v3); \</span>
-<a name="l00180"></a>00180 <span class="preprocessor">_RS_RUNTIME float4 __attribute__((overloadable)) \</span>
-<a name="l00181"></a>00181 <span class="preprocessor"> fnc(float4 v1, float4 v2, float v3);</span>
-<a name="l00182"></a>00182 <span class="preprocessor"></span>
-<a name="l00183"></a>00183 <span class="preprocessor">#define FN_FUNC_FN_F_F(fnc) \</span>
-<a name="l00184"></a>00184 <span class="preprocessor">_RS_RUNTIME float2 __attribute__((overloadable)) \</span>
-<a name="l00185"></a>00185 <span class="preprocessor"> fnc(float2 v1, float v2, float v3); \</span>
-<a name="l00186"></a>00186 <span class="preprocessor">_RS_RUNTIME float3 __attribute__((overloadable)) \</span>
-<a name="l00187"></a>00187 <span class="preprocessor"> fnc(float3 v1, float v2, float v3); \</span>
-<a name="l00188"></a>00188 <span class="preprocessor">_RS_RUNTIME float4 __attribute__((overloadable)) \</span>
-<a name="l00189"></a>00189 <span class="preprocessor"> fnc(float4 v1, float v2, float v3);</span>
-<a name="l00190"></a>00190 <span class="preprocessor"></span>
-<a name="l00191"></a>00191 <span class="preprocessor">#define FN_FUNC_FN_FN_PIN(fnc) \</span>
-<a name="l00192"></a>00192 <span class="preprocessor">_RS_RUNTIME float2 __attribute__((overloadable)) \</span>
-<a name="l00193"></a>00193 <span class="preprocessor"> fnc(float2 v1, float2 v2, int2 *v3); \</span>
-<a name="l00194"></a>00194 <span class="preprocessor">_RS_RUNTIME float3 __attribute__((overloadable)) \</span>
-<a name="l00195"></a>00195 <span class="preprocessor"> fnc(float3 v1, float3 v2, int3 *v3); \</span>
-<a name="l00196"></a>00196 <span class="preprocessor">_RS_RUNTIME float4 __attribute__((overloadable)) \</span>
-<a name="l00197"></a>00197 <span class="preprocessor"> fnc(float4 v1, float4 v2, int4 *v3);</span>
-<a name="l00198"></a>00198 <span class="preprocessor"></span>
-<a name="l00199"></a>00199 <span class="preprocessor">#endif // DOXYGEN</span>
-<a name="l00200"></a>00200 <span class="preprocessor"></span>
-<a name="l00201"></a>00201
-<a name="l00207"></a>00207 <span class="keyword">extern</span> <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a07648648c7f857cfd1479821d4389751">acos</a>(<span class="keywordtype">float</span>);
-<a name="l00208"></a>00208 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a07648648c7f857cfd1479821d4389751">acos</a>)
-<a name="l00209"></a>00209
-<a name="l00215"></a>00215 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a6575106413ec72448439ef67f1309424">acosh</a>(<span class="keywordtype">float</span>);
-<a name="l00216"></a>00216 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a6575106413ec72448439ef67f1309424">acosh</a>)
-<a name="l00217"></a>00217
-<a name="l00223"></a>00223 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a2c9092eb07e9df891935e93469e70d4e">acospi</a>(<span class="keywordtype">float</span> v);
-<a name="l00224"></a>00224 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a2c9092eb07e9df891935e93469e70d4e">acospi</a>)
-<a name="l00225"></a>00225
-<a name="l00231"></a>00231 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a78b9d0583bd0699e2eac30d2a136817a">asin</a>(<span class="keywordtype">float</span>);
-<a name="l00232"></a>00232 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a78b9d0583bd0699e2eac30d2a136817a">asin</a>)
-<a name="l00233"></a>00233
-<a name="l00239"></a>00239 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a4e3fe465ed5541af53192c59c80af1a0">asinh</a>(<span class="keywordtype">float</span>);
-<a name="l00240"></a>00240 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a4e3fe465ed5541af53192c59c80af1a0">asinh</a>)
-<a name="l00241"></a>00241
-<a name="l00242"></a>00242
-<a name="l00248"></a>00248 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a812eb4521e65a451161417f9898384f7">asinpi</a>(<span class="keywordtype">float</span> v);
-<a name="l00249"></a>00249 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a812eb4521e65a451161417f9898384f7">asinpi</a>)
-<a name="l00250"></a>00250
-<a name="l00256"></a>00256 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#ab790c3a7df8fcbeab77f6c0e3b4dcada">atan</a>(<span class="keywordtype">float</span>);
-<a name="l00257"></a>00257 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#ab790c3a7df8fcbeab77f6c0e3b4dcada">atan</a>)
-<a name="l00258"></a>00258
-<a name="l00268"></a>00268 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#aaf4b636b09041878e1542054c73d81e9">atan2</a>(<span class="keywordtype">float</span> y, <span class="keywordtype">float</span> x);
-<a name="l00269"></a>00269 FN_FUNC_FN_FN(<a class="code" href="rs__cl_8rsh.html#aaf4b636b09041878e1542054c73d81e9">atan2</a>)
-<a name="l00270"></a>00270
-<a name="l00276"></a>00276 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a83bdf415cc561ff6237a124273d9fb0d">atanh</a>(<span class="keywordtype">float</span>);
-<a name="l00277"></a>00277 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a83bdf415cc561ff6237a124273d9fb0d">atanh</a>)
-<a name="l00278"></a>00278
-<a name="l00284"></a>00284 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a5052e31ce616d35aee25a3a83f6fc117">atanpi</a>(<span class="keywordtype">float</span> v);
-<a name="l00285"></a>00285 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a5052e31ce616d35aee25a3a83f6fc117">atanpi</a>)
-<a name="l00286"></a>00286
-<a name="l00296"></a>00296 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a89ec5f6a2f64a0f9e97438fbd41aaace">atan2pi</a>(<span class="keywordtype">float</span> y, <span class="keywordtype">float</span> x);
-<a name="l00297"></a>00297 FN_FUNC_FN_FN(<a class="code" href="rs__cl_8rsh.html#a89ec5f6a2f64a0f9e97438fbd41aaace">atan2pi</a>)
-<a name="l00298"></a>00298
-<a name="l00299"></a>00299
-<a name="l00305"></a>00305 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#ae9d1787b55c2587478a24d96573225df">cbrt</a>(<span class="keywordtype">float</span>);
-<a name="l00306"></a>00306 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#ae9d1787b55c2587478a24d96573225df">cbrt</a>)
-<a name="l00307"></a>00307
-<a name="l00313"></a>00313 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#aa8fc6daff743a1b635ccbf9af83fe4e4">ceil</a>(<span class="keywordtype">float</span>);
-<a name="l00314"></a>00314 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#aa8fc6daff743a1b635ccbf9af83fe4e4">ceil</a>)
-<a name="l00315"></a>00315
-<a name="l00325"></a>00325 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a29f2602d95aa7b3950e2b77b3e268f7e">copysign</a>(<span class="keywordtype">float</span> x, <span class="keywordtype">float</span> y);
-<a name="l00326"></a>00326 FN_FUNC_FN_FN(<a class="code" href="rs__cl_8rsh.html#a29f2602d95aa7b3950e2b77b3e268f7e">copysign</a>)
-<a name="l00327"></a>00327
-<a name="l00333"></a>00333 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a8eec7aeb4b0c46b06cbcd1a3ac3e6f05">cos</a>(<span class="keywordtype">float</span>);
-<a name="l00334"></a>00334 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a8eec7aeb4b0c46b06cbcd1a3ac3e6f05">cos</a>)
-<a name="l00335"></a>00335
-<a name="l00341"></a>00341 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#ac8d88d83182afd591401eaed101d9670">cosh</a>(<span class="keywordtype">float</span>);
-<a name="l00342"></a>00342 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#ac8d88d83182afd591401eaed101d9670">cosh</a>)
-<a name="l00343"></a>00343
-<a name="l00349"></a>00349 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a258d2c828fd46eae2867373884d834a9">cospi</a>(<span class="keywordtype">float</span> v);
-<a name="l00350"></a>00350 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a258d2c828fd46eae2867373884d834a9">cospi</a>)
-<a name="l00351"></a>00351
-<a name="l00357"></a>00357 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a2e24dc8594e758b64c340153f67a533c">erfc</a>(<span class="keywordtype">float</span>);
-<a name="l00358"></a>00358 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a2e24dc8594e758b64c340153f67a533c">erfc</a>)
-<a name="l00359"></a>00359
-<a name="l00365"></a>00365 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a139f102df651c25c26dd35d549173f57">erf</a>(<span class="keywordtype">float</span>);
-<a name="l00366"></a>00366 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a139f102df651c25c26dd35d549173f57">erf</a>)
-<a name="l00367"></a>00367
-<a name="l00373"></a>00373 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a6d9aac64c2686961ca8f30e3c34fef36">exp</a>(<span class="keywordtype">float</span>);
-<a name="l00374"></a>00374 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a6d9aac64c2686961ca8f30e3c34fef36">exp</a>)
-<a name="l00375"></a>00375
-<a name="l00381"></a>00381 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a39bca19ee2b1aa95144e58eb4a1e4f88">exp2</a>(<span class="keywordtype">float</span>);
-<a name="l00382"></a>00382 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a39bca19ee2b1aa95144e58eb4a1e4f88">exp2</a>)
-<a name="l00383"></a>00383
-<a name="l00390"></a>00390 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a9243de1d67fcc847a89f95748d664b19">pow</a>(<span class="keywordtype">float</span> x, <span class="keywordtype">float</span> y);
-<a name="l00391"></a>00391 FN_FUNC_FN_FN(<a class="code" href="rs__cl_8rsh.html#a9243de1d67fcc847a89f95748d664b19">pow</a>)
-<a name="l00392"></a>00392
-<a name="l00398"></a>00398 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a0225ff40d79f78260293e776c6a77422">exp10</a>(<span class="keywordtype">float</span> v);
-<a name="l00399"></a>00399 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a0225ff40d79f78260293e776c6a77422">exp10</a>)
-<a name="l00400"></a>00400
-<a name="l00406"></a>00406 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a7996044b67be921a5e58e2fe76af66e2">expm1</a>(<span class="keywordtype">float</span>);
-<a name="l00407"></a>00407 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a7996044b67be921a5e58e2fe76af66e2">expm1</a>)
-<a name="l00408"></a>00408
-<a name="l00414"></a>00414 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#ad6e897f1acae252ec0901e3b122992ea">fabs</a>(<span class="keywordtype">float</span>);
-<a name="l00415"></a>00415 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#ad6e897f1acae252ec0901e3b122992ea">fabs</a>)
-<a name="l00416"></a>00416
-<a name="l00423"></a>00423 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#ae7a7bac0f4e244594078f87b42c8716a">fdim</a>(<span class="keywordtype">float</span>, <span class="keywordtype">float</span>);
-<a name="l00424"></a>00424 FN_FUNC_FN_FN(<a class="code" href="rs__cl_8rsh.html#ae7a7bac0f4e244594078f87b42c8716a">fdim</a>)
-<a name="l00425"></a>00425
-<a name="l00431"></a>00431 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#aae2da38a7246378dff8014ec407a30c3">floor</a>(<span class="keywordtype">float</span>);
-<a name="l00432"></a>00432 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#aae2da38a7246378dff8014ec407a30c3">floor</a>)
-<a name="l00433"></a>00433
-<a name="l00439"></a>00439 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#ac42909daec463fe449743e70baf8360d">fma</a>(<span class="keywordtype">float</span> a, <span class="keywordtype">float</span> b, <span class="keywordtype">float</span> c);
-<a name="l00440"></a>00440 FN_FUNC_FN_FN_FN(<a class="code" href="rs__cl_8rsh.html#ac42909daec463fe449743e70baf8360d">fma</a>)
-<a name="l00441"></a>00441
-<a name="l00449"></a>00449 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a60f2072d8a746e7fe05cd46dea0fefcc">fmax</a>(<span class="keywordtype">float</span> x, <span class="keywordtype">float</span> y);
-<a name="l00450"></a>00450 FN_FUNC_FN_FN(<a class="code" href="rs__cl_8rsh.html#a60f2072d8a746e7fe05cd46dea0fefcc">fmax</a>);
-<a name="l00451"></a>00451 FN_FUNC_FN_F(fmax);
-<a name="l00452"></a>00452
-<a name="l00459"></a>00459 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a1fd9d57c6c992866bf5161be2cf4c447">fmin</a>(<span class="keywordtype">float</span> x, <span class="keywordtype">float</span> y);
-<a name="l00460"></a>00460 FN_FUNC_FN_FN(<a class="code" href="rs__cl_8rsh.html#a1fd9d57c6c992866bf5161be2cf4c447">fmin</a>);
-<a name="l00461"></a>00461 FN_FUNC_FN_F(fmin);
-<a name="l00462"></a>00462
-<a name="l00468"></a>00468 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a31d5e179730ae44e1dbc74c1535f392e">fmod</a>(<span class="keywordtype">float</span> x, <span class="keywordtype">float</span> y);
-<a name="l00469"></a>00469 FN_FUNC_FN_FN(<a class="code" href="rs__cl_8rsh.html#a31d5e179730ae44e1dbc74c1535f392e">fmod</a>)
-<a name="l00470"></a>00470
-<a name="l00477"></a>00477 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a9374786a1bbe3d2dd886cfad642bfec6">fract</a>(<span class="keywordtype">float</span> v, <span class="keywordtype">float</span> *iptr);
-<a name="l00478"></a>00478 FN_FUNC_FN_PFN(<a class="code" href="rs__cl_8rsh.html#a9374786a1bbe3d2dd886cfad642bfec6">fract</a>)
-<a name="l00479"></a>00479
-<a name="l00485"></a><a class="code" href="rs__cl_8rsh.html#a84b546baf72a871a5ba688d434d6ce2b">00485</a> static inline <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a9374786a1bbe3d2dd886cfad642bfec6">fract</a>(<span class="keywordtype">float</span> v) {
-<a name="l00486"></a>00486 <span class="keywordtype">float</span> unused;
-<a name="l00487"></a>00487 <span class="keywordflow">return</span> <a class="code" href="rs__cl_8rsh.html#a9374786a1bbe3d2dd886cfad642bfec6">fract</a>(v, &unused);
-<a name="l00488"></a>00488 }
-<a name="l00489"></a>00489
-<a name="l00490"></a>00490 <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a9374786a1bbe3d2dd886cfad642bfec6">fract</a>(<a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> v) {
-<a name="l00491"></a>00491 <a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> unused;
-<a name="l00492"></a>00492 <span class="keywordflow">return</span> <a class="code" href="rs__cl_8rsh.html#a9374786a1bbe3d2dd886cfad642bfec6">fract</a>(v, &unused);
-<a name="l00493"></a>00493 }
-<a name="l00494"></a>00494
-<a name="l00495"></a>00495 <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a9374786a1bbe3d2dd886cfad642bfec6">fract</a>(<a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> v) {
-<a name="l00496"></a>00496 <a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> unused;
-<a name="l00497"></a>00497 <span class="keywordflow">return</span> <a class="code" href="rs__cl_8rsh.html#a9374786a1bbe3d2dd886cfad642bfec6">fract</a>(v, &unused);
-<a name="l00498"></a>00498 }
-<a name="l00499"></a>00499
-<a name="l00500"></a>00500 <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a9374786a1bbe3d2dd886cfad642bfec6">fract</a>(<a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> v) {
-<a name="l00501"></a>00501 <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> unused;
-<a name="l00502"></a>00502 <span class="keywordflow">return</span> <a class="code" href="rs__cl_8rsh.html#a9374786a1bbe3d2dd886cfad642bfec6">fract</a>(v, &unused);
-<a name="l00503"></a>00503 }
-<a name="l00504"></a>00504
-<a name="l00511"></a>00511 <span class="keyword">extern</span> <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a778635fffed3cee8ab0800482ba53a30">frexp</a>(<span class="keywordtype">float</span> v, <span class="keywordtype">int</span> *iptr);
-<a name="l00512"></a>00512 FN_FUNC_FN_PIN(<a class="code" href="rs__cl_8rsh.html#a778635fffed3cee8ab0800482ba53a30">frexp</a>)
-<a name="l00513"></a>00513
-<a name="l00519"></a>00519 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a147f38d6e41f45de9b5e7c6f3dcac010">hypot</a>(<span class="keywordtype">float</span> x, <span class="keywordtype">float</span> y);
-<a name="l00520"></a>00520 FN_FUNC_FN_FN(<a class="code" href="rs__cl_8rsh.html#a147f38d6e41f45de9b5e7c6f3dcac010">hypot</a>)
-<a name="l00521"></a>00521
-<a name="l00527"></a>00527 extern <span class="keywordtype">int</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#aad9a8beba52acb77b1efeba432e6cc2c">ilogb</a>(<span class="keywordtype">float</span>);
-<a name="l00528"></a>00528 IN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#aad9a8beba52acb77b1efeba432e6cc2c">ilogb</a>)
-<a name="l00529"></a>00529
-<a name="l00536"></a>00536 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a013bc1dcda984cbc608e123ed38491e6">ldexp</a>(<span class="keywordtype">float</span> x, <span class="keywordtype">int</span> y);
-<a name="l00537"></a>00537 FN_FUNC_FN_IN(<a class="code" href="rs__cl_8rsh.html#a013bc1dcda984cbc608e123ed38491e6">ldexp</a>)
-<a name="l00538"></a>00538 FN_FUNC_FN_I(<a class="code" href="rs__cl_8rsh.html#a013bc1dcda984cbc608e123ed38491e6">ldexp</a>)
-<a name="l00539"></a>00539
-<a name="l00545"></a>00545 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a3ff36f9b21927d6b4b58616e48fddcb4">lgamma</a>(<span class="keywordtype">float</span>);
-<a name="l00546"></a>00546 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a3ff36f9b21927d6b4b58616e48fddcb4">lgamma</a>)
-<a name="l00547"></a>00547
-<a name="l00554"></a>00554 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a3ff36f9b21927d6b4b58616e48fddcb4">lgamma</a>(<span class="keywordtype">float</span> x, <span class="keywordtype">int</span>* y);
-<a name="l00555"></a>00555 FN_FUNC_FN_PIN(<a class="code" href="rs__cl_8rsh.html#a3ff36f9b21927d6b4b58616e48fddcb4">lgamma</a>)
-<a name="l00556"></a>00556
-<a name="l00562"></a>00562 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a3ff85f5f4b206ecf9ec9d128d7d18a08">log</a>(<span class="keywordtype">float</span>);
-<a name="l00563"></a>00563 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a3ff85f5f4b206ecf9ec9d128d7d18a08">log</a>)
-<a name="l00564"></a>00564
-<a name="l00570"></a>00570 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#af5c1bdba2a13aa2e2b0722287f6a919f">log10</a>(<span class="keywordtype">float</span>);
-<a name="l00571"></a>00571 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#af5c1bdba2a13aa2e2b0722287f6a919f">log10</a>)
-<a name="l00572"></a>00572
-<a name="l00578"></a>00578 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#aab1c4f06daf6f2a50fd73f0c28929213">log2</a>(<span class="keywordtype">float</span> v);
-<a name="l00579"></a>00579 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#aab1c4f06daf6f2a50fd73f0c28929213">log2</a>)
-<a name="l00580"></a>00580
-<a name="l00586"></a>00586 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#ae10541ede49062ef7f977712c4878c1f">log1p</a>(<span class="keywordtype">float</span> v);
-<a name="l00587"></a>00587 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#ae10541ede49062ef7f977712c4878c1f">log1p</a>)
-<a name="l00588"></a>00588
-<a name="l00594"></a>00594 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a28742d6ce2f20a61f16ecc08ed499871">logb</a>(<span class="keywordtype">float</span>);
-<a name="l00595"></a>00595 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a28742d6ce2f20a61f16ecc08ed499871">logb</a>)
-<a name="l00596"></a>00596
-<a name="l00602"></a>00602 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a4f9086698f1eb466ba2dccf7e331cdc3">mad</a>(<span class="keywordtype">float</span> a, <span class="keywordtype">float</span> b, <span class="keywordtype">float</span> c);
-<a name="l00603"></a>00603 FN_FUNC_FN_FN_FN(<a class="code" href="rs__cl_8rsh.html#a4f9086698f1eb466ba2dccf7e331cdc3">mad</a>)
-<a name="l00604"></a>00604
-<a name="l00613"></a>00613 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a841633bcdcaeb6a514d9c6460f0adf2d">modf</a>(<span class="keywordtype">float</span> x, <span class="keywordtype">float</span> *iret);
-<a name="l00614"></a>00614 FN_FUNC_FN_PFN(<a class="code" href="rs__cl_8rsh.html#a841633bcdcaeb6a514d9c6460f0adf2d">modf</a>);
-<a name="l00615"></a>00615
-<a name="l00616"></a>00616 extern <span class="keywordtype">float</span> __attribute__((overloadable)) nan(<a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a>);
-<a name="l00617"></a>00617
-<a name="l00623"></a>00623 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#adb11df05fb9985595af0a7bd882bdeac">nextafter</a>(<span class="keywordtype">float</span> x, <span class="keywordtype">float</span> y);
-<a name="l00624"></a>00624 FN_FUNC_FN_FN(<a class="code" href="rs__cl_8rsh.html#adb11df05fb9985595af0a7bd882bdeac">nextafter</a>)
-<a name="l00625"></a>00625
-<a name="l00631"></a>00631 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a67d1fe795e092003f687f3cc6d3c407a">pown</a>(<span class="keywordtype">float</span> v, <span class="keywordtype">int</span> p);
-<a name="l00632"></a>00632 FN_FUNC_FN_IN(<a class="code" href="rs__cl_8rsh.html#a67d1fe795e092003f687f3cc6d3c407a">pown</a>)
-<a name="l00633"></a>00633
-<a name="l00640"></a>00640 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a316c30ba3e6bc11673bfd34bb4746d24">powr</a>(<span class="keywordtype">float</span> v, <span class="keywordtype">float</span> p);
-<a name="l00641"></a>00641 FN_FUNC_FN_FN(<a class="code" href="rs__cl_8rsh.html#a316c30ba3e6bc11673bfd34bb4746d24">powr</a>)
-<a name="l00642"></a>00642
-<a name="l00648"></a>00648 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a5188ac0e3af95b0956c6abeafb74fda9">remainder</a>(<span class="keywordtype">float</span> x, <span class="keywordtype">float</span> y);
-<a name="l00649"></a>00649 FN_FUNC_FN_FN(<a class="code" href="rs__cl_8rsh.html#a5188ac0e3af95b0956c6abeafb74fda9">remainder</a>)
-<a name="l00650"></a>00650
-<a name="l00651"></a>00651 <span class="comment">// document once we know the precision of bionic</span>
-<a name="l00652"></a>00652 extern <span class="keywordtype">float</span> __attribute__((overloadable)) remquo(<span class="keywordtype">float</span>, <span class="keywordtype">float</span>, <span class="keywordtype">int</span> *);
-<a name="l00653"></a>00653 FN_FUNC_FN_FN_PIN(remquo)
-<a name="l00654"></a>00654
-<a name="l00660"></a>00660 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#adb0ffe344ae56ca7fc9083c1f2943e55">rint</a>(<span class="keywordtype">float</span>);
-<a name="l00661"></a>00661 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#adb0ffe344ae56ca7fc9083c1f2943e55">rint</a>)
-<a name="l00662"></a>00662
-<a name="l00668"></a>00668 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a2776b517528b8185a6bb50753af0f6cf">rootn</a>(<span class="keywordtype">float</span> v, <span class="keywordtype">int</span> n);
-<a name="l00669"></a>00669 FN_FUNC_FN_IN(<a class="code" href="rs__cl_8rsh.html#a2776b517528b8185a6bb50753af0f6cf">rootn</a>)
-<a name="l00670"></a>00670
-<a name="l00676"></a>00676 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#aff4846ab5b947550814d5414a2c3626f">round</a>(<span class="keywordtype">float</span>);
-<a name="l00677"></a>00677 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#aff4846ab5b947550814d5414a2c3626f">round</a>)
-<a name="l00678"></a>00678
-<a name="l00684"></a>00684 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a92da0faef80c4d8f66e954c8c169a729">sqrt</a>(<span class="keywordtype">float</span>);
-<a name="l00685"></a>00685 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a92da0faef80c4d8f66e954c8c169a729">sqrt</a>)
-<a name="l00686"></a>00686
-<a name="l00692"></a>00692 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a8a3992b97cb199b1c8d598996b600988">rsqrt</a>(<span class="keywordtype">float</span> v);
-<a name="l00693"></a>00693 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a8a3992b97cb199b1c8d598996b600988">rsqrt</a>)
-<a name="l00694"></a>00694
-<a name="l00701"></a>00701 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a8c8cd526b44eb55aede77cf659f24306">sin</a>(<span class="keywordtype">float</span> v);
-<a name="l00702"></a>00702 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a8c8cd526b44eb55aede77cf659f24306">sin</a>)
-<a name="l00703"></a>00703
-<a name="l00713"></a>00713 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a892c91a30bbc713aa77105d8e9e25881">sincos</a>(<span class="keywordtype">float</span> v, <span class="keywordtype">float</span> *cosptr);
-<a name="l00714"></a>00714 FN_FUNC_FN_PFN(<a class="code" href="rs__cl_8rsh.html#a892c91a30bbc713aa77105d8e9e25881">sincos</a>);
-<a name="l00715"></a>00715
-<a name="l00721"></a>00721 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#ae686e0cc567f7ee2b0a84706aa486e4a">sinh</a>(<span class="keywordtype">float</span>);
-<a name="l00722"></a>00722 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#ae686e0cc567f7ee2b0a84706aa486e4a">sinh</a>)
-<a name="l00723"></a>00723
-<a name="l00729"></a>00729 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a9ca027af0acf3ff22d91cd9489766976">sinpi</a>(<span class="keywordtype">float</span> v);
-<a name="l00730"></a>00730 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a9ca027af0acf3ff22d91cd9489766976">sinpi</a>)
-<a name="l00731"></a>00731
-<a name="l00738"></a>00738 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#af12e245af8ff9bb72b5000e7c26cd8fe">tan</a>(<span class="keywordtype">float</span> v);
-<a name="l00739"></a>00739 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#af12e245af8ff9bb72b5000e7c26cd8fe">tan</a>)
-<a name="l00740"></a>00740
-<a name="l00747"></a>00747 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#abc36e89ddb87ea78451d1c5921ddbd8d">tanh</a>(<span class="keywordtype">float</span>);
-<a name="l00748"></a>00748 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#abc36e89ddb87ea78451d1c5921ddbd8d">tanh</a>)
-<a name="l00749"></a>00749
-<a name="l00755"></a>00755 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#aee96c8910a7d8b0082574813b6b68b9a">tanpi</a>(<span class="keywordtype">float</span> v);
-<a name="l00756"></a>00756 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#aee96c8910a7d8b0082574813b6b68b9a">tanpi</a>)
-<a name="l00757"></a>00757
-<a name="l00763"></a>00763 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#ab9f4cbfd2470420ee302f28cf3de6dd0">tgamma</a>(<span class="keywordtype">float</span>);
-<a name="l00764"></a>00764 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#ab9f4cbfd2470420ee302f28cf3de6dd0">tgamma</a>)
-<a name="l00765"></a>00765
-<a name="l00771"></a>00771 extern <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#ad1a7c65693231219db1babeae1c41f15">trunc</a>(<span class="keywordtype">float</span>);
-<a name="l00772"></a>00772 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#ad1a7c65693231219db1babeae1c41f15">trunc</a>)
-<a name="l00773"></a>00773
-<a name="l00774"></a>00774 <span class="preprocessor">#ifdef DOXYGEN</span>
-<a name="l00775"></a>00775 <span class="preprocessor"></span>
-<a name="l00776"></a>00776 <span class="preprocessor">#define XN_FUNC_YN(typeout, fnc, typein) \</span>
-<a name="l00777"></a>00777 <span class="preprocessor">extern typeout __attribute__((overloadable)) fnc(typein v);</span>
-<a name="l00778"></a>00778 <span class="preprocessor"></span>
-<a name="l00779"></a>00779 <span class="preprocessor">#define XN_FUNC_XN_XN_BODY(type, fnc, body) \</span>
-<a name="l00780"></a>00780 <span class="preprocessor">_RS_RUNTIME type __attribute__((overloadable)) \</span>
-<a name="l00781"></a>00781 <span class="preprocessor"> fnc(type v1, type v2);</span>
-<a name="l00782"></a>00782 <span class="preprocessor"></span>
-<a name="l00783"></a>00783 <span class="preprocessor">#else</span>
-<a name="l00784"></a>00784 <span class="preprocessor"></span>
-<a name="l00785"></a>00785 <span class="preprocessor">#define XN_FUNC_YN(typeout, fnc, typein) \</span>
-<a name="l00786"></a>00786 <span class="preprocessor">extern typeout __attribute__((overloadable)) fnc(typein v); \</span>
-<a name="l00787"></a>00787 <span class="preprocessor">_RS_RUNTIME typeout##2 __attribute__((overloadable)) fnc(typein##2 v); \</span>
-<a name="l00788"></a>00788 <span class="preprocessor">_RS_RUNTIME typeout##3 __attribute__((overloadable)) fnc(typein##3 v); \</span>
-<a name="l00789"></a>00789 <span class="preprocessor">_RS_RUNTIME typeout##4 __attribute__((overloadable)) fnc(typein##4 v);</span>
-<a name="l00790"></a>00790 <span class="preprocessor"></span>
-<a name="l00791"></a>00791 <span class="preprocessor">#define XN_FUNC_XN_XN_BODY(type, fnc, body) \</span>
-<a name="l00792"></a>00792 <span class="preprocessor">_RS_RUNTIME type __attribute__((overloadable)) \</span>
-<a name="l00793"></a>00793 <span class="preprocessor"> fnc(type v1, type v2); \</span>
-<a name="l00794"></a>00794 <span class="preprocessor">_RS_RUNTIME type##2 __attribute__((overloadable)) \</span>
-<a name="l00795"></a>00795 <span class="preprocessor"> fnc(type##2 v1, type##2 v2); \</span>
-<a name="l00796"></a>00796 <span class="preprocessor">_RS_RUNTIME type##3 __attribute__((overloadable)) \</span>
-<a name="l00797"></a>00797 <span class="preprocessor"> fnc(type##3 v1, type##3 v2); \</span>
-<a name="l00798"></a>00798 <span class="preprocessor">_RS_RUNTIME type##4 __attribute__((overloadable)) \</span>
-<a name="l00799"></a>00799 <span class="preprocessor"> fnc(type##4 v1, type##4 v2);</span>
-<a name="l00800"></a>00800 <span class="preprocessor"></span>
-<a name="l00801"></a>00801 <span class="preprocessor">#endif // DOXYGEN</span>
-<a name="l00802"></a>00802 <span class="preprocessor"></span>
-<a name="l00803"></a>00803 <span class="preprocessor">#define UIN_FUNC_IN(fnc) \</span>
-<a name="l00804"></a>00804 <span class="preprocessor">XN_FUNC_YN(uchar, fnc, char) \</span>
-<a name="l00805"></a>00805 <span class="preprocessor">XN_FUNC_YN(ushort, fnc, short) \</span>
-<a name="l00806"></a>00806 <span class="preprocessor">XN_FUNC_YN(uint, fnc, int)</span>
-<a name="l00807"></a>00807 <span class="preprocessor"></span>
-<a name="l00808"></a>00808 <span class="preprocessor">#define IN_FUNC_IN(fnc) \</span>
-<a name="l00809"></a>00809 <span class="preprocessor">XN_FUNC_YN(uchar, fnc, uchar) \</span>
-<a name="l00810"></a>00810 <span class="preprocessor">XN_FUNC_YN(char, fnc, char) \</span>
-<a name="l00811"></a>00811 <span class="preprocessor">XN_FUNC_YN(ushort, fnc, ushort) \</span>
-<a name="l00812"></a>00812 <span class="preprocessor">XN_FUNC_YN(short, fnc, short) \</span>
-<a name="l00813"></a>00813 <span class="preprocessor">XN_FUNC_YN(uint, fnc, uint) \</span>
-<a name="l00814"></a>00814 <span class="preprocessor">XN_FUNC_YN(int, fnc, int)</span>
-<a name="l00815"></a>00815 <span class="preprocessor"></span>
-<a name="l00816"></a>00816 <span class="preprocessor">#define IN_FUNC_IN_IN_BODY(fnc, body) \</span>
-<a name="l00817"></a>00817 <span class="preprocessor">XN_FUNC_XN_XN_BODY(uchar, fnc, body) \</span>
-<a name="l00818"></a>00818 <span class="preprocessor">XN_FUNC_XN_XN_BODY(char, fnc, body) \</span>
-<a name="l00819"></a>00819 <span class="preprocessor">XN_FUNC_XN_XN_BODY(ushort, fnc, body) \</span>
-<a name="l00820"></a>00820 <span class="preprocessor">XN_FUNC_XN_XN_BODY(short, fnc, body) \</span>
-<a name="l00821"></a>00821 <span class="preprocessor">XN_FUNC_XN_XN_BODY(uint, fnc, body) \</span>
-<a name="l00822"></a>00822 <span class="preprocessor">XN_FUNC_XN_XN_BODY(int, fnc, body) \</span>
-<a name="l00823"></a>00823 <span class="preprocessor">XN_FUNC_XN_XN_BODY(float, fnc, body)</span>
-<a name="l00824"></a>00824 <span class="preprocessor"></span>
-<a name="l00831"></a>00831 UIN_FUNC_IN(<a class="code" href="rs__cl_8rsh.html#a1ed0afedda2068ad1f9ad14ef3449e50">abs</a>)
-<a name="l00832"></a>00832
-<a name="l00833"></a>00833
-<a name="l00838"></a>00838 IN_FUNC_IN(<a class="code" href="rs__cl_8rsh.html#a8a0f94dce3caa2a50cbf2d9f4bc674ac">clz</a>)
-<a name="l00839"></a>00839
-<a name="l00845"></a>00845 IN_FUNC_IN_IN_BODY(<a class="code" href="rs__cl_8rsh.html#a5f61ca44b3ad4b11365b0c4137a22658">min</a>, (v1 < v2 ? v1 : v2))
-<a name="l00846"></a>00846 FN_FUNC_FN_F(min)
-<a name="l00847"></a>00847
-<a name="l00853"></a>00853 IN_FUNC_IN_IN_BODY(<a class="code" href="rs__cl_8rsh.html#a616bf7a90d8d3c73a48d2c395d9dc4ea">max</a>, (v1 > v2 ? v1 : v2))
-<a name="l00854"></a>00854 FN_FUNC_FN_F(max)
-<a name="l00855"></a>00855
-<a name="l00863"></a>00863 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#afae5eac13e35acd0f47d7e3c601e16ed">clamp</a>(<span class="keywordtype">float</span> amount, <span class="keywordtype">float</span> low, <span class="keywordtype">float</span> high);
-<a name="l00864"></a>00864 FN_FUNC_FN_FN_FN(<a class="code" href="rs__cl_8rsh.html#afae5eac13e35acd0f47d7e3c601e16ed">clamp</a>)
-<a name="l00865"></a>00865 FN_FUNC_FN_F_F(<a class="code" href="rs__cl_8rsh.html#afae5eac13e35acd0f47d7e3c601e16ed">clamp</a>)
-<a name="l00866"></a>00866
-<a name="l00872"></a>00872 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a0276b63d6905fa802032f1490a24515b">degrees</a>(<span class="keywordtype">float</span> <a class="code" href="rs__cl_8rsh.html#aceb63a0da6393b8ac2ed229bae6232d6">radians</a>);
-<a name="l00873"></a>00873 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a0276b63d6905fa802032f1490a24515b">degrees</a>)
-<a name="l00874"></a>00874
-<a name="l00880"></a>00880 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a254612a612ff7539b01a1478e03d8697">mix</a>(<span class="keywordtype">float</span> start, <span class="keywordtype">float</span> stop, <span class="keywordtype">float</span> amount);
-<a name="l00881"></a>00881 FN_FUNC_FN_FN_FN(<a class="code" href="rs__cl_8rsh.html#a254612a612ff7539b01a1478e03d8697">mix</a>)
-<a name="l00882"></a>00882 FN_FUNC_FN_FN_F(<a class="code" href="rs__cl_8rsh.html#a254612a612ff7539b01a1478e03d8697">mix</a>)
-<a name="l00883"></a>00883
-<a name="l00889"></a>00889 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) radians(<span class="keywordtype">float</span> <a class="code" href="rs__cl_8rsh.html#a0276b63d6905fa802032f1490a24515b">degrees</a>);
-<a name="l00890"></a>00890 FN_FUNC_FN(radians)
-<a name="l00891"></a>00891
-<a name="l00900"></a>00900 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a9f40337dfee48d1881b87b35aa8133dd">step</a>(<span class="keywordtype">float</span> edge, <span class="keywordtype">float</span> v);
-<a name="l00901"></a>00901 FN_FUNC_FN_FN(<a class="code" href="rs__cl_8rsh.html#a9f40337dfee48d1881b87b35aa8133dd">step</a>)
-<a name="l00902"></a>00902 FN_FUNC_FN_F(<a class="code" href="rs__cl_8rsh.html#a9f40337dfee48d1881b87b35aa8133dd">step</a>)
-<a name="l00903"></a>00903
-<a name="l00904"></a>00904 <span class="comment">// not implemented</span>
-<a name="l00905"></a>00905 extern <span class="keywordtype">float</span> __attribute__((overloadable)) smoothstep(<span class="keywordtype">float</span>, <span class="keywordtype">float</span>, <span class="keywordtype">float</span>);
-<a name="l00906"></a>00906 extern <a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> __attribute__((overloadable)) smoothstep(<a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a>, float2, float2);
-<a name="l00907"></a>00907 extern <a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> __attribute__((overloadable)) smoothstep(<a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a>, float3, float3);
-<a name="l00908"></a>00908 extern <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> __attribute__((overloadable)) smoothstep(<a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a>, float4, float4);
-<a name="l00909"></a>00909 extern float2 __attribute__((overloadable)) smoothstep(<span class="keywordtype">float</span>, <span class="keywordtype">float</span>, float2);
-<a name="l00910"></a>00910 extern float3 __attribute__((overloadable)) smoothstep(<span class="keywordtype">float</span>, <span class="keywordtype">float</span>, float3);
-<a name="l00911"></a>00911 extern float4 __attribute__((overloadable)) smoothstep(<span class="keywordtype">float</span>, <span class="keywordtype">float</span>, float4);
-<a name="l00912"></a>00912
-<a name="l00922"></a>00922 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a9fe423cc7d4c6d767f8a608d2ee76657">sign</a>(<span class="keywordtype">float</span> v);
-<a name="l00923"></a>00923 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a9fe423cc7d4c6d767f8a608d2ee76657">sign</a>)
-<a name="l00924"></a>00924
-<a name="l00930"></a>00930 _RS_RUNTIME float3 __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#add745d593bc2b23285bd10e52a204e25">cross</a>(float3 lhs, float3 rhs);
-<a name="l00931"></a>00931 _RS_RUNTIME float4 __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#add745d593bc2b23285bd10e52a204e25">cross</a>(float4 lhs, float4 rhs);
-<a name="l00932"></a>00932
-<a name="l00938"></a>00938 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#aa26d85eac3067e9769b33b6914b180f2">dot</a>(<span class="keywordtype">float</span> lhs, <span class="keywordtype">float</span> rhs);
-<a name="l00939"></a>00939 F_FUNC_FN_FN(<a class="code" href="rs__cl_8rsh.html#aa26d85eac3067e9769b33b6914b180f2">dot</a>)
-<a name="l00940"></a>00940
-<a name="l00946"></a>00946 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a902d4d2fab31ba8f9631b1f681e99baa">length</a>(<span class="keywordtype">float</span> v);
-<a name="l00947"></a>00947 F_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a902d4d2fab31ba8f9631b1f681e99baa">length</a>)
-<a name="l00948"></a>00948
-<a name="l00954"></a>00954 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a412bf215ae838c65079560bbefefaca7">distance</a>(<span class="keywordtype">float</span> lhs, <span class="keywordtype">float</span> rhs);
-<a name="l00955"></a>00955 F_FUNC_FN_FN(<a class="code" href="rs__cl_8rsh.html#a412bf215ae838c65079560bbefefaca7">distance</a>)
-<a name="l00956"></a>00956
-<a name="l00962"></a>00962 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a69c2a56f743593439d5ae5e3ec8e517f">normalize</a>(<span class="keywordtype">float</span> v);
-<a name="l00963"></a>00963 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a69c2a56f743593439d5ae5e3ec8e517f">normalize</a>)
-<a name="l00964"></a>00964
-<a name="l00965"></a>00965
-<a name="l00966"></a>00966 <span class="comment">// New approx API functions</span>
-<a name="l00967"></a>00967 <span class="preprocessor">#if (defined(RS_VERSION) && (RS_VERSION >= 17))</span>
-<a name="l00968"></a>00968 <span class="preprocessor"></span>
-<a name="l00974"></a>00974 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a49050a8e32c95f60df4eaba9d7dfdca6">half_recip</a>(<span class="keywordtype">float</span>);
-<a name="l00975"></a>00975 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a49050a8e32c95f60df4eaba9d7dfdca6">half_recip</a>)
-<a name="l00976"></a>00976
-<a name="l00982"></a>00982 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a26e2c17b20ee4c98b78c365d390e4fb8">half_sqrt</a>(<span class="keywordtype">float</span>);
-<a name="l00983"></a>00983 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a26e2c17b20ee4c98b78c365d390e4fb8">half_sqrt</a>)
-<a name="l00984"></a>00984
-<a name="l00990"></a>00990 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a0925ceb22d33dcbb45914350ffa2edea">half_rsqrt</a>(<span class="keywordtype">float</span> v);
-<a name="l00991"></a>00991 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a0925ceb22d33dcbb45914350ffa2edea">half_rsqrt</a>)
-<a name="l00992"></a>00992
-<a name="l00998"></a>00998 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a7c8f2f987044a360b5f616a80a74a4d5">fast_length</a>(<span class="keywordtype">float</span> v);
-<a name="l00999"></a>00999 F_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a7c8f2f987044a360b5f616a80a74a4d5">fast_length</a>)
-<a name="l01000"></a>01000
-<a name="l01006"></a>01006 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a4fcbdb9099e7d653a951cb344ba3c3c9">fast_distance</a>(<span class="keywordtype">float</span> lhs, <span class="keywordtype">float</span> rhs);
-<a name="l01007"></a>01007 F_FUNC_FN_FN(<a class="code" href="rs__cl_8rsh.html#a4fcbdb9099e7d653a951cb344ba3c3c9">fast_distance</a>)
-<a name="l01008"></a>01008
-<a name="l01014"></a>01014 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a3878bee2879351f518be68e015d76a35">fast_normalize</a>(<span class="keywordtype">float</span> v);
-<a name="l01015"></a>01015 F_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a3878bee2879351f518be68e015d76a35">fast_normalize</a>)
-<a name="l01016"></a>01016
-<a name="l01017"></a>01017 <span class="preprocessor">#endif // (defined(RS_VERSION) && (RS_VERSION >= 17))</span>
-<a name="l01018"></a>01018 <span class="preprocessor"></span>
-<a name="l01019"></a>01019
-<a name="l01020"></a>01020
-<a name="l01021"></a>01021 <span class="preprocessor">#if (defined(RS_VERSION) && (RS_VERSION >= 18))</span>
-<a name="l01022"></a>01022 <span class="preprocessor"></span><span class="comment">// Fast native math functions.</span>
-<a name="l01023"></a>01023
-<a name="l01024"></a>01024
-<a name="l01032"></a>01032 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#ab354691ecd844549b27ef9202e17f7ac">native_exp2</a>(<span class="keywordtype">float</span> v);
-<a name="l01033"></a>01033 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#ab354691ecd844549b27ef9202e17f7ac">native_exp2</a>)
-<a name="l01034"></a>01034
-<a name="l01042"></a>01042 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a45d8176823a05b891313f3d96decf491">native_exp</a>(<span class="keywordtype">float</span> v);
-<a name="l01043"></a>01043 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a45d8176823a05b891313f3d96decf491">native_exp</a>)
-<a name="l01044"></a>01044
-<a name="l01052"></a>01052 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) <a class="code" href="rs__cl_8rsh.html#a601ee3d2bf769f1cdc39a886f7a6c986">native_exp10</a>(<span class="keywordtype">float</span> v);
-<a name="l01053"></a>01053 FN_FUNC_FN(<a class="code" href="rs__cl_8rsh.html#a601ee3d2bf769f1cdc39a886f7a6c986">native_exp10</a>)
-<a name="l01054"></a>01054
-<a name="l01055"></a>01055
-<a name="l01056"></a>01056 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) native_log2(<span class="keywordtype">float</span> v);
-<a name="l01057"></a>01057 FN_FUNC_FN(native_log2)
-<a name="l01058"></a>01058
-<a name="l01059"></a>01059 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) native_log(<span class="keywordtype">float</span> v);
-<a name="l01060"></a>01060 FN_FUNC_FN(native_log)
-<a name="l01061"></a>01061
-<a name="l01062"></a>01062 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) native_log10(<span class="keywordtype">float</span> v);
-<a name="l01063"></a>01063 FN_FUNC_FN(native_log10)
-<a name="l01064"></a>01064
-<a name="l01065"></a>01065
-<a name="l01066"></a>01066 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable)) native_powr(<span class="keywordtype">float</span> v, <span class="keywordtype">float</span> y);
-<a name="l01067"></a>01067 FN_FUNC_FN_FN(native_powr)
-<a name="l01068"></a>01068
-<a name="l01069"></a>01069
-<a name="l01070"></a>01070 <span class="preprocessor">#endif // (defined(RS_VERSION) && (RS_VERSION >= 18))</span>
-<a name="l01071"></a>01071 <span class="preprocessor"></span>
-<a name="l01072"></a>01072
-<a name="l01073"></a>01073 <span class="preprocessor">#undef CVT_FUNC</span>
-<a name="l01074"></a>01074 <span class="preprocessor"></span><span class="preprocessor">#undef CVT_FUNC_2</span>
-<a name="l01075"></a>01075 <span class="preprocessor"></span><span class="preprocessor">#undef FN_FUNC_FN</span>
-<a name="l01076"></a>01076 <span class="preprocessor"></span><span class="preprocessor">#undef F_FUNC_FN</span>
-<a name="l01077"></a>01077 <span class="preprocessor"></span><span class="preprocessor">#undef IN_FUNC_FN</span>
-<a name="l01078"></a>01078 <span class="preprocessor"></span><span class="preprocessor">#undef FN_FUNC_FN_FN</span>
-<a name="l01079"></a>01079 <span class="preprocessor"></span><span class="preprocessor">#undef F_FUNC_FN_FN</span>
-<a name="l01080"></a>01080 <span class="preprocessor"></span><span class="preprocessor">#undef FN_FUNC_FN_F</span>
-<a name="l01081"></a>01081 <span class="preprocessor"></span><span class="preprocessor">#undef FN_FUNC_FN_IN</span>
-<a name="l01082"></a>01082 <span class="preprocessor"></span><span class="preprocessor">#undef FN_FUNC_FN_I</span>
-<a name="l01083"></a>01083 <span class="preprocessor"></span><span class="preprocessor">#undef FN_FUNC_FN_PFN</span>
-<a name="l01084"></a>01084 <span class="preprocessor"></span><span class="preprocessor">#undef FN_FUNC_FN_PIN</span>
-<a name="l01085"></a>01085 <span class="preprocessor"></span><span class="preprocessor">#undef FN_FUNC_FN_FN_FN</span>
-<a name="l01086"></a>01086 <span class="preprocessor"></span><span class="preprocessor">#undef FN_FUNC_FN_FN_F</span>
-<a name="l01087"></a>01087 <span class="preprocessor"></span><span class="preprocessor">#undef FN_FUNC_FN_F_F</span>
-<a name="l01088"></a>01088 <span class="preprocessor"></span><span class="preprocessor">#undef FN_FUNC_FN_FN_PIN</span>
-<a name="l01089"></a>01089 <span class="preprocessor"></span><span class="preprocessor">#undef XN_FUNC_YN</span>
-<a name="l01090"></a>01090 <span class="preprocessor"></span><span class="preprocessor">#undef UIN_FUNC_IN</span>
-<a name="l01091"></a>01091 <span class="preprocessor"></span><span class="preprocessor">#undef IN_FUNC_IN</span>
-<a name="l01092"></a>01092 <span class="preprocessor"></span><span class="preprocessor">#undef XN_FUNC_XN_XN_BODY</span>
-<a name="l01093"></a>01093 <span class="preprocessor"></span><span class="preprocessor">#undef IN_FUNC_IN_IN_BODY</span>
-<a name="l01094"></a>01094 <span class="preprocessor"></span>
-<a name="l01095"></a>01095 <span class="preprocessor">#endif</span>
-</pre></div></div>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/rs__core_8rsh.html b/docs/html/reference/renderscript/rs__core_8rsh.html
deleted file mode 100644
index 132488d..0000000
--- a/docs/html/reference/renderscript/rs__core_8rsh.html
+++ /dev/null
@@ -1,361 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_core.rsh File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
- <div id="navrow1" class="tabs">
- <ul class="tablist">
- <li><a href="index.html"><span>Overview</span></a></li>
- <li class="current"><a href="globals.html"><span>Globals</span></a></li>
- <li><a href="annotated.html"><span>Structs</span></a></li>
- </ul>
- </div>
-</div>
-<div class="header">
- <div class="summary">
-<a href="#nested-classes">Data Structures</a> |
-<a href="#typedef-members">Typedefs</a> |
-<a href="#enum-members">Enumerations</a> |
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle">
-<div class="title">/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_core.rsh File Reference</div> </div>
-</div>
-<div class="contents">
-<div class="textblock"><code>#include "<a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>"</code><br/>
-<code>#include "<a class="el" href="rs__allocation_8rsh_source.html">rs_allocation.rsh</a>"</code><br/>
-<code>#include "<a class="el" href="rs__atomic_8rsh_source.html">rs_atomic.rsh</a>"</code><br/>
-<code>#include "<a class="el" href="rs__cl_8rsh_source.html">rs_cl.rsh</a>"</code><br/>
-<code>#include "<a class="el" href="rs__debug_8rsh_source.html">rs_debug.rsh</a>"</code><br/>
-<code>#include "<a class="el" href="rs__element_8rsh_source.html">rs_element.rsh</a>"</code><br/>
-<code>#include "<a class="el" href="rs__math_8rsh_source.html">rs_math.rsh</a>"</code><br/>
-<code>#include "<a class="el" href="rs__matrix_8rsh_source.html">rs_matrix.rsh</a>"</code><br/>
-<code>#include "<a class="el" href="rs__object_8rsh_source.html">rs_object.rsh</a>"</code><br/>
-<code>#include "<a class="el" href="rs__quaternion_8rsh_source.html">rs_quaternion.rsh</a>"</code><br/>
-<code>#include "<a class="el" href="rs__sampler_8rsh_source.html">rs_sampler.rsh</a>"</code><br/>
-<code>#include "<a class="el" href="rs__time_8rsh_source.html">rs_time.rsh</a>"</code><br/>
-</div><table class="memberdecls">
-<tr><td colspan="2"><h2><a name="nested-classes"></a>
-Data Structures</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__script__call.html">rs_script_call</a></td></tr>
-<tr><td colspan="2"><h2><a name="typedef-members"></a>
-Typedefs</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structrs__script__call.html">rs_script_call</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__core_8rsh.html#ae8756b32e23445f287960b9d0ffb449c">rs_script_call_t</a></td></tr>
-<tr><td colspan="2"><h2><a name="enum-members"></a>
-Enumerations</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__core_8rsh.html#ae1755c901e8acb42510ad10b4e104746">rs_for_each_strategy</a> </td></tr>
-<tr><td colspan="2"><h2><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__core_8rsh.html#a91cfbca99f87ef144bea2cdf1e8473ca">rsSendToClient</a> (int cmdID)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__core_8rsh.html#a508003cadad2d37d41e2de7e9226f859">rsSendToClient</a> (int cmdID, const void *data, <a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> len)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__core_8rsh.html#a6e4ff6388e8c6978ed17447214f2a2e2">rsSendToClientBlocking</a> (int cmdID)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__core_8rsh.html#afc93b00be08f58512a6ab6a87feb9515">rsSendToClientBlocking</a> (int cmdID, const void *data, <a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> len)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__core_8rsh.html#a64271d266928b06ebd82ec90b756eb23">rsForEach</a> (<a class="el" href="structrs__script.html">rs_script</a> script, <a class="el" href="structrs__allocation.html">rs_allocation</a> input, <a class="el" href="structrs__allocation.html">rs_allocation</a> output, const void *usrData, <a class="el" href="rs__types_8rsh.html#a29d85914ddff32967d85ada69854206d">size_t</a> usrDataLen, const <a class="el" href="rs__core_8rsh.html#ae8756b32e23445f287960b9d0ffb449c">rs_script_call_t</a> *)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__core_8rsh.html#a38c803ed805dd1362442977eae70c41d">rsForEach</a> (<a class="el" href="structrs__script.html">rs_script</a> script, <a class="el" href="structrs__allocation.html">rs_allocation</a> input, <a class="el" href="structrs__allocation.html">rs_allocation</a> output, const void *usrData, <a class="el" href="rs__types_8rsh.html#a29d85914ddff32967d85ada69854206d">size_t</a> usrDataLen)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__core_8rsh.html#a6c541fa49b6fb9b528c2a147eaf764da">rsForEach</a> (<a class="el" href="structrs__script.html">rs_script</a> script, <a class="el" href="structrs__allocation.html">rs_allocation</a> input, <a class="el" href="structrs__allocation.html">rs_allocation</a> output)</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>todo-jsams </p>
-
-<p>Definition in file <a class="el" href="rs__core_8rsh_source.html">rs_core.rsh</a>.</p>
-</div><hr/><h2>Typedef Documentation</h2>
-<a class="anchor" id="ae8756b32e23445f287960b9d0ffb449c"></a><!-- doxytag: member="rs_core.rsh::rs_script_call_t" ref="ae8756b32e23445f287960b9d0ffb449c" args="" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef struct <a class="el" href="structrs__script__call.html">rs_script_call</a> <a class="el" href="rs__core_8rsh.html#ae8756b32e23445f287960b9d0ffb449c">rs_script_call_t</a></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Structure to provide extra information to a rsForEach call. Primarly used to restrict the call to a subset of cells in the allocation. </p>
-
-</div>
-</div>
-<hr/><h2>Enumeration Type Documentation</h2>
-<a class="anchor" id="ae1755c901e8acb42510ad10b4e104746"></a><!-- doxytag: member="rs_core.rsh::rs_for_each_strategy" ref="ae1755c901e8acb42510ad10b4e104746" args="" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">enum <a class="el" href="rs__core_8rsh.html#ae1755c901e8acb42510ad10b4e104746">rs_for_each_strategy</a></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Launch order hint for rsForEach calls. This provides a hint to the system to determine in which order the root function of the target is called with each cell of the allocation.</p>
-<p>This is a hint and implementations may not obey the order. </p>
-
-<p>Definition at line <a class="el" href="rs__core_8rsh_source.html#l00096">96</a> of file <a class="el" href="rs__core_8rsh_source.html">rs_core.rsh</a>.</p>
-
-</div>
-</div>
-<hr/><h2>Function Documentation</h2>
-<a class="anchor" id="a64271d266928b06ebd82ec90b756eb23"></a><!-- doxytag: member="rs_core.rsh::rsForEach" ref="a64271d266928b06ebd82ec90b756eb23" args="(rs_script script, rs_allocation input, rs_allocation output, const void *usrData, size_t usrDataLen, const rs_script_call_t *)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsForEach </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__script.html">rs_script</a> </td>
- <td class="paramname"><em>script</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a> </td>
- <td class="paramname"><em>input</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a> </td>
- <td class="paramname"><em>output</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const void * </td>
- <td class="paramname"><em>usrData</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a29d85914ddff32967d85ada69854206d">size_t</a> </td>
- <td class="paramname"><em>usrDataLen</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="rs__core_8rsh.html#ae8756b32e23445f287960b9d0ffb449c">rs_script_call_t</a> * </td>
- <td class="paramname"> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Make a script to script call to launch work. One of the input or output is required to be a valid object. The input and output must be of the same dimensions. API 10-13</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">script</td><td>The target script to call </td></tr>
- <tr><td class="paramname">input</td><td>The allocation to source data from </td></tr>
- <tr><td class="paramname">output</td><td>the allocation to write date into </td></tr>
- <tr><td class="paramname">usrData</td><td>The user definied params to pass to the root script. May be NULL. </td></tr>
- <tr><td class="paramname">sc</td><td>Extra control infomation used to select a sub-region of the allocation to be processed or suggest a walking strategy. May be NULL. Make a script to script call to launch work. One of the input or output is required to be a valid object. The input and output must be of the same dimensions. API 14+</td></tr>
- <tr><td class="paramname">script</td><td>The target script to call </td></tr>
- <tr><td class="paramname">input</td><td>The allocation to source data from </td></tr>
- <tr><td class="paramname">output</td><td>the allocation to write date into </td></tr>
- <tr><td class="paramname">usrData</td><td>The user definied params to pass to the root script. May be NULL. </td></tr>
- <tr><td class="paramname">usrDataLen</td><td>The size of the userData structure. This will be used to perform a shallow copy of the data if necessary. </td></tr>
- <tr><td class="paramname">sc</td><td>Extra control infomation used to select a sub-region of the allocation to be processed or suggest a walking strategy. May be NULL. </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a38c803ed805dd1362442977eae70c41d"></a><!-- doxytag: member="rs_core.rsh::rsForEach" ref="a38c803ed805dd1362442977eae70c41d" args="(rs_script script, rs_allocation input, rs_allocation output, const void *usrData, size_t usrDataLen)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsForEach </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__script.html">rs_script</a> </td>
- <td class="paramname"><em>script</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a> </td>
- <td class="paramname"><em>input</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a> </td>
- <td class="paramname"><em>output</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const void * </td>
- <td class="paramname"><em>usrData</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a29d85914ddff32967d85ada69854206d">size_t</a> </td>
- <td class="paramname"><em>usrDataLen</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a6c541fa49b6fb9b528c2a147eaf764da"></a><!-- doxytag: member="rs_core.rsh::rsForEach" ref="a6c541fa49b6fb9b528c2a147eaf764da" args="(rs_script script, rs_allocation input, rs_allocation output)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsForEach </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__script.html">rs_script</a> </td>
- <td class="paramname"><em>script</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a> </td>
- <td class="paramname"><em>input</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a> </td>
- <td class="paramname"><em>output</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a91cfbca99f87ef144bea2cdf1e8473ca"></a><!-- doxytag: member="rs_core.rsh::rsSendToClient" ref="a91cfbca99f87ef144bea2cdf1e8473ca" args="(int cmdID)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">bool rsSendToClient </td>
- <td>(</td>
- <td class="paramtype">int </td>
- <td class="paramname"><em>cmdID</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Send a message back to the client. Will not block and returns true if the message was sendable and false if the fifo was full. A message ID is required. Data payload is optional. </p>
-
-</div>
-</div>
-<a class="anchor" id="a508003cadad2d37d41e2de7e9226f859"></a><!-- doxytag: member="rs_core.rsh::rsSendToClient" ref="a508003cadad2d37d41e2de7e9226f859" args="(int cmdID, const void *data, uint len)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">bool rsSendToClient </td>
- <td>(</td>
- <td class="paramtype">int </td>
- <td class="paramname"><em>cmdID</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const void * </td>
- <td class="paramname"><em>data</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> </td>
- <td class="paramname"><em>len</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a6e4ff6388e8c6978ed17447214f2a2e2"></a><!-- doxytag: member="rs_core.rsh::rsSendToClientBlocking" ref="a6e4ff6388e8c6978ed17447214f2a2e2" args="(int cmdID)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsSendToClientBlocking </td>
- <td>(</td>
- <td class="paramtype">int </td>
- <td class="paramname"><em>cmdID</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Send a message back to the client, blocking until the message is queued. A message ID is required. Data payload is optional. </p>
-
-</div>
-</div>
-<a class="anchor" id="afc93b00be08f58512a6ab6a87feb9515"></a><!-- doxytag: member="rs_core.rsh::rsSendToClientBlocking" ref="afc93b00be08f58512a6ab6a87feb9515" args="(int cmdID, const void *data, uint len)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsSendToClientBlocking </td>
- <td>(</td>
- <td class="paramtype">int </td>
- <td class="paramname"><em>cmdID</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const void * </td>
- <td class="paramname"><em>data</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> </td>
- <td class="paramname"><em>len</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/rs__core_8rsh_source.html b/docs/html/reference/renderscript/rs__core_8rsh_source.html
deleted file mode 100644
index ddc870d..0000000
--- a/docs/html/reference/renderscript/rs__core_8rsh_source.html
+++ /dev/null
@@ -1,125 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_core.rsh Source File</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
- <div id="navrow1" class="tabs">
- <ul class="tablist">
- <li><a href="index.html"><span>Overview</span></a></li>
- <li class="current"><a href="globals.html"><span>Globals</span></a></li>
- <li><a href="annotated.html"><span>Structs</span></a></li>
- </ul>
- </div>
-<div class="header">
- <div class="headertitle">
-<div class="title">/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_core.rsh</div> </div>
-</div>
-<div class="contents">
-<a href="rs__core_8rsh.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * Copyright (C) 2011-2012 The Android Open Source Project</span>
-<a name="l00003"></a>00003 <span class="comment"> *</span>
-<a name="l00004"></a>00004 <span class="comment"> * Licensed under the Apache License, Version 2.0 (the "License");</span>
-<a name="l00005"></a>00005 <span class="comment"> * you may not use this file except in compliance with the License.</span>
-<a name="l00006"></a>00006 <span class="comment"> * You may obtain a copy of the License at</span>
-<a name="l00007"></a>00007 <span class="comment"> *</span>
-<a name="l00008"></a>00008 <span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span>
-<a name="l00011"></a>00011 <span class="comment"> * distributed under the License is distributed on an "AS IS" BASIS,</span>
-<a name="l00012"></a>00012 <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
-<a name="l00013"></a>00013 <span class="comment"> * See the License for the specific language governing permissions and</span>
-<a name="l00014"></a>00014 <span class="comment"> * limitations under the License.</span>
-<a name="l00015"></a>00015 <span class="comment"> */</span>
-<a name="l00016"></a>00016
-<a name="l00046"></a>00046 <span class="preprocessor">#ifndef __RS_CORE_RSH__</span>
-<a name="l00047"></a>00047 <span class="preprocessor"></span><span class="preprocessor">#define __RS_CORE_RSH__</span>
-<a name="l00048"></a>00048 <span class="preprocessor"></span>
-<a name="l00049"></a>00049 <span class="preprocessor">#define _RS_RUNTIME extern</span>
-<a name="l00050"></a>00050 <span class="preprocessor"></span>
-<a name="l00051"></a>00051 <span class="preprocessor">#include "<a class="code" href="rs__types_8rsh.html">rs_types.rsh</a>"</span>
-<a name="l00052"></a>00052 <span class="preprocessor">#include "<a class="code" href="rs__allocation_8rsh.html" title="Allocation routines.">rs_allocation.rsh</a>"</span>
-<a name="l00053"></a>00053 <span class="preprocessor">#include "<a class="code" href="rs__atomic_8rsh.html" title="Atomic routines.">rs_atomic.rsh</a>"</span>
-<a name="l00054"></a>00054 <span class="preprocessor">#include "<a class="code" href="rs__cl_8rsh.html" title="Basic math functions.">rs_cl.rsh</a>"</span>
-<a name="l00055"></a>00055 <span class="preprocessor">#include "<a class="code" href="rs__debug_8rsh.html" title="Utility debugging routines.">rs_debug.rsh</a>"</span>
-<a name="l00056"></a>00056 <span class="preprocessor">#include "<a class="code" href="rs__element_8rsh.html" title="Element routines.">rs_element.rsh</a>"</span>
-<a name="l00057"></a>00057 <span class="preprocessor">#include "<a class="code" href="rs__math_8rsh.html">rs_math.rsh</a>"</span>
-<a name="l00058"></a>00058 <span class="preprocessor">#include "<a class="code" href="rs__matrix_8rsh.html" title="Matrix routines.">rs_matrix.rsh</a>"</span>
-<a name="l00059"></a>00059 <span class="preprocessor">#include "<a class="code" href="rs__object_8rsh.html" title="Object routines.">rs_object.rsh</a>"</span>
-<a name="l00060"></a>00060 <span class="preprocessor">#include "<a class="code" href="rs__quaternion_8rsh.html" title="Quaternion routines.">rs_quaternion.rsh</a>"</span>
-<a name="l00061"></a>00061 <span class="preprocessor">#include "<a class="code" href="rs__sampler_8rsh.html" title="Sampler routines.">rs_sampler.rsh</a>"</span>
-<a name="l00062"></a>00062 <span class="preprocessor">#include "<a class="code" href="rs__time_8rsh.html" title="RenderScript time routines.">rs_time.rsh</a>"</span>
-<a name="l00063"></a>00063
-<a name="l00069"></a>00069 <span class="keyword">extern</span> <span class="keywordtype">bool</span> __attribute__((overloadable))
-<a name="l00070"></a>00070 <a class="code" href="rs__core_8rsh.html#a91cfbca99f87ef144bea2cdf1e8473ca">rsSendToClient</a>(<span class="keywordtype">int</span> cmdID);
-<a name="l00074"></a>00074 extern <span class="keywordtype">bool</span> __attribute__((overloadable))
-<a name="l00075"></a>00075 <a class="code" href="rs__core_8rsh.html#a91cfbca99f87ef144bea2cdf1e8473ca">rsSendToClient</a>(<span class="keywordtype">int</span> cmdID, const <span class="keywordtype">void</span> *data, <a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> len);
-<a name="l00080"></a>00080 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00081"></a>00081 <a class="code" href="rs__core_8rsh.html#a6e4ff6388e8c6978ed17447214f2a2e2">rsSendToClientBlocking</a>(<span class="keywordtype">int</span> cmdID);
-<a name="l00085"></a>00085 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00086"></a>00086 <a class="code" href="rs__core_8rsh.html#a6e4ff6388e8c6978ed17447214f2a2e2">rsSendToClientBlocking</a>(<span class="keywordtype">int</span> cmdID, const <span class="keywordtype">void</span> *data, <a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> len);
-<a name="l00087"></a>00087
-<a name="l00088"></a>00088
-<a name="l00096"></a><a class="code" href="rs__core_8rsh.html#ae1755c901e8acb42510ad10b4e104746">00096</a> enum <a class="code" href="rs__core_8rsh.html#ae1755c901e8acb42510ad10b4e104746">rs_for_each_strategy</a> {
-<a name="l00097"></a>00097 RS_FOR_EACH_STRATEGY_SERIAL = 0,
-<a name="l00098"></a>00098 RS_FOR_EACH_STRATEGY_DONT_CARE = 1,
-<a name="l00099"></a>00099 RS_FOR_EACH_STRATEGY_DST_LINEAR = 2,
-<a name="l00100"></a>00100 RS_FOR_EACH_STRATEGY_TILE_SMALL= 3,
-<a name="l00101"></a>00101 RS_FOR_EACH_STRATEGY_TILE_MEDIUM = 4,
-<a name="l00102"></a>00102 RS_FOR_EACH_STRATEGY_TILE_LARGE = 5
-<a name="l00103"></a>00103 };
-<a name="l00104"></a>00104
-<a name="l00105"></a>00105
-<a name="l00110"></a><a class="code" href="structrs__script__call.html">00110</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structrs__script__call.html">rs_script_call</a> {
-<a name="l00111"></a>00111 <span class="keyword">enum</span> <a class="code" href="rs__core_8rsh.html#ae1755c901e8acb42510ad10b4e104746">rs_for_each_strategy</a> strategy;
-<a name="l00112"></a>00112 <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> xStart;
-<a name="l00113"></a>00113 <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> xEnd;
-<a name="l00114"></a>00114 <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> yStart;
-<a name="l00115"></a>00115 <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> yEnd;
-<a name="l00116"></a>00116 <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> zStart;
-<a name="l00117"></a>00117 <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> zEnd;
-<a name="l00118"></a>00118 <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> arrayStart;
-<a name="l00119"></a>00119 <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> arrayEnd;
-<a name="l00120"></a>00120 } <a class="code" href="rs__core_8rsh.html#ae8756b32e23445f287960b9d0ffb449c">rs_script_call_t</a>;
-<a name="l00121"></a>00121
-<a name="l00138"></a>00138 <span class="preprocessor">#if !defined(RS_VERSION) || (RS_VERSION < 14)</span>
-<a name="l00139"></a>00139 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00140"></a>00140 <a class="code" href="rs__core_8rsh.html#a64271d266928b06ebd82ec90b756eb23">rsForEach</a>(<a class="code" href="structrs__script.html" title="Opaque handle to a RenderScript script object.">rs_script</a> script, <a class="code" href="structrs__allocation.html" title="Opaque handle to a RenderScript allocation.">rs_allocation</a> input,
-<a name="l00141"></a>00141 <a class="code" href="structrs__allocation.html" title="Opaque handle to a RenderScript allocation.">rs_allocation</a> output, const <span class="keywordtype">void</span> * usrData,
-<a name="l00142"></a>00142 const <a class="code" href="structrs__script__call.html">rs_script_call_t</a> *sc);
-<a name="l00146"></a>00146 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00147"></a>00147 <a class="code" href="rs__core_8rsh.html#a64271d266928b06ebd82ec90b756eb23">rsForEach</a>(<a class="code" href="structrs__script.html" title="Opaque handle to a RenderScript script object.">rs_script</a> script, <a class="code" href="structrs__allocation.html" title="Opaque handle to a RenderScript allocation.">rs_allocation</a> input,
-<a name="l00148"></a>00148 <a class="code" href="structrs__allocation.html" title="Opaque handle to a RenderScript allocation.">rs_allocation</a> output, const <span class="keywordtype">void</span> * usrData);
-<a name="l00149"></a>00149 <span class="preprocessor">#else</span>
-<a name="l00150"></a>00150 <span class="preprocessor"></span>
-<a name="l00169"></a>00169 <span class="keyword">extern</span> <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00170"></a>00170 <a class="code" href="rs__core_8rsh.html#a64271d266928b06ebd82ec90b756eb23">rsForEach</a>(<a class="code" href="structrs__script.html" title="Opaque handle to a RenderScript script object.">rs_script</a> script, <a class="code" href="structrs__allocation.html" title="Opaque handle to a RenderScript allocation.">rs_allocation</a> input, <a class="code" href="structrs__allocation.html" title="Opaque handle to a RenderScript allocation.">rs_allocation</a> output,
-<a name="l00171"></a>00171 const <span class="keywordtype">void</span> * usrData, <span class="keywordtype">size_t</span> usrDataLen, const <a class="code" href="structrs__script__call.html">rs_script_call_t</a> *);
-<a name="l00175"></a>00175 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00176"></a>00176 <a class="code" href="rs__core_8rsh.html#a64271d266928b06ebd82ec90b756eb23">rsForEach</a>(<a class="code" href="structrs__script.html" title="Opaque handle to a RenderScript script object.">rs_script</a> script, <a class="code" href="structrs__allocation.html" title="Opaque handle to a RenderScript allocation.">rs_allocation</a> input, <a class="code" href="structrs__allocation.html" title="Opaque handle to a RenderScript allocation.">rs_allocation</a> output,
-<a name="l00177"></a>00177 const <span class="keywordtype">void</span> * usrData, <span class="keywordtype">size_t</span> usrDataLen);
-<a name="l00181"></a>00181 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00182"></a>00182 <a class="code" href="rs__core_8rsh.html#a64271d266928b06ebd82ec90b756eb23">rsForEach</a>(<a class="code" href="structrs__script.html" title="Opaque handle to a RenderScript script object.">rs_script</a> script, <a class="code" href="structrs__allocation.html" title="Opaque handle to a RenderScript allocation.">rs_allocation</a> input, <a class="code" href="structrs__allocation.html" title="Opaque handle to a RenderScript allocation.">rs_allocation</a> output);
-<a name="l00183"></a>00183 <span class="preprocessor">#endif</span>
-<a name="l00184"></a>00184 <span class="preprocessor"></span>
-<a name="l00185"></a>00185
-<a name="l00186"></a>00186
-<a name="l00187"></a>00187 <span class="preprocessor">#undef _RS_RUNTIME</span>
-<a name="l00188"></a>00188 <span class="preprocessor"></span>
-<a name="l00189"></a>00189 <span class="preprocessor">#endif</span>
-</pre></div></div>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/rs__debug_8rsh.html b/docs/html/reference/renderscript/rs__debug_8rsh.html
deleted file mode 100644
index cb7eb65..0000000
--- a/docs/html/reference/renderscript/rs__debug_8rsh.html
+++ /dev/null
@@ -1,662 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_debug.rsh File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
- <div id="navrow1" class="tabs">
- <ul class="tablist">
- <li><a href="index.html"><span>Overview</span></a></li>
- <li class="current"><a href="globals.html"><span>Globals</span></a></li>
- <li><a href="annotated.html"><span>Structs</span></a></li>
- </ul>
- </div>
-</div>
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle">
-<div class="title">/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_debug.rsh File Reference</div> </div>
-</div>
-<div class="contents">
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a> (const char *, float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__debug_8rsh.html#aebd4d3e687a397db1a817ca6d46aed29">rsDebug</a> (const char *, float, float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__debug_8rsh.html#ab1731408774f01186aff59b89c47fe32">rsDebug</a> (const char *, float, float, float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__debug_8rsh.html#a6bb20c16c9fcc613158ca8c6f0dd81bd">rsDebug</a> (const char *, float, float, float, float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__debug_8rsh.html#a0a59285be7204bde7b199c77578b6a42">rsDebug</a> (const char *, double)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__debug_8rsh.html#a47b07360e1df6885b3f2eb207408db2c">rsDebug</a> (const char *, const <a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__debug_8rsh.html#aee885d367bb22f5c437dec486eafb75c">rsDebug</a> (const char *, const <a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> *)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__debug_8rsh.html#ac611c53b945b0ced90fde98e3846be79">rsDebug</a> (const char *, const <a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> *)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__debug_8rsh.html#ad8f8901db11563ddd7d655fed025047f">rsDebug</a> (const char *, int)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__debug_8rsh.html#a490b0f6af3cc2e0280e97f2d2c2da228">rsDebug</a> (const char *, <a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a>)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__debug_8rsh.html#aa75aa9faf7646ceeafeb19279416e9e8">rsDebug</a> (const char *, long)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__debug_8rsh.html#aa371f42b8d323a1a20d56461011fc664">rsDebug</a> (const char *, unsigned long)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__debug_8rsh.html#ab5a58069a9d914e413f52b0f9bd62a00">rsDebug</a> (const char *, const void *)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__debug_8rsh.html#aa8b0824fa7ebb7568475aa9fe59db2a7">rsDebug</a> (const char *, char)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__debug_8rsh.html#ae15778f8dce1f1afb184223aa2ea16d7">rsDebug</a> (const char *, unsigned char)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__debug_8rsh.html#a9ae73c92436ef2ebb3aa003dfe32b47e">rsDebug</a> (const char *, <a class="el" href="rs__types_8rsh.html#aff5eb7cd53a34bb01924bf64485296de">uchar2</a>)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__debug_8rsh.html#ad2ac07fa7f59cd1ec4c3e411a726e3bf">rsDebug</a> (const char *, short)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__debug_8rsh.html#a914fe650bcd59de44d33fc4b72d6d494">rsDebug</a> (const char *, <a class="el" href="rs__types_8rsh.html#a24a9d78cfc32475e2c6eb1cdec239bf2">ushort2</a>)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__debug_8rsh.html#a52c6ade9360a550eb25c044ea2380f4b">rsDebug</a> (const char *, <a class="el" href="rs__types_8rsh.html#afd55d62cee0785034b73375acd0df9da">long2</a>)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__debug_8rsh.html#ad723b521df57125a4165812004f107c4">rsDebug</a> (const char *, <a class="el" href="rs__types_8rsh.html#a56988b12ab16acf753356f7a5c70565a">ulong2</a>)</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Utility debugging routines. </p>
-<p>Routines intended to be used during application developement. These should not be used in shipping applications. All print a string and value pair to the standard log. </p>
-
-<p>Definition in file <a class="el" href="rs__debug_8rsh_source.html">rs_debug.rsh</a>.</p>
-</div><hr/><h2>Function Documentation</h2>
-<a class="anchor" id="aff35df661796c13fa9e616d1d387df0d"></a><!-- doxytag: member="rs_debug.rsh::rsDebug" ref="aff35df661796c13fa9e616d1d387df0d" args="(const char *, float)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsDebug </td>
- <td>(</td>
- <td class="paramtype">const char * </td>
- <td class="paramname">, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Debug function. Prints a string and value to the log. </p>
-
-</div>
-</div>
-<a class="anchor" id="aebd4d3e687a397db1a817ca6d46aed29"></a><!-- doxytag: member="rs_debug.rsh::rsDebug" ref="aebd4d3e687a397db1a817ca6d46aed29" args="(const char *, float, float)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsDebug </td>
- <td>(</td>
- <td class="paramtype">const char * </td>
- <td class="paramname">, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname">, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Debug function. Prints a string and value to the log. </p>
-
-</div>
-</div>
-<a class="anchor" id="ab1731408774f01186aff59b89c47fe32"></a><!-- doxytag: member="rs_debug.rsh::rsDebug" ref="ab1731408774f01186aff59b89c47fe32" args="(const char *, float, float, float)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsDebug </td>
- <td>(</td>
- <td class="paramtype">const char * </td>
- <td class="paramname">, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname">, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname">, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Debug function. Prints a string and value to the log. </p>
-
-</div>
-</div>
-<a class="anchor" id="a6bb20c16c9fcc613158ca8c6f0dd81bd"></a><!-- doxytag: member="rs_debug.rsh::rsDebug" ref="a6bb20c16c9fcc613158ca8c6f0dd81bd" args="(const char *, float, float, float, float)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsDebug </td>
- <td>(</td>
- <td class="paramtype">const char * </td>
- <td class="paramname">, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname">, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname">, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname">, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Debug function. Prints a string and value to the log. </p>
-
-</div>
-</div>
-<a class="anchor" id="a0a59285be7204bde7b199c77578b6a42"></a><!-- doxytag: member="rs_debug.rsh::rsDebug" ref="a0a59285be7204bde7b199c77578b6a42" args="(const char *, double)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsDebug </td>
- <td>(</td>
- <td class="paramtype">const char * </td>
- <td class="paramname">, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">double </td>
- <td class="paramname"> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Debug function. Prints a string and value to the log. </p>
-
-</div>
-</div>
-<a class="anchor" id="a47b07360e1df6885b3f2eb207408db2c"></a><!-- doxytag: member="rs_debug.rsh::rsDebug" ref="a47b07360e1df6885b3f2eb207408db2c" args="(const char *, const rs_matrix4x4 *)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsDebug </td>
- <td>(</td>
- <td class="paramtype">const char * </td>
- <td class="paramname">, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> * </td>
- <td class="paramname"> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Debug function. Prints a string and value to the log. </p>
-
-</div>
-</div>
-<a class="anchor" id="aee885d367bb22f5c437dec486eafb75c"></a><!-- doxytag: member="rs_debug.rsh::rsDebug" ref="aee885d367bb22f5c437dec486eafb75c" args="(const char *, const rs_matrix3x3 *)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsDebug </td>
- <td>(</td>
- <td class="paramtype">const char * </td>
- <td class="paramname">, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> * </td>
- <td class="paramname"> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Debug function. Prints a string and value to the log. </p>
-
-</div>
-</div>
-<a class="anchor" id="ac611c53b945b0ced90fde98e3846be79"></a><!-- doxytag: member="rs_debug.rsh::rsDebug" ref="ac611c53b945b0ced90fde98e3846be79" args="(const char *, const rs_matrix2x2 *)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsDebug </td>
- <td>(</td>
- <td class="paramtype">const char * </td>
- <td class="paramname">, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> * </td>
- <td class="paramname"> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Debug function. Prints a string and value to the log. </p>
-
-</div>
-</div>
-<a class="anchor" id="ad8f8901db11563ddd7d655fed025047f"></a><!-- doxytag: member="rs_debug.rsh::rsDebug" ref="ad8f8901db11563ddd7d655fed025047f" args="(const char *, int)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsDebug </td>
- <td>(</td>
- <td class="paramtype">const char * </td>
- <td class="paramname">, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">int </td>
- <td class="paramname"> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Debug function. Prints a string and value to the log. </p>
-
-</div>
-</div>
-<a class="anchor" id="a490b0f6af3cc2e0280e97f2d2c2da228"></a><!-- doxytag: member="rs_debug.rsh::rsDebug" ref="a490b0f6af3cc2e0280e97f2d2c2da228" args="(const char *, uint)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsDebug </td>
- <td>(</td>
- <td class="paramtype">const char * </td>
- <td class="paramname">, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> </td>
- <td class="paramname"> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Debug function. Prints a string and value to the log. </p>
-
-</div>
-</div>
-<a class="anchor" id="aa75aa9faf7646ceeafeb19279416e9e8"></a><!-- doxytag: member="rs_debug.rsh::rsDebug" ref="aa75aa9faf7646ceeafeb19279416e9e8" args="(const char *, long)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsDebug </td>
- <td>(</td>
- <td class="paramtype">const char * </td>
- <td class="paramname">, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">long </td>
- <td class="paramname"> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Debug function. Prints a string and value to the log. </p>
-
-</div>
-</div>
-<a class="anchor" id="aa371f42b8d323a1a20d56461011fc664"></a><!-- doxytag: member="rs_debug.rsh::rsDebug" ref="aa371f42b8d323a1a20d56461011fc664" args="(const char *, unsigned long)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsDebug </td>
- <td>(</td>
- <td class="paramtype">const char * </td>
- <td class="paramname">, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">unsigned </td>
- <td class="paramname"><em>long</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Debug function. Prints a string and value to the log. </p>
-
-</div>
-</div>
-<a class="anchor" id="ab5a58069a9d914e413f52b0f9bd62a00"></a><!-- doxytag: member="rs_debug.rsh::rsDebug" ref="ab5a58069a9d914e413f52b0f9bd62a00" args="(const char *, const void *)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsDebug </td>
- <td>(</td>
- <td class="paramtype">const char * </td>
- <td class="paramname">, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const void * </td>
- <td class="paramname"> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Debug function. Prints a string and value to the log. </p>
-
-</div>
-</div>
-<a class="anchor" id="aa8b0824fa7ebb7568475aa9fe59db2a7"></a><!-- doxytag: member="rs_debug.rsh::rsDebug" ref="aa8b0824fa7ebb7568475aa9fe59db2a7" args="(const char *, char)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsDebug </td>
- <td>(</td>
- <td class="paramtype">const char * </td>
- <td class="paramname">, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">char </td>
- <td class="paramname"> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Debug function. Prints a string and value to the log. </p>
-
-</div>
-</div>
-<a class="anchor" id="ae15778f8dce1f1afb184223aa2ea16d7"></a><!-- doxytag: member="rs_debug.rsh::rsDebug" ref="ae15778f8dce1f1afb184223aa2ea16d7" args="(const char *, unsigned char)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsDebug </td>
- <td>(</td>
- <td class="paramtype">const char * </td>
- <td class="paramname">, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">unsigned </td>
- <td class="paramname"><em>char</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Debug function. Prints a string and value to the log. </p>
-
-</div>
-</div>
-<a class="anchor" id="a9ae73c92436ef2ebb3aa003dfe32b47e"></a><!-- doxytag: member="rs_debug.rsh::rsDebug" ref="a9ae73c92436ef2ebb3aa003dfe32b47e" args="(const char *, uchar2)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsDebug </td>
- <td>(</td>
- <td class="paramtype">const char * </td>
- <td class="paramname">, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#aff5eb7cd53a34bb01924bf64485296de">uchar2</a> </td>
- <td class="paramname"> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Debug function. Prints a string and value to the log. </p>
-
-</div>
-</div>
-<a class="anchor" id="ad2ac07fa7f59cd1ec4c3e411a726e3bf"></a><!-- doxytag: member="rs_debug.rsh::rsDebug" ref="ad2ac07fa7f59cd1ec4c3e411a726e3bf" args="(const char *, short)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsDebug </td>
- <td>(</td>
- <td class="paramtype">const char * </td>
- <td class="paramname">, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">short </td>
- <td class="paramname"> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Debug function. Prints a string and value to the log. </p>
-
-</div>
-</div>
-<a class="anchor" id="a914fe650bcd59de44d33fc4b72d6d494"></a><!-- doxytag: member="rs_debug.rsh::rsDebug" ref="a914fe650bcd59de44d33fc4b72d6d494" args="(const char *, ushort2)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsDebug </td>
- <td>(</td>
- <td class="paramtype">const char * </td>
- <td class="paramname">, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a24a9d78cfc32475e2c6eb1cdec239bf2">ushort2</a> </td>
- <td class="paramname"> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Debug function. Prints a string and value to the log. </p>
-
-</div>
-</div>
-<a class="anchor" id="a52c6ade9360a550eb25c044ea2380f4b"></a><!-- doxytag: member="rs_debug.rsh::rsDebug" ref="a52c6ade9360a550eb25c044ea2380f4b" args="(const char *, long2)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsDebug </td>
- <td>(</td>
- <td class="paramtype">const char * </td>
- <td class="paramname">, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#afd55d62cee0785034b73375acd0df9da">long2</a> </td>
- <td class="paramname"> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Debug function. Prints a string and value to the log. </p>
-
-</div>
-</div>
-<a class="anchor" id="ad723b521df57125a4165812004f107c4"></a><!-- doxytag: member="rs_debug.rsh::rsDebug" ref="ad723b521df57125a4165812004f107c4" args="(const char *, ulong2)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsDebug </td>
- <td>(</td>
- <td class="paramtype">const char * </td>
- <td class="paramname">, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a56988b12ab16acf753356f7a5c70565a">ulong2</a> </td>
- <td class="paramname"> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Debug function. Prints a string and value to the log. </p>
-
-</div>
-</div>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/rs__debug_8rsh_source.html b/docs/html/reference/renderscript/rs__debug_8rsh_source.html
deleted file mode 100644
index cd5895d..0000000
--- a/docs/html/reference/renderscript/rs__debug_8rsh_source.html
+++ /dev/null
@@ -1,155 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_debug.rsh Source File</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
- <div id="navrow1" class="tabs">
- <ul class="tablist">
- <li><a href="index.html"><span>Overview</span></a></li>
- <li class="current"><a href="globals.html"><span>Globals</span></a></li>
- <li><a href="annotated.html"><span>Structs</span></a></li>
- </ul>
- </div>
-<div class="header">
- <div class="headertitle">
-<div class="title">/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_debug.rsh</div> </div>
-</div>
-<div class="contents">
-<a href="rs__debug_8rsh.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * Copyright (C) 2011 The Android Open Source Project</span>
-<a name="l00003"></a>00003 <span class="comment"> *</span>
-<a name="l00004"></a>00004 <span class="comment"> * Licensed under the Apache License, Version 2.0 (the "License");</span>
-<a name="l00005"></a>00005 <span class="comment"> * you may not use this file except in compliance with the License.</span>
-<a name="l00006"></a>00006 <span class="comment"> * You may obtain a copy of the License at</span>
-<a name="l00007"></a>00007 <span class="comment"> *</span>
-<a name="l00008"></a>00008 <span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span>
-<a name="l00011"></a>00011 <span class="comment"> * distributed under the License is distributed on an "AS IS" BASIS,</span>
-<a name="l00012"></a>00012 <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
-<a name="l00013"></a>00013 <span class="comment"> * See the License for the specific language governing permissions and</span>
-<a name="l00014"></a>00014 <span class="comment"> * limitations under the License.</span>
-<a name="l00015"></a>00015 <span class="comment"> */</span>
-<a name="l00016"></a>00016
-<a name="l00026"></a>00026 <span class="preprocessor">#ifndef __RS_DEBUG_RSH__</span>
-<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor">#define __RS_DEBUG_RSH__</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span>
-<a name="l00029"></a>00029
-<a name="l00033"></a>00033 <span class="keyword">extern</span> <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00034"></a>00034 <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <span class="keywordtype">float</span>);
-<a name="l00038"></a>00038 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00039"></a>00039 <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <span class="keywordtype">float</span>, <span class="keywordtype">float</span>);
-<a name="l00043"></a>00043 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00044"></a>00044 <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <span class="keywordtype">float</span>, <span class="keywordtype">float</span>, <span class="keywordtype">float</span>);
-<a name="l00048"></a>00048 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00049"></a>00049 <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <span class="keywordtype">float</span>, <span class="keywordtype">float</span>, <span class="keywordtype">float</span>, <span class="keywordtype">float</span>);
-<a name="l00053"></a>00053 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00054"></a>00054 <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a>);
-<a name="l00058"></a>00058 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00059"></a>00059 <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a>);
-<a name="l00063"></a>00063 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00064"></a>00064 <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a>);
-<a name="l00068"></a>00068 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00069"></a>00069 <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <span class="keywordtype">double</span>);
-<a name="l00073"></a>00073 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00074"></a>00074 <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, const <a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *);
-<a name="l00078"></a>00078 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00079"></a>00079 <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, const <a class="code" href="structrs__matrix3x3.html" title="3x3 float matrix">rs_matrix3x3</a> *);
-<a name="l00083"></a>00083 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00084"></a>00084 <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, const <a class="code" href="structrs__matrix2x2.html" title="2x2 float matrix">rs_matrix2x2</a> *);
-<a name="l00088"></a>00088 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00089"></a>00089 <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <span class="keywordtype">int</span>);
-<a name="l00093"></a>00093 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00094"></a>00094 <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a>);
-<a name="l00098"></a>00098 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00099"></a>00099 <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <span class="keywordtype">long</span>);
-<a name="l00103"></a>00103 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00104"></a>00104 <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>);
-<a name="l00108"></a>00108 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00109"></a>00109 <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <span class="keywordtype">long</span> <span class="keywordtype">long</span>);
-<a name="l00113"></a>00113 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00114"></a>00114 <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span>);
-<a name="l00118"></a>00118 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00119"></a>00119 <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, const <span class="keywordtype">void</span> *);
-<a name="l00120"></a>00120
-<a name="l00121"></a>00121 <span class="preprocessor">#if (defined(RS_VERSION) && (RS_VERSION >= 17))</span>
-<a name="l00122"></a>00122 <span class="preprocessor"></span>
-<a name="l00125"></a>00125 <span class="keyword">extern</span> <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00126"></a>00126 <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <span class="keywordtype">char</span>);
-<a name="l00130"></a>00130 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00131"></a>00131 <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <a class="code" href="rs__types_8rsh.html#ac532b4c1895c8bd4fb75dc370c484351">char2</a>);
-<a name="l00135"></a>00135 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00136"></a>00136 <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <a class="code" href="rs__types_8rsh.html#a4617fb31f4c03402515efee0a9b56210">char3</a>);
-<a name="l00140"></a>00140 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00141"></a>00141 <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <a class="code" href="rs__types_8rsh.html#aecb498648daac97c7cc5f31c242dfa03">char4</a>);
-<a name="l00145"></a>00145 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00146"></a>00146 <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>);
-<a name="l00150"></a>00150 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00151"></a>00151 <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <a class="code" href="rs__types_8rsh.html#aff5eb7cd53a34bb01924bf64485296de">uchar2</a>);
-<a name="l00155"></a>00155 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00156"></a>00156 <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <a class="code" href="rs__types_8rsh.html#a247b5eacf2b662849668cbc33120343f">uchar3</a>);
-<a name="l00160"></a>00160 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00161"></a>00161 <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <a class="code" href="rs__types_8rsh.html#ae6ed52a87d4ff920c303b13b00f7396d">uchar4</a>);
-<a name="l00165"></a>00165 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00166"></a>00166 <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <span class="keywordtype">short</span>);
-<a name="l00170"></a>00170 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00171"></a>00171 <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <a class="code" href="rs__types_8rsh.html#a303d3ad18aaeacfcfeda2b8580b98796">short2</a>);
-<a name="l00175"></a>00175 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00176"></a>00176 <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <a class="code" href="rs__types_8rsh.html#a3f4967691ae2b249511b5f3dd9e18793">short3</a>);
-<a name="l00180"></a>00180 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00181"></a>00181 <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <a class="code" href="rs__types_8rsh.html#a198219da0b1d51c8d7f8f12aad7e502d">short4</a>);
-<a name="l00185"></a>00185 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00186"></a>00186 <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span>);
-<a name="l00190"></a>00190 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00191"></a>00191 <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <a class="code" href="rs__types_8rsh.html#a24a9d78cfc32475e2c6eb1cdec239bf2">ushort2</a>);
-<a name="l00195"></a>00195 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00196"></a>00196 <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <a class="code" href="rs__types_8rsh.html#ab78391445785d2ca0276392a9c97fcba">ushort3</a>);
-<a name="l00200"></a>00200 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00201"></a>00201 <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <a class="code" href="rs__types_8rsh.html#a77a09fa01d7fc721bbc44c32aac2d487">ushort4</a>);
-<a name="l00205"></a>00205 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00206"></a>00206 <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <a class="code" href="rs__types_8rsh.html#a6bc1fa1354fe2145b8f12b4bbfafcf4c">int2</a>);
-<a name="l00210"></a>00210 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00211"></a>00211 <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <a class="code" href="rs__types_8rsh.html#ad5512266b63fd06dcf450f6c9d5326c8">int3</a>);
-<a name="l00215"></a>00215 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00216"></a>00216 <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <a class="code" href="rs__types_8rsh.html#a897deab71f679999ed99d4153c797e70">int4</a>);
-<a name="l00220"></a>00220 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00221"></a>00221 <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <a class="code" href="rs__types_8rsh.html#aaf90cd1f01a121e824fc6e1b927e7683">uint2</a>);
-<a name="l00225"></a>00225 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00226"></a>00226 <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <a class="code" href="rs__types_8rsh.html#ae80e36ac834c891aa76b09a220344e78">uint3</a>);
-<a name="l00230"></a>00230 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00231"></a>00231 <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <a class="code" href="rs__types_8rsh.html#ad92f0ec6c2cdc1f11a6d7fe321047462">uint4</a>);
-<a name="l00235"></a>00235 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00236"></a>00236 <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <a class="code" href="rs__types_8rsh.html#afd55d62cee0785034b73375acd0df9da">long2</a>);
-<a name="l00240"></a>00240 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00241"></a>00241 <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <a class="code" href="rs__types_8rsh.html#ad9cedbf4050fad14138d1dcb3428ec18">long3</a>);
-<a name="l00245"></a>00245 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00246"></a>00246 <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <a class="code" href="rs__types_8rsh.html#ae177e4918f36e5c9da36d524cdb7a2e7">long4</a>);
-<a name="l00250"></a>00250 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00251"></a>00251 <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <a class="code" href="rs__types_8rsh.html#a56988b12ab16acf753356f7a5c70565a">ulong2</a>);
-<a name="l00255"></a>00255 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00256"></a>00256 <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <a class="code" href="rs__types_8rsh.html#ac623a569c28935fbedd3a8ed27ae0696">ulong3</a>);
-<a name="l00260"></a>00260 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00261"></a>00261 <a class="code" href="rs__debug_8rsh.html#aff35df661796c13fa9e616d1d387df0d">rsDebug</a>(const <span class="keywordtype">char</span> *, <a class="code" href="rs__types_8rsh.html#a3029c54b8e1779a1ddbdfe875432d137">ulong4</a>);
-<a name="l00262"></a>00262 <span class="preprocessor">#endif // (defined(RS_VERSION) && (RS_VERSION >= 17))</span>
-<a name="l00263"></a>00263 <span class="preprocessor"></span>
-<a name="l00264"></a>00264 <span class="preprocessor">#define RS_DEBUG(a) rsDebug(#a, a)</span>
-<a name="l00265"></a>00265 <span class="preprocessor"></span><span class="preprocessor">#define RS_DEBUG_MARKER rsDebug(__FILE__, __LINE__)</span>
-<a name="l00266"></a>00266 <span class="preprocessor"></span>
-<a name="l00267"></a>00267 <span class="preprocessor">#endif</span>
-</pre></div></div>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/rs__element_8rsh.html b/docs/html/reference/renderscript/rs__element_8rsh.html
deleted file mode 100644
index 201f71c..0000000
--- a/docs/html/reference/renderscript/rs__element_8rsh.html
+++ /dev/null
@@ -1,374 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_element.rsh File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
- <div id="navrow1" class="tabs">
- <ul class="tablist">
- <li><a href="index.html"><span>Overview</span></a></li>
- <li class="current"><a href="globals.html"><span>Globals</span></a></li>
- <li><a href="annotated.html"><span>Structs</span></a></li>
- </ul>
- </div>
-</div>
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle">
-<div class="title">/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_element.rsh File Reference</div> </div>
-</div>
-<div class="contents">
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__element_8rsh.html#a2ecab064ea2b720bc3af27b523388f31">rsElementGetSubElementCount</a> (<a class="el" href="structrs__element.html">rs_element</a> e)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="structrs__element.html">rs_element</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__element_8rsh.html#a8c690bce7d32be759fd787740c270c92">rsElementGetSubElement</a> (<a class="el" href="structrs__element.html">rs_element</a>, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> index)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__element_8rsh.html#a94834eb1d91b50a5df3cbe161c22e37d">rsElementGetSubElementNameLength</a> (<a class="el" href="structrs__element.html">rs_element</a> e, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> index)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__element_8rsh.html#a3c1446166c43aa6ba3d5359f6c982f02">rsElementGetSubElementName</a> (<a class="el" href="structrs__element.html">rs_element</a> e, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> index, char *name, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> nameLength)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__element_8rsh.html#a9c3140c18139db451279d9b221808eee">rsElementGetSubElementArraySize</a> (<a class="el" href="structrs__element.html">rs_element</a> e, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> index)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__element_8rsh.html#a840d53f1e91bb6887b40a4d8983c53ed">rsElementGetSubElementOffsetBytes</a> (<a class="el" href="structrs__element.html">rs_element</a> e, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> index)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__element_8rsh.html#ac54592168af5896d3fba5283af286f98">rsElementGetBytesSize</a> (<a class="el" href="structrs__element.html">rs_element</a> e)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#ae7551db5705f864fde49c13660aff647">rs_data_type</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__element_8rsh.html#a9a3569d242be363517ea2354d98cf382">rsElementGetDataType</a> (<a class="el" href="structrs__element.html">rs_element</a> e)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a1692d177c4a3fe1544bd91172056581a">rs_data_kind</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__element_8rsh.html#af072702a530e158093d69353072da5f9">rsElementGetDataKind</a> (<a class="el" href="structrs__element.html">rs_element</a> e)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__element_8rsh.html#a727997de25ae43c07dffcfd484928d53">rsElementGetVectorSize</a> (<a class="el" href="structrs__element.html">rs_element</a> e)</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Element routines. </p>
-
-<p>Definition in file <a class="el" href="rs__element_8rsh_source.html">rs_element.rsh</a>.</p>
-</div><hr/><h2>Function Documentation</h2>
-<a class="anchor" id="ac54592168af5896d3fba5283af286f98"></a><!-- doxytag: member="rs_element.rsh::rsElementGetBytesSize" ref="ac54592168af5896d3fba5283af286f98" args="(rs_element e)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> rsElementGetBytesSize </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__element.html">rs_element</a> </td>
- <td class="paramname"><em>e</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Returns the size of element in bytes</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">e</td><td>element to get data from </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>total size of the element in bytes </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="af072702a530e158093d69353072da5f9"></a><!-- doxytag: member="rs_element.rsh::rsElementGetDataKind" ref="af072702a530e158093d69353072da5f9" args="(rs_element e)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="rs__types_8rsh.html#a1692d177c4a3fe1544bd91172056581a">rs_data_kind</a> rsElementGetDataKind </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__element.html">rs_element</a> </td>
- <td class="paramname"><em>e</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Returns the element's data kind</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">e</td><td>element to get data from </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>element's data size </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a9a3569d242be363517ea2354d98cf382"></a><!-- doxytag: member="rs_element.rsh::rsElementGetDataType" ref="a9a3569d242be363517ea2354d98cf382" args="(rs_element e)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="rs__types_8rsh.html#ae7551db5705f864fde49c13660aff647">rs_data_type</a> rsElementGetDataType </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__element.html">rs_element</a> </td>
- <td class="paramname"><em>e</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Returns the element's data type</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">e</td><td>element to get data from </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>element's data type </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a8c690bce7d32be759fd787740c270c92"></a><!-- doxytag: member="rs_element.rsh::rsElementGetSubElement" ref="a8c690bce7d32be759fd787740c270c92" args="(rs_element, uint32_t index)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="structrs__element.html">rs_element</a> rsElementGetSubElement </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__element.html">rs_element</a> </td>
- <td class="paramname">, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
- <td class="paramname"><em>index</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>For complex elements, this function will return the sub-element at index</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">e</td><td>element to get data from </td></tr>
- <tr><td class="paramname">index</td><td>index of the sub-element to return </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>sub-element in this element at given index </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a9c3140c18139db451279d9b221808eee"></a><!-- doxytag: member="rs_element.rsh::rsElementGetSubElementArraySize" ref="a9c3140c18139db451279d9b221808eee" args="(rs_element e, uint32_t index)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> rsElementGetSubElementArraySize </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__element.html">rs_element</a> </td>
- <td class="paramname"><em>e</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
- <td class="paramname"><em>index</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>For complex elements, some sub-elements could be statically sized arrays. This function will return the array size for sub-element at index</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">e</td><td>element to get data from </td></tr>
- <tr><td class="paramname">index</td><td>index of the sub-element </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>array size of sub-element in this element at given index </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a2ecab064ea2b720bc3af27b523388f31"></a><!-- doxytag: member="rs_element.rsh::rsElementGetSubElementCount" ref="a2ecab064ea2b720bc3af27b523388f31" args="(rs_element e)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> rsElementGetSubElementCount </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__element.html">rs_element</a> </td>
- <td class="paramname"><em>e</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Elements could be simple, such as an int or a float, or a structure with multiple sub elements, such as a collection of floats, float2, float4. This function returns zero for simple elements or the number of sub-elements otherwise.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">e</td><td>element to get data from </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>number of sub-elements in this element </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a3c1446166c43aa6ba3d5359f6c982f02"></a><!-- doxytag: member="rs_element.rsh::rsElementGetSubElementName" ref="a3c1446166c43aa6ba3d5359f6c982f02" args="(rs_element e, uint32_t index, char *name, uint32_t nameLength)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> rsElementGetSubElementName </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__element.html">rs_element</a> </td>
- <td class="paramname"><em>e</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
- <td class="paramname"><em>index</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">char * </td>
- <td class="paramname"><em>name</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
- <td class="paramname"><em>nameLength</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>For complex elements, this function will return the sub-element name at index</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">e</td><td>element to get data from </td></tr>
- <tr><td class="paramname">index</td><td>index of the sub-element </td></tr>
- <tr><td class="paramname">name</td><td>array to store the name into </td></tr>
- <tr><td class="paramname">nameLength</td><td>length of the provided name array </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>number of characters actually written, excluding the null terminator </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a94834eb1d91b50a5df3cbe161c22e37d"></a><!-- doxytag: member="rs_element.rsh::rsElementGetSubElementNameLength" ref="a94834eb1d91b50a5df3cbe161c22e37d" args="(rs_element e, uint32_t index)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> rsElementGetSubElementNameLength </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__element.html">rs_element</a> </td>
- <td class="paramname"><em>e</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
- <td class="paramname"><em>index</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>For complex elements, this function will return the length of sub-element name at index</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">e</td><td>element to get data from </td></tr>
- <tr><td class="paramname">index</td><td>index of the sub-element to return </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>length of the sub-element name including the null terminator (size of buffer needed to write the name) </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a840d53f1e91bb6887b40a4d8983c53ed"></a><!-- doxytag: member="rs_element.rsh::rsElementGetSubElementOffsetBytes" ref="a840d53f1e91bb6887b40a4d8983c53ed" args="(rs_element e, uint32_t index)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> rsElementGetSubElementOffsetBytes </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__element.html">rs_element</a> </td>
- <td class="paramname"><em>e</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
- <td class="paramname"><em>index</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This function specifies the location of a sub-element within the element</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">e</td><td>element to get data from </td></tr>
- <tr><td class="paramname">index</td><td>index of the sub-element </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>offset in bytes of sub-element in this element at given index </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a727997de25ae43c07dffcfd484928d53"></a><!-- doxytag: member="rs_element.rsh::rsElementGetVectorSize" ref="a727997de25ae43c07dffcfd484928d53" args="(rs_element e)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> rsElementGetVectorSize </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__element.html">rs_element</a> </td>
- <td class="paramname"><em>e</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Returns the element's vector size</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">e</td><td>element to get data from </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>length of the element vector (for float2, float3, etc.) </dd></dl>
-
-</div>
-</div>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/rs__element_8rsh_source.html b/docs/html/reference/renderscript/rs__element_8rsh_source.html
deleted file mode 100644
index 1d2601e..0000000
--- a/docs/html/reference/renderscript/rs__element_8rsh_source.html
+++ /dev/null
@@ -1,90 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_element.rsh Source File</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
- <div id="navrow1" class="tabs">
- <ul class="tablist">
- <li><a href="index.html"><span>Overview</span></a></li>
- <li class="current"><a href="globals.html"><span>Globals</span></a></li>
- <li><a href="annotated.html"><span>Structs</span></a></li>
- </ul>
- </div>
-<div class="header">
- <div class="headertitle">
-<div class="title">/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_element.rsh</div> </div>
-</div>
-<div class="contents">
-<a href="rs__element_8rsh.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * Copyright (C) 2012 The Android Open Source Project</span>
-<a name="l00003"></a>00003 <span class="comment"> *</span>
-<a name="l00004"></a>00004 <span class="comment"> * Licensed under the Apache License, Version 2.0 (the "License");</span>
-<a name="l00005"></a>00005 <span class="comment"> * you may not use this file except in compliance with the License.</span>
-<a name="l00006"></a>00006 <span class="comment"> * You may obtain a copy of the License at</span>
-<a name="l00007"></a>00007 <span class="comment"> *</span>
-<a name="l00008"></a>00008 <span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span>
-<a name="l00011"></a>00011 <span class="comment"> * distributed under the License is distributed on an "AS IS" BASIS,</span>
-<a name="l00012"></a>00012 <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
-<a name="l00013"></a>00013 <span class="comment"> * See the License for the specific language governing permissions and</span>
-<a name="l00014"></a>00014 <span class="comment"> * limitations under the License.</span>
-<a name="l00015"></a>00015 <span class="comment"> */</span>
-<a name="l00016"></a>00016
-<a name="l00023"></a>00023 <span class="preprocessor">#ifndef __RS_ELEMENT_RSH__</span>
-<a name="l00024"></a>00024 <span class="preprocessor"></span><span class="preprocessor">#define __RS_ELEMENT_RSH__</span>
-<a name="l00025"></a>00025 <span class="preprocessor"></span>
-<a name="l00026"></a>00026 <span class="comment">// New API's</span>
-<a name="l00027"></a>00027 <span class="preprocessor">#if (defined(RS_VERSION) && (RS_VERSION >= 16))</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span>
-<a name="l00038"></a>00038 <span class="keyword">extern</span> <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> __attribute__((overloadable))
-<a name="l00039"></a>00039 <a class="code" href="rs__element_8rsh.html#a2ecab064ea2b720bc3af27b523388f31">rsElementGetSubElementCount</a>(<a class="code" href="structrs__element.html" title="Opaque handle to a RenderScript element.">rs_element</a> e);
-<a name="l00040"></a>00040
-<a name="l00049"></a>00049 extern <a class="code" href="structrs__element.html" title="Opaque handle to a RenderScript element.">rs_element</a> __attribute__((overloadable))
-<a name="l00050"></a>00050 <a class="code" href="rs__element_8rsh.html#a8c690bce7d32be759fd787740c270c92">rsElementGetSubElement</a>(<a class="code" href="structrs__element.html" title="Opaque handle to a RenderScript element.">rs_element</a>, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> index);
-<a name="l00051"></a>00051
-<a name="l00061"></a>00061 extern <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> __attribute__((overloadable))
-<a name="l00062"></a>00062 <a class="code" href="rs__element_8rsh.html#a94834eb1d91b50a5df3cbe161c22e37d">rsElementGetSubElementNameLength</a>(rs_element e, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> index);
-<a name="l00063"></a>00063
-<a name="l00075"></a>00075 extern <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> __attribute__((overloadable))
-<a name="l00076"></a>00076 <a class="code" href="rs__element_8rsh.html#a3c1446166c43aa6ba3d5359f6c982f02">rsElementGetSubElementName</a>(rs_element e, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> index, <span class="keywordtype">char</span> *name, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> nameLength);
-<a name="l00077"></a>00077
-<a name="l00088"></a>00088 extern <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> __attribute__((overloadable))
-<a name="l00089"></a>00089 <a class="code" href="rs__element_8rsh.html#a9c3140c18139db451279d9b221808eee">rsElementGetSubElementArraySize</a>(rs_element e, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> index);
-<a name="l00090"></a>00090
-<a name="l00100"></a>00100 extern <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> __attribute__((overloadable))
-<a name="l00101"></a>00101 <a class="code" href="rs__element_8rsh.html#a840d53f1e91bb6887b40a4d8983c53ed">rsElementGetSubElementOffsetBytes</a>(rs_element e, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> index);
-<a name="l00102"></a>00102
-<a name="l00109"></a>00109 extern <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> __attribute__((overloadable))
-<a name="l00110"></a>00110 <a class="code" href="rs__element_8rsh.html#ac54592168af5896d3fba5283af286f98">rsElementGetBytesSize</a>(rs_element e);
-<a name="l00111"></a>00111
-<a name="l00118"></a>00118 extern <a class="code" href="rs__types_8rsh.html#ae7551db5705f864fde49c13660aff647" title="Enumeration for possible element data types.">rs_data_type</a> __attribute__((overloadable))
-<a name="l00119"></a>00119 <a class="code" href="rs__element_8rsh.html#a9a3569d242be363517ea2354d98cf382">rsElementGetDataType</a>(rs_element e);
-<a name="l00120"></a>00120
-<a name="l00127"></a>00127 extern <a class="code" href="rs__types_8rsh.html#a1692d177c4a3fe1544bd91172056581a" title="Enumeration for possible element data kind.">rs_data_kind</a> __attribute__((overloadable))
-<a name="l00128"></a>00128 <a class="code" href="rs__element_8rsh.html#af072702a530e158093d69353072da5f9">rsElementGetDataKind</a>(rs_element e);
-<a name="l00129"></a>00129
-<a name="l00137"></a>00137 extern <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> __attribute__((overloadable))
-<a name="l00138"></a>00138 <a class="code" href="rs__element_8rsh.html#a727997de25ae43c07dffcfd484928d53">rsElementGetVectorSize</a>(rs_element e);
-<a name="l00139"></a>00139
-<a name="l00140"></a>00140 <span class="preprocessor">#endif // (defined(RS_VERSION) && (RS_VERSION >= 16))</span>
-<a name="l00141"></a>00141 <span class="preprocessor"></span>
-<a name="l00142"></a>00142 <span class="preprocessor">#endif // __RS_ELEMENT_RSH__</span>
-<a name="l00143"></a>00143 <span class="preprocessor"></span>
-</pre></div></div>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/rs__graphics_8rsh.html b/docs/html/reference/renderscript/rs__graphics_8rsh.html
deleted file mode 100644
index de62965..0000000
--- a/docs/html/reference/renderscript/rs__graphics_8rsh.html
+++ /dev/null
@@ -1,1435 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>rs_graphics.rsh File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
- <div id="navrow1" class="tabs">
- <ul class="tablist">
- <li><a href="index.html"><span>Overview</span></a></li>
- <li class="current"><a href="globals.html"><span>Globals</span></a></li>
- <li><a href="annotated.html"><span>Structs</span></a></li>
- </ul>
- </div>
-</div>
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle">
-<div class="title">rs_graphics.rsh File Reference</div> </div>
-</div>
-<div class="contents">
-<div class="textblock"><code>#include "<a class="el" href="rs__mesh_8rsh_source.html">rs_mesh.rsh</a>"</code><br/>
-<code>#include "<a class="el" href="rs__program_8rsh_source.html">rs_program.rsh</a>"</code><br/>
-</div><table class="memberdecls">
-<tr><td colspan="2"><h2><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a9f8deb600729a83c39c5bcaba2152b9c">rsgBindProgramFragment</a> (<a class="el" href="structrs__program__fragment.html">rs_program_fragment</a> pf)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a34dfa6eddd7454fc1865222c5a022315">rsgBindProgramStore</a> (<a class="el" href="structrs__program__store.html">rs_program_store</a> ps)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a894e26d0d05d3ef99be65ddf98dd901c">rsgBindProgramVertex</a> (<a class="el" href="structrs__program__vertex.html">rs_program_vertex</a> pv)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a391eb5535544f6312c724b910da6ec35">rsgBindProgramRaster</a> (<a class="el" href="structrs__program__raster.html">rs_program_raster</a> pr)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a4ade6c5acbf6acaa1c29a1aecc6e87d3">rsgBindSampler</a> (<a class="el" href="structrs__program__fragment.html">rs_program_fragment</a>, <a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> slot, <a class="el" href="structrs__sampler.html">rs_sampler</a>)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a1694eb5489bd3a444da921dbf16aeeb5">rsgBindTexture</a> (<a class="el" href="structrs__program__fragment.html">rs_program_fragment</a>, <a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> slot, <a class="el" href="structrs__allocation.html">rs_allocation</a>)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a83a87d8efa3f26ed3f8fb25e49f29059">rsgProgramVertexLoadProjectionMatrix</a> (const <a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *proj)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a976b8594cccb4b94d7ce520b44d884e3">rsgProgramVertexLoadModelMatrix</a> (const <a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *model)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a377b7b394c4bf0881532b1241d4be168">rsgProgramVertexLoadTextureMatrix</a> (const <a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *tex)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a2b767d209b36ffcd2e0fc0cf6f4c5706">rsgProgramVertexGetProjectionMatrix</a> (<a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *proj)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a35ac8c3759e25047e6a458c15520c887">rsgProgramFragmentConstantColor</a> (<a class="el" href="structrs__program__fragment.html">rs_program_fragment</a> pf, float r, float g, float b, float a)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a46208900d16287fde91a5d14ebc830dc">rsgBindConstant</a> (<a class="el" href="structrs__program__fragment.html">rs_program_fragment</a> ps, <a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> slot, <a class="el" href="structrs__allocation.html">rs_allocation</a> c)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a516131032d384bae5be9afa19a257033">rsgBindConstant</a> (<a class="el" href="structrs__program__vertex.html">rs_program_vertex</a> pv, <a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> slot, <a class="el" href="structrs__allocation.html">rs_allocation</a> c)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a67f4ed1ca4bba27d5c952ada89cd0717">rsgGetWidth</a> (void)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a7e6565cd5d5e44f442a8bf8ba68f4681">rsgGetHeight</a> (void)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a647228d8e15da6ad67a97701d920dcac">rsgAllocationSyncAll</a> (<a class="el" href="structrs__allocation.html">rs_allocation</a> alloc)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a80c51849bf12ec6c699c23c3fa3e6208">rsgDrawRect</a> (float x1, float y1, float x2, float y2, float z)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#ad6953da0349e58547b08b8ce174ed3fc">rsgDrawQuad</a> (float x1, float y1, float z1, float x2, float y2, float z2, float x3, float y3, float z3, float x4, float y4, float z4)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#afb98a59bb9f878f0a09459567c269e64">rsgDrawQuadTexCoords</a> (float x1, float y1, float z1, float u1, float v1, float x2, float y2, float z2, float u2, float v2, float x3, float y3, float z3, float u3, float v3, float x4, float y4, float z4, float u4, float v4)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a07d15127330fa1dff6c99b0d7d14e65e">rsgDrawSpriteScreenspace</a> (float x, float y, float z, float w, float h)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a6f8b87c994810908fbe5e01f8f63f9af">rsgDrawMesh</a> (<a class="el" href="structrs__mesh.html">rs_mesh</a> ism)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a621abfc693fed028b5dc74826453142d">rsgDrawMesh</a> (<a class="el" href="structrs__mesh.html">rs_mesh</a> ism, <a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> primitiveIndex)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#ab2704a6d16e3d7983524d0a8413c1b8a">rsgDrawMesh</a> (<a class="el" href="structrs__mesh.html">rs_mesh</a> ism, <a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> primitiveIndex, <a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> start, <a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> len)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a147674fed92745fbb5c64a6300ca3c49">rsgClearColor</a> (float r, float g, float b, float a)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a4bedb06e8facd587e3eacd746fe3e727">rsgClearDepth</a> (float value)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#afaec82492762e62cad1ff53ada479b14">rsgDrawText</a> (const char *, int x, int y)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#ac5e84fd253b4b1d2b0e11a7a0a7df945">rsgDrawText</a> (<a class="el" href="structrs__allocation.html">rs_allocation</a>, int x, int y)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#ae89effef281e92e2940055883ea366d4">rsgBindFont</a> (<a class="el" href="structrs__font.html">rs_font</a> font)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#abda8c344092ed6310c7a8f353a6df876">rsgFontColor</a> (float r, float g, float b, float a)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a5c599f4ea989f3d0616cbf8e983688c4">rsgMeasureText</a> (const char *, int *left, int *right, int *top, int *bottom)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a2abb920283b1dafa9059de488143a870">rsgMeasureText</a> (<a class="el" href="structrs__allocation.html">rs_allocation</a>, int *left, int *right, int *top, int *bottom)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a0978c54902dd1d60180f8dbb0b781105">rsgMeshComputeBoundingBox</a> (<a class="el" href="structrs__mesh.html">rs_mesh</a> mesh, float *minX, float *minY, float *minZ, float *maxX, float *maxY, float *maxZ)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static __inline__ void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__graphics_8rsh.html#a6058b6b6c8b94f96f03dc8bca6a2090b">rsgMeshComputeBoundingBox</a> (<a class="el" href="structrs__mesh.html">rs_mesh</a> mesh, <a class="el" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> *bBoxMin, <a class="el" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> *bBoxMax)</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Renderscript graphics API. </p>
-<p>A set of graphics functions used by Renderscript. </p>
-
-<p>Definition in file <a class="el" href="rs__graphics_8rsh_source.html">rs_graphics.rsh</a>.</p>
-</div><hr/><h2>Function Documentation</h2>
-<a class="anchor" id="a647228d8e15da6ad67a97701d920dcac"></a><!-- doxytag: member="rs_graphics.rsh::rsgAllocationSyncAll" ref="a647228d8e15da6ad67a97701d920dcac" args="(rs_allocation alloc)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsgAllocationSyncAll </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a> </td>
- <td class="paramname"><em>alloc</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Sync the contents of an allocation from its SCRIPT memory space to its HW memory spaces.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">alloc</td><td></td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a46208900d16287fde91a5d14ebc830dc"></a><!-- doxytag: member="rs_graphics.rsh::rsgBindConstant" ref="a46208900d16287fde91a5d14ebc830dc" args="(rs_program_fragment ps, uint slot, rs_allocation c)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsgBindConstant </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__program__fragment.html">rs_program_fragment</a> </td>
- <td class="paramname"><em>ps</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> </td>
- <td class="paramname"><em>slot</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a> </td>
- <td class="paramname"><em>c</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Bind a new Allocation object to a ProgramFragment. The Allocation must be a valid constant input for the Program.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">ps</td><td>program object </td></tr>
- <tr><td class="paramname">slot</td><td>index of the constant buffer on the program </td></tr>
- <tr><td class="paramname">c</td><td>constants to bind </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a516131032d384bae5be9afa19a257033"></a><!-- doxytag: member="rs_graphics.rsh::rsgBindConstant" ref="a516131032d384bae5be9afa19a257033" args="(rs_program_vertex pv, uint slot, rs_allocation c)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsgBindConstant </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__program__vertex.html">rs_program_vertex</a> </td>
- <td class="paramname"><em>pv</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> </td>
- <td class="paramname"><em>slot</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a> </td>
- <td class="paramname"><em>c</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Bind a new Allocation object to a ProgramVertex. The Allocation must be a valid constant input for the Program.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">pv</td><td>program object </td></tr>
- <tr><td class="paramname">slot</td><td>index of the constant buffer on the program </td></tr>
- <tr><td class="paramname">c</td><td>constants to bind </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="ae89effef281e92e2940055883ea366d4"></a><!-- doxytag: member="rs_graphics.rsh::rsgBindFont" ref="ae89effef281e92e2940055883ea366d4" args="(rs_font font)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsgBindFont </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__font.html">rs_font</a> </td>
- <td class="paramname"><em>font</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Binds the font object to be used for all subsequent font rendering calls </p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">font</td><td>object to bind </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a9f8deb600729a83c39c5bcaba2152b9c"></a><!-- doxytag: member="rs_graphics.rsh::rsgBindProgramFragment" ref="a9f8deb600729a83c39c5bcaba2152b9c" args="(rs_program_fragment pf)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsgBindProgramFragment </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__program__fragment.html">rs_program_fragment</a> </td>
- <td class="paramname"><em>pf</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Bind a new ProgramFragment to the rendering context.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">pf</td><td></td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a391eb5535544f6312c724b910da6ec35"></a><!-- doxytag: member="rs_graphics.rsh::rsgBindProgramRaster" ref="a391eb5535544f6312c724b910da6ec35" args="(rs_program_raster pr)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsgBindProgramRaster </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__program__raster.html">rs_program_raster</a> </td>
- <td class="paramname"><em>pr</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Bind a new ProgramRaster to the rendering context.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">pr</td><td></td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a34dfa6eddd7454fc1865222c5a022315"></a><!-- doxytag: member="rs_graphics.rsh::rsgBindProgramStore" ref="a34dfa6eddd7454fc1865222c5a022315" args="(rs_program_store ps)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsgBindProgramStore </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__program__store.html">rs_program_store</a> </td>
- <td class="paramname"><em>ps</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Bind a new ProgramStore to the rendering context.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">ps</td><td></td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a894e26d0d05d3ef99be65ddf98dd901c"></a><!-- doxytag: member="rs_graphics.rsh::rsgBindProgramVertex" ref="a894e26d0d05d3ef99be65ddf98dd901c" args="(rs_program_vertex pv)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsgBindProgramVertex </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__program__vertex.html">rs_program_vertex</a> </td>
- <td class="paramname"><em>pv</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Bind a new ProgramVertex to the rendering context.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">pv</td><td></td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a4ade6c5acbf6acaa1c29a1aecc6e87d3"></a><!-- doxytag: member="rs_graphics.rsh::rsgBindSampler" ref="a4ade6c5acbf6acaa1c29a1aecc6e87d3" args="(rs_program_fragment, uint slot, rs_sampler)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsgBindSampler </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__program__fragment.html">rs_program_fragment</a> </td>
- <td class="paramname">, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> </td>
- <td class="paramname"><em>slot</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="structrs__sampler.html">rs_sampler</a> </td>
- <td class="paramname"> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Bind a new Sampler object to a ProgramFragment. The sampler will operate on the texture bound at the matching slot.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">slot</td><td></td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a1694eb5489bd3a444da921dbf16aeeb5"></a><!-- doxytag: member="rs_graphics.rsh::rsgBindTexture" ref="a1694eb5489bd3a444da921dbf16aeeb5" args="(rs_program_fragment, uint slot, rs_allocation)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsgBindTexture </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__program__fragment.html">rs_program_fragment</a> </td>
- <td class="paramname">, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> </td>
- <td class="paramname"><em>slot</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a> </td>
- <td class="paramname"> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Bind a new Allocation object to a ProgramFragment. The Allocation must be a valid texture for the Program. The sampling of the texture will be controled by the Sampler bound at the matching slot.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">slot</td><td></td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a147674fed92745fbb5c64a6300ca3c49"></a><!-- doxytag: member="rs_graphics.rsh::rsgClearColor" ref="a147674fed92745fbb5c64a6300ca3c49" args="(float r, float g, float b, float a)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsgClearColor </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>r</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>g</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>b</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>a</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Clears the rendering surface to the specified color.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">r</td><td></td></tr>
- <tr><td class="paramname">g</td><td></td></tr>
- <tr><td class="paramname">b</td><td></td></tr>
- <tr><td class="paramname">a</td><td></td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a4bedb06e8facd587e3eacd746fe3e727"></a><!-- doxytag: member="rs_graphics.rsh::rsgClearDepth" ref="a4bedb06e8facd587e3eacd746fe3e727" args="(float value)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsgClearDepth </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>value</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Clears the depth suface to the specified value. </p>
-
-</div>
-</div>
-<a class="anchor" id="a6f8b87c994810908fbe5e01f8f63f9af"></a><!-- doxytag: member="rs_graphics.rsh::rsgDrawMesh" ref="a6f8b87c994810908fbe5e01f8f63f9af" args="(rs_mesh ism)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsgDrawMesh </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__mesh.html">rs_mesh</a> </td>
- <td class="paramname"><em>ism</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Draw a mesh using the current context state. The whole mesh is rendered.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">ism</td><td></td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a621abfc693fed028b5dc74826453142d"></a><!-- doxytag: member="rs_graphics.rsh::rsgDrawMesh" ref="a621abfc693fed028b5dc74826453142d" args="(rs_mesh ism, uint primitiveIndex)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsgDrawMesh </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__mesh.html">rs_mesh</a> </td>
- <td class="paramname"><em>ism</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> </td>
- <td class="paramname"><em>primitiveIndex</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Draw part of a mesh using the current context state. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">ism</td><td>mesh object to render </td></tr>
- <tr><td class="paramname">primitiveIndex</td><td>for meshes that contain multiple primitive groups this parameter specifies the index of the group to draw. </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="ab2704a6d16e3d7983524d0a8413c1b8a"></a><!-- doxytag: member="rs_graphics.rsh::rsgDrawMesh" ref="ab2704a6d16e3d7983524d0a8413c1b8a" args="(rs_mesh ism, uint primitiveIndex, uint start, uint len)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsgDrawMesh </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__mesh.html">rs_mesh</a> </td>
- <td class="paramname"><em>ism</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> </td>
- <td class="paramname"><em>primitiveIndex</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> </td>
- <td class="paramname"><em>start</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> </td>
- <td class="paramname"><em>len</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Draw specified index range of part of a mesh using the current context state. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">ism</td><td>mesh object to render </td></tr>
- <tr><td class="paramname">primitiveIndex</td><td>for meshes that contain multiple primitive groups this parameter specifies the index of the group to draw. </td></tr>
- <tr><td class="paramname">start</td><td>starting index in the range </td></tr>
- <tr><td class="paramname">len</td><td>number of indices to draw </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="ad6953da0349e58547b08b8ce174ed3fc"></a><!-- doxytag: member="rs_graphics.rsh::rsgDrawQuad" ref="ad6953da0349e58547b08b8ce174ed3fc" args="(float x1, float y1, float z1, float x2, float y2, float z2, float x3, float y3, float z3, float x4, float y4, float z4)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsgDrawQuad </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>x1</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>y1</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>z1</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>x2</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>y2</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>z2</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>x3</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>y3</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>z3</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>x4</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>y4</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>z4</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Low performance utility function for drawing a simple quad. Not intended for drawing large quantities of geometry.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">x1</td><td></td></tr>
- <tr><td class="paramname">y1</td><td></td></tr>
- <tr><td class="paramname">z1</td><td></td></tr>
- <tr><td class="paramname">x2</td><td></td></tr>
- <tr><td class="paramname">y2</td><td></td></tr>
- <tr><td class="paramname">z2</td><td></td></tr>
- <tr><td class="paramname">x3</td><td></td></tr>
- <tr><td class="paramname">y3</td><td></td></tr>
- <tr><td class="paramname">z3</td><td></td></tr>
- <tr><td class="paramname">x4</td><td></td></tr>
- <tr><td class="paramname">y4</td><td></td></tr>
- <tr><td class="paramname">z4</td><td></td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="afb98a59bb9f878f0a09459567c269e64"></a><!-- doxytag: member="rs_graphics.rsh::rsgDrawQuadTexCoords" ref="afb98a59bb9f878f0a09459567c269e64" args="(float x1, float y1, float z1, float u1, float v1, float x2, float y2, float z2, float u2, float v2, float x3, float y3, float z3, float u3, float v3, float x4, float y4, float z4, float u4, float v4)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsgDrawQuadTexCoords </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>x1</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>y1</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>z1</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>u1</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>v1</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>x2</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>y2</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>z2</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>u2</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>v2</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>x3</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>y3</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>z3</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>u3</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>v3</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>x4</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>y4</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>z4</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>u4</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>v4</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Low performance utility function for drawing a textured quad. Not intended for drawing large quantities of geometry.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">x1</td><td></td></tr>
- <tr><td class="paramname">y1</td><td></td></tr>
- <tr><td class="paramname">z1</td><td></td></tr>
- <tr><td class="paramname">u1</td><td></td></tr>
- <tr><td class="paramname">v1</td><td></td></tr>
- <tr><td class="paramname">x2</td><td></td></tr>
- <tr><td class="paramname">y2</td><td></td></tr>
- <tr><td class="paramname">z2</td><td></td></tr>
- <tr><td class="paramname">u2</td><td></td></tr>
- <tr><td class="paramname">v2</td><td></td></tr>
- <tr><td class="paramname">x3</td><td></td></tr>
- <tr><td class="paramname">y3</td><td></td></tr>
- <tr><td class="paramname">z3</td><td></td></tr>
- <tr><td class="paramname">u3</td><td></td></tr>
- <tr><td class="paramname">v3</td><td></td></tr>
- <tr><td class="paramname">x4</td><td></td></tr>
- <tr><td class="paramname">y4</td><td></td></tr>
- <tr><td class="paramname">z4</td><td></td></tr>
- <tr><td class="paramname">u4</td><td></td></tr>
- <tr><td class="paramname">v4</td><td></td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a80c51849bf12ec6c699c23c3fa3e6208"></a><!-- doxytag: member="rs_graphics.rsh::rsgDrawRect" ref="a80c51849bf12ec6c699c23c3fa3e6208" args="(float x1, float y1, float x2, float y2, float z)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsgDrawRect </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>x1</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>y1</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>x2</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>y2</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>z</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Low performance utility function for drawing a simple rectangle. Not intended for drawing large quantities of geometry.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">x1</td><td></td></tr>
- <tr><td class="paramname">y1</td><td></td></tr>
- <tr><td class="paramname">x2</td><td></td></tr>
- <tr><td class="paramname">y2</td><td></td></tr>
- <tr><td class="paramname">z</td><td></td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a07d15127330fa1dff6c99b0d7d14e65e"></a><!-- doxytag: member="rs_graphics.rsh::rsgDrawSpriteScreenspace" ref="a07d15127330fa1dff6c99b0d7d14e65e" args="(float x, float y, float z, float w, float h)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsgDrawSpriteScreenspace </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>x</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>y</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>z</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>w</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>h</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Low performance function for drawing rectangles in screenspace. This function uses the default passthough ProgramVertex. Any bound ProgramVertex is ignored. This function has considerable overhead and should not be used for drawing in shipping applications.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">x</td><td></td></tr>
- <tr><td class="paramname">y</td><td></td></tr>
- <tr><td class="paramname">z</td><td></td></tr>
- <tr><td class="paramname">w</td><td></td></tr>
- <tr><td class="paramname">h</td><td></td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="afaec82492762e62cad1ff53ada479b14"></a><!-- doxytag: member="rs_graphics.rsh::rsgDrawText" ref="afaec82492762e62cad1ff53ada479b14" args="(const char *, int x, int y)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsgDrawText </td>
- <td>(</td>
- <td class="paramtype">const char * </td>
- <td class="paramname">, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">int </td>
- <td class="paramname"><em>x</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">int </td>
- <td class="paramname"><em>y</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Draws text given a string and location </p>
-
-</div>
-</div>
-<a class="anchor" id="ac5e84fd253b4b1d2b0e11a7a0a7df945"></a><!-- doxytag: member="rs_graphics.rsh::rsgDrawText" ref="ac5e84fd253b4b1d2b0e11a7a0a7df945" args="(rs_allocation, int x, int y)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsgDrawText </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a> </td>
- <td class="paramname">, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">int </td>
- <td class="paramname"><em>x</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">int </td>
- <td class="paramname"><em>y</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="abda8c344092ed6310c7a8f353a6df876"></a><!-- doxytag: member="rs_graphics.rsh::rsgFontColor" ref="abda8c344092ed6310c7a8f353a6df876" args="(float r, float g, float b, float a)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsgFontColor </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>r</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>g</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>b</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>a</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Sets the font color for all subsequent rendering calls </p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">r</td><td>red component </td></tr>
- <tr><td class="paramname">g</td><td>green component </td></tr>
- <tr><td class="paramname">b</td><td>blue component </td></tr>
- <tr><td class="paramname">a</td><td>alpha component </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a7e6565cd5d5e44f442a8bf8ba68f4681"></a><!-- doxytag: member="rs_graphics.rsh::rsgGetHeight" ref="a7e6565cd5d5e44f442a8bf8ba68f4681" args="(void)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> rsgGetHeight </td>
- <td>(</td>
- <td class="paramtype">void </td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Get the height of the current rendering surface.</p>
-<dl class="return"><dt><b>Returns:</b></dt><dd>uint </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a67f4ed1ca4bba27d5c952ada89cd0717"></a><!-- doxytag: member="rs_graphics.rsh::rsgGetWidth" ref="a67f4ed1ca4bba27d5c952ada89cd0717" args="(void)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> rsgGetWidth </td>
- <td>(</td>
- <td class="paramtype">void </td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Get the width of the current rendering surface.</p>
-<dl class="return"><dt><b>Returns:</b></dt><dd>uint </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a5c599f4ea989f3d0616cbf8e983688c4"></a><!-- doxytag: member="rs_graphics.rsh::rsgMeasureText" ref="a5c599f4ea989f3d0616cbf8e983688c4" args="(const char *, int *left, int *right, int *top, int *bottom)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsgMeasureText </td>
- <td>(</td>
- <td class="paramtype">const char * </td>
- <td class="paramname">, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">int * </td>
- <td class="paramname"><em>left</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">int * </td>
- <td class="paramname"><em>right</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">int * </td>
- <td class="paramname"><em>top</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">int * </td>
- <td class="paramname"><em>bottom</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Returns the bounding box of the text relative to (0, 0) Any of left, right, top, bottom could be NULL </p>
-
-</div>
-</div>
-<a class="anchor" id="a2abb920283b1dafa9059de488143a870"></a><!-- doxytag: member="rs_graphics.rsh::rsgMeasureText" ref="a2abb920283b1dafa9059de488143a870" args="(rs_allocation, int *left, int *right, int *top, int *bottom)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsgMeasureText </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a> </td>
- <td class="paramname">, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">int * </td>
- <td class="paramname"><em>left</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">int * </td>
- <td class="paramname"><em>right</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">int * </td>
- <td class="paramname"><em>top</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">int * </td>
- <td class="paramname"><em>bottom</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a0978c54902dd1d60180f8dbb0b781105"></a><!-- doxytag: member="rs_graphics.rsh::rsgMeshComputeBoundingBox" ref="a0978c54902dd1d60180f8dbb0b781105" args="(rs_mesh mesh, float *minX, float *minY, float *minZ, float *maxX, float *maxY, float *maxZ)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsgMeshComputeBoundingBox </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__mesh.html">rs_mesh</a> </td>
- <td class="paramname"><em>mesh</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float * </td>
- <td class="paramname"><em>minX</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float * </td>
- <td class="paramname"><em>minY</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float * </td>
- <td class="paramname"><em>minZ</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float * </td>
- <td class="paramname"><em>maxX</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float * </td>
- <td class="paramname"><em>maxY</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float * </td>
- <td class="paramname"><em>maxZ</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Computes an axis aligned bounding box of a mesh object </p>
-
-</div>
-</div>
-<a class="anchor" id="a6058b6b6c8b94f96f03dc8bca6a2090b"></a><!-- doxytag: member="rs_graphics.rsh::rsgMeshComputeBoundingBox" ref="a6058b6b6c8b94f96f03dc8bca6a2090b" args="(rs_mesh mesh, float3 *bBoxMin, float3 *bBoxMax)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">static __inline__ void rsgMeshComputeBoundingBox </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__mesh.html">rs_mesh</a> </td>
- <td class="paramname"><em>mesh</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> * </td>
- <td class="paramname"><em>bBoxMin</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> * </td>
- <td class="paramname"><em>bBoxMax</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td><code> [static]</code></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-<p>Definition at line <a class="el" href="rs__graphics_8rsh_source.html#l00409">409</a> of file <a class="el" href="rs__graphics_8rsh_source.html">rs_graphics.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a35ac8c3759e25047e6a458c15520c887"></a><!-- doxytag: member="rs_graphics.rsh::rsgProgramFragmentConstantColor" ref="a35ac8c3759e25047e6a458c15520c887" args="(rs_program_fragment pf, float r, float g, float b, float a)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsgProgramFragmentConstantColor </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__program__fragment.html">rs_program_fragment</a> </td>
- <td class="paramname"><em>pf</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>r</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>g</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>b</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>a</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Set the constant color for a fixed function emulation program.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">pf</td><td></td></tr>
- <tr><td class="paramname">r</td><td></td></tr>
- <tr><td class="paramname">g</td><td></td></tr>
- <tr><td class="paramname">b</td><td></td></tr>
- <tr><td class="paramname">a</td><td></td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a2b767d209b36ffcd2e0fc0cf6f4c5706"></a><!-- doxytag: member="rs_graphics.rsh::rsgProgramVertexGetProjectionMatrix" ref="a2b767d209b36ffcd2e0fc0cf6f4c5706" args="(rs_matrix4x4 *proj)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsgProgramVertexGetProjectionMatrix </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> * </td>
- <td class="paramname"><em>proj</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Get the projection matrix for a currently bound fixed function vertex program. Calling this function with a custom vertex shader would result in an error. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">proj</td><td>matrix to store the current projection matrix into </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a976b8594cccb4b94d7ce520b44d884e3"></a><!-- doxytag: member="rs_graphics.rsh::rsgProgramVertexLoadModelMatrix" ref="a976b8594cccb4b94d7ce520b44d884e3" args="(const rs_matrix4x4 *model)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsgProgramVertexLoadModelMatrix </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> * </td>
- <td class="paramname"><em>model</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Load the model matrix for a currently bound fixed function vertex program. Calling this function with a custom vertex shader would result in an error. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">model</td><td>model matrix </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a83a87d8efa3f26ed3f8fb25e49f29059"></a><!-- doxytag: member="rs_graphics.rsh::rsgProgramVertexLoadProjectionMatrix" ref="a83a87d8efa3f26ed3f8fb25e49f29059" args="(const rs_matrix4x4 *proj)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsgProgramVertexLoadProjectionMatrix </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> * </td>
- <td class="paramname"><em>proj</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Load the projection matrix for a currently bound fixed function vertex program. Calling this function with a custom vertex shader would result in an error. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">proj</td><td>projection matrix </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a377b7b394c4bf0881532b1241d4be168"></a><!-- doxytag: member="rs_graphics.rsh::rsgProgramVertexLoadTextureMatrix" ref="a377b7b394c4bf0881532b1241d4be168" args="(const rs_matrix4x4 *tex)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsgProgramVertexLoadTextureMatrix </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> * </td>
- <td class="paramname"><em>tex</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Load the texture matrix for a currently bound fixed function vertex program. Calling this function with a custom vertex shader would result in an error. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">tex</td><td>texture matrix </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/rs__graphics_8rsh_source.html b/docs/html/reference/renderscript/rs__graphics_8rsh_source.html
deleted file mode 100644
index 9f673bd..0000000
--- a/docs/html/reference/renderscript/rs__graphics_8rsh_source.html
+++ /dev/null
@@ -1,196 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>rs_graphics.rsh Source File</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
- <div id="navrow1" class="tabs">
- <ul class="tablist">
- <li><a href="index.html"><span>Overview</span></a></li>
- <li class="current"><a href="globals.html"><span>Globals</span></a></li>
- <li><a href="annotated.html"><span>Structs</span></a></li>
- </ul>
- </div>
-<div class="header">
- <div class="headertitle">
-<div class="title">rs_graphics.rsh</div> </div>
-</div>
-<div class="contents">
-<a href="rs__graphics_8rsh.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * Copyright (C) 2011-2012 The Android Open Source Project</span>
-<a name="l00003"></a>00003 <span class="comment"> *</span>
-<a name="l00004"></a>00004 <span class="comment"> * Licensed under the Apache License, Version 2.0 (the "License");</span>
-<a name="l00005"></a>00005 <span class="comment"> * you may not use this file except in compliance with the License.</span>
-<a name="l00006"></a>00006 <span class="comment"> * You may obtain a copy of the License at</span>
-<a name="l00007"></a>00007 <span class="comment"> *</span>
-<a name="l00008"></a>00008 <span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span>
-<a name="l00011"></a>00011 <span class="comment"> * distributed under the License is distributed on an "AS IS" BASIS,</span>
-<a name="l00012"></a>00012 <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
-<a name="l00013"></a>00013 <span class="comment"> * See the License for the specific language governing permissions and</span>
-<a name="l00014"></a>00014 <span class="comment"> * limitations under the License.</span>
-<a name="l00015"></a>00015 <span class="comment"> */</span>
-<a name="l00016"></a>00016
-<a name="l00023"></a>00023 <span class="preprocessor">#ifndef __RS_GRAPHICS_RSH__</span>
-<a name="l00024"></a>00024 <span class="preprocessor"></span><span class="preprocessor">#define __RS_GRAPHICS_RSH__</span>
-<a name="l00025"></a>00025 <span class="preprocessor"></span>
-<a name="l00026"></a>00026 <span class="preprocessor">#include "<a class="code" href="rs__mesh_8rsh.html" title="Mesh routines.">rs_mesh.rsh</a>"</span>
-<a name="l00027"></a>00027 <span class="preprocessor">#include "<a class="code" href="rs__program_8rsh.html" title="Program object routines.">rs_program.rsh</a>"</span>
-<a name="l00028"></a>00028
-<a name="l00029"></a>00029 <span class="preprocessor">#if (defined(RS_VERSION) && (RS_VERSION >= 14))</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span>
-<a name="l00035"></a>00035 <span class="keyword">extern</span> <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00036"></a>00036 rsgBindColorTarget(<a class="code" href="structrs__allocation.html" title="Opaque handle to a Renderscript allocation.">rs_allocation</a> colorTarget, <a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> slot);
-<a name="l00037"></a>00037
-<a name="l00042"></a>00042 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00043"></a>00043 rsgClearColorTarget(<a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> slot);
-<a name="l00044"></a>00044
-<a name="l00049"></a>00049 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00050"></a>00050 rsgBindDepthTarget(<a class="code" href="structrs__allocation.html" title="Opaque handle to a Renderscript allocation.">rs_allocation</a> depthTarget);
-<a name="l00051"></a>00051
-<a name="l00055"></a>00055 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00056"></a>00056 rsgClearDepthTarget(<span class="keywordtype">void</span>);
-<a name="l00057"></a>00057
-<a name="l00062"></a>00062 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00063"></a>00063 rsgClearAllRenderTargets(<span class="keywordtype">void</span>);
-<a name="l00064"></a>00064
-<a name="l00068"></a>00068 extern <a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> __attribute__((overloadable))
-<a name="l00069"></a>00069 rsgFinish(<span class="keywordtype">void</span>);
-<a name="l00070"></a>00070
-<a name="l00071"></a>00071 <span class="preprocessor">#endif //defined(RS_VERSION) && (RS_VERSION >= 14)</span>
-<a name="l00072"></a>00072 <span class="preprocessor"></span>
-<a name="l00078"></a>00078 <span class="keyword">extern</span> <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00079"></a>00079 <a class="code" href="rs__graphics_8rsh.html#a9f8deb600729a83c39c5bcaba2152b9c">rsgBindProgramFragment</a>(<a class="code" href="structrs__program__fragment.html" title="Opaque handle to a Renderscript ProgramFragment object.">rs_program_fragment</a> pf);
-<a name="l00080"></a>00080
-<a name="l00086"></a>00086 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00087"></a>00087 <a class="code" href="rs__graphics_8rsh.html#a34dfa6eddd7454fc1865222c5a022315">rsgBindProgramStore</a>(<a class="code" href="structrs__program__store.html" title="Opaque handle to a Renderscript ProgramStore object.">rs_program_store</a> ps);
-<a name="l00088"></a>00088
-<a name="l00094"></a>00094 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00095"></a>00095 <a class="code" href="rs__graphics_8rsh.html#a894e26d0d05d3ef99be65ddf98dd901c">rsgBindProgramVertex</a>(<a class="code" href="structrs__program__vertex.html" title="Opaque handle to a Renderscript ProgramVertex object.">rs_program_vertex</a> pv);
-<a name="l00096"></a>00096
-<a name="l00102"></a>00102 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00103"></a>00103 <a class="code" href="rs__graphics_8rsh.html#a391eb5535544f6312c724b910da6ec35">rsgBindProgramRaster</a>(<a class="code" href="structrs__program__raster.html" title="Opaque handle to a Renderscript ProgramRaster object.">rs_program_raster</a> pr);
-<a name="l00104"></a>00104
-<a name="l00111"></a>00111 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00112"></a>00112 <a class="code" href="rs__graphics_8rsh.html#a4ade6c5acbf6acaa1c29a1aecc6e87d3">rsgBindSampler</a>(<a class="code" href="structrs__program__fragment.html" title="Opaque handle to a Renderscript ProgramFragment object.">rs_program_fragment</a>, <a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> slot, <a class="code" href="structrs__sampler.html" title="Opaque handle to a Renderscript sampler object.">rs_sampler</a>);
-<a name="l00113"></a>00113
-<a name="l00122"></a>00122 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00123"></a>00123 <a class="code" href="rs__graphics_8rsh.html#a1694eb5489bd3a444da921dbf16aeeb5">rsgBindTexture</a>(rs_program_fragment, <a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> slot, <a class="code" href="structrs__allocation.html" title="Opaque handle to a Renderscript allocation.">rs_allocation</a>);
-<a name="l00124"></a>00124
-<a name="l00131"></a>00131 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00132"></a>00132 <a class="code" href="rs__graphics_8rsh.html#a83a87d8efa3f26ed3f8fb25e49f29059">rsgProgramVertexLoadProjectionMatrix</a>(const <a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *proj);
-<a name="l00139"></a>00139 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00140"></a>00140 <a class="code" href="rs__graphics_8rsh.html#a976b8594cccb4b94d7ce520b44d884e3">rsgProgramVertexLoadModelMatrix</a>(const <a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *model);
-<a name="l00147"></a>00147 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00148"></a>00148 <a class="code" href="rs__graphics_8rsh.html#a377b7b394c4bf0881532b1241d4be168">rsgProgramVertexLoadTextureMatrix</a>(const <a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *tex);
-<a name="l00155"></a>00155 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00156"></a>00156 <a class="code" href="rs__graphics_8rsh.html#a2b767d209b36ffcd2e0fc0cf6f4c5706">rsgProgramVertexGetProjectionMatrix</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *proj);
-<a name="l00157"></a>00157
-<a name="l00167"></a>00167 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00168"></a>00168 <a class="code" href="rs__graphics_8rsh.html#a35ac8c3759e25047e6a458c15520c887">rsgProgramFragmentConstantColor</a>(rs_program_fragment pf, <span class="keywordtype">float</span> r, <span class="keywordtype">float</span> g, <span class="keywordtype">float</span> b, <span class="keywordtype">float</span> a);
-<a name="l00169"></a>00169
-<a name="l00178"></a>00178 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00179"></a>00179 <a class="code" href="rs__graphics_8rsh.html#a46208900d16287fde91a5d14ebc830dc">rsgBindConstant</a>(rs_program_fragment ps, <a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> slot, rs_allocation c);
-<a name="l00180"></a>00180
-<a name="l00189"></a>00189 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00190"></a>00190 <a class="code" href="rs__graphics_8rsh.html#a46208900d16287fde91a5d14ebc830dc">rsgBindConstant</a>(<a class="code" href="structrs__program__vertex.html" title="Opaque handle to a Renderscript ProgramVertex object.">rs_program_vertex</a> pv, <a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> slot, rs_allocation c);
-<a name="l00191"></a>00191
-<a name="l00197"></a>00197 extern <a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> __attribute__((overloadable))
-<a name="l00198"></a>00198 <a class="code" href="rs__graphics_8rsh.html#a67f4ed1ca4bba27d5c952ada89cd0717">rsgGetWidth</a>(<span class="keywordtype">void</span>);
-<a name="l00199"></a>00199
-<a name="l00205"></a>00205 extern <a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> __attribute__((overloadable))
-<a name="l00206"></a>00206 <a class="code" href="rs__graphics_8rsh.html#a7e6565cd5d5e44f442a8bf8ba68f4681">rsgGetHeight</a>(<span class="keywordtype">void</span>);
-<a name="l00207"></a>00207
-<a name="l00208"></a>00208
-<a name="l00215"></a>00215 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00216"></a>00216 <a class="code" href="rs__graphics_8rsh.html#a647228d8e15da6ad67a97701d920dcac">rsgAllocationSyncAll</a>(rs_allocation alloc);
-<a name="l00217"></a>00217
-<a name="l00218"></a>00218 <span class="preprocessor">#if (defined(RS_VERSION) && (RS_VERSION >= 14))</span>
-<a name="l00219"></a>00219 <span class="preprocessor"></span>
-<a name="l00227"></a>00227 <span class="keyword">extern</span> <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00228"></a>00228 <a class="code" href="rs__graphics_8rsh.html#a647228d8e15da6ad67a97701d920dcac">rsgAllocationSyncAll</a>(rs_allocation alloc,
-<a name="l00229"></a>00229 rs_allocation_usage_type source);
-<a name="l00230"></a>00230
-<a name="l00231"></a>00231 <span class="preprocessor">#endif //defined(RS_VERSION) && (RS_VERSION >= 14)</span>
-<a name="l00232"></a>00232 <span class="preprocessor"></span>
-<a name="l00243"></a>00243 <span class="keyword">extern</span> <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00244"></a>00244 <a class="code" href="rs__graphics_8rsh.html#a80c51849bf12ec6c699c23c3fa3e6208">rsgDrawRect</a>(<span class="keywordtype">float</span> x1, <span class="keywordtype">float</span> y1, <span class="keywordtype">float</span> x2, <span class="keywordtype">float</span> y2, <span class="keywordtype">float</span> z);
-<a name="l00245"></a>00245
-<a name="l00263"></a>00263 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00264"></a>00264 <a class="code" href="rs__graphics_8rsh.html#ad6953da0349e58547b08b8ce174ed3fc">rsgDrawQuad</a>(<span class="keywordtype">float</span> x1, <span class="keywordtype">float</span> y1, <span class="keywordtype">float</span> z1,
-<a name="l00265"></a>00265 <span class="keywordtype">float</span> x2, <span class="keywordtype">float</span> y2, <span class="keywordtype">float</span> z2,
-<a name="l00266"></a>00266 <span class="keywordtype">float</span> x3, <span class="keywordtype">float</span> y3, <span class="keywordtype">float</span> z3,
-<a name="l00267"></a>00267 <span class="keywordtype">float</span> x4, <span class="keywordtype">float</span> y4, <span class="keywordtype">float</span> z4);
-<a name="l00268"></a>00268
-<a name="l00269"></a>00269
-<a name="l00295"></a>00295 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00296"></a>00296 <a class="code" href="rs__graphics_8rsh.html#afb98a59bb9f878f0a09459567c269e64">rsgDrawQuadTexCoords</a>(<span class="keywordtype">float</span> x1, <span class="keywordtype">float</span> y1, <span class="keywordtype">float</span> z1, <span class="keywordtype">float</span> u1, <span class="keywordtype">float</span> v1,
-<a name="l00297"></a>00297 <span class="keywordtype">float</span> x2, <span class="keywordtype">float</span> y2, <span class="keywordtype">float</span> z2, <span class="keywordtype">float</span> u2, <span class="keywordtype">float</span> v2,
-<a name="l00298"></a>00298 <span class="keywordtype">float</span> x3, <span class="keywordtype">float</span> y3, <span class="keywordtype">float</span> z3, <span class="keywordtype">float</span> u3, <span class="keywordtype">float</span> v3,
-<a name="l00299"></a>00299 <span class="keywordtype">float</span> x4, <span class="keywordtype">float</span> y4, <span class="keywordtype">float</span> z4, <span class="keywordtype">float</span> u4, <span class="keywordtype">float</span> v4);
-<a name="l00300"></a>00300
-<a name="l00301"></a>00301
-<a name="l00314"></a>00314 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00315"></a>00315 <a class="code" href="rs__graphics_8rsh.html#a07d15127330fa1dff6c99b0d7d14e65e">rsgDrawSpriteScreenspace</a>(<span class="keywordtype">float</span> x, <span class="keywordtype">float</span> y, <span class="keywordtype">float</span> z, <span class="keywordtype">float</span> w, <span class="keywordtype">float</span> h);
-<a name="l00316"></a>00316
-<a name="l00317"></a>00317 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00318"></a>00318 rsgDrawPath(<a class="code" href="structrs__path.html" title="Opaque handle to a Renderscript Path object.">rs_path</a> p);
-<a name="l00319"></a>00319
-<a name="l00326"></a>00326 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00327"></a>00327 <a class="code" href="rs__graphics_8rsh.html#a6f8b87c994810908fbe5e01f8f63f9af">rsgDrawMesh</a>(<a class="code" href="structrs__mesh.html" title="Opaque handle to a Renderscript mesh object.">rs_mesh</a> ism);
-<a name="l00334"></a>00334 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00335"></a>00335 <a class="code" href="rs__graphics_8rsh.html#a6f8b87c994810908fbe5e01f8f63f9af">rsgDrawMesh</a>(<a class="code" href="structrs__mesh.html" title="Opaque handle to a Renderscript mesh object.">rs_mesh</a> ism, <a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> primitiveIndex);
-<a name="l00344"></a>00344 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00345"></a>00345 <a class="code" href="rs__graphics_8rsh.html#a6f8b87c994810908fbe5e01f8f63f9af">rsgDrawMesh</a>(<a class="code" href="structrs__mesh.html" title="Opaque handle to a Renderscript mesh object.">rs_mesh</a> ism, <a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> primitiveIndex, <a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> start, <a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> len);
-<a name="l00346"></a>00346
-<a name="l00355"></a>00355 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00356"></a>00356 <a class="code" href="rs__graphics_8rsh.html#a147674fed92745fbb5c64a6300ca3c49">rsgClearColor</a>(<span class="keywordtype">float</span> r, <span class="keywordtype">float</span> g, <span class="keywordtype">float</span> b, <span class="keywordtype">float</span> a);
-<a name="l00357"></a>00357
-<a name="l00361"></a>00361 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00362"></a>00362 <a class="code" href="rs__graphics_8rsh.html#a4bedb06e8facd587e3eacd746fe3e727">rsgClearDepth</a>(<span class="keywordtype">float</span> value);
-<a name="l00366"></a>00366 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00367"></a>00367 <a class="code" href="rs__graphics_8rsh.html#afaec82492762e62cad1ff53ada479b14">rsgDrawText</a>(const <span class="keywordtype">char</span> *, <span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y);
-<a name="l00371"></a>00371 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00372"></a>00372 <a class="code" href="rs__graphics_8rsh.html#afaec82492762e62cad1ff53ada479b14">rsgDrawText</a>(rs_allocation, <span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y);
-<a name="l00377"></a>00377 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00378"></a>00378 <a class="code" href="rs__graphics_8rsh.html#ae89effef281e92e2940055883ea366d4">rsgBindFont</a>(<a class="code" href="structrs__font.html" title="Opaque handle to a Renderscript font object.">rs_font</a> font);
-<a name="l00386"></a>00386 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00387"></a>00387 <a class="code" href="rs__graphics_8rsh.html#abda8c344092ed6310c7a8f353a6df876">rsgFontColor</a>(<span class="keywordtype">float</span> r, <span class="keywordtype">float</span> g, <span class="keywordtype">float</span> b, <span class="keywordtype">float</span> a);
-<a name="l00392"></a>00392 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00393"></a>00393 <a class="code" href="rs__graphics_8rsh.html#a5c599f4ea989f3d0616cbf8e983688c4">rsgMeasureText</a>(const <span class="keywordtype">char</span> *, <span class="keywordtype">int</span> *left, <span class="keywordtype">int</span> *right, <span class="keywordtype">int</span> *top, <span class="keywordtype">int</span> *bottom);
-<a name="l00397"></a>00397 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00398"></a>00398 <a class="code" href="rs__graphics_8rsh.html#a5c599f4ea989f3d0616cbf8e983688c4">rsgMeasureText</a>(rs_allocation, <span class="keywordtype">int</span> *left, <span class="keywordtype">int</span> *right, <span class="keywordtype">int</span> *top, <span class="keywordtype">int</span> *bottom);
-<a name="l00402"></a>00402 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00403"></a>00403 <a class="code" href="rs__graphics_8rsh.html#a0978c54902dd1d60180f8dbb0b781105">rsgMeshComputeBoundingBox</a>(<a class="code" href="structrs__mesh.html" title="Opaque handle to a Renderscript mesh object.">rs_mesh</a> mesh, <span class="keywordtype">float</span> *minX, <span class="keywordtype">float</span> *minY, <span class="keywordtype">float</span> *minZ,
-<a name="l00404"></a>00404 <span class="keywordtype">float</span> *maxX, <span class="keywordtype">float</span> *maxY, <span class="keywordtype">float</span> *maxZ);
-<a name="l00408"></a>00408 __inline__ static <span class="keywordtype">void</span> __attribute__((overloadable, always_inline))
-<a name="l00409"></a><a class="code" href="rs__graphics_8rsh.html#a6058b6b6c8b94f96f03dc8bca6a2090b">00409</a> <a class="code" href="rs__graphics_8rsh.html#a0978c54902dd1d60180f8dbb0b781105">rsgMeshComputeBoundingBox</a>(<a class="code" href="structrs__mesh.html" title="Opaque handle to a Renderscript mesh object.">rs_mesh</a> mesh, <a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> *bBoxMin, <a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> *bBoxMax) {
-<a name="l00410"></a>00410 <span class="keywordtype">float</span> x1, y1, z1, x2, y2, z2;
-<a name="l00411"></a>00411 <a class="code" href="rs__graphics_8rsh.html#a0978c54902dd1d60180f8dbb0b781105">rsgMeshComputeBoundingBox</a>(mesh, &x1, &y1, &z1, &x2, &y2, &z2);
-<a name="l00412"></a>00412 bBoxMin->x = x1;
-<a name="l00413"></a>00413 bBoxMin->y = y1;
-<a name="l00414"></a>00414 bBoxMin->z = z1;
-<a name="l00415"></a>00415 bBoxMax->x = x2;
-<a name="l00416"></a>00416 bBoxMax->y = y2;
-<a name="l00417"></a>00417 bBoxMax->z = z2;
-<a name="l00418"></a>00418 }
-<a name="l00419"></a>00419
-<a name="l00420"></a>00420 <span class="preprocessor">#endif</span>
-<a name="l00421"></a>00421 <span class="preprocessor"></span>
-</pre></div></div>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/rs__math_8rsh.html b/docs/html/reference/renderscript/rs__math_8rsh.html
deleted file mode 100644
index 7379f54..0000000
--- a/docs/html/reference/renderscript/rs__math_8rsh.html
+++ /dev/null
@@ -1,679 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_math.rsh File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
- <div id="navrow1" class="tabs">
- <ul class="tablist">
- <li><a href="index.html"><span>Overview</span></a></li>
- <li class="current"><a href="globals.html"><span>Globals</span></a></li>
- <li><a href="annotated.html"><span>Structs</span></a></li>
- </ul>
- </div>
-</div>
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle">
-<div class="title">/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_math.rsh File Reference</div> </div>
-</div>
-<div class="contents">
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__math_8rsh.html#ad9106e5aae5b1248870f21061f36a1c9">rsRand</a> (int max_value)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__math_8rsh.html#a01edf1cf3cdaecb1629761b69148e189">rsRand</a> (int min_value, int max_value)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__math_8rsh.html#a03e898d810ac44158e7461b2b2b1c356">rsRand</a> (float max_value)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__math_8rsh.html#a84b2e7468314873b3aa02969e310d9e4">rsRand</a> (float min_value, float max_value)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__math_8rsh.html#ac4f127e78da0849321c7f6db14f9e989">rsFrac</a> (float)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__math_8rsh.html#a5de277f7518a61646c3d74f3a0b9e893">rsClamp</a> (<a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> amount, <a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> low, <a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> high)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__math_8rsh.html#ad5732b8b1f1d0d53d605a7dc6908dc85">rsClamp</a> (int amount, int low, int high)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__math_8rsh.html#af5e17f571b13c3391d860eac172be1c6">rsClamp</a> (<a class="el" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a> amount, <a class="el" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a> low, <a class="el" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a> high)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">short </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__math_8rsh.html#a40eddbf6c2462eada177a581a49bd3c6">rsClamp</a> (short amount, short low, short high)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__math_8rsh.html#a2845f16757fe9eb7204bfb6f94d7fcc6">rsClamp</a> (<a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> amount, <a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> low, <a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> high)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">char </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__math_8rsh.html#a33122202f10764687e2d3ab1a8c27062">rsClamp</a> (char amount, char low, char high)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static __inline__ void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__math_8rsh.html#a191f9c687c56322c18b7d71491602122">rsExtractFrustumPlanes</a> (const <a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *viewProj, <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *left, <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *right, <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *top, <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *bottom, <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *near, <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *far)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static __inline__ bool </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__math_8rsh.html#a7bbeaf44838e08e68d5cf3e3d7b0818c">rsIsSphereInFrustum</a> (<a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *sphere, <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *left, <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *right, <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *top, <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *bottom, <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *near, <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *far)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#ae6ed52a87d4ff920c303b13b00f7396d">uchar4</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__math_8rsh.html#a5e20d326a6e2532d19a493b01f948c17">rsPackColorTo8888</a> (float r, float g, float b)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#ae6ed52a87d4ff920c303b13b00f7396d">uchar4</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__math_8rsh.html#a1f1107cf778cf1f614edfb5b8ac436a0">rsPackColorTo8888</a> (float r, float g, float b, float a)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#ae6ed52a87d4ff920c303b13b00f7396d">uchar4</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__math_8rsh.html#ac30a8c020eade2b57fd5966cb7c8665e">rsPackColorTo8888</a> (<a class="el" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> color)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__math_8rsh.html#a48bb0c2e7b1f2b62b2a8970c7d709eca">rsUnpackColor8888</a> (<a class="el" href="rs__types_8rsh.html#ae6ed52a87d4ff920c303b13b00f7396d">uchar4</a> c)</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>todo-jsams </p>
-
-<p>Definition in file <a class="el" href="rs__math_8rsh_source.html">rs_math.rsh</a>.</p>
-</div><hr/><h2>Function Documentation</h2>
-<a class="anchor" id="a5de277f7518a61646c3d74f3a0b9e893"></a><!-- doxytag: member="rs_math.rsh::rsClamp" ref="a5de277f7518a61646c3d74f3a0b9e893" args="(uint amount, uint low, uint high)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> rsClamp </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> </td>
- <td class="paramname"><em>amount</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> </td>
- <td class="paramname"><em>low</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> </td>
- <td class="paramname"><em>high</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Clamp the value amount between low and high.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">amount</td><td>The value to clamp </td></tr>
- <tr><td class="paramname">low</td><td></td></tr>
- <tr><td class="paramname">high</td><td></td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="ad5732b8b1f1d0d53d605a7dc6908dc85"></a><!-- doxytag: member="rs_math.rsh::rsClamp" ref="ad5732b8b1f1d0d53d605a7dc6908dc85" args="(int amount, int low, int high)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">int rsClamp </td>
- <td>(</td>
- <td class="paramtype">int </td>
- <td class="paramname"><em>amount</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">int </td>
- <td class="paramname"><em>low</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">int </td>
- <td class="paramname"><em>high</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="af5e17f571b13c3391d860eac172be1c6"></a><!-- doxytag: member="rs_math.rsh::rsClamp" ref="af5e17f571b13c3391d860eac172be1c6" args="(ushort amount, ushort low, ushort high)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a> rsClamp </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a> </td>
- <td class="paramname"><em>amount</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a> </td>
- <td class="paramname"><em>low</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a> </td>
- <td class="paramname"><em>high</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a40eddbf6c2462eada177a581a49bd3c6"></a><!-- doxytag: member="rs_math.rsh::rsClamp" ref="a40eddbf6c2462eada177a581a49bd3c6" args="(short amount, short low, short high)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">short rsClamp </td>
- <td>(</td>
- <td class="paramtype">short </td>
- <td class="paramname"><em>amount</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">short </td>
- <td class="paramname"><em>low</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">short </td>
- <td class="paramname"><em>high</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a2845f16757fe9eb7204bfb6f94d7fcc6"></a><!-- doxytag: member="rs_math.rsh::rsClamp" ref="a2845f16757fe9eb7204bfb6f94d7fcc6" args="(uchar amount, uchar low, uchar high)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> rsClamp </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> </td>
- <td class="paramname"><em>amount</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> </td>
- <td class="paramname"><em>low</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> </td>
- <td class="paramname"><em>high</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a33122202f10764687e2d3ab1a8c27062"></a><!-- doxytag: member="rs_math.rsh::rsClamp" ref="a33122202f10764687e2d3ab1a8c27062" args="(char amount, char low, char high)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">char rsClamp </td>
- <td>(</td>
- <td class="paramtype">char </td>
- <td class="paramname"><em>amount</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">char </td>
- <td class="paramname"><em>low</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">char </td>
- <td class="paramname"><em>high</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a191f9c687c56322c18b7d71491602122"></a><!-- doxytag: member="rs_math.rsh::rsExtractFrustumPlanes" ref="a191f9c687c56322c18b7d71491602122" args="(const rs_matrix4x4 *viewProj, float4 *left, float4 *right, float4 *top, float4 *bottom, float4 *near, float4 *far)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">static __inline__ void rsExtractFrustumPlanes </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> * </td>
- <td class="paramname"><em>viewProj</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> * </td>
- <td class="paramname"><em>left</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> * </td>
- <td class="paramname"><em>right</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> * </td>
- <td class="paramname"><em>top</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> * </td>
- <td class="paramname"><em>bottom</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> * </td>
- <td class="paramname"><em>near</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> * </td>
- <td class="paramname"><em>far</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td><code> [static]</code></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Computes 6 frustum planes from the view projection matrix </p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">viewProj</td><td>matrix to extract planes from </td></tr>
- <tr><td class="paramname">left</td><td>plane </td></tr>
- <tr><td class="paramname">right</td><td>plane </td></tr>
- <tr><td class="paramname">top</td><td>plane </td></tr>
- <tr><td class="paramname">bottom</td><td>plane </td></tr>
- <tr><td class="paramname">near</td><td>plane </td></tr>
- <tr><td class="paramname">far</td><td>plane </td></tr>
- </table>
- </dd>
-</dl>
-
-<p>Definition at line <a class="el" href="rs__math_8rsh_source.html#l00102">102</a> of file <a class="el" href="rs__math_8rsh_source.html">rs_math.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ac4f127e78da0849321c7f6db14f9e989"></a><!-- doxytag: member="rs_math.rsh::rsFrac" ref="ac4f127e78da0849321c7f6db14f9e989" args="(float)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float rsFrac </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Returns the fractional part of a float </p>
-
-</div>
-</div>
-<a class="anchor" id="a7bbeaf44838e08e68d5cf3e3d7b0818c"></a><!-- doxytag: member="rs_math.rsh::rsIsSphereInFrustum" ref="a7bbeaf44838e08e68d5cf3e3d7b0818c" args="(float4 *sphere, float4 *left, float4 *right, float4 *top, float4 *bottom, float4 *near, float4 *far)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">static __inline__ bool rsIsSphereInFrustum </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> * </td>
- <td class="paramname"><em>sphere</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> * </td>
- <td class="paramname"><em>left</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> * </td>
- <td class="paramname"><em>right</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> * </td>
- <td class="paramname"><em>top</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> * </td>
- <td class="paramname"><em>bottom</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> * </td>
- <td class="paramname"><em>near</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> * </td>
- <td class="paramname"><em>far</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td><code> [static]</code></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Checks if a sphere is withing the 6 frustum planes </p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">sphere</td><td>float4 representing the sphere </td></tr>
- <tr><td class="paramname">left</td><td>plane </td></tr>
- <tr><td class="paramname">right</td><td>plane </td></tr>
- <tr><td class="paramname">top</td><td>plane </td></tr>
- <tr><td class="paramname">bottom</td><td>plane </td></tr>
- <tr><td class="paramname">near</td><td>plane </td></tr>
- <tr><td class="paramname">far</td><td>plane </td></tr>
- </table>
- </dd>
-</dl>
-
-<p>Definition at line <a class="el" href="rs__math_8rsh_source.html#l00162">162</a> of file <a class="el" href="rs__math_8rsh_source.html">rs_math.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a5e20d326a6e2532d19a493b01f948c17"></a><!-- doxytag: member="rs_math.rsh::rsPackColorTo8888" ref="a5e20d326a6e2532d19a493b01f948c17" args="(float r, float g, float b)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="rs__types_8rsh.html#ae6ed52a87d4ff920c303b13b00f7396d">uchar4</a> rsPackColorTo8888 </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>r</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>g</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>b</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Pack floating point (0-1) RGB values into a uchar4. The alpha component is set to 255 (1.0).</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">r</td><td></td></tr>
- <tr><td class="paramname">g</td><td></td></tr>
- <tr><td class="paramname">b</td><td></td></tr>
- </table>
- </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>uchar4 </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a1f1107cf778cf1f614edfb5b8ac436a0"></a><!-- doxytag: member="rs_math.rsh::rsPackColorTo8888" ref="a1f1107cf778cf1f614edfb5b8ac436a0" args="(float r, float g, float b, float a)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="rs__types_8rsh.html#ae6ed52a87d4ff920c303b13b00f7396d">uchar4</a> rsPackColorTo8888 </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>r</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>g</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>b</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>a</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Pack floating point (0-1) RGBA values into a uchar4.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">r</td><td></td></tr>
- <tr><td class="paramname">g</td><td></td></tr>
- <tr><td class="paramname">b</td><td></td></tr>
- <tr><td class="paramname">a</td><td></td></tr>
- </table>
- </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>uchar4 </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="ac30a8c020eade2b57fd5966cb7c8665e"></a><!-- doxytag: member="rs_math.rsh::rsPackColorTo8888" ref="ac30a8c020eade2b57fd5966cb7c8665e" args="(float3 color)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="rs__types_8rsh.html#ae6ed52a87d4ff920c303b13b00f7396d">uchar4</a> rsPackColorTo8888 </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> </td>
- <td class="paramname"><em>color</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Pack floating point (0-1) RGB values into a uchar4. The alpha component is set to 255 (1.0).</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">color</td><td></td></tr>
- </table>
- </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>uchar4</dd></dl>
-<p>Pack floating point (0-1) RGBA values into a uchar4.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">color</td><td></td></tr>
- </table>
- </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>uchar4 </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="ad9106e5aae5b1248870f21061f36a1c9"></a><!-- doxytag: member="rs_math.rsh::rsRand" ref="ad9106e5aae5b1248870f21061f36a1c9" args="(int max_value)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">int rsRand </td>
- <td>(</td>
- <td class="paramtype">int </td>
- <td class="paramname"><em>max_value</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Return a random value between 0 (or min_value) and max_malue. </p>
-
-</div>
-</div>
-<a class="anchor" id="a01edf1cf3cdaecb1629761b69148e189"></a><!-- doxytag: member="rs_math.rsh::rsRand" ref="a01edf1cf3cdaecb1629761b69148e189" args="(int min_value, int max_value)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">int rsRand </td>
- <td>(</td>
- <td class="paramtype">int </td>
- <td class="paramname"><em>min_value</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">int </td>
- <td class="paramname"><em>max_value</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a03e898d810ac44158e7461b2b2b1c356"></a><!-- doxytag: member="rs_math.rsh::rsRand" ref="a03e898d810ac44158e7461b2b2b1c356" args="(float max_value)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float rsRand </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>max_value</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a84b2e7468314873b3aa02969e310d9e4"></a><!-- doxytag: member="rs_math.rsh::rsRand" ref="a84b2e7468314873b3aa02969e310d9e4" args="(float min_value, float max_value)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float rsRand </td>
- <td>(</td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>min_value</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>max_value</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a48bb0c2e7b1f2b62b2a8970c7d709eca"></a><!-- doxytag: member="rs_math.rsh::rsUnpackColor8888" ref="a48bb0c2e7b1f2b62b2a8970c7d709eca" args="(uchar4 c)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> rsUnpackColor8888 </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#ae6ed52a87d4ff920c303b13b00f7396d">uchar4</a> </td>
- <td class="paramname"><em>c</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Unpack a uchar4 color to float4. The resulting float range will be (0-1).</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">c</td><td></td></tr>
- </table>
- </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>float4 </dd></dl>
-
-</div>
-</div>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/rs__math_8rsh_source.html b/docs/html/reference/renderscript/rs__math_8rsh_source.html
deleted file mode 100644
index 513ce48..0000000
--- a/docs/html/reference/renderscript/rs__math_8rsh_source.html
+++ /dev/null
@@ -1,177 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_math.rsh Source File</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
- <div id="navrow1" class="tabs">
- <ul class="tablist">
- <li><a href="index.html"><span>Overview</span></a></li>
- <li class="current"><a href="globals.html"><span>Globals</span></a></li>
- <li><a href="annotated.html"><span>Structs</span></a></li>
- </ul>
- </div>
-<div class="header">
- <div class="headertitle">
-<div class="title">/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_math.rsh</div> </div>
-</div>
-<div class="contents">
-<a href="rs__math_8rsh.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * Copyright (C) 2011 The Android Open Source Project</span>
-<a name="l00003"></a>00003 <span class="comment"> *</span>
-<a name="l00004"></a>00004 <span class="comment"> * Licensed under the Apache License, Version 2.0 (the "License");</span>
-<a name="l00005"></a>00005 <span class="comment"> * you may not use this file except in compliance with the License.</span>
-<a name="l00006"></a>00006 <span class="comment"> * You may obtain a copy of the License at</span>
-<a name="l00007"></a>00007 <span class="comment"> *</span>
-<a name="l00008"></a>00008 <span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span>
-<a name="l00011"></a>00011 <span class="comment"> * distributed under the License is distributed on an "AS IS" BASIS,</span>
-<a name="l00012"></a>00012 <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
-<a name="l00013"></a>00013 <span class="comment"> * See the License for the specific language governing permissions and</span>
-<a name="l00014"></a>00014 <span class="comment"> * limitations under the License.</span>
-<a name="l00015"></a>00015 <span class="comment"> */</span>
-<a name="l00016"></a>00016
-<a name="l00024"></a>00024 <span class="preprocessor">#ifndef __RS_MATH_RSH__</span>
-<a name="l00025"></a>00025 <span class="preprocessor"></span><span class="preprocessor">#define __RS_MATH_RSH__</span>
-<a name="l00026"></a>00026 <span class="preprocessor"></span>
-<a name="l00027"></a>00027
-<a name="l00031"></a>00031 <span class="keyword">extern</span> <span class="keywordtype">int</span> __attribute__((overloadable))
-<a name="l00032"></a>00032 <a class="code" href="rs__math_8rsh.html#ad9106e5aae5b1248870f21061f36a1c9">rsRand</a>(<span class="keywordtype">int</span> max_value);
-<a name="l00036"></a>00036 extern <span class="keywordtype">int</span> __attribute__((overloadable))
-<a name="l00037"></a>00037 <a class="code" href="rs__math_8rsh.html#ad9106e5aae5b1248870f21061f36a1c9">rsRand</a>(<span class="keywordtype">int</span> min_value, <span class="keywordtype">int</span> max_value);
-<a name="l00041"></a>00041 extern <span class="keywordtype">float</span> __attribute__((overloadable))
-<a name="l00042"></a>00042 <a class="code" href="rs__math_8rsh.html#ad9106e5aae5b1248870f21061f36a1c9">rsRand</a>(<span class="keywordtype">float</span> max_value);
-<a name="l00046"></a>00046 extern <span class="keywordtype">float</span> __attribute__((overloadable))
-<a name="l00047"></a>00047 <a class="code" href="rs__math_8rsh.html#ad9106e5aae5b1248870f21061f36a1c9">rsRand</a>(<span class="keywordtype">float</span> min_value, <span class="keywordtype">float</span> max_value);
-<a name="l00048"></a>00048
-<a name="l00052"></a>00052 extern <span class="keywordtype">float</span> __attribute__((overloadable))
-<a name="l00053"></a>00053 <a class="code" href="rs__math_8rsh.html#ac4f127e78da0849321c7f6db14f9e989">rsFrac</a>(<span class="keywordtype">float</span>);
-<a name="l00054"></a>00054
-<a name="l00055"></a>00055
-<a name="l00057"></a>00057 <span class="comment">// int ops</span>
-<a name="l00059"></a>00059 <span class="comment"></span>
-<a name="l00067"></a>00067 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> __attribute__((overloadable, always_inline)) <a class="code" href="rs__math_8rsh.html#a5de277f7518a61646c3d74f3a0b9e893">rsClamp</a>(<a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> amount, <a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> low, <a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> high);
-<a name="l00068"></a>00068
-<a name="l00072"></a>00072 _RS_RUNTIME <span class="keywordtype">int</span> __attribute__((overloadable, always_inline)) <a class="code" href="rs__math_8rsh.html#a5de277f7518a61646c3d74f3a0b9e893">rsClamp</a>(<span class="keywordtype">int</span> amount, <span class="keywordtype">int</span> low, <span class="keywordtype">int</span> high);
-<a name="l00076"></a>00076 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a> __attribute__((overloadable, always_inline)) <a class="code" href="rs__math_8rsh.html#a5de277f7518a61646c3d74f3a0b9e893">rsClamp</a>(<a class="code" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a> amount, <a class="code" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a> low, <a class="code" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a> high);
-<a name="l00080"></a>00080 _RS_RUNTIME <span class="keywordtype">short</span> __attribute__((overloadable, always_inline)) <a class="code" href="rs__math_8rsh.html#a5de277f7518a61646c3d74f3a0b9e893">rsClamp</a>(<span class="keywordtype">short</span> amount, <span class="keywordtype">short</span> low, <span class="keywordtype">short</span> high);
-<a name="l00084"></a>00084 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> __attribute__((overloadable, always_inline)) <a class="code" href="rs__math_8rsh.html#a5de277f7518a61646c3d74f3a0b9e893">rsClamp</a>(<a class="code" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> amount, <a class="code" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> low, <a class="code" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> high);
-<a name="l00088"></a>00088 _RS_RUNTIME <span class="keywordtype">char</span> __attribute__((overloadable, always_inline)) <a class="code" href="rs__math_8rsh.html#a5de277f7518a61646c3d74f3a0b9e893">rsClamp</a>(<span class="keywordtype">char</span> amount, <span class="keywordtype">char</span> low, <span class="keywordtype">char</span> high);
-<a name="l00089"></a>00089
-<a name="l00090"></a>00090
-<a name="l00101"></a>00101 __inline__ static <span class="keywordtype">void</span> __attribute__((overloadable, always_inline))
-<a name="l00102"></a><a class="code" href="rs__math_8rsh.html#a191f9c687c56322c18b7d71491602122">00102</a> <a class="code" href="rs__math_8rsh.html#a191f9c687c56322c18b7d71491602122">rsExtractFrustumPlanes</a>(const <a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *viewProj,
-<a name="l00103"></a>00103 <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *left, <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *right,
-<a name="l00104"></a>00104 <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *top, <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *bottom,
-<a name="l00105"></a>00105 <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *near, <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *far) {
-<a name="l00106"></a>00106 <span class="comment">// x y z w = a b c d in the plane equation</span>
-<a name="l00107"></a>00107 left->x = viewProj->m[3] + viewProj->m[0];
-<a name="l00108"></a>00108 left->y = viewProj->m[7] + viewProj->m[4];
-<a name="l00109"></a>00109 left->z = viewProj->m[11] + viewProj->m[8];
-<a name="l00110"></a>00110 left->w = viewProj->m[15] + viewProj->m[12];
-<a name="l00111"></a>00111
-<a name="l00112"></a>00112 right->x = viewProj->m[3] - viewProj->m[0];
-<a name="l00113"></a>00113 right->y = viewProj->m[7] - viewProj->m[4];
-<a name="l00114"></a>00114 right->z = viewProj->m[11] - viewProj->m[8];
-<a name="l00115"></a>00115 right->w = viewProj->m[15] - viewProj->m[12];
-<a name="l00116"></a>00116
-<a name="l00117"></a>00117 top->x = viewProj->m[3] - viewProj->m[1];
-<a name="l00118"></a>00118 top->y = viewProj->m[7] - viewProj->m[5];
-<a name="l00119"></a>00119 top->z = viewProj->m[11] - viewProj->m[9];
-<a name="l00120"></a>00120 top->w = viewProj->m[15] - viewProj->m[13];
-<a name="l00121"></a>00121
-<a name="l00122"></a>00122 bottom->x = viewProj->m[3] + viewProj->m[1];
-<a name="l00123"></a>00123 bottom->y = viewProj->m[7] + viewProj->m[5];
-<a name="l00124"></a>00124 bottom->z = viewProj->m[11] + viewProj->m[9];
-<a name="l00125"></a>00125 bottom->w = viewProj->m[15] + viewProj->m[13];
-<a name="l00126"></a>00126
-<a name="l00127"></a>00127 near->x = viewProj->m[3] + viewProj->m[2];
-<a name="l00128"></a>00128 near->y = viewProj->m[7] + viewProj->m[6];
-<a name="l00129"></a>00129 near->z = viewProj->m[11] + viewProj->m[10];
-<a name="l00130"></a>00130 near->w = viewProj->m[15] + viewProj->m[14];
-<a name="l00131"></a>00131
-<a name="l00132"></a>00132 far->x = viewProj->m[3] - viewProj->m[2];
-<a name="l00133"></a>00133 far->y = viewProj->m[7] - viewProj->m[6];
-<a name="l00134"></a>00134 far->z = viewProj->m[11] - viewProj->m[10];
-<a name="l00135"></a>00135 far->w = viewProj->m[15] - viewProj->m[14];
-<a name="l00136"></a>00136
-<a name="l00137"></a>00137 <span class="keywordtype">float</span> len = <a class="code" href="rs__cl_8rsh.html#a902d4d2fab31ba8f9631b1f681e99baa">length</a>(left->xyz);
-<a name="l00138"></a>00138 *left /= len;
-<a name="l00139"></a>00139 len = <a class="code" href="rs__cl_8rsh.html#a902d4d2fab31ba8f9631b1f681e99baa">length</a>(right->xyz);
-<a name="l00140"></a>00140 *right /= len;
-<a name="l00141"></a>00141 len = <a class="code" href="rs__cl_8rsh.html#a902d4d2fab31ba8f9631b1f681e99baa">length</a>(top->xyz);
-<a name="l00142"></a>00142 *top /= len;
-<a name="l00143"></a>00143 len = <a class="code" href="rs__cl_8rsh.html#a902d4d2fab31ba8f9631b1f681e99baa">length</a>(bottom->xyz);
-<a name="l00144"></a>00144 *bottom /= len;
-<a name="l00145"></a>00145 len = <a class="code" href="rs__cl_8rsh.html#a902d4d2fab31ba8f9631b1f681e99baa">length</a>(near->xyz);
-<a name="l00146"></a>00146 *near /= len;
-<a name="l00147"></a>00147 len = <a class="code" href="rs__cl_8rsh.html#a902d4d2fab31ba8f9631b1f681e99baa">length</a>(far->xyz);
-<a name="l00148"></a>00148 *far /= len;
-<a name="l00149"></a>00149 }
-<a name="l00150"></a>00150
-<a name="l00161"></a>00161 __inline__ <span class="keyword">static</span> <span class="keywordtype">bool</span> __attribute__((overloadable, always_inline))
-<a name="l00162"></a><a class="code" href="rs__math_8rsh.html#a7bbeaf44838e08e68d5cf3e3d7b0818c">00162</a> <a class="code" href="rs__math_8rsh.html#a7bbeaf44838e08e68d5cf3e3d7b0818c">rsIsSphereInFrustum</a>(<a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *sphere,
-<a name="l00163"></a>00163 <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *left, <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *right,
-<a name="l00164"></a>00164 <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *top, <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *bottom,
-<a name="l00165"></a>00165 <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *near, <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> *far) {
-<a name="l00166"></a>00166
-<a name="l00167"></a>00167 <span class="keywordtype">float</span> distToCenter = <a class="code" href="rs__cl_8rsh.html#aa26d85eac3067e9769b33b6914b180f2">dot</a>(left->xyz, sphere->xyz) + left->w;
-<a name="l00168"></a>00168 <span class="keywordflow">if</span> (distToCenter < -sphere->w) {
-<a name="l00169"></a>00169 <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l00170"></a>00170 }
-<a name="l00171"></a>00171 distToCenter = <a class="code" href="rs__cl_8rsh.html#aa26d85eac3067e9769b33b6914b180f2">dot</a>(right->xyz, sphere->xyz) + right->w;
-<a name="l00172"></a>00172 <span class="keywordflow">if</span> (distToCenter < -sphere->w) {
-<a name="l00173"></a>00173 <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l00174"></a>00174 }
-<a name="l00175"></a>00175 distToCenter = <a class="code" href="rs__cl_8rsh.html#aa26d85eac3067e9769b33b6914b180f2">dot</a>(top->xyz, sphere->xyz) + top->w;
-<a name="l00176"></a>00176 <span class="keywordflow">if</span> (distToCenter < -sphere->w) {
-<a name="l00177"></a>00177 <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l00178"></a>00178 }
-<a name="l00179"></a>00179 distToCenter = <a class="code" href="rs__cl_8rsh.html#aa26d85eac3067e9769b33b6914b180f2">dot</a>(bottom->xyz, sphere->xyz) + bottom->w;
-<a name="l00180"></a>00180 <span class="keywordflow">if</span> (distToCenter < -sphere->w) {
-<a name="l00181"></a>00181 <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l00182"></a>00182 }
-<a name="l00183"></a>00183 distToCenter = <a class="code" href="rs__cl_8rsh.html#aa26d85eac3067e9769b33b6914b180f2">dot</a>(near->xyz, sphere->xyz) + near->w;
-<a name="l00184"></a>00184 <span class="keywordflow">if</span> (distToCenter < -sphere->w) {
-<a name="l00185"></a>00185 <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l00186"></a>00186 }
-<a name="l00187"></a>00187 distToCenter = <a class="code" href="rs__cl_8rsh.html#aa26d85eac3067e9769b33b6914b180f2">dot</a>(far->xyz, sphere->xyz) + far->w;
-<a name="l00188"></a>00188 <span class="keywordflow">if</span> (distToCenter < -sphere->w) {
-<a name="l00189"></a>00189 <span class="keywordflow">return</span> <span class="keyword">false</span>;
-<a name="l00190"></a>00190 }
-<a name="l00191"></a>00191 <span class="keywordflow">return</span> <span class="keyword">true</span>;
-<a name="l00192"></a>00192 }
-<a name="l00193"></a>00193
-<a name="l00194"></a>00194
-<a name="l00205"></a>00205 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#ae6ed52a87d4ff920c303b13b00f7396d">uchar4</a> __attribute__((overloadable)) <a class="code" href="rs__math_8rsh.html#a5e20d326a6e2532d19a493b01f948c17">rsPackColorTo8888</a>(<span class="keywordtype">float</span> r, <span class="keywordtype">float</span> g, <span class="keywordtype">float</span> b);
-<a name="l00206"></a>00206
-<a name="l00217"></a>00217 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#ae6ed52a87d4ff920c303b13b00f7396d">uchar4</a> __attribute__((overloadable)) <a class="code" href="rs__math_8rsh.html#a5e20d326a6e2532d19a493b01f948c17">rsPackColorTo8888</a>(<span class="keywordtype">float</span> r, <span class="keywordtype">float</span> g, <span class="keywordtype">float</span> b, <span class="keywordtype">float</span> a);
-<a name="l00218"></a>00218
-<a name="l00227"></a>00227 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#ae6ed52a87d4ff920c303b13b00f7396d">uchar4</a> __attribute__((overloadable)) <a class="code" href="rs__math_8rsh.html#a5e20d326a6e2532d19a493b01f948c17">rsPackColorTo8888</a>(<a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> color);
-<a name="l00228"></a>00228
-<a name="l00236"></a>00236 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#ae6ed52a87d4ff920c303b13b00f7396d">uchar4</a> __attribute__((overloadable)) <a class="code" href="rs__math_8rsh.html#a5e20d326a6e2532d19a493b01f948c17">rsPackColorTo8888</a>(<a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> color);
-<a name="l00237"></a>00237
-<a name="l00245"></a>00245 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> <a class="code" href="rs__math_8rsh.html#a48bb0c2e7b1f2b62b2a8970c7d709eca">rsUnpackColor8888</a>(<a class="code" href="rs__types_8rsh.html#ae6ed52a87d4ff920c303b13b00f7396d">uchar4</a> c);
-<a name="l00246"></a>00246
-<a name="l00247"></a>00247 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#ae6ed52a87d4ff920c303b13b00f7396d">uchar4</a> __attribute__((overloadable)) rsYuvToRGBA_uchar4(<a class="code" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> y, <a class="code" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> u, <a class="code" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> v);
-<a name="l00248"></a>00248 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> __attribute__((overloadable)) rsYuvToRGBA_float4(<a class="code" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> y, <a class="code" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> u, <a class="code" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> v);
-<a name="l00249"></a>00249
-<a name="l00250"></a>00250
-<a name="l00251"></a>00251 <span class="preprocessor">#endif</span>
-</pre></div></div>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/rs__matrix_8rsh.html b/docs/html/reference/renderscript/rs__matrix_8rsh.html
deleted file mode 100644
index 3b8e047..0000000
--- a/docs/html/reference/renderscript/rs__matrix_8rsh.html
+++ /dev/null
@@ -1,1579 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>frameworks/rs/scriptc/rs_matrix.rsh File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
- <div id="navrow1" class="tabs">
- <ul class="tablist">
- <li><a href="index.html"><span>Overview</span></a></li>
- <li class="current"><a href="globals.html"><span>Globals</span></a></li>
- <li><a href="annotated.html"><span>Structs</span></a></li>
- </ul>
- </div>
-</div>
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle">
-<div class="title">frameworks/rs/scriptc/rs_matrix.rsh File Reference</div> </div>
-</div>
-<div class="contents">
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">_RS_RUNTIME void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#aca88832ed720e301780152c60884393e">rsMatrixSet</a> (<a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *m, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> col, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> row, float v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">_RS_RUNTIME void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a08a247cdf2e70e78310bf04f9ecd5144">rsMatrixSet</a> (<a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> *m, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> col, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> row, float v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">_RS_RUNTIME void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#af9707d7be5945bf55ed53683624176ff">rsMatrixSet</a> (<a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> *m, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> col, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> row, float v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">_RS_RUNTIME float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#af26fdbf8b8f0ed5d1b53f62b2aef5110">rsMatrixGet</a> (const <a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *m, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> col, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> row)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">_RS_RUNTIME float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#acfebfc7b97e7282b78cd9c65b791932a">rsMatrixGet</a> (const <a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> *m, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> col, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> row)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">_RS_RUNTIME float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a683b4537b98103c50cc66780dfe8cd69">rsMatrixGet</a> (const <a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> *m, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> col, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> row)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a0ffd9de971cf10d0a663ff565be8d3cc">rsMatrixLoadIdentity</a> (<a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *m)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a5b31e83553efa947db2198674d5db043">rsMatrixLoadIdentity</a> (<a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> *m)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#ad2954a5ac11d2370227296be89e92471">rsMatrixLoadIdentity</a> (<a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> *m)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#ac380c4117e047da494a74f0dad20fab3">rsMatrixLoad</a> (<a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *m, const float *v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#aef942535c5d56072125dcf5244970ea2">rsMatrixLoad</a> (<a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> *m, const float *v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#aa327089f7ad9161d7372094163147005">rsMatrixLoad</a> (<a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> *m, const float *v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a5239a3f5f2becd20507d0aa56638ba03">rsMatrixLoad</a> (<a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *m, const <a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a06176acb38405937cb94c835a712a3b3">rsMatrixLoad</a> (<a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *m, const <a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> *v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a3a3d0f0053720fb4afb3a3eb32e42a82">rsMatrixLoad</a> (<a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *m, const <a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> *v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a654e5abe095770979d740f7b55382bd0">rsMatrixLoad</a> (<a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> *m, const <a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> *v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a5f3697805c794c9c9f2f8cfdde4b9a44">rsMatrixLoad</a> (<a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> *m, const <a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> *v)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a268032f3ac6d766b1d7fe72a6cb50464">rsMatrixLoadRotate</a> (<a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *m, float rot, float x, float y, float z)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#acaf51d1f9ad5041ce01fbf8b7c5923fd">rsMatrixLoadScale</a> (<a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *m, float x, float y, float z)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a1b521c8a3d1260fa732cbf0a71af0e74">rsMatrixLoadTranslate</a> (<a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *m, float x, float y, float z)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a79f14c4c0f5ecc1bbd0bf54da8b653ef">rsMatrixLoadMultiply</a> (<a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *m, const <a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *lhs, const <a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *rhs)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a78872343ea6a5c1a846160ccdc4add52">rsMatrixLoadMultiply</a> (<a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> *m, const <a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> *lhs, const <a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> *rhs)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#ae0dd4755c28fc896626ebf5dc784130f">rsMatrixLoadMultiply</a> (<a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> *m, const <a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> *lhs, const <a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> *rhs)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a97953ab2606900a839e5816c619abe66">rsMatrixMultiply</a> (<a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *m, const <a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *rhs)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#ae0b03aeec17ec8b9c5e75f8efb1bdc53">rsMatrixMultiply</a> (<a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> *m, const <a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> *rhs)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#ab1973ad3efa0ab2d53f466dd9fb190bb">rsMatrixMultiply</a> (<a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> *m, const <a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> *rhs)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#ad5ed05ca4880397fb29615e3c6798de1">rsMatrixRotate</a> (<a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *m, float rot, float x, float y, float z)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a94cc6b22bd1a6c07a9a1c1d21afb392c">rsMatrixScale</a> (<a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *m, float x, float y, float z)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a4df5f9b5bb6044f3c3426f2f58b94405">rsMatrixTranslate</a> (<a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *m, float x, float y, float z)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a4c59884a0e534dbbcdc5655842732d43">rsMatrixLoadOrtho</a> (<a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *m, float left, float right, float bottom, float top, float near, float far)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#ad25760aaf01e95d0055237afab41bbb3">rsMatrixLoadFrustum</a> (<a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *m, float left, float right, float bottom, float top, float near, float far)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#aa404c34d7478f2921f7415d2da95d02b">rsMatrixLoadPerspective</a> (<a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *m, float fovy, float aspect, float near, float far)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">_RS_RUNTIME <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a47b6abbf32ffaf77bb13d96c3f05779f">rsMatrixMultiply</a> (<a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *m, <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> in)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">_RS_RUNTIME <a class="el" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a716bc2d29b80eb25388aba3ba8845aef">rsMatrixMultiply</a> (<a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> *m, <a class="el" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> in)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">_RS_RUNTIME <a class="el" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a4d9a8bb7c3f5d67b14fa349bdd531d13">rsMatrixMultiply</a> (<a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> *m, <a class="el" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> in)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a00b6a334ba5ac94d84850f22ec9f4de5">rsMatrixInverse</a> (<a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *m)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#ac05080d52da2d99a759ef34fa0655e82">rsMatrixInverseTranspose</a> (<a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *m)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a88095c70f1550c760844b3e32e41a31a">rsMatrixTranspose</a> (<a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *m)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#ac52acb31a705f6c68af8bddea0e79969">rsMatrixTranspose</a> (<a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> *m)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__matrix_8rsh.html#a49164dd4d4e85b212196028b1fd89dc1">rsMatrixTranspose</a> (<a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> *m)</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Matrix functions. </p>
-<p>These functions let you manipulate square matrices of rank 2x2, 3x3, and 4x4. They are particularly useful for graphical transformations and are compatible with OpenGL.</p>
-<p>A few general notes:</p>
-<ul>
-<li>We use a zero-based index for rows and columns. E.g. the last element of a <a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> is found at (3, 3).</li>
-</ul>
-<ul>
-<li>RenderScript uses column-based vectors. Transforming a vector is done by postmultiplying the vector, e.g. <em>(matrix * vector)</em>, as provided by <a class="el" href="rs__matrix_8rsh.html#a4d9a8bb7c3f5d67b14fa349bdd531d13">rsMatrixMultiply</a>.</li>
-</ul>
-<ul>
-<li>To create a transformation matrix that performs two transformations at once, multiply the two source matrices, with the first transformation as the right argument. E.g. to create a transformation matrix that applies the transformation <em>s1</em> followed by <em>s2</em>, call rsMatrixLoadMultiply(&combined, &s2, &s1). This derives from <em>s2 * (s1 * v)</em>, which is <em>(s2 * s1) * v</em>.</li>
-</ul>
-<ul>
-<li>We have two style of functions to create transformation matrices: rsMatrixLoad<em>Transformation</em> and rsMatrix<em>Transformation</em>. The former style simply stores the transformation matrix in the first argument. The latter modifies a pre-existing transformation matrix so that the new transformation happens first. E.g. if you call <a class="el" href="rs__matrix_8rsh.html#a4df5f9b5bb6044f3c3426f2f58b94405">rsMatrixTranslate</a> on a matrix that already does a scaling, the resulting matrix when applied to a vector will first do the translation then the scaling. </li>
-</ul>
-
-<p>Definition in file <a class="el" href="rs__matrix_8rsh_source.html">rs_matrix.rsh</a>.</p>
-</div><hr/><h2>Function Documentation</h2>
-<a class="anchor" id="af26fdbf8b8f0ed5d1b53f62b2aef5110"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixGet" ref="af26fdbf8b8f0ed5d1b53f62b2aef5110" args="(const rs_matrix4x4 *m, uint32_t col, uint32_t row)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">_RS_RUNTIME float rsMatrixGet </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> * </td>
- <td class="paramname"><em>m</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
- <td class="paramname"><em>col</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
- <td class="paramname"><em>row</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Returns one element of a matrix.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">m</td><td>The matrix to extract the element from. </td></tr>
- <tr><td class="paramname">col</td><td>The zero-based column of the element to be extracted. </td></tr>
- <tr><td class="paramname">row</td><td>The zero-based row of the element to extracted.</td></tr>
- </table>
- </dd>
-</dl>
-<dl class="warning"><dt><b>Warning:</b></dt><dd>The order of the column and row parameters may be unexpected.</dd></dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>float </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="acfebfc7b97e7282b78cd9c65b791932a"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixGet" ref="acfebfc7b97e7282b78cd9c65b791932a" args="(const rs_matrix3x3 *m, uint32_t col, uint32_t row)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">_RS_RUNTIME float rsMatrixGet </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> * </td>
- <td class="paramname"><em>m</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
- <td class="paramname"><em>col</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
- <td class="paramname"><em>row</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a683b4537b98103c50cc66780dfe8cd69"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixGet" ref="a683b4537b98103c50cc66780dfe8cd69" args="(const rs_matrix2x2 *m, uint32_t col, uint32_t row)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">_RS_RUNTIME float rsMatrixGet </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> * </td>
- <td class="paramname"><em>m</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
- <td class="paramname"><em>col</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
- <td class="paramname"><em>row</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a00b6a334ba5ac94d84850f22ec9f4de5"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixInverse" ref="a00b6a334ba5ac94d84850f22ec9f4de5" args="(rs_matrix4x4 *m)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">bool rsMatrixInverse </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> * </td>
- <td class="paramname"><em>m</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Inverts a matrix in place.</p>
-<p>Returns true if the matrix was successfully inversed.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">m</td><td>The matrix to invert. </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="ac05080d52da2d99a759ef34fa0655e82"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixInverseTranspose" ref="ac05080d52da2d99a759ef34fa0655e82" args="(rs_matrix4x4 *m)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">bool rsMatrixInverseTranspose </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> * </td>
- <td class="paramname"><em>m</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Inverts and transpose a matrix in place.</p>
-<p>The matrix is first inverted then transposed. Returns true if the matrix was successfully inverted.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">m</td><td>The matrix to modify. </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="ac380c4117e047da494a74f0dad20fab3"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixLoad" ref="ac380c4117e047da494a74f0dad20fab3" args="(rs_matrix4x4 *m, const float *v)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsMatrixLoad </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> * </td>
- <td class="paramname"><em>m</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const float * </td>
- <td class="paramname"><em>v</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Set the elements of a matrix from an array of floats.</p>
-<p>The array of floats should be in row-major order, i.e. the element a <em>row 0, column 0</em> should be first, followed by the element at <em>row 0, column 1</em>, etc.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">m</td><td>The matrix to set. </td></tr>
- <tr><td class="paramname">v</td><td>The array of values to set the matrix to. These arrays should be 4, 9, or 16 floats long, depending on the matrix size. </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="aef942535c5d56072125dcf5244970ea2"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixLoad" ref="aef942535c5d56072125dcf5244970ea2" args="(rs_matrix3x3 *m, const float *v)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsMatrixLoad </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> * </td>
- <td class="paramname"><em>m</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const float * </td>
- <td class="paramname"><em>v</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="aa327089f7ad9161d7372094163147005"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixLoad" ref="aa327089f7ad9161d7372094163147005" args="(rs_matrix2x2 *m, const float *v)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsMatrixLoad </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> * </td>
- <td class="paramname"><em>m</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const float * </td>
- <td class="paramname"><em>v</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a5239a3f5f2becd20507d0aa56638ba03"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixLoad" ref="a5239a3f5f2becd20507d0aa56638ba03" args="(rs_matrix4x4 *m, const rs_matrix4x4 *v)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsMatrixLoad </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> * </td>
- <td class="paramname"><em>m</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> * </td>
- <td class="paramname"><em>v</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Set the elements of a matrix from another matrix.</p>
-<p>If the source matrix is smaller than the destination, the rest of the destination is filled with elements of the identity matrix. E.g. loading a <a class="el" href="structrs__matrix2x2.html" title="2x2 float matrix">rs_matrix2x2</a> into a <a class="el" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> will give:</p>
- <table>
- <tr><td>m00</td><td>m01</td><td>0.0</td><td>0.0</td></tr>
- <tr><td>m10</td><td>m11</td><td>0.0</td><td>0.0</td></tr>
- <tr><td>0.0</td><td>0.0</td><td>1.0</td><td>0.0</td></tr>
- <tr><td>0.0</td><td>0.0</td><td>0.0</td><td>1.0</td></tr>
- </table><dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">m</td><td>The matrix to set. </td></tr>
- <tr><td class="paramname">v</td><td>The source matrix. </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a06176acb38405937cb94c835a712a3b3"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixLoad" ref="a06176acb38405937cb94c835a712a3b3" args="(rs_matrix4x4 *m, const rs_matrix3x3 *v)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsMatrixLoad </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> * </td>
- <td class="paramname"><em>m</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> * </td>
- <td class="paramname"><em>v</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a3a3d0f0053720fb4afb3a3eb32e42a82"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixLoad" ref="a3a3d0f0053720fb4afb3a3eb32e42a82" args="(rs_matrix4x4 *m, const rs_matrix2x2 *v)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsMatrixLoad </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> * </td>
- <td class="paramname"><em>m</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> * </td>
- <td class="paramname"><em>v</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a654e5abe095770979d740f7b55382bd0"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixLoad" ref="a654e5abe095770979d740f7b55382bd0" args="(rs_matrix3x3 *m, const rs_matrix3x3 *v)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsMatrixLoad </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> * </td>
- <td class="paramname"><em>m</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> * </td>
- <td class="paramname"><em>v</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a5f3697805c794c9c9f2f8cfdde4b9a44"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixLoad" ref="a5f3697805c794c9c9f2f8cfdde4b9a44" args="(rs_matrix2x2 *m, const rs_matrix2x2 *v)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsMatrixLoad </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> * </td>
- <td class="paramname"><em>m</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> * </td>
- <td class="paramname"><em>v</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="ad25760aaf01e95d0055237afab41bbb3"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixLoadFrustum" ref="ad25760aaf01e95d0055237afab41bbb3" args="(rs_matrix4x4 *m, float left, float right, float bottom, float top, float near, float far)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsMatrixLoadFrustum </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> * </td>
- <td class="paramname"><em>m</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>left</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>right</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>bottom</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>top</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>near</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>far</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Load a frustum projection matrix.</p>
-<p>Constructs a frustum projection matrix, transforming the box identified by the six clipping planes <em>left, right, bottom, top, near, far</em>.</p>
-<p>To apply this projection to a vector, multiply the vector by the created matrix using <a class="el" href="rs__matrix_8rsh.html#a4d9a8bb7c3f5d67b14fa349bdd531d13">rsMatrixMultiply</a>.</p>
-<p>See <a href="https://www.opengl.org/documentation/specs/version2.0/glspec20.pdf">https://www.opengl.org/documentation/specs/version2.0/glspec20.pdf</a></p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">m</td><td>The matrix to set. </td></tr>
- <tr><td class="paramname">left</td><td></td></tr>
- <tr><td class="paramname">right</td><td></td></tr>
- <tr><td class="paramname">bottom</td><td></td></tr>
- <tr><td class="paramname">top</td><td></td></tr>
- <tr><td class="paramname">near</td><td></td></tr>
- <tr><td class="paramname">far</td><td></td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a0ffd9de971cf10d0a663ff565be8d3cc"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixLoadIdentity" ref="a0ffd9de971cf10d0a663ff565be8d3cc" args="(rs_matrix4x4 *m)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsMatrixLoadIdentity </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> * </td>
- <td class="paramname"><em>m</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Set the elements of a matrix to the identity matrix.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">m</td><td>The matrix to set. </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a5b31e83553efa947db2198674d5db043"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixLoadIdentity" ref="a5b31e83553efa947db2198674d5db043" args="(rs_matrix3x3 *m)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsMatrixLoadIdentity </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> * </td>
- <td class="paramname"><em>m</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="ad2954a5ac11d2370227296be89e92471"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixLoadIdentity" ref="ad2954a5ac11d2370227296be89e92471" args="(rs_matrix2x2 *m)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsMatrixLoadIdentity </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> * </td>
- <td class="paramname"><em>m</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a79f14c4c0f5ecc1bbd0bf54da8b653ef"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixLoadMultiply" ref="a79f14c4c0f5ecc1bbd0bf54da8b653ef" args="(rs_matrix4x4 *m, const rs_matrix4x4 *lhs, const rs_matrix4x4 *rhs)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsMatrixLoadMultiply </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> * </td>
- <td class="paramname"><em>m</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> * </td>
- <td class="paramname"><em>lhs</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> * </td>
- <td class="paramname"><em>rhs</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Multiply two matrices.</p>
-<p>Sets <em>m</em> to the matrix product of <em>lhs * rhs</em>.</p>
-<p>To combine two 4x4 transformaton matrices, multiply the second transformation matrix by the first transformation matrix. E.g. to create a transformation matrix that applies the transformation <em>s1</em> followed by <em>s2</em>, call rsMatrixLoadMultiply(&combined, &s2, &s1).</p>
-<dl class="warning"><dt><b>Warning:</b></dt><dd>As of version 21, storing the result back into right matrix is not supported and will result in undefined behavior. Use rsMatrixMulitply instead. E.g. instead of doing rsMatrixLoadMultiply (&m2r, &m2r, &m2l), use rsMatrixMultiply (&m2r, &m2l). rsMatrixLoadMultiply (&m2l, &m2r, &m2l) works as expected.</dd></dl>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">m</td><td>The matrix to set. </td></tr>
- <tr><td class="paramname">lhs</td><td>The left matrix of the product. </td></tr>
- <tr><td class="paramname">rhs</td><td>The right matrix of the product. </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a78872343ea6a5c1a846160ccdc4add52"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixLoadMultiply" ref="a78872343ea6a5c1a846160ccdc4add52" args="(rs_matrix3x3 *m, const rs_matrix3x3 *lhs, const rs_matrix3x3 *rhs)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsMatrixLoadMultiply </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> * </td>
- <td class="paramname"><em>m</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> * </td>
- <td class="paramname"><em>lhs</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> * </td>
- <td class="paramname"><em>rhs</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="ae0dd4755c28fc896626ebf5dc784130f"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixLoadMultiply" ref="ae0dd4755c28fc896626ebf5dc784130f" args="(rs_matrix2x2 *m, const rs_matrix2x2 *lhs, const rs_matrix2x2 *rhs)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsMatrixLoadMultiply </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> * </td>
- <td class="paramname"><em>m</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> * </td>
- <td class="paramname"><em>lhs</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> * </td>
- <td class="paramname"><em>rhs</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a4c59884a0e534dbbcdc5655842732d43"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixLoadOrtho" ref="a4c59884a0e534dbbcdc5655842732d43" args="(rs_matrix4x4 *m, float left, float right, float bottom, float top, float near, float far)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsMatrixLoadOrtho </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> * </td>
- <td class="paramname"><em>m</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>left</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>right</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>bottom</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>top</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>near</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>far</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Load an orthographic projection matrix.</p>
-<p>Constructs an orthographic projection matrix, transforming the box identified by the six clipping planes <em>left, right, bottom, top, near, far</em> into a unit cube with a corner at <em>(-1, -1, -1)</em> and the opposite at <em>(1, 1, 1)</em>.</p>
-<p>To apply this projection to a vector, multiply the vector by the created matrix using <a class="el" href="rs__matrix_8rsh.html#a4d9a8bb7c3f5d67b14fa349bdd531d13">rsMatrixMultiply</a>.</p>
-<p>See <a href="https://en.wikipedia.org/wiki/Orthographic_projection">https://en.wikipedia.org/wiki/Orthographic_projection</a> and <a href="https://www.opengl.org/documentation/specs/version2.0/glspec20.pdf">https://www.opengl.org/documentation/specs/version2.0/glspec20.pdf</a></p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">m</td><td>The matrix to set. </td></tr>
- <tr><td class="paramname">left</td><td></td></tr>
- <tr><td class="paramname">right</td><td></td></tr>
- <tr><td class="paramname">bottom</td><td></td></tr>
- <tr><td class="paramname">top</td><td></td></tr>
- <tr><td class="paramname">near</td><td></td></tr>
- <tr><td class="paramname">far</td><td></td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="aa404c34d7478f2921f7415d2da95d02b"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixLoadPerspective" ref="aa404c34d7478f2921f7415d2da95d02b" args="(rs_matrix4x4 *m, float fovy, float aspect, float near, float far)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsMatrixLoadPerspective </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> * </td>
- <td class="paramname"><em>m</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>fovy</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>aspect</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>near</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>far</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Load a perspective projection matrix.</p>
-<p>Constructs a perspective projection matrix, assuming a symmetrical field of view.</p>
-<p>To apply this projection to a vector, multiply the vector by the created matrix using <a class="el" href="rs__matrix_8rsh.html#a4d9a8bb7c3f5d67b14fa349bdd531d13">rsMatrixMultiply</a>.</p>
-<p>See <a href="https://www.opengl.org/documentation/specs/version2.0/glspec20.pdf">https://www.opengl.org/documentation/specs/version2.0/glspec20.pdf</a></p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">m</td><td>The matrix to set. </td></tr>
- <tr><td class="paramname">fovy</td><td>Field of view, in degrees along the Y axis. </td></tr>
- <tr><td class="paramname">aspect</td><td>Ratio of x / y. </td></tr>
- <tr><td class="paramname">near</td><td>The near clipping plane. </td></tr>
- <tr><td class="paramname">far</td><td>The far clipping plane. </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a268032f3ac6d766b1d7fe72a6cb50464"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixLoadRotate" ref="a268032f3ac6d766b1d7fe72a6cb50464" args="(rs_matrix4x4 *m, float rot, float x, float y, float z)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsMatrixLoadRotate </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> * </td>
- <td class="paramname"><em>m</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>rot</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>x</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>y</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>z</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Load a rotation matrix.</p>
-<p>This function creates a rotation matrix. The axis of rotation is the <em>(x, y, z)</em> vector.</p>
-<p>To rotate a vector, multiply the vector by the created matrix using <a class="el" href="rs__matrix_8rsh.html#a4d9a8bb7c3f5d67b14fa349bdd531d13">rsMatrixMultiply</a>.</p>
-<p>See <a href="http://en.wikipedia.org/wiki/Rotation_matrix">http://en.wikipedia.org/wiki/Rotation_matrix</a> .</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">m</td><td>The matrix to set. </td></tr>
- <tr><td class="paramname">rot</td><td>How much rotation to do, in degrees. </td></tr>
- <tr><td class="paramname">x</td><td>The x component of the vector that is the axis of rotation. </td></tr>
- <tr><td class="paramname">y</td><td>The y component of the vector that is the axis of rotation. </td></tr>
- <tr><td class="paramname">z</td><td>The z component of the vector that is the axis of rotation. </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="acaf51d1f9ad5041ce01fbf8b7c5923fd"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixLoadScale" ref="acaf51d1f9ad5041ce01fbf8b7c5923fd" args="(rs_matrix4x4 *m, float x, float y, float z)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsMatrixLoadScale </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> * </td>
- <td class="paramname"><em>m</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>x</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>y</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>z</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Load a scale matrix.</p>
-<p>This function creates a scaling matrix, where each component of a vector is multiplied by a number. This number can be negative.</p>
-<p>To scale a vector, multiply the vector by the created matrix using <a class="el" href="rs__matrix_8rsh.html#a4d9a8bb7c3f5d67b14fa349bdd531d13">rsMatrixMultiply</a>.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">m</td><td>The matrix to set. </td></tr>
- <tr><td class="paramname">x</td><td>The multiple to scale the x components by. </td></tr>
- <tr><td class="paramname">y</td><td>The multiple to scale the y components by. </td></tr>
- <tr><td class="paramname">z</td><td>The multiple to scale the z components by. </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a1b521c8a3d1260fa732cbf0a71af0e74"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixLoadTranslate" ref="a1b521c8a3d1260fa732cbf0a71af0e74" args="(rs_matrix4x4 *m, float x, float y, float z)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsMatrixLoadTranslate </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> * </td>
- <td class="paramname"><em>m</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>x</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>y</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>z</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Load a translation matrix.</p>
-<p>This function creates a translation matrix, where a number is added to each element of a vector.</p>
-<p>To translate a vector, multiply the vector by the created matrix using <a class="el" href="rs__matrix_8rsh.html#a4d9a8bb7c3f5d67b14fa349bdd531d13">rsMatrixMultiply</a>.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">m</td><td>The matrix to set. </td></tr>
- <tr><td class="paramname">x</td><td>The number to add to each x component. </td></tr>
- <tr><td class="paramname">y</td><td>The number to add to each y component. </td></tr>
- <tr><td class="paramname">z</td><td>The number to add to each z component. </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a97953ab2606900a839e5816c619abe66"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixMultiply" ref="a97953ab2606900a839e5816c619abe66" args="(rs_matrix4x4 *m, const rs_matrix4x4 *rhs)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsMatrixMultiply </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> * </td>
- <td class="paramname"><em>m</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> * </td>
- <td class="paramname"><em>rhs</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Multiply a matrix into another one.</p>
-<p>Sets <em>m</em> to the matrix product <em>m * rhs</em>.</p>
-<p>When combining two 4x4 transformation matrices using this function, the resulting matrix will correspond to performing the <em>rhs</em> transformation first followed by the original <em>m</em> transformation.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">m</td><td>The left matrix of the product and the matrix to be set. </td></tr>
- <tr><td class="paramname">rhs</td><td>The right matrix of the product. </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="ae0b03aeec17ec8b9c5e75f8efb1bdc53"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixMultiply" ref="ae0b03aeec17ec8b9c5e75f8efb1bdc53" args="(rs_matrix3x3 *m, const rs_matrix3x3 *rhs)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsMatrixMultiply </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> * </td>
- <td class="paramname"><em>m</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> * </td>
- <td class="paramname"><em>rhs</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="ab1973ad3efa0ab2d53f466dd9fb190bb"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixMultiply" ref="ab1973ad3efa0ab2d53f466dd9fb190bb" args="(rs_matrix2x2 *m, const rs_matrix2x2 *rhs)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsMatrixMultiply </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> * </td>
- <td class="paramname"><em>m</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> * </td>
- <td class="paramname"><em>rhs</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a47b6abbf32ffaf77bb13d96c3f05779f"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixMultiply" ref="a47b6abbf32ffaf77bb13d96c3f05779f" args="(rs_matrix4x4 *m, float4 in)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">_RS_RUNTIME <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> rsMatrixMultiply </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> * </td>
- <td class="paramname"><em>m</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> </td>
- <td class="paramname"><em>in</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Multiply a vector by a matrix.</p>
-<p>Returns the post-multiplication of the vector by the matrix, ie. <em>m * in</em>.</p>
-<p>When multiplying a <em>float3</em> to a <em><a class="el" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a></em>, the vector is expanded with (1).</p>
-<p>When multiplying a <em>float2</em> to a <em><a class="el" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a></em>, the vector is expanded with (0, 1).</p>
-<p>When multiplying a <em>float2</em> to a <em><a class="el" href="structrs__matrix3x3.html" title="3x3 float matrix">rs_matrix3x3</a></em>, the vector is expanded with (0).</p>
-<p>This function is available in API version 10-13. Starting with API 14, the function takes a const matrix as the first argument.</p>
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a716bc2d29b80eb25388aba3ba8845aef"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixMultiply" ref="a716bc2d29b80eb25388aba3ba8845aef" args="(rs_matrix3x3 *m, float3 in)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">_RS_RUNTIME <a class="el" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> rsMatrixMultiply </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> * </td>
- <td class="paramname"><em>m</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> </td>
- <td class="paramname"><em>in</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a4d9a8bb7c3f5d67b14fa349bdd531d13"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixMultiply" ref="a4d9a8bb7c3f5d67b14fa349bdd531d13" args="(rs_matrix2x2 *m, float2 in)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">_RS_RUNTIME <a class="el" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> rsMatrixMultiply </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> * </td>
- <td class="paramname"><em>m</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> </td>
- <td class="paramname"><em>in</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="ad5ed05ca4880397fb29615e3c6798de1"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixRotate" ref="ad5ed05ca4880397fb29615e3c6798de1" args="(rs_matrix4x4 *m, float rot, float x, float y, float z)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsMatrixRotate </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> * </td>
- <td class="paramname"><em>m</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>rot</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>x</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>y</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>z</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Multiply the matrix <em>m</em> with a rotation matrix.</p>
-<p>This function modifies a transformation matrix to first do a rotation. The axis of rotation is the <em>(x, y, z)</em> vector.</p>
-<p>To apply this combined transformation to a vector, multiply the vector by the created matrix using <a class="el" href="rs__matrix_8rsh.html#a4d9a8bb7c3f5d67b14fa349bdd531d13">rsMatrixMultiply</a>.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">m</td><td>The matrix to modify. </td></tr>
- <tr><td class="paramname">rot</td><td>How much rotation to do, in degrees. </td></tr>
- <tr><td class="paramname">x</td><td>The x component of the vector that is the axis of rotation. </td></tr>
- <tr><td class="paramname">y</td><td>The y component of the vector that is the axis of rotation. </td></tr>
- <tr><td class="paramname">z</td><td>The z component of the vector that is the axis of rotation. </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a94cc6b22bd1a6c07a9a1c1d21afb392c"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixScale" ref="a94cc6b22bd1a6c07a9a1c1d21afb392c" args="(rs_matrix4x4 *m, float x, float y, float z)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsMatrixScale </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> * </td>
- <td class="paramname"><em>m</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>x</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>y</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>z</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Multiply the matrix <em>m</em> with a scaling matrix.</p>
-<p>This function modifies a transformation matrix to first do a scaling. When scaling, each component of a vector is multiplied by a number. This number can be negative.</p>
-<p>To apply this combined transformation to a vector, multiply the vector by the created matrix using <a class="el" href="rs__matrix_8rsh.html#a4d9a8bb7c3f5d67b14fa349bdd531d13">rsMatrixMultiply</a>.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">m</td><td>The matrix to modify. </td></tr>
- <tr><td class="paramname">x</td><td>The multiple to scale the x components by. </td></tr>
- <tr><td class="paramname">y</td><td>The multiple to scale the y components by. </td></tr>
- <tr><td class="paramname">z</td><td>The multiple to scale the z components by. </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="aca88832ed720e301780152c60884393e"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixSet" ref="aca88832ed720e301780152c60884393e" args="(rs_matrix4x4 *m, uint32_t col, uint32_t row, float v)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">_RS_RUNTIME void rsMatrixSet </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> * </td>
- <td class="paramname"><em>m</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
- <td class="paramname"><em>col</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
- <td class="paramname"><em>row</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>v</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Set an element of a matrix.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">m</td><td>The matrix that will be modified. </td></tr>
- <tr><td class="paramname">col</td><td>The zero-based column of the element to be set. </td></tr>
- <tr><td class="paramname">row</td><td>The zero-based row of the element to be set. </td></tr>
- <tr><td class="paramname">v</td><td>The value to set.</td></tr>
- </table>
- </dd>
-</dl>
-<dl class="warning"><dt><b>Warning:</b></dt><dd>The order of the column and row parameters may be unexpected.</dd></dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>void </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a08a247cdf2e70e78310bf04f9ecd5144"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixSet" ref="a08a247cdf2e70e78310bf04f9ecd5144" args="(rs_matrix3x3 *m, uint32_t col, uint32_t row, float v)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">_RS_RUNTIME void rsMatrixSet </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> * </td>
- <td class="paramname"><em>m</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
- <td class="paramname"><em>col</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
- <td class="paramname"><em>row</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>v</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="af9707d7be5945bf55ed53683624176ff"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixSet" ref="af9707d7be5945bf55ed53683624176ff" args="(rs_matrix2x2 *m, uint32_t col, uint32_t row, float v)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">_RS_RUNTIME void rsMatrixSet </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> * </td>
- <td class="paramname"><em>m</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
- <td class="paramname"><em>col</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
- <td class="paramname"><em>row</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>v</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a4df5f9b5bb6044f3c3426f2f58b94405"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixTranslate" ref="a4df5f9b5bb6044f3c3426f2f58b94405" args="(rs_matrix4x4 *m, float x, float y, float z)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsMatrixTranslate </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> * </td>
- <td class="paramname"><em>m</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>x</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>y</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>z</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Multiply the matrix <em>m</em> with a translation matrix.</p>
-<p>This function modifies a transformation matrix to first do a translation. When translating, a number is added to each component of a vector.</p>
-<p>To apply this combined transformation to a vector, multiply the vector by the created matrix using <a class="el" href="rs__matrix_8rsh.html#a4d9a8bb7c3f5d67b14fa349bdd531d13">rsMatrixMultiply</a>.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">m</td><td>The matrix to modify. </td></tr>
- <tr><td class="paramname">x</td><td>The number to add to each x component. </td></tr>
- <tr><td class="paramname">y</td><td>The number to add to each y component. </td></tr>
- <tr><td class="paramname">z</td><td>The number to add to each z component. </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a88095c70f1550c760844b3e32e41a31a"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixTranspose" ref="a88095c70f1550c760844b3e32e41a31a" args="(rs_matrix4x4 *m)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsMatrixTranspose </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> * </td>
- <td class="paramname"><em>m</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Transpose the matrix m in place.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">m</td><td>The matrix to transpose. </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="ac52acb31a705f6c68af8bddea0e79969"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixTranspose" ref="ac52acb31a705f6c68af8bddea0e79969" args="(rs_matrix3x3 *m)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsMatrixTranspose </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a> * </td>
- <td class="paramname"><em>m</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a49164dd4d4e85b212196028b1fd89dc1"></a><!-- doxytag: member="rs_matrix.rsh::rsMatrixTranspose" ref="a49164dd4d4e85b212196028b1fd89dc1" args="(rs_matrix2x2 *m)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsMatrixTranspose </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a> * </td>
- <td class="paramname"><em>m</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/rs__matrix_8rsh_source.html b/docs/html/reference/renderscript/rs__matrix_8rsh_source.html
deleted file mode 100644
index 77144bd..0000000
--- a/docs/html/reference/renderscript/rs__matrix_8rsh_source.html
+++ /dev/null
@@ -1,172 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>frameworks/rs/scriptc/rs_matrix.rsh Source File</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
- <div id="navrow1" class="tabs">
- <ul class="tablist">
- <li><a href="index.html"><span>Overview</span></a></li>
- <li class="current"><a href="globals.html"><span>Globals</span></a></li>
- <li><a href="annotated.html"><span>Structs</span></a></li>
- </ul>
- </div>
-<div class="header">
- <div class="headertitle">
-<div class="title">frameworks/rs/scriptc/rs_matrix.rsh</div> </div>
-</div>
-<div class="contents">
-<a href="rs__matrix_8rsh.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * Copyright (C) 2011 The Android Open Source Project</span>
-<a name="l00003"></a>00003 <span class="comment"> *</span>
-<a name="l00004"></a>00004 <span class="comment"> * Licensed under the Apache License, Version 2.0 (the "License");</span>
-<a name="l00005"></a>00005 <span class="comment"> * you may not use this file except in compliance with the License.</span>
-<a name="l00006"></a>00006 <span class="comment"> * You may obtain a copy of the License at</span>
-<a name="l00007"></a>00007 <span class="comment"> *</span>
-<a name="l00008"></a>00008 <span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span>
-<a name="l00011"></a>00011 <span class="comment"> * distributed under the License is distributed on an "AS IS" BASIS,</span>
-<a name="l00012"></a>00012 <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
-<a name="l00013"></a>00013 <span class="comment"> * See the License for the specific language governing permissions and</span>
-<a name="l00014"></a>00014 <span class="comment"> * limitations under the License.</span>
-<a name="l00015"></a>00015 <span class="comment"> */</span>
-<a name="l00016"></a>00016
-<a name="l00050"></a>00050 <span class="preprocessor">#ifndef __RS_MATRIX_RSH__</span>
-<a name="l00051"></a>00051 <span class="preprocessor"></span><span class="preprocessor">#define __RS_MATRIX_RSH__</span>
-<a name="l00052"></a>00052 <span class="preprocessor"></span>
-<a name="l00066"></a>00066 _RS_RUNTIME <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00067"></a>00067 <a class="code" href="rs__matrix_8rsh.html#aca88832ed720e301780152c60884393e">rsMatrixSet</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> col, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> row, <span class="keywordtype">float</span> v);
-<a name="l00071"></a>00071 _RS_RUNTIME <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00072"></a>00072 <a class="code" href="rs__matrix_8rsh.html#aca88832ed720e301780152c60884393e">rsMatrixSet</a>(<a class="code" href="structrs__matrix3x3.html" title="3x3 float matrix">rs_matrix3x3</a> *m, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> col, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> row, <span class="keywordtype">float</span> v);
-<a name="l00076"></a>00076 _RS_RUNTIME <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00077"></a>00077 <a class="code" href="rs__matrix_8rsh.html#aca88832ed720e301780152c60884393e">rsMatrixSet</a>(<a class="code" href="structrs__matrix2x2.html" title="2x2 float matrix">rs_matrix2x2</a> *m, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> col, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> row, <span class="keywordtype">float</span> v);
-<a name="l00078"></a>00078
-<a name="l00091"></a>00091 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable))
-<a name="l00092"></a>00092 <a class="code" href="rs__matrix_8rsh.html#af26fdbf8b8f0ed5d1b53f62b2aef5110">rsMatrixGet</a>(const <a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> col, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> row);
-<a name="l00096"></a>00096 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable))
-<a name="l00097"></a>00097 <a class="code" href="rs__matrix_8rsh.html#af26fdbf8b8f0ed5d1b53f62b2aef5110">rsMatrixGet</a>(const <a class="code" href="structrs__matrix3x3.html" title="3x3 float matrix">rs_matrix3x3</a> *m, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> col, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> row);
-<a name="l00101"></a>00101 _RS_RUNTIME <span class="keywordtype">float</span> __attribute__((overloadable))
-<a name="l00102"></a>00102 <a class="code" href="rs__matrix_8rsh.html#af26fdbf8b8f0ed5d1b53f62b2aef5110">rsMatrixGet</a>(const <a class="code" href="structrs__matrix2x2.html" title="2x2 float matrix">rs_matrix2x2</a> *m, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> col, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> row);
-<a name="l00103"></a>00103
-<a name="l00109"></a>00109 extern <span class="keywordtype">void</span> __attribute__((overloadable)) <a class="code" href="rs__matrix_8rsh.html#a0ffd9de971cf10d0a663ff565be8d3cc">rsMatrixLoadIdentity</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m);
-<a name="l00113"></a>00113 extern <span class="keywordtype">void</span> __attribute__((overloadable)) <a class="code" href="rs__matrix_8rsh.html#a0ffd9de971cf10d0a663ff565be8d3cc">rsMatrixLoadIdentity</a>(<a class="code" href="structrs__matrix3x3.html" title="3x3 float matrix">rs_matrix3x3</a> *m);
-<a name="l00117"></a>00117 extern <span class="keywordtype">void</span> __attribute__((overloadable)) <a class="code" href="rs__matrix_8rsh.html#a0ffd9de971cf10d0a663ff565be8d3cc">rsMatrixLoadIdentity</a>(<a class="code" href="structrs__matrix2x2.html" title="2x2 float matrix">rs_matrix2x2</a> *m);
-<a name="l00118"></a>00118
-<a name="l00130"></a>00130 extern <span class="keywordtype">void</span> __attribute__((overloadable)) <a class="code" href="rs__matrix_8rsh.html#ac380c4117e047da494a74f0dad20fab3">rsMatrixLoad</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m, const <span class="keywordtype">float</span> *v);
-<a name="l00134"></a>00134 extern <span class="keywordtype">void</span> __attribute__((overloadable)) <a class="code" href="rs__matrix_8rsh.html#ac380c4117e047da494a74f0dad20fab3">rsMatrixLoad</a>(<a class="code" href="structrs__matrix3x3.html" title="3x3 float matrix">rs_matrix3x3</a> *m, const <span class="keywordtype">float</span> *v);
-<a name="l00138"></a>00138 extern <span class="keywordtype">void</span> __attribute__((overloadable)) <a class="code" href="rs__matrix_8rsh.html#ac380c4117e047da494a74f0dad20fab3">rsMatrixLoad</a>(<a class="code" href="structrs__matrix2x2.html" title="2x2 float matrix">rs_matrix2x2</a> *m, const <span class="keywordtype">float</span> *v);
-<a name="l00156"></a>00156 extern <span class="keywordtype">void</span> __attribute__((overloadable)) <a class="code" href="rs__matrix_8rsh.html#ac380c4117e047da494a74f0dad20fab3">rsMatrixLoad</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m, const <a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *v);
-<a name="l00160"></a>00160 extern <span class="keywordtype">void</span> __attribute__((overloadable)) <a class="code" href="rs__matrix_8rsh.html#ac380c4117e047da494a74f0dad20fab3">rsMatrixLoad</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m, const <a class="code" href="structrs__matrix3x3.html" title="3x3 float matrix">rs_matrix3x3</a> *v);
-<a name="l00164"></a>00164 extern <span class="keywordtype">void</span> __attribute__((overloadable)) <a class="code" href="rs__matrix_8rsh.html#ac380c4117e047da494a74f0dad20fab3">rsMatrixLoad</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m, const <a class="code" href="structrs__matrix2x2.html" title="2x2 float matrix">rs_matrix2x2</a> *v);
-<a name="l00168"></a>00168 extern <span class="keywordtype">void</span> __attribute__((overloadable)) <a class="code" href="rs__matrix_8rsh.html#ac380c4117e047da494a74f0dad20fab3">rsMatrixLoad</a>(<a class="code" href="structrs__matrix3x3.html" title="3x3 float matrix">rs_matrix3x3</a> *m, const <a class="code" href="structrs__matrix3x3.html" title="3x3 float matrix">rs_matrix3x3</a> *v);
-<a name="l00172"></a>00172 extern <span class="keywordtype">void</span> __attribute__((overloadable)) <a class="code" href="rs__matrix_8rsh.html#ac380c4117e047da494a74f0dad20fab3">rsMatrixLoad</a>(<a class="code" href="structrs__matrix2x2.html" title="2x2 float matrix">rs_matrix2x2</a> *m, const <a class="code" href="structrs__matrix2x2.html" title="2x2 float matrix">rs_matrix2x2</a> *v);
-<a name="l00173"></a>00173
-<a name="l00191"></a>00191 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00192"></a>00192 <a class="code" href="rs__matrix_8rsh.html#a268032f3ac6d766b1d7fe72a6cb50464">rsMatrixLoadRotate</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m, <span class="keywordtype">float</span> rot, <span class="keywordtype">float</span> x, <span class="keywordtype">float</span> y, <span class="keywordtype">float</span> z);
-<a name="l00193"></a>00193
-<a name="l00208"></a>00208 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00209"></a>00209 <a class="code" href="rs__matrix_8rsh.html#acaf51d1f9ad5041ce01fbf8b7c5923fd">rsMatrixLoadScale</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m, <span class="keywordtype">float</span> x, <span class="keywordtype">float</span> y, <span class="keywordtype">float</span> z);
-<a name="l00210"></a>00210
-<a name="l00225"></a>00225 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00226"></a>00226 <a class="code" href="rs__matrix_8rsh.html#a1b521c8a3d1260fa732cbf0a71af0e74">rsMatrixLoadTranslate</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m, <span class="keywordtype">float</span> x, <span class="keywordtype">float</span> y, <span class="keywordtype">float</span> z);
-<a name="l00227"></a>00227
-<a name="l00247"></a>00247 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00248"></a>00248 <a class="code" href="rs__matrix_8rsh.html#a79f14c4c0f5ecc1bbd0bf54da8b653ef">rsMatrixLoadMultiply</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m, const <a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *lhs, const <a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *rhs);
-<a name="l00252"></a>00252 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00253"></a>00253 <a class="code" href="rs__matrix_8rsh.html#a79f14c4c0f5ecc1bbd0bf54da8b653ef">rsMatrixLoadMultiply</a>(<a class="code" href="structrs__matrix3x3.html" title="3x3 float matrix">rs_matrix3x3</a> *m, const <a class="code" href="structrs__matrix3x3.html" title="3x3 float matrix">rs_matrix3x3</a> *lhs, const <a class="code" href="structrs__matrix3x3.html" title="3x3 float matrix">rs_matrix3x3</a> *rhs);
-<a name="l00257"></a>00257 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00258"></a>00258 <a class="code" href="rs__matrix_8rsh.html#a79f14c4c0f5ecc1bbd0bf54da8b653ef">rsMatrixLoadMultiply</a>(<a class="code" href="structrs__matrix2x2.html" title="2x2 float matrix">rs_matrix2x2</a> *m, const <a class="code" href="structrs__matrix2x2.html" title="2x2 float matrix">rs_matrix2x2</a> *lhs, const <a class="code" href="structrs__matrix2x2.html" title="2x2 float matrix">rs_matrix2x2</a> *rhs);
-<a name="l00259"></a>00259
-<a name="l00272"></a>00272 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00273"></a>00273 <a class="code" href="rs__matrix_8rsh.html#a97953ab2606900a839e5816c619abe66">rsMatrixMultiply</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m, const <a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *rhs);
-<a name="l00277"></a>00277 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00278"></a>00278 <a class="code" href="rs__matrix_8rsh.html#a97953ab2606900a839e5816c619abe66">rsMatrixMultiply</a>(<a class="code" href="structrs__matrix3x3.html" title="3x3 float matrix">rs_matrix3x3</a> *m, const <a class="code" href="structrs__matrix3x3.html" title="3x3 float matrix">rs_matrix3x3</a> *rhs);
-<a name="l00282"></a>00282 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00283"></a>00283 <a class="code" href="rs__matrix_8rsh.html#a97953ab2606900a839e5816c619abe66">rsMatrixMultiply</a>(<a class="code" href="structrs__matrix2x2.html" title="2x2 float matrix">rs_matrix2x2</a> *m, const <a class="code" href="structrs__matrix2x2.html" title="2x2 float matrix">rs_matrix2x2</a> *rhs);
-<a name="l00284"></a>00284
-<a name="l00300"></a>00300 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00301"></a>00301 <a class="code" href="rs__matrix_8rsh.html#ad5ed05ca4880397fb29615e3c6798de1">rsMatrixRotate</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m, <span class="keywordtype">float</span> rot, <span class="keywordtype">float</span> x, <span class="keywordtype">float</span> y, <span class="keywordtype">float</span> z);
-<a name="l00302"></a>00302
-<a name="l00318"></a>00318 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00319"></a>00319 <a class="code" href="rs__matrix_8rsh.html#a94cc6b22bd1a6c07a9a1c1d21afb392c">rsMatrixScale</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m, <span class="keywordtype">float</span> x, <span class="keywordtype">float</span> y, <span class="keywordtype">float</span> z);
-<a name="l00320"></a>00320
-<a name="l00336"></a>00336 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00337"></a>00337 <a class="code" href="rs__matrix_8rsh.html#a4df5f9b5bb6044f3c3426f2f58b94405">rsMatrixTranslate</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m, <span class="keywordtype">float</span> x, <span class="keywordtype">float</span> y, <span class="keywordtype">float</span> z);
-<a name="l00338"></a>00338
-<a name="l00361"></a>00361 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00362"></a>00362 <a class="code" href="rs__matrix_8rsh.html#a4c59884a0e534dbbcdc5655842732d43">rsMatrixLoadOrtho</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m, <span class="keywordtype">float</span> left, <span class="keywordtype">float</span> right, <span class="keywordtype">float</span> bottom, <span class="keywordtype">float</span> top, <span class="keywordtype">float</span> near, <span class="keywordtype">float</span> far);
-<a name="l00363"></a>00363
-<a name="l00384"></a>00384 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00385"></a>00385 <a class="code" href="rs__matrix_8rsh.html#ad25760aaf01e95d0055237afab41bbb3">rsMatrixLoadFrustum</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m, <span class="keywordtype">float</span> left, <span class="keywordtype">float</span> right, <span class="keywordtype">float</span> bottom, <span class="keywordtype">float</span> top, <span class="keywordtype">float</span> near, <span class="keywordtype">float</span> far);
-<a name="l00386"></a>00386
-<a name="l00403"></a>00403 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00404"></a>00404 <a class="code" href="rs__matrix_8rsh.html#aa404c34d7478f2921f7415d2da95d02b">rsMatrixLoadPerspective</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a>* m, <span class="keywordtype">float</span> fovy, <span class="keywordtype">float</span> aspect, <span class="keywordtype">float</span> near, <span class="keywordtype">float</span> far);
-<a name="l00405"></a>00405
-<a name="l00406"></a>00406 <span class="preprocessor">#if !defined(RS_VERSION) || (RS_VERSION < 14)</span>
-<a name="l00407"></a>00407 <span class="preprocessor"></span>
-<a name="l00421"></a>00421 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> __attribute__((overloadable))
-<a name="l00422"></a>00422 <a class="code" href="rs__matrix_8rsh.html#a97953ab2606900a839e5816c619abe66">rsMatrixMultiply</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m, <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> in);
-<a name="l00423"></a>00423
-<a name="l00427"></a>00427 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> __attribute__((overloadable))
-<a name="l00428"></a>00428 <a class="code" href="rs__matrix_8rsh.html#a97953ab2606900a839e5816c619abe66">rsMatrixMultiply</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m, <a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> in);
-<a name="l00429"></a>00429
-<a name="l00433"></a>00433 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> __attribute__((overloadable))
-<a name="l00434"></a>00434 <a class="code" href="rs__matrix_8rsh.html#a97953ab2606900a839e5816c619abe66">rsMatrixMultiply</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m, <a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> in);
-<a name="l00435"></a>00435
-<a name="l00439"></a>00439 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> __attribute__((overloadable))
-<a name="l00440"></a>00440 <a class="code" href="rs__matrix_8rsh.html#a97953ab2606900a839e5816c619abe66">rsMatrixMultiply</a>(<a class="code" href="structrs__matrix3x3.html" title="3x3 float matrix">rs_matrix3x3</a> *m, <a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> in);
-<a name="l00441"></a>00441
-<a name="l00445"></a>00445 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> __attribute__((overloadable))
-<a name="l00446"></a>00446 <a class="code" href="rs__matrix_8rsh.html#a97953ab2606900a839e5816c619abe66">rsMatrixMultiply</a>(<a class="code" href="structrs__matrix3x3.html" title="3x3 float matrix">rs_matrix3x3</a> *m, <a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> in);
-<a name="l00447"></a>00447
-<a name="l00451"></a>00451 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> __attribute__((overloadable))
-<a name="l00452"></a>00452 <a class="code" href="rs__matrix_8rsh.html#a97953ab2606900a839e5816c619abe66">rsMatrixMultiply</a>(<a class="code" href="structrs__matrix2x2.html" title="2x2 float matrix">rs_matrix2x2</a> *m, <a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> in);
-<a name="l00453"></a>00453 <span class="preprocessor">#else</span>
-<a name="l00454"></a>00454 <span class="preprocessor"></span>
-<a name="l00467"></a>00467 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> __attribute__((overloadable))
-<a name="l00468"></a>00468 <a class="code" href="rs__matrix_8rsh.html#a97953ab2606900a839e5816c619abe66">rsMatrixMultiply</a>(const <a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m, <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> in);
-<a name="l00469"></a>00469
-<a name="l00473"></a>00473 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> __attribute__((overloadable))
-<a name="l00474"></a>00474 <a class="code" href="rs__matrix_8rsh.html#a97953ab2606900a839e5816c619abe66">rsMatrixMultiply</a>(const <a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m, <a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> in);
-<a name="l00475"></a>00475
-<a name="l00479"></a>00479 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> __attribute__((overloadable))
-<a name="l00480"></a>00480 <a class="code" href="rs__matrix_8rsh.html#a97953ab2606900a839e5816c619abe66">rsMatrixMultiply</a>(const <a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m, <a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> in);
-<a name="l00481"></a>00481
-<a name="l00485"></a>00485 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> __attribute__((overloadable))
-<a name="l00486"></a>00486 <a class="code" href="rs__matrix_8rsh.html#a97953ab2606900a839e5816c619abe66">rsMatrixMultiply</a>(const <a class="code" href="structrs__matrix3x3.html" title="3x3 float matrix">rs_matrix3x3</a> *m, <a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> in);
-<a name="l00487"></a>00487
-<a name="l00491"></a>00491 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> __attribute__((overloadable))
-<a name="l00492"></a>00492 <a class="code" href="rs__matrix_8rsh.html#a97953ab2606900a839e5816c619abe66">rsMatrixMultiply</a>(const <a class="code" href="structrs__matrix3x3.html" title="3x3 float matrix">rs_matrix3x3</a> *m, <a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> in);
-<a name="l00493"></a>00493
-<a name="l00497"></a>00497 _RS_RUNTIME <a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> __attribute__((overloadable))
-<a name="l00498"></a>00498 <a class="code" href="rs__matrix_8rsh.html#a97953ab2606900a839e5816c619abe66">rsMatrixMultiply</a>(const <a class="code" href="structrs__matrix2x2.html" title="2x2 float matrix">rs_matrix2x2</a> *m, <a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> in);
-<a name="l00499"></a>00499 <span class="preprocessor">#endif</span>
-<a name="l00500"></a>00500 <span class="preprocessor"></span>
-<a name="l00501"></a>00501
-<a name="l00509"></a>00509 <span class="keyword">extern</span> <span class="keywordtype">bool</span> __attribute__((overloadable)) <a class="code" href="rs__matrix_8rsh.html#a00b6a334ba5ac94d84850f22ec9f4de5">rsMatrixInverse</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m);
-<a name="l00510"></a>00510
-<a name="l00519"></a>00519 extern <span class="keywordtype">bool</span> __attribute__((overloadable)) <a class="code" href="rs__matrix_8rsh.html#ac05080d52da2d99a759ef34fa0655e82">rsMatrixInverseTranspose</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m);
-<a name="l00520"></a>00520
-<a name="l00526"></a>00526 extern <span class="keywordtype">void</span> __attribute__((overloadable)) <a class="code" href="rs__matrix_8rsh.html#a88095c70f1550c760844b3e32e41a31a">rsMatrixTranspose</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m);
-<a name="l00530"></a>00530 extern <span class="keywordtype">void</span> __attribute__((overloadable)) <a class="code" href="rs__matrix_8rsh.html#a88095c70f1550c760844b3e32e41a31a">rsMatrixTranspose</a>(<a class="code" href="structrs__matrix3x3.html" title="3x3 float matrix">rs_matrix3x3</a> *m);
-<a name="l00534"></a>00534 extern <span class="keywordtype">void</span> __attribute__((overloadable)) <a class="code" href="rs__matrix_8rsh.html#a88095c70f1550c760844b3e32e41a31a">rsMatrixTranspose</a>(<a class="code" href="structrs__matrix2x2.html" title="2x2 float matrix">rs_matrix2x2</a> *m);
-<a name="l00535"></a>00535
-<a name="l00536"></a>00536
-<a name="l00537"></a>00537 <span class="preprocessor">#endif</span>
-</pre></div></div>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/rs__mesh_8rsh.html b/docs/html/reference/renderscript/rs__mesh_8rsh.html
deleted file mode 100644
index 82824adc..0000000
--- a/docs/html/reference/renderscript/rs__mesh_8rsh.html
+++ /dev/null
@@ -1,208 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_mesh.rsh File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
- <div id="navrow1" class="tabs">
- <ul class="tablist">
- <li><a href="index.html"><span>Overview</span></a></li>
- <li class="current"><a href="globals.html"><span>Globals</span></a></li>
- <li><a href="annotated.html"><span>Structs</span></a></li>
- </ul>
- </div>
-</div>
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle">
-<div class="title">/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_mesh.rsh File Reference</div> </div>
-</div>
-<div class="contents">
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__mesh_8rsh.html#a7578d6d93154ac881715ab511449fab9">rsgMeshGetVertexAllocationCount</a> (<a class="el" href="structrs__mesh.html">rs_mesh</a> m)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__mesh_8rsh.html#ae0a0178cc02508517013486be4500d7f">rsgMeshGetPrimitiveCount</a> (<a class="el" href="structrs__mesh.html">rs_mesh</a> m)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="structrs__allocation.html">rs_allocation</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__mesh_8rsh.html#a43e1d84147176cb0a1659552fa8da49f">rsgMeshGetVertexAllocation</a> (<a class="el" href="structrs__mesh.html">rs_mesh</a> m, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> index)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="structrs__allocation.html">rs_allocation</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__mesh_8rsh.html#a05257c9252e7804397d6a6f7549bae5a">rsgMeshGetIndexAllocation</a> (<a class="el" href="structrs__mesh.html">rs_mesh</a> m, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> index)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951">rs_primitive</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__mesh_8rsh.html#af467f1c21cc9221071334f8234c29466">rsgMeshGetPrimitive</a> (<a class="el" href="structrs__mesh.html">rs_mesh</a> m, <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> index)</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Mesh routines. </p>
-
-<p>Definition in file <a class="el" href="rs__mesh_8rsh_source.html">rs_mesh.rsh</a>.</p>
-</div><hr/><h2>Function Documentation</h2>
-<a class="anchor" id="a05257c9252e7804397d6a6f7549bae5a"></a><!-- doxytag: member="rs_mesh.rsh::rsgMeshGetIndexAllocation" ref="a05257c9252e7804397d6a6f7549bae5a" args="(rs_mesh m, uint32_t index)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="structrs__allocation.html">rs_allocation</a> rsgMeshGetIndexAllocation </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__mesh.html">rs_mesh</a> </td>
- <td class="paramname"><em>m</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
- <td class="paramname"><em>index</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Returns an allocation containing index data or a null allocation if only the primitive is specified</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">m</td><td>mesh to get data from </td></tr>
- <tr><td class="paramname">index</td><td>index of the index allocation </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>allocation containing index data </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="af467f1c21cc9221071334f8234c29466"></a><!-- doxytag: member="rs_mesh.rsh::rsgMeshGetPrimitive" ref="af467f1c21cc9221071334f8234c29466" args="(rs_mesh m, uint32_t index)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951">rs_primitive</a> rsgMeshGetPrimitive </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__mesh.html">rs_mesh</a> </td>
- <td class="paramname"><em>m</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
- <td class="paramname"><em>index</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Returns the primitive describing how a part of the mesh is rendered</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">m</td><td>mesh to get data from </td></tr>
- <tr><td class="paramname">index</td><td>index of the primitive </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>primitive describing how the mesh is rendered </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="ae0a0178cc02508517013486be4500d7f"></a><!-- doxytag: member="rs_mesh.rsh::rsgMeshGetPrimitiveCount" ref="ae0a0178cc02508517013486be4500d7f" args="(rs_mesh m)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> rsgMeshGetPrimitiveCount </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__mesh.html">rs_mesh</a> </td>
- <td class="paramname"><em>m</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Meshes could have multiple index sets, this function returns the number.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">m</td><td>mesh to get data from </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>number of primitive groups in the mesh. This would include simple primitives as well as allocations containing index data </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a43e1d84147176cb0a1659552fa8da49f"></a><!-- doxytag: member="rs_mesh.rsh::rsgMeshGetVertexAllocation" ref="a43e1d84147176cb0a1659552fa8da49f" args="(rs_mesh m, uint32_t index)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="structrs__allocation.html">rs_allocation</a> rsgMeshGetVertexAllocation </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__mesh.html">rs_mesh</a> </td>
- <td class="paramname"><em>m</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td>
- <td class="paramname"><em>index</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Returns an allocation that is part of the mesh and contains vertex data, e.g. positions, normals, texcoords</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">m</td><td>mesh to get data from </td></tr>
- <tr><td class="paramname">index</td><td>index of the vertex allocation </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>allocation containing vertex data </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a7578d6d93154ac881715ab511449fab9"></a><!-- doxytag: member="rs_mesh.rsh::rsgMeshGetVertexAllocationCount" ref="a7578d6d93154ac881715ab511449fab9" args="(rs_mesh m)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> rsgMeshGetVertexAllocationCount </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__mesh.html">rs_mesh</a> </td>
- <td class="paramname"><em>m</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Returns the number of allocations in the mesh that contain vertex data</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">m</td><td>mesh to get data from </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>number of allocations in the mesh that contain vertex data </dd></dl>
-
-</div>
-</div>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/rs__mesh_8rsh_source.html b/docs/html/reference/renderscript/rs__mesh_8rsh_source.html
deleted file mode 100644
index f9416c8..0000000
--- a/docs/html/reference/renderscript/rs__mesh_8rsh_source.html
+++ /dev/null
@@ -1,75 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_mesh.rsh Source File</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
- <div id="navrow1" class="tabs">
- <ul class="tablist">
- <li><a href="index.html"><span>Overview</span></a></li>
- <li class="current"><a href="globals.html"><span>Globals</span></a></li>
- <li><a href="annotated.html"><span>Structs</span></a></li>
- </ul>
- </div>
-<div class="header">
- <div class="headertitle">
-<div class="title">/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_mesh.rsh</div> </div>
-</div>
-<div class="contents">
-<a href="rs__mesh_8rsh.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * Copyright (C) 2012 The Android Open Source Project</span>
-<a name="l00003"></a>00003 <span class="comment"> *</span>
-<a name="l00004"></a>00004 <span class="comment"> * Licensed under the Apache License, Version 2.0 (the "License");</span>
-<a name="l00005"></a>00005 <span class="comment"> * you may not use this file except in compliance with the License.</span>
-<a name="l00006"></a>00006 <span class="comment"> * You may obtain a copy of the License at</span>
-<a name="l00007"></a>00007 <span class="comment"> *</span>
-<a name="l00008"></a>00008 <span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span>
-<a name="l00011"></a>00011 <span class="comment"> * distributed under the License is distributed on an "AS IS" BASIS,</span>
-<a name="l00012"></a>00012 <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
-<a name="l00013"></a>00013 <span class="comment"> * See the License for the specific language governing permissions and</span>
-<a name="l00014"></a>00014 <span class="comment"> * limitations under the License.</span>
-<a name="l00015"></a>00015 <span class="comment"> */</span>
-<a name="l00016"></a>00016
-<a name="l00023"></a>00023 <span class="preprocessor">#ifndef __RS_MESH_RSH__</span>
-<a name="l00024"></a>00024 <span class="preprocessor"></span><span class="preprocessor">#define __RS_MESH_RSH__</span>
-<a name="l00025"></a>00025 <span class="preprocessor"></span>
-<a name="l00026"></a>00026 <span class="comment">// New API's</span>
-<a name="l00027"></a>00027 <span class="preprocessor">#if (defined(RS_VERSION) && (RS_VERSION >= 16))</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span>
-<a name="l00037"></a>00037 <span class="keyword">extern</span> <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> __attribute__((overloadable))
-<a name="l00038"></a>00038 <a class="code" href="rs__mesh_8rsh.html#a7578d6d93154ac881715ab511449fab9">rsgMeshGetVertexAllocationCount</a>(<a class="code" href="structrs__mesh.html" title="Opaque handle to a RenderScript mesh object.">rs_mesh</a> m);
-<a name="l00039"></a>00039
-<a name="l00049"></a>00049 extern <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> __attribute__((overloadable))
-<a name="l00050"></a>00050 <a class="code" href="rs__mesh_8rsh.html#ae0a0178cc02508517013486be4500d7f">rsgMeshGetPrimitiveCount</a>(<a class="code" href="structrs__mesh.html" title="Opaque handle to a RenderScript mesh object.">rs_mesh</a> m);
-<a name="l00051"></a>00051
-<a name="l00060"></a>00060 extern <a class="code" href="structrs__allocation.html" title="Opaque handle to a RenderScript allocation.">rs_allocation</a> __attribute__((overloadable))
-<a name="l00061"></a>00061 <a class="code" href="rs__mesh_8rsh.html#a43e1d84147176cb0a1659552fa8da49f">rsgMeshGetVertexAllocation</a>(<a class="code" href="structrs__mesh.html" title="Opaque handle to a RenderScript mesh object.">rs_mesh</a> m, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> index);
-<a name="l00062"></a>00062
-<a name="l00071"></a>00071 extern <a class="code" href="structrs__allocation.html" title="Opaque handle to a RenderScript allocation.">rs_allocation</a> __attribute__((overloadable))
-<a name="l00072"></a>00072 <a class="code" href="rs__mesh_8rsh.html#a05257c9252e7804397d6a6f7549bae5a">rsgMeshGetIndexAllocation</a>(<a class="code" href="structrs__mesh.html" title="Opaque handle to a RenderScript mesh object.">rs_mesh</a> m, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> index);
-<a name="l00073"></a>00073
-<a name="l00082"></a>00082 extern <a class="code" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951">rs_primitive</a> __attribute__((overloadable))
-<a name="l00083"></a>00083 <a class="code" href="rs__mesh_8rsh.html#af467f1c21cc9221071334f8234c29466">rsgMeshGetPrimitive</a>(<a class="code" href="structrs__mesh.html" title="Opaque handle to a RenderScript mesh object.">rs_mesh</a> m, <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> index);
-<a name="l00084"></a>00084
-<a name="l00085"></a>00085 <span class="preprocessor">#endif // (defined(RS_VERSION) && (RS_VERSION >= 16))</span>
-<a name="l00086"></a>00086 <span class="preprocessor"></span>
-<a name="l00087"></a>00087 <span class="preprocessor">#endif // __RS_MESH_RSH__</span>
-<a name="l00088"></a>00088 <span class="preprocessor"></span>
-</pre></div></div>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/rs__object_8rsh.html b/docs/html/reference/renderscript/rs__object_8rsh.html
deleted file mode 100644
index 6ace343..0000000
--- a/docs/html/reference/renderscript/rs__object_8rsh.html
+++ /dev/null
@@ -1,858 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_object.rsh File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
- <div id="navrow1" class="tabs">
- <ul class="tablist">
- <li><a href="index.html"><span>Overview</span></a></li>
- <li class="current"><a href="globals.html"><span>Globals</span></a></li>
- <li><a href="annotated.html"><span>Structs</span></a></li>
- </ul>
- </div>
-</div>
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle">
-<div class="title">/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_object.rsh File Reference</div> </div>
-</div>
-<div class="contents">
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#af6983a1578621ce283acc07f876cda62">rsSetObject</a> (<a class="el" href="structrs__element.html">rs_element</a> *dst, <a class="el" href="structrs__element.html">rs_element</a> src)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#ab1c6d0672b6b88add70a98e627eeb7ae">rsSetObject</a> (<a class="el" href="structrs__type.html">rs_type</a> *dst, <a class="el" href="structrs__type.html">rs_type</a> src)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#af3446b1b9c2e4b600cdc8d828f3dbb59">rsSetObject</a> (<a class="el" href="structrs__allocation.html">rs_allocation</a> *dst, <a class="el" href="structrs__allocation.html">rs_allocation</a> src)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#a5132f90b4aaf8d2e35e6ad021fb08175">rsSetObject</a> (<a class="el" href="structrs__sampler.html">rs_sampler</a> *dst, <a class="el" href="structrs__sampler.html">rs_sampler</a> src)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#a9dfc520ed267ac9733760bc628a93cae">rsSetObject</a> (<a class="el" href="structrs__script.html">rs_script</a> *dst, <a class="el" href="structrs__script.html">rs_script</a> src)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#a9c2f648c1e68018621a3123545a21d83">rsSetObject</a> (<a class="el" href="structrs__path.html">rs_path</a> *dst, <a class="el" href="structrs__path.html">rs_path</a> src)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#a4d6368cf71d6fd2e55efbe23af6cfd7c">rsSetObject</a> (<a class="el" href="structrs__mesh.html">rs_mesh</a> *dst, <a class="el" href="structrs__mesh.html">rs_mesh</a> src)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#a8135bceeb7b3ec8bf9a49d04e39bd565">rsSetObject</a> (<a class="el" href="structrs__program__fragment.html">rs_program_fragment</a> *dst, <a class="el" href="structrs__program__fragment.html">rs_program_fragment</a> src)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#a5512c023d40e416bea709f8d8caf9674">rsSetObject</a> (<a class="el" href="structrs__program__vertex.html">rs_program_vertex</a> *dst, <a class="el" href="structrs__program__vertex.html">rs_program_vertex</a> src)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#a42c0d25d78051a1de58a7a1c4dcfdada">rsSetObject</a> (<a class="el" href="structrs__program__raster.html">rs_program_raster</a> *dst, <a class="el" href="structrs__program__raster.html">rs_program_raster</a> src)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#a4babadff570c9f57edbb3fb98c80a113">rsSetObject</a> (<a class="el" href="structrs__program__store.html">rs_program_store</a> *dst, <a class="el" href="structrs__program__store.html">rs_program_store</a> src)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#ad1af9aed63d9f925a8e6288c0607d55b">rsSetObject</a> (<a class="el" href="structrs__font.html">rs_font</a> *dst, <a class="el" href="structrs__font.html">rs_font</a> src)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#aab5f47dc11b9044b3d02c4ed818fe6e7">rsClearObject</a> (<a class="el" href="structrs__element.html">rs_element</a> *dst)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#ae9c24592eb550e72c9ff480dfbb9fe07">rsClearObject</a> (<a class="el" href="structrs__type.html">rs_type</a> *dst)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#a5b944e2762ce1a44f7e63abd41851bcd">rsClearObject</a> (<a class="el" href="structrs__allocation.html">rs_allocation</a> *dst)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#a51fe2098cc5c2ff73ceff8cc46b6dd89">rsClearObject</a> (<a class="el" href="structrs__sampler.html">rs_sampler</a> *dst)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#a0034d7e67f80a9ce2e1139f1cb54b9a4">rsClearObject</a> (<a class="el" href="structrs__script.html">rs_script</a> *dst)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#a4cd7e401ffe73eb23dffb01d5faf14cc">rsClearObject</a> (<a class="el" href="structrs__path.html">rs_path</a> *dst)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#a6f26564cf4fa1bcd46db51a478bf91b9">rsClearObject</a> (<a class="el" href="structrs__mesh.html">rs_mesh</a> *dst)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#afc6aca3a903d5e2021d9eeab4836fd26">rsClearObject</a> (<a class="el" href="structrs__program__fragment.html">rs_program_fragment</a> *dst)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#a712fcc988eedf21845495477cec54029">rsClearObject</a> (<a class="el" href="structrs__program__vertex.html">rs_program_vertex</a> *dst)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#a06b6d56105e192e121a5a4a555dc7b70">rsClearObject</a> (<a class="el" href="structrs__program__raster.html">rs_program_raster</a> *dst)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#a691d3c2564dd2c08d965ccb1c73a9b29">rsClearObject</a> (<a class="el" href="structrs__program__store.html">rs_program_store</a> *dst)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#aa246aa3c8162ef03e43bc0062671ae29">rsClearObject</a> (<a class="el" href="structrs__font.html">rs_font</a> *dst)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#a81f862730b961bd93ac132c24cbc0f82">rsIsObject</a> (<a class="el" href="structrs__element.html">rs_element</a>)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#a445c32d5bc085369f1ffa1a8ba13a381">rsIsObject</a> (<a class="el" href="structrs__type.html">rs_type</a>)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#afd33063fc6e45cb23f9a6f68dc2976ba">rsIsObject</a> (<a class="el" href="structrs__allocation.html">rs_allocation</a>)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#a509c7f0eacf1f07a3e7afaa029168f11">rsIsObject</a> (<a class="el" href="structrs__sampler.html">rs_sampler</a>)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#a6dc9db5fb60856b04c0b495a85affcbc">rsIsObject</a> (<a class="el" href="structrs__script.html">rs_script</a>)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#a33f979562536752539f35e6e831dab62">rsIsObject</a> (<a class="el" href="structrs__path.html">rs_path</a>)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#aa1860f7322da25f4c4a1727571b01e2b">rsIsObject</a> (<a class="el" href="structrs__mesh.html">rs_mesh</a>)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#afa57d9148778b03b270facbdbcb88816">rsIsObject</a> (<a class="el" href="structrs__program__fragment.html">rs_program_fragment</a>)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#acaa5da532eab1803a72fc4af2e7c6573">rsIsObject</a> (<a class="el" href="structrs__program__vertex.html">rs_program_vertex</a>)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#a2358cf1fd6b2e0b1d6f1bde8664d9c41">rsIsObject</a> (<a class="el" href="structrs__program__raster.html">rs_program_raster</a>)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#a547cd0a8071d895139893f1e10f5c3fd">rsIsObject</a> (<a class="el" href="structrs__program__store.html">rs_program_store</a>)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__object_8rsh.html#ac1d6da920f12974b3633d25ed078da2d">rsIsObject</a> (<a class="el" href="structrs__font.html">rs_font</a>)</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Object routines. </p>
-
-<p>Definition in file <a class="el" href="rs__object_8rsh_source.html">rs_object.rsh</a>.</p>
-</div><hr/><h2>Function Documentation</h2>
-<a class="anchor" id="aab5f47dc11b9044b3d02c4ed818fe6e7"></a><!-- doxytag: member="rs_object.rsh::rsClearObject" ref="aab5f47dc11b9044b3d02c4ed818fe6e7" args="(rs_element *dst)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsClearObject </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__element.html">rs_element</a> * </td>
- <td class="paramname"><em>dst</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Sets the object to NULL.</p>
-<dl class="return"><dt><b>Returns:</b></dt><dd>bool </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="ae9c24592eb550e72c9ff480dfbb9fe07"></a><!-- doxytag: member="rs_object.rsh::rsClearObject" ref="ae9c24592eb550e72c9ff480dfbb9fe07" args="(rs_type *dst)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsClearObject </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__type.html">rs_type</a> * </td>
- <td class="paramname"><em>dst</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a5b944e2762ce1a44f7e63abd41851bcd"></a><!-- doxytag: member="rs_object.rsh::rsClearObject" ref="a5b944e2762ce1a44f7e63abd41851bcd" args="(rs_allocation *dst)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsClearObject </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a> * </td>
- <td class="paramname"><em>dst</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a51fe2098cc5c2ff73ceff8cc46b6dd89"></a><!-- doxytag: member="rs_object.rsh::rsClearObject" ref="a51fe2098cc5c2ff73ceff8cc46b6dd89" args="(rs_sampler *dst)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsClearObject </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__sampler.html">rs_sampler</a> * </td>
- <td class="paramname"><em>dst</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a0034d7e67f80a9ce2e1139f1cb54b9a4"></a><!-- doxytag: member="rs_object.rsh::rsClearObject" ref="a0034d7e67f80a9ce2e1139f1cb54b9a4" args="(rs_script *dst)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsClearObject </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__script.html">rs_script</a> * </td>
- <td class="paramname"><em>dst</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a4cd7e401ffe73eb23dffb01d5faf14cc"></a><!-- doxytag: member="rs_object.rsh::rsClearObject" ref="a4cd7e401ffe73eb23dffb01d5faf14cc" args="(rs_path *dst)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsClearObject </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__path.html">rs_path</a> * </td>
- <td class="paramname"><em>dst</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a6f26564cf4fa1bcd46db51a478bf91b9"></a><!-- doxytag: member="rs_object.rsh::rsClearObject" ref="a6f26564cf4fa1bcd46db51a478bf91b9" args="(rs_mesh *dst)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsClearObject </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__mesh.html">rs_mesh</a> * </td>
- <td class="paramname"><em>dst</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="afc6aca3a903d5e2021d9eeab4836fd26"></a><!-- doxytag: member="rs_object.rsh::rsClearObject" ref="afc6aca3a903d5e2021d9eeab4836fd26" args="(rs_program_fragment *dst)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsClearObject </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__program__fragment.html">rs_program_fragment</a> * </td>
- <td class="paramname"><em>dst</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a712fcc988eedf21845495477cec54029"></a><!-- doxytag: member="rs_object.rsh::rsClearObject" ref="a712fcc988eedf21845495477cec54029" args="(rs_program_vertex *dst)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsClearObject </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__program__vertex.html">rs_program_vertex</a> * </td>
- <td class="paramname"><em>dst</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a06b6d56105e192e121a5a4a555dc7b70"></a><!-- doxytag: member="rs_object.rsh::rsClearObject" ref="a06b6d56105e192e121a5a4a555dc7b70" args="(rs_program_raster *dst)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsClearObject </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__program__raster.html">rs_program_raster</a> * </td>
- <td class="paramname"><em>dst</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a691d3c2564dd2c08d965ccb1c73a9b29"></a><!-- doxytag: member="rs_object.rsh::rsClearObject" ref="a691d3c2564dd2c08d965ccb1c73a9b29" args="(rs_program_store *dst)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsClearObject </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__program__store.html">rs_program_store</a> * </td>
- <td class="paramname"><em>dst</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="aa246aa3c8162ef03e43bc0062671ae29"></a><!-- doxytag: member="rs_object.rsh::rsClearObject" ref="aa246aa3c8162ef03e43bc0062671ae29" args="(rs_font *dst)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsClearObject </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__font.html">rs_font</a> * </td>
- <td class="paramname"><em>dst</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a81f862730b961bd93ac132c24cbc0f82"></a><!-- doxytag: member="rs_object.rsh::rsIsObject" ref="a81f862730b961bd93ac132c24cbc0f82" args="(rs_element)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">bool rsIsObject </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__element.html">rs_element</a> </td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Tests if the object is valid. Returns true if the object is valid, false if it is NULL.</p>
-<dl class="return"><dt><b>Returns:</b></dt><dd>bool </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a445c32d5bc085369f1ffa1a8ba13a381"></a><!-- doxytag: member="rs_object.rsh::rsIsObject" ref="a445c32d5bc085369f1ffa1a8ba13a381" args="(rs_type)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">bool rsIsObject </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__type.html">rs_type</a> </td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="afd33063fc6e45cb23f9a6f68dc2976ba"></a><!-- doxytag: member="rs_object.rsh::rsIsObject" ref="afd33063fc6e45cb23f9a6f68dc2976ba" args="(rs_allocation)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">bool rsIsObject </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a> </td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a509c7f0eacf1f07a3e7afaa029168f11"></a><!-- doxytag: member="rs_object.rsh::rsIsObject" ref="a509c7f0eacf1f07a3e7afaa029168f11" args="(rs_sampler)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">bool rsIsObject </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__sampler.html">rs_sampler</a> </td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a6dc9db5fb60856b04c0b495a85affcbc"></a><!-- doxytag: member="rs_object.rsh::rsIsObject" ref="a6dc9db5fb60856b04c0b495a85affcbc" args="(rs_script)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">bool rsIsObject </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__script.html">rs_script</a> </td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a33f979562536752539f35e6e831dab62"></a><!-- doxytag: member="rs_object.rsh::rsIsObject" ref="a33f979562536752539f35e6e831dab62" args="(rs_path)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">bool rsIsObject </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__path.html">rs_path</a> </td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="aa1860f7322da25f4c4a1727571b01e2b"></a><!-- doxytag: member="rs_object.rsh::rsIsObject" ref="aa1860f7322da25f4c4a1727571b01e2b" args="(rs_mesh)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">bool rsIsObject </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__mesh.html">rs_mesh</a> </td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="afa57d9148778b03b270facbdbcb88816"></a><!-- doxytag: member="rs_object.rsh::rsIsObject" ref="afa57d9148778b03b270facbdbcb88816" args="(rs_program_fragment)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">bool rsIsObject </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__program__fragment.html">rs_program_fragment</a> </td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="acaa5da532eab1803a72fc4af2e7c6573"></a><!-- doxytag: member="rs_object.rsh::rsIsObject" ref="acaa5da532eab1803a72fc4af2e7c6573" args="(rs_program_vertex)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">bool rsIsObject </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__program__vertex.html">rs_program_vertex</a> </td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a2358cf1fd6b2e0b1d6f1bde8664d9c41"></a><!-- doxytag: member="rs_object.rsh::rsIsObject" ref="a2358cf1fd6b2e0b1d6f1bde8664d9c41" args="(rs_program_raster)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">bool rsIsObject </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__program__raster.html">rs_program_raster</a> </td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a547cd0a8071d895139893f1e10f5c3fd"></a><!-- doxytag: member="rs_object.rsh::rsIsObject" ref="a547cd0a8071d895139893f1e10f5c3fd" args="(rs_program_store)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">bool rsIsObject </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__program__store.html">rs_program_store</a> </td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="ac1d6da920f12974b3633d25ed078da2d"></a><!-- doxytag: member="rs_object.rsh::rsIsObject" ref="ac1d6da920f12974b3633d25ed078da2d" args="(rs_font)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">bool rsIsObject </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__font.html">rs_font</a> </td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="af6983a1578621ce283acc07f876cda62"></a><!-- doxytag: member="rs_object.rsh::rsSetObject" ref="af6983a1578621ce283acc07f876cda62" args="(rs_element *dst, rs_element src)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsSetObject </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__element.html">rs_element</a> * </td>
- <td class="paramname"><em>dst</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="structrs__element.html">rs_element</a> </td>
- <td class="paramname"><em>src</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Copy reference to the specified object.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">dst</td><td></td></tr>
- <tr><td class="paramname">src</td><td></td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="ab1c6d0672b6b88add70a98e627eeb7ae"></a><!-- doxytag: member="rs_object.rsh::rsSetObject" ref="ab1c6d0672b6b88add70a98e627eeb7ae" args="(rs_type *dst, rs_type src)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsSetObject </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__type.html">rs_type</a> * </td>
- <td class="paramname"><em>dst</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="structrs__type.html">rs_type</a> </td>
- <td class="paramname"><em>src</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="af3446b1b9c2e4b600cdc8d828f3dbb59"></a><!-- doxytag: member="rs_object.rsh::rsSetObject" ref="af3446b1b9c2e4b600cdc8d828f3dbb59" args="(rs_allocation *dst, rs_allocation src)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsSetObject </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a> * </td>
- <td class="paramname"><em>dst</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="structrs__allocation.html">rs_allocation</a> </td>
- <td class="paramname"><em>src</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a5132f90b4aaf8d2e35e6ad021fb08175"></a><!-- doxytag: member="rs_object.rsh::rsSetObject" ref="a5132f90b4aaf8d2e35e6ad021fb08175" args="(rs_sampler *dst, rs_sampler src)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsSetObject </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__sampler.html">rs_sampler</a> * </td>
- <td class="paramname"><em>dst</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="structrs__sampler.html">rs_sampler</a> </td>
- <td class="paramname"><em>src</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a9dfc520ed267ac9733760bc628a93cae"></a><!-- doxytag: member="rs_object.rsh::rsSetObject" ref="a9dfc520ed267ac9733760bc628a93cae" args="(rs_script *dst, rs_script src)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsSetObject </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__script.html">rs_script</a> * </td>
- <td class="paramname"><em>dst</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="structrs__script.html">rs_script</a> </td>
- <td class="paramname"><em>src</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a9c2f648c1e68018621a3123545a21d83"></a><!-- doxytag: member="rs_object.rsh::rsSetObject" ref="a9c2f648c1e68018621a3123545a21d83" args="(rs_path *dst, rs_path src)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsSetObject </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__path.html">rs_path</a> * </td>
- <td class="paramname"><em>dst</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="structrs__path.html">rs_path</a> </td>
- <td class="paramname"><em>src</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a4d6368cf71d6fd2e55efbe23af6cfd7c"></a><!-- doxytag: member="rs_object.rsh::rsSetObject" ref="a4d6368cf71d6fd2e55efbe23af6cfd7c" args="(rs_mesh *dst, rs_mesh src)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsSetObject </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__mesh.html">rs_mesh</a> * </td>
- <td class="paramname"><em>dst</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="structrs__mesh.html">rs_mesh</a> </td>
- <td class="paramname"><em>src</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a8135bceeb7b3ec8bf9a49d04e39bd565"></a><!-- doxytag: member="rs_object.rsh::rsSetObject" ref="a8135bceeb7b3ec8bf9a49d04e39bd565" args="(rs_program_fragment *dst, rs_program_fragment src)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsSetObject </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__program__fragment.html">rs_program_fragment</a> * </td>
- <td class="paramname"><em>dst</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="structrs__program__fragment.html">rs_program_fragment</a> </td>
- <td class="paramname"><em>src</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a5512c023d40e416bea709f8d8caf9674"></a><!-- doxytag: member="rs_object.rsh::rsSetObject" ref="a5512c023d40e416bea709f8d8caf9674" args="(rs_program_vertex *dst, rs_program_vertex src)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsSetObject </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__program__vertex.html">rs_program_vertex</a> * </td>
- <td class="paramname"><em>dst</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="structrs__program__vertex.html">rs_program_vertex</a> </td>
- <td class="paramname"><em>src</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a42c0d25d78051a1de58a7a1c4dcfdada"></a><!-- doxytag: member="rs_object.rsh::rsSetObject" ref="a42c0d25d78051a1de58a7a1c4dcfdada" args="(rs_program_raster *dst, rs_program_raster src)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsSetObject </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__program__raster.html">rs_program_raster</a> * </td>
- <td class="paramname"><em>dst</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="structrs__program__raster.html">rs_program_raster</a> </td>
- <td class="paramname"><em>src</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="a4babadff570c9f57edbb3fb98c80a113"></a><!-- doxytag: member="rs_object.rsh::rsSetObject" ref="a4babadff570c9f57edbb3fb98c80a113" args="(rs_program_store *dst, rs_program_store src)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsSetObject </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__program__store.html">rs_program_store</a> * </td>
- <td class="paramname"><em>dst</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="structrs__program__store.html">rs_program_store</a> </td>
- <td class="paramname"><em>src</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-<a class="anchor" id="ad1af9aed63d9f925a8e6288c0607d55b"></a><!-- doxytag: member="rs_object.rsh::rsSetObject" ref="ad1af9aed63d9f925a8e6288c0607d55b" args="(rs_font *dst, rs_font src)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void rsSetObject </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__font.html">rs_font</a> * </td>
- <td class="paramname"><em>dst</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="structrs__font.html">rs_font</a> </td>
- <td class="paramname"><em>src</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-
-</div>
-</div>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/rs__object_8rsh_source.html b/docs/html/reference/renderscript/rs__object_8rsh_source.html
deleted file mode 100644
index 9cd43b4..0000000
--- a/docs/html/reference/renderscript/rs__object_8rsh_source.html
+++ /dev/null
@@ -1,132 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_object.rsh Source File</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
- <div id="navrow1" class="tabs">
- <ul class="tablist">
- <li><a href="index.html"><span>Overview</span></a></li>
- <li class="current"><a href="globals.html"><span>Globals</span></a></li>
- <li><a href="annotated.html"><span>Structs</span></a></li>
- </ul>
- </div>
-<div class="header">
- <div class="headertitle">
-<div class="title">/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_object.rsh</div> </div>
-</div>
-<div class="contents">
-<a href="rs__object_8rsh.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * Copyright (C) 2011 The Android Open Source Project</span>
-<a name="l00003"></a>00003 <span class="comment"> *</span>
-<a name="l00004"></a>00004 <span class="comment"> * Licensed under the Apache License, Version 2.0 (the "License");</span>
-<a name="l00005"></a>00005 <span class="comment"> * you may not use this file except in compliance with the License.</span>
-<a name="l00006"></a>00006 <span class="comment"> * You may obtain a copy of the License at</span>
-<a name="l00007"></a>00007 <span class="comment"> *</span>
-<a name="l00008"></a>00008 <span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span>
-<a name="l00011"></a>00011 <span class="comment"> * distributed under the License is distributed on an "AS IS" BASIS,</span>
-<a name="l00012"></a>00012 <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
-<a name="l00013"></a>00013 <span class="comment"> * See the License for the specific language governing permissions and</span>
-<a name="l00014"></a>00014 <span class="comment"> * limitations under the License.</span>
-<a name="l00015"></a>00015 <span class="comment"> */</span>
-<a name="l00016"></a>00016
-<a name="l00023"></a>00023 <span class="preprocessor">#ifndef __RS_OBJECT_RSH__</span>
-<a name="l00024"></a>00024 <span class="preprocessor"></span><span class="preprocessor">#define __RS_OBJECT_RSH__</span>
-<a name="l00025"></a>00025 <span class="preprocessor"></span>
-<a name="l00026"></a>00026
-<a name="l00033"></a>00033 <span class="keyword">extern</span> <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00034"></a>00034 <a class="code" href="rs__object_8rsh.html#af6983a1578621ce283acc07f876cda62">rsSetObject</a>(<a class="code" href="structrs__element.html" title="Opaque handle to a RenderScript element.">rs_element</a> *dst, <a class="code" href="structrs__element.html" title="Opaque handle to a RenderScript element.">rs_element</a> src);
-<a name="l00038"></a>00038 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00039"></a>00039 <a class="code" href="rs__object_8rsh.html#af6983a1578621ce283acc07f876cda62">rsSetObject</a>(<a class="code" href="structrs__type.html" title="Opaque handle to a RenderScript type.">rs_type</a> *dst, <a class="code" href="structrs__type.html" title="Opaque handle to a RenderScript type.">rs_type</a> src);
-<a name="l00043"></a>00043 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00044"></a>00044 <a class="code" href="rs__object_8rsh.html#af6983a1578621ce283acc07f876cda62">rsSetObject</a>(<a class="code" href="structrs__allocation.html" title="Opaque handle to a RenderScript allocation.">rs_allocation</a> *dst, <a class="code" href="structrs__allocation.html" title="Opaque handle to a RenderScript allocation.">rs_allocation</a> src);
-<a name="l00048"></a>00048 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00049"></a>00049 <a class="code" href="rs__object_8rsh.html#af6983a1578621ce283acc07f876cda62">rsSetObject</a>(<a class="code" href="structrs__sampler.html" title="Opaque handle to a RenderScript sampler object.">rs_sampler</a> *dst, <a class="code" href="structrs__sampler.html" title="Opaque handle to a RenderScript sampler object.">rs_sampler</a> src);
-<a name="l00053"></a>00053 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00054"></a>00054 <a class="code" href="rs__object_8rsh.html#af6983a1578621ce283acc07f876cda62">rsSetObject</a>(<a class="code" href="structrs__script.html" title="Opaque handle to a RenderScript script object.">rs_script</a> *dst, <a class="code" href="structrs__script.html" title="Opaque handle to a RenderScript script object.">rs_script</a> src);
-<a name="l00058"></a>00058 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00059"></a>00059 <a class="code" href="rs__object_8rsh.html#af6983a1578621ce283acc07f876cda62">rsSetObject</a>(<a class="code" href="structrs__path.html" title="Opaque handle to a RenderScript Path object.">rs_path</a> *dst, <a class="code" href="structrs__path.html" title="Opaque handle to a RenderScript Path object.">rs_path</a> src);
-<a name="l00063"></a>00063 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00064"></a>00064 <a class="code" href="rs__object_8rsh.html#af6983a1578621ce283acc07f876cda62">rsSetObject</a>(<a class="code" href="structrs__mesh.html" title="Opaque handle to a RenderScript mesh object.">rs_mesh</a> *dst, <a class="code" href="structrs__mesh.html" title="Opaque handle to a RenderScript mesh object.">rs_mesh</a> src);
-<a name="l00068"></a>00068 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00069"></a>00069 <a class="code" href="rs__object_8rsh.html#af6983a1578621ce283acc07f876cda62">rsSetObject</a>(<a class="code" href="structrs__program__fragment.html" title="Opaque handle to a RenderScript ProgramFragment object.">rs_program_fragment</a> *dst, <a class="code" href="structrs__program__fragment.html" title="Opaque handle to a RenderScript ProgramFragment object.">rs_program_fragment</a> src);
-<a name="l00073"></a>00073 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00074"></a>00074 <a class="code" href="rs__object_8rsh.html#af6983a1578621ce283acc07f876cda62">rsSetObject</a>(<a class="code" href="structrs__program__vertex.html" title="Opaque handle to a RenderScript ProgramVertex object.">rs_program_vertex</a> *dst, <a class="code" href="structrs__program__vertex.html" title="Opaque handle to a RenderScript ProgramVertex object.">rs_program_vertex</a> src);
-<a name="l00078"></a>00078 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00079"></a>00079 <a class="code" href="rs__object_8rsh.html#af6983a1578621ce283acc07f876cda62">rsSetObject</a>(<a class="code" href="structrs__program__raster.html" title="Opaque handle to a RenderScript ProgramRaster object.">rs_program_raster</a> *dst, <a class="code" href="structrs__program__raster.html" title="Opaque handle to a RenderScript ProgramRaster object.">rs_program_raster</a> src);
-<a name="l00083"></a>00083 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00084"></a>00084 <a class="code" href="rs__object_8rsh.html#af6983a1578621ce283acc07f876cda62">rsSetObject</a>(<a class="code" href="structrs__program__store.html" title="Opaque handle to a RenderScript ProgramStore object.">rs_program_store</a> *dst, <a class="code" href="structrs__program__store.html" title="Opaque handle to a RenderScript ProgramStore object.">rs_program_store</a> src);
-<a name="l00088"></a>00088 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00089"></a>00089 <a class="code" href="rs__object_8rsh.html#af6983a1578621ce283acc07f876cda62">rsSetObject</a>(<a class="code" href="structrs__font.html" title="Opaque handle to a RenderScript font object.">rs_font</a> *dst, <a class="code" href="structrs__font.html" title="Opaque handle to a RenderScript font object.">rs_font</a> src);
-<a name="l00090"></a>00090
-<a name="l00096"></a>00096 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00097"></a>00097 <a class="code" href="rs__object_8rsh.html#aab5f47dc11b9044b3d02c4ed818fe6e7">rsClearObject</a>(<a class="code" href="structrs__element.html" title="Opaque handle to a RenderScript element.">rs_element</a> *dst);
-<a name="l00101"></a>00101 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00102"></a>00102 <a class="code" href="rs__object_8rsh.html#aab5f47dc11b9044b3d02c4ed818fe6e7">rsClearObject</a>(<a class="code" href="structrs__type.html" title="Opaque handle to a RenderScript type.">rs_type</a> *dst);
-<a name="l00106"></a>00106 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00107"></a>00107 <a class="code" href="rs__object_8rsh.html#aab5f47dc11b9044b3d02c4ed818fe6e7">rsClearObject</a>(<a class="code" href="structrs__allocation.html" title="Opaque handle to a RenderScript allocation.">rs_allocation</a> *dst);
-<a name="l00111"></a>00111 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00112"></a>00112 <a class="code" href="rs__object_8rsh.html#aab5f47dc11b9044b3d02c4ed818fe6e7">rsClearObject</a>(<a class="code" href="structrs__sampler.html" title="Opaque handle to a RenderScript sampler object.">rs_sampler</a> *dst);
-<a name="l00116"></a>00116 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00117"></a>00117 <a class="code" href="rs__object_8rsh.html#aab5f47dc11b9044b3d02c4ed818fe6e7">rsClearObject</a>(<a class="code" href="structrs__script.html" title="Opaque handle to a RenderScript script object.">rs_script</a> *dst);
-<a name="l00121"></a>00121 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00122"></a>00122 <a class="code" href="rs__object_8rsh.html#aab5f47dc11b9044b3d02c4ed818fe6e7">rsClearObject</a>(<a class="code" href="structrs__path.html" title="Opaque handle to a RenderScript Path object.">rs_path</a> *dst);
-<a name="l00126"></a>00126 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00127"></a>00127 <a class="code" href="rs__object_8rsh.html#aab5f47dc11b9044b3d02c4ed818fe6e7">rsClearObject</a>(<a class="code" href="structrs__mesh.html" title="Opaque handle to a RenderScript mesh object.">rs_mesh</a> *dst);
-<a name="l00131"></a>00131 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00132"></a>00132 <a class="code" href="rs__object_8rsh.html#aab5f47dc11b9044b3d02c4ed818fe6e7">rsClearObject</a>(<a class="code" href="structrs__program__fragment.html" title="Opaque handle to a RenderScript ProgramFragment object.">rs_program_fragment</a> *dst);
-<a name="l00136"></a>00136 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00137"></a>00137 <a class="code" href="rs__object_8rsh.html#aab5f47dc11b9044b3d02c4ed818fe6e7">rsClearObject</a>(<a class="code" href="structrs__program__vertex.html" title="Opaque handle to a RenderScript ProgramVertex object.">rs_program_vertex</a> *dst);
-<a name="l00141"></a>00141 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00142"></a>00142 <a class="code" href="rs__object_8rsh.html#aab5f47dc11b9044b3d02c4ed818fe6e7">rsClearObject</a>(<a class="code" href="structrs__program__raster.html" title="Opaque handle to a RenderScript ProgramRaster object.">rs_program_raster</a> *dst);
-<a name="l00146"></a>00146 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00147"></a>00147 <a class="code" href="rs__object_8rsh.html#aab5f47dc11b9044b3d02c4ed818fe6e7">rsClearObject</a>(<a class="code" href="structrs__program__store.html" title="Opaque handle to a RenderScript ProgramStore object.">rs_program_store</a> *dst);
-<a name="l00151"></a>00151 extern <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00152"></a>00152 <a class="code" href="rs__object_8rsh.html#aab5f47dc11b9044b3d02c4ed818fe6e7">rsClearObject</a>(<a class="code" href="structrs__font.html" title="Opaque handle to a RenderScript font object.">rs_font</a> *dst);
-<a name="l00153"></a>00153
-<a name="l00154"></a>00154
-<a name="l00155"></a>00155
-<a name="l00162"></a>00162 extern <span class="keywordtype">bool</span> __attribute__((overloadable))
-<a name="l00163"></a>00163 <a class="code" href="rs__object_8rsh.html#a81f862730b961bd93ac132c24cbc0f82">rsIsObject</a>(<a class="code" href="structrs__element.html" title="Opaque handle to a RenderScript element.">rs_element</a>);
-<a name="l00167"></a>00167 extern <span class="keywordtype">bool</span> __attribute__((overloadable))
-<a name="l00168"></a>00168 <a class="code" href="rs__object_8rsh.html#a81f862730b961bd93ac132c24cbc0f82">rsIsObject</a>(<a class="code" href="structrs__type.html" title="Opaque handle to a RenderScript type.">rs_type</a>);
-<a name="l00172"></a>00172 extern <span class="keywordtype">bool</span> __attribute__((overloadable))
-<a name="l00173"></a>00173 <a class="code" href="rs__object_8rsh.html#a81f862730b961bd93ac132c24cbc0f82">rsIsObject</a>(<a class="code" href="structrs__allocation.html" title="Opaque handle to a RenderScript allocation.">rs_allocation</a>);
-<a name="l00177"></a>00177 extern <span class="keywordtype">bool</span> __attribute__((overloadable))
-<a name="l00178"></a>00178 <a class="code" href="rs__object_8rsh.html#a81f862730b961bd93ac132c24cbc0f82">rsIsObject</a>(<a class="code" href="structrs__sampler.html" title="Opaque handle to a RenderScript sampler object.">rs_sampler</a>);
-<a name="l00182"></a>00182 extern <span class="keywordtype">bool</span> __attribute__((overloadable))
-<a name="l00183"></a>00183 <a class="code" href="rs__object_8rsh.html#a81f862730b961bd93ac132c24cbc0f82">rsIsObject</a>(<a class="code" href="structrs__script.html" title="Opaque handle to a RenderScript script object.">rs_script</a>);
-<a name="l00187"></a>00187 extern <span class="keywordtype">bool</span> __attribute__((overloadable))
-<a name="l00188"></a>00188 <a class="code" href="rs__object_8rsh.html#a81f862730b961bd93ac132c24cbc0f82">rsIsObject</a>(<a class="code" href="structrs__path.html" title="Opaque handle to a RenderScript Path object.">rs_path</a>);
-<a name="l00192"></a>00192 extern <span class="keywordtype">bool</span> __attribute__((overloadable))
-<a name="l00193"></a>00193 <a class="code" href="rs__object_8rsh.html#a81f862730b961bd93ac132c24cbc0f82">rsIsObject</a>(<a class="code" href="structrs__mesh.html" title="Opaque handle to a RenderScript mesh object.">rs_mesh</a>);
-<a name="l00197"></a>00197 extern <span class="keywordtype">bool</span> __attribute__((overloadable))
-<a name="l00198"></a>00198 <a class="code" href="rs__object_8rsh.html#a81f862730b961bd93ac132c24cbc0f82">rsIsObject</a>(<a class="code" href="structrs__program__fragment.html" title="Opaque handle to a RenderScript ProgramFragment object.">rs_program_fragment</a>);
-<a name="l00202"></a>00202 extern <span class="keywordtype">bool</span> __attribute__((overloadable))
-<a name="l00203"></a>00203 <a class="code" href="rs__object_8rsh.html#a81f862730b961bd93ac132c24cbc0f82">rsIsObject</a>(<a class="code" href="structrs__program__vertex.html" title="Opaque handle to a RenderScript ProgramVertex object.">rs_program_vertex</a>);
-<a name="l00207"></a>00207 extern <span class="keywordtype">bool</span> __attribute__((overloadable))
-<a name="l00208"></a>00208 <a class="code" href="rs__object_8rsh.html#a81f862730b961bd93ac132c24cbc0f82">rsIsObject</a>(<a class="code" href="structrs__program__raster.html" title="Opaque handle to a RenderScript ProgramRaster object.">rs_program_raster</a>);
-<a name="l00212"></a>00212 extern <span class="keywordtype">bool</span> __attribute__((overloadable))
-<a name="l00213"></a>00213 <a class="code" href="rs__object_8rsh.html#a81f862730b961bd93ac132c24cbc0f82">rsIsObject</a>(<a class="code" href="structrs__program__store.html" title="Opaque handle to a RenderScript ProgramStore object.">rs_program_store</a>);
-<a name="l00217"></a>00217 extern <span class="keywordtype">bool</span> __attribute__((overloadable))
-<a name="l00218"></a>00218 <a class="code" href="rs__object_8rsh.html#a81f862730b961bd93ac132c24cbc0f82">rsIsObject</a>(<a class="code" href="structrs__font.html" title="Opaque handle to a RenderScript font object.">rs_font</a>);
-<a name="l00219"></a>00219
-<a name="l00220"></a>00220 <span class="preprocessor">#endif</span>
-</pre></div></div>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/rs__program_8rsh.html b/docs/html/reference/renderscript/rs__program_8rsh.html
deleted file mode 100644
index 99883830..0000000
--- a/docs/html/reference/renderscript/rs__program_8rsh.html
+++ /dev/null
@@ -1,320 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_program.rsh File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
- <div id="navrow1" class="tabs">
- <ul class="tablist">
- <li><a href="index.html"><span>Overview</span></a></li>
- <li class="current"><a href="globals.html"><span>Globals</span></a></li>
- <li><a href="annotated.html"><span>Structs</span></a></li>
- </ul>
- </div>
-</div>
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle">
-<div class="title">/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_program.rsh File Reference</div> </div>
-</div>
-<div class="contents">
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bf">rs_depth_func</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__program_8rsh.html#a6a9c06c54d230f61edc0667a091aac77">rsgProgramStoreGetDepthFunc</a> (<a class="el" href="structrs__program__store.html">rs_program_store</a> ps)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__program_8rsh.html#afa27fa6103c9e29f5e098e2d99663f0b">rsgProgramStoreIsDepthMaskEnabled</a> (<a class="el" href="structrs__program__store.html">rs_program_store</a> ps)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__program_8rsh.html#a4a50df1d2495567536dd6f394d38ee5d">rsgProgramStoreIsColorMaskRedEnabled</a> (<a class="el" href="structrs__program__store.html">rs_program_store</a> ps)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__program_8rsh.html#a1a57f706bc42ce49b545021c8403964c">rsgProgramStoreIsColorMaskGreenEnabled</a> (<a class="el" href="structrs__program__store.html">rs_program_store</a> ps)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__program_8rsh.html#a279ad1b4611aca268053337f6719a22c">rsgProgramStoreIsColorMaskBlueEnabled</a> (<a class="el" href="structrs__program__store.html">rs_program_store</a> ps)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__program_8rsh.html#ab038edb7399044a3ea96ebb17d7b6601">rsgProgramStoreIsColorMaskAlphaEnabled</a> (<a class="el" href="structrs__program__store.html">rs_program_store</a> ps)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">rs_blend_src_func </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__program_8rsh.html#afb38256c5804cdb9b410419c43ce03ab">rsgProgramStoreGetBlendSrcFunc</a> (<a class="el" href="structrs__program__store.html">rs_program_store</a> ps)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">rs_blend_dst_func </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__program_8rsh.html#a0ad38d595e35712f24c384ef20b69025">rsgProgramStoreGetBlendDstFunc</a> (<a class="el" href="structrs__program__store.html">rs_program_store</a> ps)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__program_8rsh.html#abe7c55547a72dd291e0996de050bb749">rsgProgramStoreIsDitherEnabled</a> (<a class="el" href="structrs__program__store.html">rs_program_store</a> ps)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__program_8rsh.html#a86aeccd846ed2cd2c9498ab57e2535f3">rsgProgramRasterIsPointSpriteEnabled</a> (<a class="el" href="structrs__program__raster.html">rs_program_raster</a> pr)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">rs_cull_mode </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__program_8rsh.html#a633d6dbdec98ef89c2b70c92ea707502">rsgProgramRasterGetCullMode</a> (<a class="el" href="structrs__program__raster.html">rs_program_raster</a> pr)</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Program object routines. </p>
-
-<p>Definition in file <a class="el" href="rs__program_8rsh_source.html">rs_program.rsh</a>.</p>
-</div><hr/><h2>Function Documentation</h2>
-<a class="anchor" id="a633d6dbdec98ef89c2b70c92ea707502"></a><!-- doxytag: member="rs_program.rsh::rsgProgramRasterGetCullMode" ref="a633d6dbdec98ef89c2b70c92ea707502" args="(rs_program_raster pr)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">rs_cull_mode rsgProgramRasterGetCullMode </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__program__raster.html">rs_program_raster</a> </td>
- <td class="paramname"><em>pr</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Get program raster cull mode</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">pr</td><td>program raster to query </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a86aeccd846ed2cd2c9498ab57e2535f3"></a><!-- doxytag: member="rs_program.rsh::rsgProgramRasterIsPointSpriteEnabled" ref="a86aeccd846ed2cd2c9498ab57e2535f3" args="(rs_program_raster pr)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">bool rsgProgramRasterIsPointSpriteEnabled </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__program__raster.html">rs_program_raster</a> </td>
- <td class="paramname"><em>pr</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Get program raster point sprite state</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">pr</td><td>program raster to query </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a0ad38d595e35712f24c384ef20b69025"></a><!-- doxytag: member="rs_program.rsh::rsgProgramStoreGetBlendDstFunc" ref="a0ad38d595e35712f24c384ef20b69025" args="(rs_program_store ps)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">rs_blend_dst_func rsgProgramStoreGetBlendDstFunc </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__program__store.html">rs_program_store</a> </td>
- <td class="paramname"><em>ps</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Get program store blend destination function</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">ps</td><td>program store to query </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="afb38256c5804cdb9b410419c43ce03ab"></a><!-- doxytag: member="rs_program.rsh::rsgProgramStoreGetBlendSrcFunc" ref="afb38256c5804cdb9b410419c43ce03ab" args="(rs_program_store ps)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">rs_blend_src_func rsgProgramStoreGetBlendSrcFunc </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__program__store.html">rs_program_store</a> </td>
- <td class="paramname"><em>ps</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Get program store blend source function</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">ps</td><td>program store to query </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a6a9c06c54d230f61edc0667a091aac77"></a><!-- doxytag: member="rs_program.rsh::rsgProgramStoreGetDepthFunc" ref="a6a9c06c54d230f61edc0667a091aac77" args="(rs_program_store ps)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bf">rs_depth_func</a> rsgProgramStoreGetDepthFunc </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__program__store.html">rs_program_store</a> </td>
- <td class="paramname"><em>ps</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Get program store depth function</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">ps</td><td>program store to query </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="ab038edb7399044a3ea96ebb17d7b6601"></a><!-- doxytag: member="rs_program.rsh::rsgProgramStoreIsColorMaskAlphaEnabled" ref="ab038edb7399044a3ea96ebb17d7b6601" args="(rs_program_store ps)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">bool rsgProgramStoreIsColorMaskAlphaEnabled </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__program__store.html">rs_program_store</a> </td>
- <td class="paramname"><em>ps</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Get program store alpha component color mask</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">ps</td><td>program store to query </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a279ad1b4611aca268053337f6719a22c"></a><!-- doxytag: member="rs_program.rsh::rsgProgramStoreIsColorMaskBlueEnabled" ref="a279ad1b4611aca268053337f6719a22c" args="(rs_program_store ps)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">bool rsgProgramStoreIsColorMaskBlueEnabled </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__program__store.html">rs_program_store</a> </td>
- <td class="paramname"><em>ps</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Get program store blur component color mask</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">ps</td><td>program store to query </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a1a57f706bc42ce49b545021c8403964c"></a><!-- doxytag: member="rs_program.rsh::rsgProgramStoreIsColorMaskGreenEnabled" ref="a1a57f706bc42ce49b545021c8403964c" args="(rs_program_store ps)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">bool rsgProgramStoreIsColorMaskGreenEnabled </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__program__store.html">rs_program_store</a> </td>
- <td class="paramname"><em>ps</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Get program store green component color mask</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">ps</td><td>program store to query </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="a4a50df1d2495567536dd6f394d38ee5d"></a><!-- doxytag: member="rs_program.rsh::rsgProgramStoreIsColorMaskRedEnabled" ref="a4a50df1d2495567536dd6f394d38ee5d" args="(rs_program_store ps)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">bool rsgProgramStoreIsColorMaskRedEnabled </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__program__store.html">rs_program_store</a> </td>
- <td class="paramname"><em>ps</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Get program store red component color mask</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">ps</td><td>program store to query </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="afa27fa6103c9e29f5e098e2d99663f0b"></a><!-- doxytag: member="rs_program.rsh::rsgProgramStoreIsDepthMaskEnabled" ref="afa27fa6103c9e29f5e098e2d99663f0b" args="(rs_program_store ps)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">bool rsgProgramStoreIsDepthMaskEnabled </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__program__store.html">rs_program_store</a> </td>
- <td class="paramname"><em>ps</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Get program store depth mask</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">ps</td><td>program store to query </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="abe7c55547a72dd291e0996de050bb749"></a><!-- doxytag: member="rs_program.rsh::rsgProgramStoreIsDitherEnabled" ref="abe7c55547a72dd291e0996de050bb749" args="(rs_program_store ps)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">bool rsgProgramStoreIsDitherEnabled </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__program__store.html">rs_program_store</a> </td>
- <td class="paramname"><em>ps</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Get program store dither state</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">ps</td><td>program store to query </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/rs__program_8rsh_source.html b/docs/html/reference/renderscript/rs__program_8rsh_source.html
deleted file mode 100644
index ed326b1..0000000
--- a/docs/html/reference/renderscript/rs__program_8rsh_source.html
+++ /dev/null
@@ -1,91 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_program.rsh Source File</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
- <div id="navrow1" class="tabs">
- <ul class="tablist">
- <li><a href="index.html"><span>Overview</span></a></li>
- <li class="current"><a href="globals.html"><span>Globals</span></a></li>
- <li><a href="annotated.html"><span>Structs</span></a></li>
- </ul>
- </div>
-<div class="header">
- <div class="headertitle">
-<div class="title">/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_program.rsh</div> </div>
-</div>
-<div class="contents">
-<a href="rs__program_8rsh.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * Copyright (C) 2012 The Android Open Source Project</span>
-<a name="l00003"></a>00003 <span class="comment"> *</span>
-<a name="l00004"></a>00004 <span class="comment"> * Licensed under the Apache License, Version 2.0 (the "License");</span>
-<a name="l00005"></a>00005 <span class="comment"> * you may not use this file except in compliance with the License.</span>
-<a name="l00006"></a>00006 <span class="comment"> * You may obtain a copy of the License at</span>
-<a name="l00007"></a>00007 <span class="comment"> *</span>
-<a name="l00008"></a>00008 <span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span>
-<a name="l00011"></a>00011 <span class="comment"> * distributed under the License is distributed on an "AS IS" BASIS,</span>
-<a name="l00012"></a>00012 <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
-<a name="l00013"></a>00013 <span class="comment"> * See the License for the specific language governing permissions and</span>
-<a name="l00014"></a>00014 <span class="comment"> * limitations under the License.</span>
-<a name="l00015"></a>00015 <span class="comment"> */</span>
-<a name="l00016"></a>00016
-<a name="l00023"></a>00023 <span class="preprocessor">#ifndef __RS_PROGRAM_RSH__</span>
-<a name="l00024"></a>00024 <span class="preprocessor"></span><span class="preprocessor">#define __RS_PROGRAM_RSH__</span>
-<a name="l00025"></a>00025 <span class="preprocessor"></span>
-<a name="l00026"></a>00026 <span class="preprocessor">#if (defined(RS_VERSION) && (RS_VERSION >= 16))</span>
-<a name="l00027"></a>00027 <span class="preprocessor"></span>
-<a name="l00033"></a>00033 <span class="keyword">extern</span> <a class="code" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bf">rs_depth_func</a> __attribute__((overloadable))
-<a name="l00034"></a>00034 <a class="code" href="rs__program_8rsh.html#a6a9c06c54d230f61edc0667a091aac77">rsgProgramStoreGetDepthFunc</a>(<a class="code" href="structrs__program__store.html" title="Opaque handle to a RenderScript ProgramStore object.">rs_program_store</a> ps);
-<a name="l00035"></a>00035
-<a name="l00041"></a>00041 extern <span class="keywordtype">bool</span> __attribute__((overloadable))
-<a name="l00042"></a>00042 <a class="code" href="rs__program_8rsh.html#afa27fa6103c9e29f5e098e2d99663f0b">rsgProgramStoreIsDepthMaskEnabled</a>(<a class="code" href="structrs__program__store.html" title="Opaque handle to a RenderScript ProgramStore object.">rs_program_store</a> ps);
-<a name="l00048"></a>00048 extern <span class="keywordtype">bool</span> __attribute__((overloadable))
-<a name="l00049"></a>00049 <a class="code" href="rs__program_8rsh.html#a4a50df1d2495567536dd6f394d38ee5d">rsgProgramStoreIsColorMaskRedEnabled</a>(<a class="code" href="structrs__program__store.html" title="Opaque handle to a RenderScript ProgramStore object.">rs_program_store</a> ps);
-<a name="l00050"></a>00050
-<a name="l00056"></a>00056 extern <span class="keywordtype">bool</span> __attribute__((overloadable))
-<a name="l00057"></a>00057 <a class="code" href="rs__program_8rsh.html#a1a57f706bc42ce49b545021c8403964c">rsgProgramStoreIsColorMaskGreenEnabled</a>(<a class="code" href="structrs__program__store.html" title="Opaque handle to a RenderScript ProgramStore object.">rs_program_store</a> ps);
-<a name="l00058"></a>00058
-<a name="l00064"></a>00064 extern <span class="keywordtype">bool</span> __attribute__((overloadable))
-<a name="l00065"></a>00065 <a class="code" href="rs__program_8rsh.html#a279ad1b4611aca268053337f6719a22c">rsgProgramStoreIsColorMaskBlueEnabled</a>(<a class="code" href="structrs__program__store.html" title="Opaque handle to a RenderScript ProgramStore object.">rs_program_store</a> ps);
-<a name="l00066"></a>00066
-<a name="l00072"></a>00072 extern <span class="keywordtype">bool</span> __attribute__((overloadable))
-<a name="l00073"></a>00073 <a class="code" href="rs__program_8rsh.html#ab038edb7399044a3ea96ebb17d7b6601">rsgProgramStoreIsColorMaskAlphaEnabled</a>(<a class="code" href="structrs__program__store.html" title="Opaque handle to a RenderScript ProgramStore object.">rs_program_store</a> ps);
-<a name="l00074"></a>00074
-<a name="l00080"></a>00080 extern rs_blend_src_func __attribute__((overloadable))
-<a name="l00081"></a>00081 <a class="code" href="rs__program_8rsh.html#afb38256c5804cdb9b410419c43ce03ab">rsgProgramStoreGetBlendSrcFunc</a>(<a class="code" href="structrs__program__store.html" title="Opaque handle to a RenderScript ProgramStore object.">rs_program_store</a> ps);
-<a name="l00082"></a>00082
-<a name="l00088"></a>00088 extern rs_blend_dst_func __attribute__((overloadable))
-<a name="l00089"></a>00089 <a class="code" href="rs__program_8rsh.html#a0ad38d595e35712f24c384ef20b69025">rsgProgramStoreGetBlendDstFunc</a>(<a class="code" href="structrs__program__store.html" title="Opaque handle to a RenderScript ProgramStore object.">rs_program_store</a> ps);
-<a name="l00090"></a>00090
-<a name="l00096"></a>00096 extern <span class="keywordtype">bool</span> __attribute__((overloadable))
-<a name="l00097"></a>00097 <a class="code" href="rs__program_8rsh.html#abe7c55547a72dd291e0996de050bb749">rsgProgramStoreIsDitherEnabled</a>(<a class="code" href="structrs__program__store.html" title="Opaque handle to a RenderScript ProgramStore object.">rs_program_store</a> ps);
-<a name="l00098"></a>00098
-<a name="l00104"></a>00104 extern <span class="keywordtype">bool</span> __attribute__((overloadable))
-<a name="l00105"></a>00105 <a class="code" href="rs__program_8rsh.html#a86aeccd846ed2cd2c9498ab57e2535f3">rsgProgramRasterIsPointSpriteEnabled</a>(<a class="code" href="structrs__program__raster.html" title="Opaque handle to a RenderScript ProgramRaster object.">rs_program_raster</a> pr);
-<a name="l00106"></a>00106
-<a name="l00112"></a>00112 extern rs_cull_mode __attribute__((overloadable))
-<a name="l00113"></a>00113 <a class="code" href="rs__program_8rsh.html#a633d6dbdec98ef89c2b70c92ea707502">rsgProgramRasterGetCullMode</a>(<a class="code" href="structrs__program__raster.html" title="Opaque handle to a RenderScript ProgramRaster object.">rs_program_raster</a> pr);
-<a name="l00114"></a>00114
-<a name="l00115"></a>00115 <span class="preprocessor">#endif // (defined(RS_VERSION) && (RS_VERSION >= 16))</span>
-<a name="l00116"></a>00116 <span class="preprocessor"></span>
-<a name="l00117"></a>00117 <span class="preprocessor">#endif // __RS_PROGRAM_RSH__</span>
-<a name="l00118"></a>00118 <span class="preprocessor"></span>
-</pre></div></div>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/rs__quaternion_8rsh.html b/docs/html/reference/renderscript/rs__quaternion_8rsh.html
deleted file mode 100644
index ce94e04..0000000
--- a/docs/html/reference/renderscript/rs__quaternion_8rsh.html
+++ /dev/null
@@ -1,556 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_quaternion.rsh File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
- <div id="navrow1" class="tabs">
- <ul class="tablist">
- <li><a href="index.html"><span>Overview</span></a></li>
- <li class="current"><a href="globals.html"><span>Globals</span></a></li>
- <li><a href="annotated.html"><span>Structs</span></a></li>
- </ul>
- </div>
-</div>
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle">
-<div class="title">/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_quaternion.rsh File Reference</div> </div>
-</div>
-<div class="contents">
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__quaternion_8rsh.html#a5ff868dbc33e710a666a102fdcc6670a">rsQuaternionSet</a> (<a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q, float w, float x, float y, float z)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__quaternion_8rsh.html#a249782133e54f13a8096d1fbe295714d">rsQuaternionSet</a> (<a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q, const <a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *rhs)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__quaternion_8rsh.html#a4f3d214912facf72f6a6d57e95aa3c3b">rsQuaternionMultiply</a> (<a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q, float s)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__quaternion_8rsh.html#a5e6e493b9917336b0d9118fdd4e91444">rsQuaternionAdd</a> (<a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q, const <a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *rhs)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__quaternion_8rsh.html#aa72a43cf3d7b5924de1ddfaa5766db09">rsQuaternionLoadRotateUnit</a> (<a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q, float rot, float x, float y, float z)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__quaternion_8rsh.html#adf4423c521e34f3cf29d5dd5b5a93de0">rsQuaternionLoadRotate</a> (<a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q, float rot, float x, float y, float z)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__quaternion_8rsh.html#acd670264e49743d35f38028b8e2a8800">rsQuaternionConjugate</a> (<a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__quaternion_8rsh.html#aa810f8857439564e7b3be771f47b40ca">rsQuaternionDot</a> (const <a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q0, const <a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q1)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__quaternion_8rsh.html#abb31aad2416044ad5bbf44ee7c838e2a">rsQuaternionNormalize</a> (<a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__quaternion_8rsh.html#a8bbbb286a2e2cb71b416c053f44844c3">rsQuaternionMultiply</a> (<a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q, const <a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *rhs)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__quaternion_8rsh.html#a7da94a30e287cbb8148771a5cd768dbd">rsQuaternionSlerp</a> (<a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q, const <a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q0, const <a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q1, float t)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__quaternion_8rsh.html#a7726c524868c49892976fec53ea0693b">rsQuaternionGetMatrixUnit</a> (<a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> *m, const <a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q)</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Quaternion routines. </p>
-
-<p>Definition in file <a class="el" href="rs__quaternion_8rsh_source.html">rs_quaternion.rsh</a>.</p>
-</div><hr/><h2>Function Documentation</h2>
-<a class="anchor" id="a5e6e493b9917336b0d9118fdd4e91444"></a><!-- doxytag: member="rs_quaternion.rsh::rsQuaternionAdd" ref="a5e6e493b9917336b0d9118fdd4e91444" args="(rs_quaternion *q, const rs_quaternion *rhs)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">static void rsQuaternionAdd </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> * </td>
- <td class="paramname"><em>q</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> * </td>
- <td class="paramname"><em>rhs</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td><code> [static]</code></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Add two quaternions </p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">q</td><td>destination quaternion to add to </td></tr>
- <tr><td class="paramname">rsh</td><td>right hand side quaternion to add </td></tr>
- </table>
- </dd>
-</dl>
-
-<p>Definition at line <a class="el" href="rs__quaternion_8rsh_source.html#l00074">74</a> of file <a class="el" href="rs__quaternion_8rsh_source.html">rs_quaternion.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="acd670264e49743d35f38028b8e2a8800"></a><!-- doxytag: member="rs_quaternion.rsh::rsQuaternionConjugate" ref="acd670264e49743d35f38028b8e2a8800" args="(rs_quaternion *q)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">static void rsQuaternionConjugate </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> * </td>
- <td class="paramname"><em>q</em></td><td>)</td>
- <td><code> [static]</code></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Conjugates the quaternion </p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">q</td><td>quaternion to conjugate </td></tr>
- </table>
- </dd>
-</dl>
-
-<p>Definition at line <a class="el" href="rs__quaternion_8rsh_source.html#l00127">127</a> of file <a class="el" href="rs__quaternion_8rsh_source.html">rs_quaternion.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="aa810f8857439564e7b3be771f47b40ca"></a><!-- doxytag: member="rs_quaternion.rsh::rsQuaternionDot" ref="aa810f8857439564e7b3be771f47b40ca" args="(const rs_quaternion *q0, const rs_quaternion *q1)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">static float rsQuaternionDot </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> * </td>
- <td class="paramname"><em>q0</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> * </td>
- <td class="paramname"><em>q1</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td><code> [static]</code></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Dot product of two quaternions </p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">q0</td><td>first quaternion </td></tr>
- <tr><td class="paramname">q1</td><td>second quaternion </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>dot product between q0 and q1 </dd></dl>
-
-<p>Definition at line <a class="el" href="rs__quaternion_8rsh_source.html#l00140">140</a> of file <a class="el" href="rs__quaternion_8rsh_source.html">rs_quaternion.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a7726c524868c49892976fec53ea0693b"></a><!-- doxytag: member="rs_quaternion.rsh::rsQuaternionGetMatrixUnit" ref="a7726c524868c49892976fec53ea0693b" args="(rs_matrix4x4 *m, const rs_quaternion *q)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">static void rsQuaternionGetMatrixUnit </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a> * </td>
- <td class="paramname"><em>m</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> * </td>
- <td class="paramname"><em>q</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td><code> [static]</code></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Computes rotation matrix from the normalized quaternion </p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">m</td><td>resulting matrix </td></tr>
- <tr><td class="paramname">p</td><td>normalized quaternion </td></tr>
- </table>
- </dd>
-</dl>
-
-<p>Definition at line <a class="el" href="rs__quaternion_8rsh_source.html#l00228">228</a> of file <a class="el" href="rs__quaternion_8rsh_source.html">rs_quaternion.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="adf4423c521e34f3cf29d5dd5b5a93de0"></a><!-- doxytag: member="rs_quaternion.rsh::rsQuaternionLoadRotate" ref="adf4423c521e34f3cf29d5dd5b5a93de0" args="(rs_quaternion *q, float rot, float x, float y, float z)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">static void rsQuaternionLoadRotate </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> * </td>
- <td class="paramname"><em>q</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>rot</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>x</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>y</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>z</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td><code> [static]</code></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Loads a quaternion that represents a rotation about an arbitrary vector (doesn't have to be unit) </p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">q</td><td>quaternion to set </td></tr>
- <tr><td class="paramname">rot</td><td>angle to rotate by </td></tr>
- <tr><td class="paramname">x</td><td>component of a vector </td></tr>
- <tr><td class="paramname">y</td><td>component of a vector </td></tr>
- <tr><td class="paramname">x</td><td>component of a vector </td></tr>
- </table>
- </dd>
-</dl>
-
-<p>Definition at line <a class="el" href="rs__quaternion_8rsh_source.html#l00111">111</a> of file <a class="el" href="rs__quaternion_8rsh_source.html">rs_quaternion.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="aa72a43cf3d7b5924de1ddfaa5766db09"></a><!-- doxytag: member="rs_quaternion.rsh::rsQuaternionLoadRotateUnit" ref="aa72a43cf3d7b5924de1ddfaa5766db09" args="(rs_quaternion *q, float rot, float x, float y, float z)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">static void rsQuaternionLoadRotateUnit </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> * </td>
- <td class="paramname"><em>q</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>rot</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>x</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>y</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>z</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td><code> [static]</code></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Loads a quaternion that represents a rotation about an arbitrary unit vector </p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">q</td><td>quaternion to set </td></tr>
- <tr><td class="paramname">rot</td><td>angle to rotate by </td></tr>
- <tr><td class="paramname">x</td><td>component of a vector </td></tr>
- <tr><td class="paramname">y</td><td>component of a vector </td></tr>
- <tr><td class="paramname">x</td><td>component of a vector </td></tr>
- </table>
- </dd>
-</dl>
-
-<p>Definition at line <a class="el" href="rs__quaternion_8rsh_source.html#l00090">90</a> of file <a class="el" href="rs__quaternion_8rsh_source.html">rs_quaternion.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a4f3d214912facf72f6a6d57e95aa3c3b"></a><!-- doxytag: member="rs_quaternion.rsh::rsQuaternionMultiply" ref="a4f3d214912facf72f6a6d57e95aa3c3b" args="(rs_quaternion *q, float s)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">static void rsQuaternionMultiply </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> * </td>
- <td class="paramname"><em>q</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>s</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td><code> [static]</code></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Multiply quaternion by a scalar </p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">q</td><td>quaternion to multiply </td></tr>
- <tr><td class="paramname">s</td><td>scalar </td></tr>
- </table>
- </dd>
-</dl>
-
-<p>Definition at line <a class="el" href="rs__quaternion_8rsh_source.html#l00061">61</a> of file <a class="el" href="rs__quaternion_8rsh_source.html">rs_quaternion.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a8bbbb286a2e2cb71b416c053f44844c3"></a><!-- doxytag: member="rs_quaternion.rsh::rsQuaternionMultiply" ref="a8bbbb286a2e2cb71b416c053f44844c3" args="(rs_quaternion *q, const rs_quaternion *rhs)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">static void rsQuaternionMultiply </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> * </td>
- <td class="paramname"><em>q</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> * </td>
- <td class="paramname"><em>rhs</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td><code> [static]</code></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Multiply quaternion by another quaternion </p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">q</td><td>destination quaternion </td></tr>
- <tr><td class="paramname">rhs</td><td>right hand side quaternion to multiply by </td></tr>
- </table>
- </dd>
-</dl>
-
-<p>Definition at line <a class="el" href="rs__quaternion_8rsh_source.html#l00163">163</a> of file <a class="el" href="rs__quaternion_8rsh_source.html">rs_quaternion.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="abb31aad2416044ad5bbf44ee7c838e2a"></a><!-- doxytag: member="rs_quaternion.rsh::rsQuaternionNormalize" ref="abb31aad2416044ad5bbf44ee7c838e2a" args="(rs_quaternion *q)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">static void rsQuaternionNormalize </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> * </td>
- <td class="paramname"><em>q</em></td><td>)</td>
- <td><code> [static]</code></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Normalizes the quaternion </p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">q</td><td>quaternion to normalize </td></tr>
- </table>
- </dd>
-</dl>
-
-<p>Definition at line <a class="el" href="rs__quaternion_8rsh_source.html#l00149">149</a> of file <a class="el" href="rs__quaternion_8rsh_source.html">rs_quaternion.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a5ff868dbc33e710a666a102fdcc6670a"></a><!-- doxytag: member="rs_quaternion.rsh::rsQuaternionSet" ref="a5ff868dbc33e710a666a102fdcc6670a" args="(rs_quaternion *q, float w, float x, float y, float z)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">static void rsQuaternionSet </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> * </td>
- <td class="paramname"><em>q</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>w</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>x</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>y</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>z</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td><code> [static]</code></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Set the quaternion components </p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">w</td><td>component </td></tr>
- <tr><td class="paramname">x</td><td>component </td></tr>
- <tr><td class="paramname">y</td><td>component </td></tr>
- <tr><td class="paramname">z</td><td>component </td></tr>
- </table>
- </dd>
-</dl>
-
-<p>Definition at line <a class="el" href="rs__quaternion_8rsh_source.html#l00035">35</a> of file <a class="el" href="rs__quaternion_8rsh_source.html">rs_quaternion.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a249782133e54f13a8096d1fbe295714d"></a><!-- doxytag: member="rs_quaternion.rsh::rsQuaternionSet" ref="a249782133e54f13a8096d1fbe295714d" args="(rs_quaternion *q, const rs_quaternion *rhs)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">static void rsQuaternionSet </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> * </td>
- <td class="paramname"><em>q</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> * </td>
- <td class="paramname"><em>rhs</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td><code> [static]</code></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Set the quaternion from another quaternion </p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">q</td><td>destination quaternion </td></tr>
- <tr><td class="paramname">rhs</td><td>source quaternion </td></tr>
- </table>
- </dd>
-</dl>
-
-<p>Definition at line <a class="el" href="rs__quaternion_8rsh_source.html#l00048">48</a> of file <a class="el" href="rs__quaternion_8rsh_source.html">rs_quaternion.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a7da94a30e287cbb8148771a5cd768dbd"></a><!-- doxytag: member="rs_quaternion.rsh::rsQuaternionSlerp" ref="a7da94a30e287cbb8148771a5cd768dbd" args="(rs_quaternion *q, const rs_quaternion *q0, const rs_quaternion *q1, float t)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">static void rsQuaternionSlerp </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> * </td>
- <td class="paramname"><em>q</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> * </td>
- <td class="paramname"><em>q0</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> * </td>
- <td class="paramname"><em>q1</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">float </td>
- <td class="paramname"><em>t</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td><code> [static]</code></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Performs spherical linear interpolation between two quaternions </p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">q</td><td>result quaternion from interpolation </td></tr>
- <tr><td class="paramname">q0</td><td>first param </td></tr>
- <tr><td class="paramname">q1</td><td>second param </td></tr>
- <tr><td class="paramname">t</td><td>how much to interpolate by </td></tr>
- </table>
- </dd>
-</dl>
-
-<p>Definition at line <a class="el" href="rs__quaternion_8rsh_source.html#l00182">182</a> of file <a class="el" href="rs__quaternion_8rsh_source.html">rs_quaternion.rsh</a>.</p>
-
-</div>
-</div>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/rs__quaternion_8rsh_source.html b/docs/html/reference/renderscript/rs__quaternion_8rsh_source.html
deleted file mode 100644
index d286018..0000000
--- a/docs/html/reference/renderscript/rs__quaternion_8rsh_source.html
+++ /dev/null
@@ -1,211 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_quaternion.rsh Source File</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
- <div id="navrow1" class="tabs">
- <ul class="tablist">
- <li><a href="index.html"><span>Overview</span></a></li>
- <li class="current"><a href="globals.html"><span>Globals</span></a></li>
- <li><a href="annotated.html"><span>Structs</span></a></li>
- </ul>
- </div>
-<div class="header">
- <div class="headertitle">
-<div class="title">/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_quaternion.rsh</div> </div>
-</div>
-<div class="contents">
-<a href="rs__quaternion_8rsh.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * Copyright (C) 2011 The Android Open Source Project</span>
-<a name="l00003"></a>00003 <span class="comment"> *</span>
-<a name="l00004"></a>00004 <span class="comment"> * Licensed under the Apache License, Version 2.0 (the "License");</span>
-<a name="l00005"></a>00005 <span class="comment"> * you may not use this file except in compliance with the License.</span>
-<a name="l00006"></a>00006 <span class="comment"> * You may obtain a copy of the License at</span>
-<a name="l00007"></a>00007 <span class="comment"> *</span>
-<a name="l00008"></a>00008 <span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span>
-<a name="l00011"></a>00011 <span class="comment"> * distributed under the License is distributed on an "AS IS" BASIS,</span>
-<a name="l00012"></a>00012 <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
-<a name="l00013"></a>00013 <span class="comment"> * See the License for the specific language governing permissions and</span>
-<a name="l00014"></a>00014 <span class="comment"> * limitations under the License.</span>
-<a name="l00015"></a>00015 <span class="comment"> */</span>
-<a name="l00016"></a>00016
-<a name="l00023"></a>00023 <span class="preprocessor">#ifndef __RS_QUATERNION_RSH__</span>
-<a name="l00024"></a>00024 <span class="preprocessor"></span><span class="preprocessor">#define __RS_QUATERNION_RSH__</span>
-<a name="l00025"></a>00025 <span class="preprocessor"></span>
-<a name="l00026"></a>00026
-<a name="l00034"></a>00034 <span class="keyword">static</span> <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00035"></a><a class="code" href="rs__quaternion_8rsh.html#a5ff868dbc33e710a666a102fdcc6670a">00035</a> <a class="code" href="rs__quaternion_8rsh.html#a5ff868dbc33e710a666a102fdcc6670a">rsQuaternionSet</a>(<a class="code" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q, <span class="keywordtype">float</span> w, <span class="keywordtype">float</span> x, <span class="keywordtype">float</span> y, <span class="keywordtype">float</span> z) {
-<a name="l00036"></a>00036 q->w = w;
-<a name="l00037"></a>00037 q->x = x;
-<a name="l00038"></a>00038 q->y = y;
-<a name="l00039"></a>00039 q->z = z;
-<a name="l00040"></a>00040 }
-<a name="l00041"></a>00041
-<a name="l00047"></a>00047 <span class="keyword">static</span> <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00048"></a><a class="code" href="rs__quaternion_8rsh.html#a249782133e54f13a8096d1fbe295714d">00048</a> <a class="code" href="rs__quaternion_8rsh.html#a5ff868dbc33e710a666a102fdcc6670a">rsQuaternionSet</a>(<a class="code" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q, const <a class="code" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *rhs) {
-<a name="l00049"></a>00049 q->w = rhs->w;
-<a name="l00050"></a>00050 q->x = rhs->x;
-<a name="l00051"></a>00051 q->y = rhs->y;
-<a name="l00052"></a>00052 q->z = rhs->z;
-<a name="l00053"></a>00053 }
-<a name="l00054"></a>00054
-<a name="l00060"></a>00060 <span class="keyword">static</span> <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00061"></a><a class="code" href="rs__quaternion_8rsh.html#a4f3d214912facf72f6a6d57e95aa3c3b">00061</a> <a class="code" href="rs__quaternion_8rsh.html#a4f3d214912facf72f6a6d57e95aa3c3b">rsQuaternionMultiply</a>(<a class="code" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q, <span class="keywordtype">float</span> s) {
-<a name="l00062"></a>00062 q->w *= s;
-<a name="l00063"></a>00063 q->x *= s;
-<a name="l00064"></a>00064 q->y *= s;
-<a name="l00065"></a>00065 q->z *= s;
-<a name="l00066"></a>00066 }
-<a name="l00067"></a>00067
-<a name="l00073"></a>00073 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l00074"></a><a class="code" href="rs__quaternion_8rsh.html#a5e6e493b9917336b0d9118fdd4e91444">00074</a> <a class="code" href="rs__quaternion_8rsh.html#a5e6e493b9917336b0d9118fdd4e91444">rsQuaternionAdd</a>(<a class="code" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q, <span class="keyword">const</span> <a class="code" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *rhs) {
-<a name="l00075"></a>00075 q->w *= rhs->w;
-<a name="l00076"></a>00076 q->x *= rhs->x;
-<a name="l00077"></a>00077 q->y *= rhs->y;
-<a name="l00078"></a>00078 q->z *= rhs->z;
-<a name="l00079"></a>00079 }
-<a name="l00080"></a>00080
-<a name="l00089"></a>00089 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l00090"></a><a class="code" href="rs__quaternion_8rsh.html#aa72a43cf3d7b5924de1ddfaa5766db09">00090</a> <a class="code" href="rs__quaternion_8rsh.html#aa72a43cf3d7b5924de1ddfaa5766db09">rsQuaternionLoadRotateUnit</a>(<a class="code" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q, <span class="keywordtype">float</span> rot, <span class="keywordtype">float</span> x, <span class="keywordtype">float</span> y, <span class="keywordtype">float</span> z) {
-<a name="l00091"></a>00091 rot *= (float)(M_PI / 180.0f) * 0.5f;
-<a name="l00092"></a>00092 <span class="keywordtype">float</span> c = <a class="code" href="rs__cl_8rsh.html#a8eec7aeb4b0c46b06cbcd1a3ac3e6f05">cos</a>(rot);
-<a name="l00093"></a>00093 <span class="keywordtype">float</span> s = <a class="code" href="rs__cl_8rsh.html#a8c8cd526b44eb55aede77cf659f24306">sin</a>(rot);
-<a name="l00094"></a>00094
-<a name="l00095"></a>00095 q->w = c;
-<a name="l00096"></a>00096 q->x = x * s;
-<a name="l00097"></a>00097 q->y = y * s;
-<a name="l00098"></a>00098 q->z = z * s;
-<a name="l00099"></a>00099 }
-<a name="l00100"></a>00100
-<a name="l00110"></a>00110 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l00111"></a><a class="code" href="rs__quaternion_8rsh.html#adf4423c521e34f3cf29d5dd5b5a93de0">00111</a> <a class="code" href="rs__quaternion_8rsh.html#adf4423c521e34f3cf29d5dd5b5a93de0">rsQuaternionLoadRotate</a>(<a class="code" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q, <span class="keywordtype">float</span> rot, <span class="keywordtype">float</span> x, <span class="keywordtype">float</span> y, <span class="keywordtype">float</span> z) {
-<a name="l00112"></a>00112 <span class="keyword">const</span> <span class="keywordtype">float</span> len = x*x + y*y + z*z;
-<a name="l00113"></a>00113 <span class="keywordflow">if</span> (len != 1) {
-<a name="l00114"></a>00114 <span class="keyword">const</span> <span class="keywordtype">float</span> recipLen = 1.f / <a class="code" href="rs__cl_8rsh.html#a92da0faef80c4d8f66e954c8c169a729">sqrt</a>(len);
-<a name="l00115"></a>00115 x *= recipLen;
-<a name="l00116"></a>00116 y *= recipLen;
-<a name="l00117"></a>00117 z *= recipLen;
-<a name="l00118"></a>00118 }
-<a name="l00119"></a>00119 <a class="code" href="rs__quaternion_8rsh.html#aa72a43cf3d7b5924de1ddfaa5766db09">rsQuaternionLoadRotateUnit</a>(q, rot, x, y, z);
-<a name="l00120"></a>00120 }
-<a name="l00121"></a>00121
-<a name="l00126"></a>00126 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l00127"></a><a class="code" href="rs__quaternion_8rsh.html#acd670264e49743d35f38028b8e2a8800">00127</a> <a class="code" href="rs__quaternion_8rsh.html#acd670264e49743d35f38028b8e2a8800">rsQuaternionConjugate</a>(<a class="code" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q) {
-<a name="l00128"></a>00128 q->x = -q->x;
-<a name="l00129"></a>00129 q->y = -q->y;
-<a name="l00130"></a>00130 q->z = -q->z;
-<a name="l00131"></a>00131 }
-<a name="l00132"></a>00132
-<a name="l00139"></a>00139 <span class="keyword">static</span> <span class="keywordtype">float</span>
-<a name="l00140"></a><a class="code" href="rs__quaternion_8rsh.html#aa810f8857439564e7b3be771f47b40ca">00140</a> <a class="code" href="rs__quaternion_8rsh.html#aa810f8857439564e7b3be771f47b40ca">rsQuaternionDot</a>(<span class="keyword">const</span> <a class="code" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q0, <span class="keyword">const</span> <a class="code" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q1) {
-<a name="l00141"></a>00141 <span class="keywordflow">return</span> q0->w*q1->w + q0->x*q1->x + q0->y*q1->y + q0->z*q1->z;
-<a name="l00142"></a>00142 }
-<a name="l00143"></a>00143
-<a name="l00148"></a>00148 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l00149"></a><a class="code" href="rs__quaternion_8rsh.html#abb31aad2416044ad5bbf44ee7c838e2a">00149</a> <a class="code" href="rs__quaternion_8rsh.html#abb31aad2416044ad5bbf44ee7c838e2a">rsQuaternionNormalize</a>(<a class="code" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q) {
-<a name="l00150"></a>00150 <span class="keyword">const</span> <span class="keywordtype">float</span> len = <a class="code" href="rs__quaternion_8rsh.html#aa810f8857439564e7b3be771f47b40ca">rsQuaternionDot</a>(q, q);
-<a name="l00151"></a>00151 <span class="keywordflow">if</span> (len != 1) {
-<a name="l00152"></a>00152 <span class="keyword">const</span> <span class="keywordtype">float</span> recipLen = 1.f / <a class="code" href="rs__cl_8rsh.html#a92da0faef80c4d8f66e954c8c169a729">sqrt</a>(len);
-<a name="l00153"></a>00153 <a class="code" href="rs__quaternion_8rsh.html#a4f3d214912facf72f6a6d57e95aa3c3b">rsQuaternionMultiply</a>(q, recipLen);
-<a name="l00154"></a>00154 }
-<a name="l00155"></a>00155 }
-<a name="l00156"></a>00156
-<a name="l00162"></a>00162 <span class="keyword">static</span> <span class="keywordtype">void</span> __attribute__((overloadable))
-<a name="l00163"></a><a class="code" href="rs__quaternion_8rsh.html#a8bbbb286a2e2cb71b416c053f44844c3">00163</a> <a class="code" href="rs__quaternion_8rsh.html#a4f3d214912facf72f6a6d57e95aa3c3b">rsQuaternionMultiply</a>(<a class="code" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q, const <a class="code" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *rhs) {
-<a name="l00164"></a>00164 <a class="code" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> qtmp;
-<a name="l00165"></a>00165 <a class="code" href="rs__quaternion_8rsh.html#a5ff868dbc33e710a666a102fdcc6670a">rsQuaternionSet</a>(&qtmp, q);
-<a name="l00166"></a>00166
-<a name="l00167"></a>00167 q->w = qtmp.w*rhs->w - qtmp.x*rhs->x - qtmp.y*rhs->y - qtmp.z*rhs->z;
-<a name="l00168"></a>00168 q->x = qtmp.w*rhs->x + qtmp.x*rhs->w + qtmp.y*rhs->z - qtmp.z*rhs->y;
-<a name="l00169"></a>00169 q->y = qtmp.w*rhs->y + qtmp.y*rhs->w + qtmp.z*rhs->x - qtmp.x*rhs->z;
-<a name="l00170"></a>00170 q->z = qtmp.w*rhs->z + qtmp.z*rhs->w + qtmp.x*rhs->y - qtmp.y*rhs->x;
-<a name="l00171"></a>00171 <a class="code" href="rs__quaternion_8rsh.html#abb31aad2416044ad5bbf44ee7c838e2a">rsQuaternionNormalize</a>(q);
-<a name="l00172"></a>00172 }
-<a name="l00173"></a>00173
-<a name="l00181"></a>00181 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l00182"></a><a class="code" href="rs__quaternion_8rsh.html#a7da94a30e287cbb8148771a5cd768dbd">00182</a> <a class="code" href="rs__quaternion_8rsh.html#a7da94a30e287cbb8148771a5cd768dbd">rsQuaternionSlerp</a>(<a class="code" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q, <span class="keyword">const</span> <a class="code" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q0, <span class="keyword">const</span> <a class="code" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q1, <span class="keywordtype">float</span> t) {
-<a name="l00183"></a>00183 <span class="keywordflow">if</span> (t <= 0.0f) {
-<a name="l00184"></a>00184 <a class="code" href="rs__quaternion_8rsh.html#a5ff868dbc33e710a666a102fdcc6670a">rsQuaternionSet</a>(q, q0);
-<a name="l00185"></a>00185 <span class="keywordflow">return</span>;
-<a name="l00186"></a>00186 }
-<a name="l00187"></a>00187 <span class="keywordflow">if</span> (t >= 1.0f) {
-<a name="l00188"></a>00188 <a class="code" href="rs__quaternion_8rsh.html#a5ff868dbc33e710a666a102fdcc6670a">rsQuaternionSet</a>(q, q1);
-<a name="l00189"></a>00189 <span class="keywordflow">return</span>;
-<a name="l00190"></a>00190 }
-<a name="l00191"></a>00191
-<a name="l00192"></a>00192 <a class="code" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> tempq0, tempq1;
-<a name="l00193"></a>00193 <a class="code" href="rs__quaternion_8rsh.html#a5ff868dbc33e710a666a102fdcc6670a">rsQuaternionSet</a>(&tempq0, q0);
-<a name="l00194"></a>00194 <a class="code" href="rs__quaternion_8rsh.html#a5ff868dbc33e710a666a102fdcc6670a">rsQuaternionSet</a>(&tempq1, q1);
-<a name="l00195"></a>00195
-<a name="l00196"></a>00196 <span class="keywordtype">float</span> angle = <a class="code" href="rs__quaternion_8rsh.html#aa810f8857439564e7b3be771f47b40ca">rsQuaternionDot</a>(q0, q1);
-<a name="l00197"></a>00197 <span class="keywordflow">if</span> (angle < 0) {
-<a name="l00198"></a>00198 <a class="code" href="rs__quaternion_8rsh.html#a4f3d214912facf72f6a6d57e95aa3c3b">rsQuaternionMultiply</a>(&tempq0, -1.0f);
-<a name="l00199"></a>00199 angle *= -1.0f;
-<a name="l00200"></a>00200 }
-<a name="l00201"></a>00201
-<a name="l00202"></a>00202 <span class="keywordtype">float</span> scale, invScale;
-<a name="l00203"></a>00203 <span class="keywordflow">if</span> (angle + 1.0f > 0.05f) {
-<a name="l00204"></a>00204 <span class="keywordflow">if</span> (1.0f - angle >= 0.05f) {
-<a name="l00205"></a>00205 <span class="keywordtype">float</span> theta = <a class="code" href="rs__cl_8rsh.html#a07648648c7f857cfd1479821d4389751">acos</a>(angle);
-<a name="l00206"></a>00206 <span class="keywordtype">float</span> invSinTheta = 1.0f / <a class="code" href="rs__cl_8rsh.html#a8c8cd526b44eb55aede77cf659f24306">sin</a>(theta);
-<a name="l00207"></a>00207 scale = <a class="code" href="rs__cl_8rsh.html#a8c8cd526b44eb55aede77cf659f24306">sin</a>(theta * (1.0f - t)) * invSinTheta;
-<a name="l00208"></a>00208 invScale = <a class="code" href="rs__cl_8rsh.html#a8c8cd526b44eb55aede77cf659f24306">sin</a>(theta * t) * invSinTheta;
-<a name="l00209"></a>00209 } <span class="keywordflow">else</span> {
-<a name="l00210"></a>00210 scale = 1.0f - t;
-<a name="l00211"></a>00211 invScale = t;
-<a name="l00212"></a>00212 }
-<a name="l00213"></a>00213 } <span class="keywordflow">else</span> {
-<a name="l00214"></a>00214 <a class="code" href="rs__quaternion_8rsh.html#a5ff868dbc33e710a666a102fdcc6670a">rsQuaternionSet</a>(&tempq1, tempq0.z, -tempq0.y, tempq0.x, -tempq0.w);
-<a name="l00215"></a>00215 scale = <a class="code" href="rs__cl_8rsh.html#a8c8cd526b44eb55aede77cf659f24306">sin</a>(M_PI * (0.5f - t));
-<a name="l00216"></a>00216 invScale = <a class="code" href="rs__cl_8rsh.html#a8c8cd526b44eb55aede77cf659f24306">sin</a>(M_PI * t);
-<a name="l00217"></a>00217 }
-<a name="l00218"></a>00218
-<a name="l00219"></a>00219 <a class="code" href="rs__quaternion_8rsh.html#a5ff868dbc33e710a666a102fdcc6670a">rsQuaternionSet</a>(q, tempq0.w*scale + tempq1.w*invScale, tempq0.x*scale + tempq1.x*invScale,
-<a name="l00220"></a>00220 tempq0.y*scale + tempq1.y*invScale, tempq0.z*scale + tempq1.z*invScale);
-<a name="l00221"></a>00221 }
-<a name="l00222"></a>00222
-<a name="l00228"></a><a class="code" href="rs__quaternion_8rsh.html#a7726c524868c49892976fec53ea0693b">00228</a> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="rs__quaternion_8rsh.html#a7726c524868c49892976fec53ea0693b">rsQuaternionGetMatrixUnit</a>(<a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a> *m, <span class="keyword">const</span> <a class="code" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a> *q) {
-<a name="l00229"></a>00229 <span class="keywordtype">float</span> xx = q->x * q->x;
-<a name="l00230"></a>00230 <span class="keywordtype">float</span> xy = q->x * q->y;
-<a name="l00231"></a>00231 <span class="keywordtype">float</span> xz = q->x * q->z;
-<a name="l00232"></a>00232 <span class="keywordtype">float</span> xw = q->x * q->w;
-<a name="l00233"></a>00233 <span class="keywordtype">float</span> yy = q->y * q->y;
-<a name="l00234"></a>00234 <span class="keywordtype">float</span> yz = q->y * q->z;
-<a name="l00235"></a>00235 <span class="keywordtype">float</span> yw = q->y * q->w;
-<a name="l00236"></a>00236 <span class="keywordtype">float</span> zz = q->z * q->z;
-<a name="l00237"></a>00237 <span class="keywordtype">float</span> zw = q->z * q->w;
-<a name="l00238"></a>00238
-<a name="l00239"></a>00239 m->m[0] = 1.0f - 2.0f * ( yy + zz );
-<a name="l00240"></a>00240 m->m[4] = 2.0f * ( xy - zw );
-<a name="l00241"></a>00241 m->m[8] = 2.0f * ( xz + yw );
-<a name="l00242"></a>00242 m->m[1] = 2.0f * ( xy + zw );
-<a name="l00243"></a>00243 m->m[5] = 1.0f - 2.0f * ( xx + zz );
-<a name="l00244"></a>00244 m->m[9] = 2.0f * ( yz - xw );
-<a name="l00245"></a>00245 m->m[2] = 2.0f * ( xz - yw );
-<a name="l00246"></a>00246 m->m[6] = 2.0f * ( yz + xw );
-<a name="l00247"></a>00247 m->m[10] = 1.0f - 2.0f * ( xx + yy );
-<a name="l00248"></a>00248 m->m[3] = m->m[7] = m->m[11] = m->m[12] = m->m[13] = m->m[14] = 0.0f;
-<a name="l00249"></a>00249 m->m[15] = 1.0f;
-<a name="l00250"></a>00250 }
-<a name="l00251"></a>00251
-<a name="l00252"></a>00252 <span class="preprocessor">#endif</span>
-<a name="l00253"></a>00253 <span class="preprocessor"></span>
-</pre></div></div>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/rs__sampler_8rsh.html b/docs/html/reference/renderscript/rs__sampler_8rsh.html
deleted file mode 100644
index 6393ade..0000000
--- a/docs/html/reference/renderscript/rs__sampler_8rsh.html
+++ /dev/null
@@ -1,175 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_sampler.rsh File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
- <div id="navrow1" class="tabs">
- <ul class="tablist">
- <li><a href="index.html"><span>Overview</span></a></li>
- <li class="current"><a href="globals.html"><span>Globals</span></a></li>
- <li><a href="annotated.html"><span>Structs</span></a></li>
- </ul>
- </div>
-</div>
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle">
-<div class="title">/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_sampler.rsh File Reference</div> </div>
-</div>
-<div class="contents">
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">rs_sampler_value </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__sampler_8rsh.html#acb1bec2c3d1edd752dd60499c8db58a4">rsSamplerGetMinification</a> (<a class="el" href="structrs__sampler.html">rs_sampler</a> s)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">rs_sampler_value </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__sampler_8rsh.html#a5bddb73826cd20a79c31f012a4637e83">rsSamplerGetMagnification</a> (<a class="el" href="structrs__sampler.html">rs_sampler</a> s)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">rs_sampler_value </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__sampler_8rsh.html#a68a7ab6724019c6e72fae8eb45aa48dd">rsSamplerGetWrapS</a> (<a class="el" href="structrs__sampler.html">rs_sampler</a> s)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">rs_sampler_value </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__sampler_8rsh.html#ab6b25d3b9afa16f418e2dee78ebb4a75">rsSamplerGetWrapT</a> (<a class="el" href="structrs__sampler.html">rs_sampler</a> s)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__sampler_8rsh.html#ab1e79984609469604cba8e2b76a98844">rsSamplerGetAnisotropy</a> (<a class="el" href="structrs__sampler.html">rs_sampler</a> s)</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Sampler routines. </p>
-
-<p>Definition in file <a class="el" href="rs__sampler_8rsh_source.html">rs_sampler.rsh</a>.</p>
-</div><hr/><h2>Function Documentation</h2>
-<a class="anchor" id="ab1e79984609469604cba8e2b76a98844"></a><!-- doxytag: member="rs_sampler.rsh::rsSamplerGetAnisotropy" ref="ab1e79984609469604cba8e2b76a98844" args="(rs_sampler s)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float rsSamplerGetAnisotropy </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__sampler.html">rs_sampler</a> </td>
- <td class="paramname"><em>s</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Get sampler anisotropy</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">s</td><td>sampler to query </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>anisotropy </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a5bddb73826cd20a79c31f012a4637e83"></a><!-- doxytag: member="rs_sampler.rsh::rsSamplerGetMagnification" ref="a5bddb73826cd20a79c31f012a4637e83" args="(rs_sampler s)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">rs_sampler_value rsSamplerGetMagnification </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__sampler.html">rs_sampler</a> </td>
- <td class="paramname"><em>s</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Get sampler magnification value</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">s</td><td>sampler to query </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>magnification value </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="acb1bec2c3d1edd752dd60499c8db58a4"></a><!-- doxytag: member="rs_sampler.rsh::rsSamplerGetMinification" ref="acb1bec2c3d1edd752dd60499c8db58a4" args="(rs_sampler s)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">rs_sampler_value rsSamplerGetMinification </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__sampler.html">rs_sampler</a> </td>
- <td class="paramname"><em>s</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Get sampler minification value</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">s</td><td>sampler to query </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>minification value </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a68a7ab6724019c6e72fae8eb45aa48dd"></a><!-- doxytag: member="rs_sampler.rsh::rsSamplerGetWrapS" ref="a68a7ab6724019c6e72fae8eb45aa48dd" args="(rs_sampler s)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">rs_sampler_value rsSamplerGetWrapS </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__sampler.html">rs_sampler</a> </td>
- <td class="paramname"><em>s</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Get sampler wrap S value</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">s</td><td>sampler to query </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>wrap S value </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="ab6b25d3b9afa16f418e2dee78ebb4a75"></a><!-- doxytag: member="rs_sampler.rsh::rsSamplerGetWrapT" ref="ab6b25d3b9afa16f418e2dee78ebb4a75" args="(rs_sampler s)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">rs_sampler_value rsSamplerGetWrapT </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__sampler.html">rs_sampler</a> </td>
- <td class="paramname"><em>s</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Get sampler wrap T value</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">s</td><td>sampler to query </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>wrap T value </dd></dl>
-
-</div>
-</div>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/rs__sampler_8rsh_source.html b/docs/html/reference/renderscript/rs__sampler_8rsh_source.html
deleted file mode 100644
index 82a7cfa..0000000
--- a/docs/html/reference/renderscript/rs__sampler_8rsh_source.html
+++ /dev/null
@@ -1,75 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_sampler.rsh Source File</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
- <div id="navrow1" class="tabs">
- <ul class="tablist">
- <li><a href="index.html"><span>Overview</span></a></li>
- <li class="current"><a href="globals.html"><span>Globals</span></a></li>
- <li><a href="annotated.html"><span>Structs</span></a></li>
- </ul>
- </div>
-<div class="header">
- <div class="headertitle">
-<div class="title">/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_sampler.rsh</div> </div>
-</div>
-<div class="contents">
-<a href="rs__sampler_8rsh.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * Copyright (C) 2012 The Android Open Source Project</span>
-<a name="l00003"></a>00003 <span class="comment"> *</span>
-<a name="l00004"></a>00004 <span class="comment"> * Licensed under the Apache License, Version 2.0 (the "License");</span>
-<a name="l00005"></a>00005 <span class="comment"> * you may not use this file except in compliance with the License.</span>
-<a name="l00006"></a>00006 <span class="comment"> * You may obtain a copy of the License at</span>
-<a name="l00007"></a>00007 <span class="comment"> *</span>
-<a name="l00008"></a>00008 <span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span>
-<a name="l00011"></a>00011 <span class="comment"> * distributed under the License is distributed on an "AS IS" BASIS,</span>
-<a name="l00012"></a>00012 <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
-<a name="l00013"></a>00013 <span class="comment"> * See the License for the specific language governing permissions and</span>
-<a name="l00014"></a>00014 <span class="comment"> * limitations under the License.</span>
-<a name="l00015"></a>00015 <span class="comment"> */</span>
-<a name="l00016"></a>00016
-<a name="l00023"></a>00023 <span class="preprocessor">#ifndef __RS_SAMPLER_RSH__</span>
-<a name="l00024"></a>00024 <span class="preprocessor"></span><span class="preprocessor">#define __RS_SAMPLER_RSH__</span>
-<a name="l00025"></a>00025 <span class="preprocessor"></span>
-<a name="l00026"></a>00026 <span class="comment">// New API's</span>
-<a name="l00027"></a>00027 <span class="preprocessor">#if (defined(RS_VERSION) && (RS_VERSION >= 16))</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span>
-<a name="l00035"></a>00035 <span class="keyword">extern</span> rs_sampler_value __attribute__((overloadable))
-<a name="l00036"></a>00036 <a class="code" href="rs__sampler_8rsh.html#acb1bec2c3d1edd752dd60499c8db58a4">rsSamplerGetMinification</a>(<a class="code" href="structrs__sampler.html" title="Opaque handle to a RenderScript sampler object.">rs_sampler</a> s);
-<a name="l00037"></a>00037
-<a name="l00044"></a>00044 extern rs_sampler_value __attribute__((overloadable))
-<a name="l00045"></a>00045 <a class="code" href="rs__sampler_8rsh.html#a5bddb73826cd20a79c31f012a4637e83">rsSamplerGetMagnification</a>(<a class="code" href="structrs__sampler.html" title="Opaque handle to a RenderScript sampler object.">rs_sampler</a> s);
-<a name="l00046"></a>00046
-<a name="l00053"></a>00053 extern rs_sampler_value __attribute__((overloadable))
-<a name="l00054"></a>00054 <a class="code" href="rs__sampler_8rsh.html#a68a7ab6724019c6e72fae8eb45aa48dd">rsSamplerGetWrapS</a>(<a class="code" href="structrs__sampler.html" title="Opaque handle to a RenderScript sampler object.">rs_sampler</a> s);
-<a name="l00055"></a>00055
-<a name="l00062"></a>00062 extern rs_sampler_value __attribute__((overloadable))
-<a name="l00063"></a>00063 <a class="code" href="rs__sampler_8rsh.html#ab6b25d3b9afa16f418e2dee78ebb4a75">rsSamplerGetWrapT</a>(<a class="code" href="structrs__sampler.html" title="Opaque handle to a RenderScript sampler object.">rs_sampler</a> s);
-<a name="l00064"></a>00064
-<a name="l00071"></a>00071 extern <span class="keywordtype">float</span> __attribute__((overloadable))
-<a name="l00072"></a>00072 <a class="code" href="rs__sampler_8rsh.html#ab1e79984609469604cba8e2b76a98844">rsSamplerGetAnisotropy</a>(<a class="code" href="structrs__sampler.html" title="Opaque handle to a RenderScript sampler object.">rs_sampler</a> s);
-<a name="l00073"></a>00073
-<a name="l00074"></a>00074 <span class="preprocessor">#endif // (defined(RS_VERSION) && (RS_VERSION >= 16))</span>
-<a name="l00075"></a>00075 <span class="preprocessor"></span>
-<a name="l00076"></a>00076 <span class="preprocessor">#endif // __RS_SAMPLER_RSH__</span>
-<a name="l00077"></a>00077 <span class="preprocessor"></span>
-</pre></div></div>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/rs__time_8rsh.html b/docs/html/reference/renderscript/rs__time_8rsh.html
deleted file mode 100644
index 8be550a..0000000
--- a/docs/html/reference/renderscript/rs__time_8rsh.html
+++ /dev/null
@@ -1,194 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_time.rsh File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
- <div id="navrow1" class="tabs">
- <ul class="tablist">
- <li><a href="index.html"><span>Overview</span></a></li>
- <li class="current"><a href="globals.html"><span>Globals</span></a></li>
- <li><a href="annotated.html"><span>Structs</span></a></li>
- </ul>
- </div>
-</div>
-<div class="header">
- <div class="summary">
-<a href="#nested-classes">Data Structures</a> |
-<a href="#typedef-members">Typedefs</a> |
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle">
-<div class="title">/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_time.rsh File Reference</div> </div>
-</div>
-<div class="contents">
-<table class="memberdecls">
-<tr><td colspan="2"><h2><a name="nested-classes"></a>
-Data Structures</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__tm.html">rs_tm</a></td></tr>
-<tr><td colspan="2"><h2><a name="typedef-members"></a>
-Typedefs</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef int </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__time_8rsh.html#ad2b4759a0a6a98bd79b7ad82a4b057d6">rs_time_t</a></td></tr>
-<tr><td colspan="2"><h2><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__time_8rsh.html#ad2b4759a0a6a98bd79b7ad82a4b057d6">rs_time_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__time_8rsh.html#a555f9324acb8c3d0c6f09a1d05478ce2">rsTime</a> (<a class="el" href="rs__time_8rsh.html#ad2b4759a0a6a98bd79b7ad82a4b057d6">rs_time_t</a> *timer)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="structrs__tm.html">rs_tm</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__time_8rsh.html#a08a8fcadae964f7416aef487da624110">rsLocaltime</a> (<a class="el" href="structrs__tm.html">rs_tm</a> *local, const <a class="el" href="rs__time_8rsh.html#ad2b4759a0a6a98bd79b7ad82a4b057d6">rs_time_t</a> *timer)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a996e72f71b11a5bb8b3b7b6936b1516d">int64_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__time_8rsh.html#a3c406e51a769718dd1c760518b9cad44">rsUptimeMillis</a> (void)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="rs__types_8rsh.html#a996e72f71b11a5bb8b3b7b6936b1516d">int64_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__time_8rsh.html#a24e2cc12acf1e7fdd857d1a48981395d">rsUptimeNanos</a> (void)</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__time_8rsh.html#adea2682186fd903752431ad848bd8bf4">rsGetDt</a> (void)</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>RenderScript time routines. </p>
-<p>This file contains RenderScript functions relating to time and date manipulation. </p>
-
-<p>Definition in file <a class="el" href="rs__time_8rsh_source.html">rs_time.rsh</a>.</p>
-</div><hr/><h2>Typedef Documentation</h2>
-<a class="anchor" id="ad2b4759a0a6a98bd79b7ad82a4b057d6"></a><!-- doxytag: member="rs_time.rsh::rs_time_t" ref="ad2b4759a0a6a98bd79b7ad82a4b057d6" args="" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef int <a class="el" href="rs__time_8rsh.html#ad2b4759a0a6a98bd79b7ad82a4b057d6">rs_time_t</a></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Calendar time interpreted as seconds elapsed since the Epoch (00:00:00 on January 1, 1970, Coordinated Universal Time (UTC)). </p>
-
-<p>Definition at line <a class="el" href="rs__time_8rsh_source.html#l00031">31</a> of file <a class="el" href="rs__time_8rsh_source.html">rs_time.rsh</a>.</p>
-
-</div>
-</div>
-<hr/><h2>Function Documentation</h2>
-<a class="anchor" id="adea2682186fd903752431ad848bd8bf4"></a><!-- doxytag: member="rs_time.rsh::rsGetDt" ref="adea2682186fd903752431ad848bd8bf4" args="(void)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">float rsGetDt </td>
- <td>(</td>
- <td class="paramtype">void </td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Returns the time in seconds since this function was last called in this script.</p>
-<dl class="return"><dt><b>Returns:</b></dt><dd>Time in seconds. </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a08a8fcadae964f7416aef487da624110"></a><!-- doxytag: member="rs_time.rsh::rsLocaltime" ref="a08a8fcadae964f7416aef487da624110" args="(rs_tm *local, const rs_time_t *timer)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="structrs__tm.html">rs_tm</a>* rsLocaltime </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="structrs__tm.html">rs_tm</a> * </td>
- <td class="paramname"><em>local</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="rs__time_8rsh.html#ad2b4759a0a6a98bd79b7ad82a4b057d6">rs_time_t</a> * </td>
- <td class="paramname"><em>timer</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Converts the time specified by <code>timer</code> into broken-down time and stores it in <code>local</code>. This function also returns a pointer to <code>local</code>. If <code>local</code> is NULL, this function does nothing and returns NULL.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">local</td><td>Broken-down time. </td></tr>
- <tr><td class="paramname">timer</td><td>Input time as calendar time.</td></tr>
- </table>
- </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>Pointer to broken-down time (same as input <code>local</code>). </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a555f9324acb8c3d0c6f09a1d05478ce2"></a><!-- doxytag: member="rs_time.rsh::rsTime" ref="a555f9324acb8c3d0c6f09a1d05478ce2" args="(rs_time_t *timer)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="rs__time_8rsh.html#ad2b4759a0a6a98bd79b7ad82a4b057d6">rs_time_t</a> rsTime </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="rs__time_8rsh.html#ad2b4759a0a6a98bd79b7ad82a4b057d6">rs_time_t</a> * </td>
- <td class="paramname"><em>timer</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Returns the number of seconds since the Epoch (00:00:00 UTC, January 1, 1970). If <code>timer</code> is non-NULL, the result is also stored in the memory pointed to by this variable. If an error occurs, a value of -1 is returned.</p>
-<dl><dt><b>Parameters:</b></dt><dd>
- <table class="params">
- <tr><td class="paramname">timer</td><td>Location to also store the returned calendar time.</td></tr>
- </table>
- </dd>
-</dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>Seconds since the Epoch. </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a3c406e51a769718dd1c760518b9cad44"></a><!-- doxytag: member="rs_time.rsh::rsUptimeMillis" ref="a3c406e51a769718dd1c760518b9cad44" args="(void)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="rs__types_8rsh.html#a996e72f71b11a5bb8b3b7b6936b1516d">int64_t</a> rsUptimeMillis </td>
- <td>(</td>
- <td class="paramtype">void </td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Returns the current system clock (uptime) in milliseconds.</p>
-<dl class="return"><dt><b>Returns:</b></dt><dd>Uptime in milliseconds. </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="a24e2cc12acf1e7fdd857d1a48981395d"></a><!-- doxytag: member="rs_time.rsh::rsUptimeNanos" ref="a24e2cc12acf1e7fdd857d1a48981395d" args="(void)" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="rs__types_8rsh.html#a996e72f71b11a5bb8b3b7b6936b1516d">int64_t</a> rsUptimeNanos </td>
- <td>(</td>
- <td class="paramtype">void </td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Returns the current system clock (uptime) in nanoseconds.</p>
-<dl class="return"><dt><b>Returns:</b></dt><dd>Uptime in nanoseconds. </dd></dl>
-
-</div>
-</div>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/rs__time_8rsh_source.html b/docs/html/reference/renderscript/rs__time_8rsh_source.html
deleted file mode 100644
index 482fd77..0000000
--- a/docs/html/reference/renderscript/rs__time_8rsh_source.html
+++ /dev/null
@@ -1,83 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_time.rsh Source File</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
- <div id="navrow1" class="tabs">
- <ul class="tablist">
- <li><a href="index.html"><span>Overview</span></a></li>
- <li class="current"><a href="globals.html"><span>Globals</span></a></li>
- <li><a href="annotated.html"><span>Structs</span></a></li>
- </ul>
- </div>
-<div class="header">
- <div class="headertitle">
-<div class="title">/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_time.rsh</div> </div>
-</div>
-<div class="contents">
-<a href="rs__time_8rsh.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * Copyright (C) 2011 The Android Open Source Project</span>
-<a name="l00003"></a>00003 <span class="comment"> *</span>
-<a name="l00004"></a>00004 <span class="comment"> * Licensed under the Apache License, Version 2.0 (the "License");</span>
-<a name="l00005"></a>00005 <span class="comment"> * you may not use this file except in compliance with the License.</span>
-<a name="l00006"></a>00006 <span class="comment"> * You may obtain a copy of the License at</span>
-<a name="l00007"></a>00007 <span class="comment"> *</span>
-<a name="l00008"></a>00008 <span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span>
-<a name="l00011"></a>00011 <span class="comment"> * distributed under the License is distributed on an "AS IS" BASIS,</span>
-<a name="l00012"></a>00012 <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
-<a name="l00013"></a>00013 <span class="comment"> * See the License for the specific language governing permissions and</span>
-<a name="l00014"></a>00014 <span class="comment"> * limitations under the License.</span>
-<a name="l00015"></a>00015 <span class="comment"> */</span>
-<a name="l00016"></a>00016
-<a name="l00024"></a>00024 <span class="preprocessor">#ifndef __RS_TIME_RSH__</span>
-<a name="l00025"></a>00025 <span class="preprocessor"></span><span class="preprocessor">#define __RS_TIME_RSH__</span>
-<a name="l00026"></a>00026 <span class="preprocessor"></span>
-<a name="l00031"></a><a class="code" href="rs__time_8rsh.html#ad2b4759a0a6a98bd79b7ad82a4b057d6">00031</a> <span class="keyword">typedef</span> <span class="keywordtype">int</span> <a class="code" href="rs__time_8rsh.html#ad2b4759a0a6a98bd79b7ad82a4b057d6">rs_time_t</a>;
-<a name="l00032"></a>00032
-<a name="l00049"></a><a class="code" href="structrs__tm.html">00049</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
-<a name="l00050"></a><a class="code" href="structrs__tm.html#ae1590aa8850370a4712da801edb8da9e">00050</a> <span class="keywordtype">int</span> <a class="code" href="structrs__tm.html#ae1590aa8850370a4712da801edb8da9e" title="seconds">tm_sec</a>;
-<a name="l00051"></a><a class="code" href="structrs__tm.html#abd4bd6ccf0d1f20859ecaecf850ce85b">00051</a> <span class="keywordtype">int</span> <a class="code" href="structrs__tm.html#abd4bd6ccf0d1f20859ecaecf850ce85b" title="minutes">tm_min</a>;
-<a name="l00052"></a><a class="code" href="structrs__tm.html#afb46962bc20f8724567981adc3711b5a">00052</a> <span class="keywordtype">int</span> <a class="code" href="structrs__tm.html#afb46962bc20f8724567981adc3711b5a" title="hours">tm_hour</a>;
-<a name="l00053"></a><a class="code" href="structrs__tm.html#ac87e43828f05bf62d0c770889b81ff15">00053</a> <span class="keywordtype">int</span> <a class="code" href="structrs__tm.html#ac87e43828f05bf62d0c770889b81ff15" title="day of the month">tm_mday</a>;
-<a name="l00054"></a><a class="code" href="structrs__tm.html#a34a5466d376e405f343ed4e1592d7832">00054</a> <span class="keywordtype">int</span> <a class="code" href="structrs__tm.html#a34a5466d376e405f343ed4e1592d7832" title="month">tm_mon</a>;
-<a name="l00055"></a><a class="code" href="structrs__tm.html#a74e582a615a448949969a0982d8a62d2">00055</a> <span class="keywordtype">int</span> <a class="code" href="structrs__tm.html#a74e582a615a448949969a0982d8a62d2" title="year">tm_year</a>;
-<a name="l00056"></a><a class="code" href="structrs__tm.html#a4d40217d3cd15b51e0093db1810426e4">00056</a> <span class="keywordtype">int</span> <a class="code" href="structrs__tm.html#a4d40217d3cd15b51e0093db1810426e4" title="day of the week">tm_wday</a>;
-<a name="l00057"></a><a class="code" href="structrs__tm.html#a589eab24c4d79f05f0b3601162ed34d0">00057</a> <span class="keywordtype">int</span> <a class="code" href="structrs__tm.html#a589eab24c4d79f05f0b3601162ed34d0" title="day of the year">tm_yday</a>;
-<a name="l00058"></a><a class="code" href="structrs__tm.html#a8cffdd224d2ea30a079a86ef1e41e111">00058</a> <span class="keywordtype">int</span> <a class="code" href="structrs__tm.html#a8cffdd224d2ea30a079a86ef1e41e111" title="daylight savings time">tm_isdst</a>;
-<a name="l00059"></a>00059 } <a class="code" href="structrs__tm.html">rs_tm</a>;
-<a name="l00060"></a>00060
-<a name="l00070"></a>00070 <span class="keyword">extern</span> <a class="code" href="rs__time_8rsh.html#ad2b4759a0a6a98bd79b7ad82a4b057d6">rs_time_t</a> __attribute__((overloadable))
-<a name="l00071"></a>00071 <a class="code" href="rs__time_8rsh.html#a555f9324acb8c3d0c6f09a1d05478ce2">rsTime</a>(<a class="code" href="rs__time_8rsh.html#ad2b4759a0a6a98bd79b7ad82a4b057d6">rs_time_t</a> *timer);
-<a name="l00072"></a>00072
-<a name="l00083"></a>00083 extern <a class="code" href="structrs__tm.html">rs_tm</a> * __attribute__((overloadable))
-<a name="l00084"></a>00084 <a class="code" href="rs__time_8rsh.html#a08a8fcadae964f7416aef487da624110">rsLocaltime</a>(<a class="code" href="structrs__tm.html">rs_tm</a> *local, const <a class="code" href="rs__time_8rsh.html#ad2b4759a0a6a98bd79b7ad82a4b057d6">rs_time_t</a> *timer);
-<a name="l00085"></a>00085
-<a name="l00091"></a>00091 extern <a class="code" href="rs__types_8rsh.html#a996e72f71b11a5bb8b3b7b6936b1516d">int64_t</a> __attribute__((overloadable))
-<a name="l00092"></a>00092 <a class="code" href="rs__time_8rsh.html#a3c406e51a769718dd1c760518b9cad44">rsUptimeMillis</a>(<span class="keywordtype">void</span>);
-<a name="l00093"></a>00093
-<a name="l00099"></a>00099 extern <a class="code" href="rs__types_8rsh.html#a996e72f71b11a5bb8b3b7b6936b1516d">int64_t</a> __attribute__((overloadable))
-<a name="l00100"></a>00100 <a class="code" href="rs__time_8rsh.html#a24e2cc12acf1e7fdd857d1a48981395d">rsUptimeNanos</a>(<span class="keywordtype">void</span>);
-<a name="l00101"></a>00101
-<a name="l00108"></a>00108 extern <span class="keywordtype">float</span> __attribute__((overloadable))
-<a name="l00109"></a>00109 <a class="code" href="rs__time_8rsh.html#adea2682186fd903752431ad848bd8bf4">rsGetDt</a>(<span class="keywordtype">void</span>);
-<a name="l00110"></a>00110
-<a name="l00111"></a>00111 <span class="preprocessor">#endif</span>
-</pre></div></div>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/rs__types_8rsh.html b/docs/html/reference/renderscript/rs__types_8rsh.html
deleted file mode 100644
index cbaa750..0000000
--- a/docs/html/reference/renderscript/rs__types_8rsh.html
+++ /dev/null
@@ -1,1023 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_types.rsh File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
- <div id="navrow1" class="tabs">
- <ul class="tablist">
- <li><a href="index.html"><span>Overview</span></a></li>
- <li class="current"><a href="globals.html"><span>Globals</span></a></li>
- <li><a href="annotated.html"><span>Structs</span></a></li>
- </ul>
- </div>
-</div>
-<div class="header">
- <div class="summary">
-<a href="#nested-classes">Data Structures</a> |
-<a href="#typedef-members">Typedefs</a> |
-<a href="#enum-members">Enumerations</a> </div>
- <div class="headertitle">
-<div class="title">/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_types.rsh File Reference</div> </div>
-</div>
-<div class="contents">
-<div class="textblock"><code>#include "stdbool.h"</code><br/>
-</div><table class="memberdecls">
-<tr><td colspan="2"><h2><a name="nested-classes"></a>
-Data Structures</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__element.html">rs_element</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Opaque handle to a RenderScript element. <a href="structrs__element.html#details">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__type.html">rs_type</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Opaque handle to a RenderScript type. <a href="structrs__type.html#details">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__allocation.html">rs_allocation</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Opaque handle to a RenderScript allocation. <a href="structrs__allocation.html#details">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__sampler.html">rs_sampler</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Opaque handle to a RenderScript sampler object. <a href="structrs__sampler.html#details">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__script.html">rs_script</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Opaque handle to a RenderScript script object. <a href="structrs__script.html#details">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__mesh.html">rs_mesh</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Opaque handle to a RenderScript mesh object. <a href="structrs__mesh.html#details">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__path.html">rs_path</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Opaque handle to a RenderScript Path object. <a href="structrs__path.html#details">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__program__fragment.html">rs_program_fragment</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Opaque handle to a RenderScript ProgramFragment object. <a href="structrs__program__fragment.html#details">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__program__vertex.html">rs_program_vertex</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Opaque handle to a RenderScript ProgramVertex object. <a href="structrs__program__vertex.html#details">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__program__raster.html">rs_program_raster</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Opaque handle to a RenderScript ProgramRaster object. <a href="structrs__program__raster.html#details">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__program__store.html">rs_program_store</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Opaque handle to a RenderScript ProgramStore object. <a href="structrs__program__store.html#details">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__font.html">rs_font</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Opaque handle to a RenderScript font object. <a href="structrs__font.html#details">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__matrix4x4.html">rs_matrix4x4</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">4x4 float matrix <a href="structrs__matrix4x4.html#details">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__matrix3x3.html">rs_matrix3x3</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">3x3 float matrix <a href="structrs__matrix3x3.html#details">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__matrix2x2.html">rs_matrix2x2</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">2x2 float matrix <a href="structrs__matrix2x2.html#details">More...</a><br/></td></tr>
-<tr><td colspan="2"><h2><a name="typedef-members"></a>
-Typedefs</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef char </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#ad566f6541e98b74246db1a3a3a85ad49">int8_t</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef short </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#aa343fa3b3d06292b959ffdd4c4703b06">int16_t</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef int </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef long long </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a996e72f71b11a5bb8b3b7b6936b1516d">int64_t</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef unsigned char </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#aba7bc1797add20fe3efdf37ced1182c5">uint8_t</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef unsigned short </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a273cf69d639a59973b6019625df33e30">uint16_t</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef unsigned int </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef unsigned long long </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#aaa5d1cd013383c889537491c3cfd9aad">uint64_t</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="rs__types_8rsh.html#aba7bc1797add20fe3efdf37ced1182c5">uint8_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="rs__types_8rsh.html#a273cf69d639a59973b6019625df33e30">uint16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="rs__types_8rsh.html#aaa5d1cd013383c889537491c3cfd9aad">uint64_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#ab46637ef82283186e57f54756fe67203">ulong</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a29d85914ddff32967d85ada69854206d">size_t</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a170745d0d946e79c4c2a056d1d158996">ssize_t</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef float </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef double </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a75ef868cedebc2a6eeb1bc6ca6ca49c3">double2</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef double </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#aa3c90d5a23d674185a13e95402eda7eb">double3</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef double </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a60f4b04e076f0dd0ecc99c365fc4ca21">double4</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#aff5eb7cd53a34bb01924bf64485296de">uchar2</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a247b5eacf2b662849668cbc33120343f">uchar3</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#ae6ed52a87d4ff920c303b13b00f7396d">uchar4</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a24a9d78cfc32475e2c6eb1cdec239bf2">ushort2</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#ab78391445785d2ca0276392a9c97fcba">ushort3</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a77a09fa01d7fc721bbc44c32aac2d487">ushort4</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#aaf90cd1f01a121e824fc6e1b927e7683">uint2</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#ae80e36ac834c891aa76b09a220344e78">uint3</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#ad92f0ec6c2cdc1f11a6d7fe321047462">uint4</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="rs__types_8rsh.html#ab46637ef82283186e57f54756fe67203">ulong</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a56988b12ab16acf753356f7a5c70565a">ulong2</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="rs__types_8rsh.html#ab46637ef82283186e57f54756fe67203">ulong</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#ac623a569c28935fbedd3a8ed27ae0696">ulong3</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="rs__types_8rsh.html#ab46637ef82283186e57f54756fe67203">ulong</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a3029c54b8e1779a1ddbdfe875432d137">ulong4</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef char </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#ac532b4c1895c8bd4fb75dc370c484351">char2</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef char </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a4617fb31f4c03402515efee0a9b56210">char3</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef char </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#aecb498648daac97c7cc5f31c242dfa03">char4</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef short </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a303d3ad18aaeacfcfeda2b8580b98796">short2</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef short </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a3f4967691ae2b249511b5f3dd9e18793">short3</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef short </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a198219da0b1d51c8d7f8f12aad7e502d">short4</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef int </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a6bc1fa1354fe2145b8f12b4bbfafcf4c">int2</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef int </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#ad5512266b63fd06dcf450f6c9d5326c8">int3</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef int </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a897deab71f679999ed99d4153c797e70">int4</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef long </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#afd55d62cee0785034b73375acd0df9da">long2</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef long </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#ad9cedbf4050fad14138d1dcb3428ec18">long3</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef long </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#ae177e4918f36e5c9da36d524cdb7a2e7">long4</a></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a></td></tr>
-<tr><td colspan="2"><h2><a name="enum-members"></a>
-Enumerations</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#acc6f9a94176656c73fd74f789cfa2229">rs_allocation_cubemap_face</a> </td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Enum for selecting cube map faces. <br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#af8c988b9715d55b6e41e0ee1925fb171">rs_allocation_usage_type</a> </td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Bitfield to specify the usage types for an allocation. <a href="rs__types_8rsh.html#af8c988b9715d55b6e41e0ee1925fb171">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951">rs_primitive</a> { <br/>
-  <a class="el" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951a337ab7046b7cb5cc9eb14bc325ae3158">RS_PRIMITIVE_POINT</a> = 0,
-<a class="el" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951a09a49eaa42585d6181c8a2f711b63ddf">RS_PRIMITIVE_LINE</a> = 1,
-<a class="el" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951abe563a9f68706a5aa567793a5088b4da">RS_PRIMITIVE_LINE_STRIP</a> = 2,
-<a class="el" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951aeb062ef8811156915afccfc5f4259b79">RS_PRIMITIVE_TRIANGLE</a> = 3,
-<br/>
-  <a class="el" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951a497d5376ef6c9f9ead810a053b9b35d9">RS_PRIMITIVE_TRIANGLE_STRIP</a> = 4,
-<a class="el" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951afadd96d3a17724e061d9eb07bfca4a01">RS_PRIMITIVE_TRIANGLE_FAN</a> = 5,
-<a class="el" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951a136481c7695b09f01126da71bb132c9d">RS_PRIMITIVE_INVALID</a> = 100
-<br/>
- }</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#ae7551db5705f864fde49c13660aff647">rs_data_type</a> </td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Enumeration for possible element data types. <a href="rs__types_8rsh.html#ae7551db5705f864fde49c13660aff647">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a1692d177c4a3fe1544bd91172056581a">rs_data_kind</a> </td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Enumeration for possible element data kind. <a href="rs__types_8rsh.html#a1692d177c4a3fe1544bd91172056581a">More...</a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bf">rs_depth_func</a> { <br/>
-  <a class="el" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bfa8d469fa992bac113a001d75aa7cfbb5a">RS_DEPTH_FUNC_ALWAYS</a> = 0,
-<a class="el" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bfac1ddb06fe80be898bf8d4a517187575a">RS_DEPTH_FUNC_LESS</a> = 1,
-<a class="el" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bfa62459990f41930a88542b878ddd53d9f">RS_DEPTH_FUNC_LEQUAL</a> = 2,
-<a class="el" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bfa412bb65be35e058a7699b8211cc2ef7d">RS_DEPTH_FUNC_GREATER</a> = 3,
-<br/>
-  <a class="el" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bfa2858ef91becfeb84d8f34a1458a4126d">RS_DEPTH_FUNC_GEQUAL</a> = 4,
-<a class="el" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bfa56339400e4089e546199547717bdcd21">RS_DEPTH_FUNC_EQUAL</a> = 5,
-<a class="el" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bfa2105e438ae89b89a2f4361483e65966d">RS_DEPTH_FUNC_NOTEQUAL</a> = 6,
-<a class="el" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bfadfc3917c562a540b4114181440b909e3">RS_DEPTH_FUNC_INVALID</a> = 100
-<br/>
- }</td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Define the standard RenderScript types</p>
-<p>Integers 8 bit: char, int8_t 16 bit: short, int16_t 32 bit: int, in32_t 64 bit: long, long long, int64_t</p>
-<p>Unsigned Integers 8 bit: uchar, uint8_t 16 bit: ushort, uint16_t 32 bit: uint, uint32_t 64 bit: ulong, uint64_t</p>
-<p>Floating point 32 bit: float 64 bit: double</p>
-<p>Vectors of length 2, 3, and 4 are supported for all the types above. </p>
-
-<p>Definition in file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-</div><hr/><h2>Typedef Documentation</h2>
-<a class="anchor" id="ac532b4c1895c8bd4fb75dc370c484351"></a><!-- doxytag: member="rs_types.rsh::char2" ref="ac532b4c1895c8bd4fb75dc370c484351" args="" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef char <a class="el" href="rs__types_8rsh.html#ac532b4c1895c8bd4fb75dc370c484351">char2</a></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Vector version of the basic char type. Provides two char fields packed into a single 16 bit field with 16 bit alignment. </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00292">292</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a4617fb31f4c03402515efee0a9b56210"></a><!-- doxytag: member="rs_types.rsh::char3" ref="a4617fb31f4c03402515efee0a9b56210" args="" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef char <a class="el" href="rs__types_8rsh.html#a4617fb31f4c03402515efee0a9b56210">char3</a></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Vector version of the basic char type. Provides three char fields packed into a single 32 bit field with 32 bit alignment. </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00297">297</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="aecb498648daac97c7cc5f31c242dfa03"></a><!-- doxytag: member="rs_types.rsh::char4" ref="aecb498648daac97c7cc5f31c242dfa03" args="" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef char <a class="el" href="rs__types_8rsh.html#aecb498648daac97c7cc5f31c242dfa03">char4</a></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Vector version of the basic char type. Provides four char fields packed into a single 32 bit field with 32 bit alignment. </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00302">302</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a75ef868cedebc2a6eeb1bc6ca6ca49c3"></a><!-- doxytag: member="rs_types.rsh::double2" ref="a75ef868cedebc2a6eeb1bc6ca6ca49c3" args="" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef double <a class="el" href="rs__types_8rsh.html#a75ef868cedebc2a6eeb1bc6ca6ca49c3">double2</a></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Vector version of the basic double type. Provides two double fields packed into a single 128 bit field with 128 bit alignment. </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00212">212</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="aa3c90d5a23d674185a13e95402eda7eb"></a><!-- doxytag: member="rs_types.rsh::double3" ref="aa3c90d5a23d674185a13e95402eda7eb" args="" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef double <a class="el" href="rs__types_8rsh.html#aa3c90d5a23d674185a13e95402eda7eb">double3</a></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Vector version of the basic double type. Provides three double fields packed into a single 256 bit field with 256 bit alignment. </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00217">217</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a60f4b04e076f0dd0ecc99c365fc4ca21"></a><!-- doxytag: member="rs_types.rsh::double4" ref="a60f4b04e076f0dd0ecc99c365fc4ca21" args="" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef double <a class="el" href="rs__types_8rsh.html#a60f4b04e076f0dd0ecc99c365fc4ca21">double4</a></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Vector version of the basic double type. Provides four double fields packed into a single 256 bit field with 256 bit alignment. </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00222">222</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a5086d0fcb71f916c936af486ccf0dd41"></a><!-- doxytag: member="rs_types.rsh::float2" ref="a5086d0fcb71f916c936af486ccf0dd41" args="" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef float <a class="el" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Vector version of the basic float type. Provides two float fields packed into a single 64 bit field with 64 bit alignment. </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00195">195</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a0046fa0f208d0899adbcf1f8b5aafadd"></a><!-- doxytag: member="rs_types.rsh::float3" ref="a0046fa0f208d0899adbcf1f8b5aafadd" args="" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef float <a class="el" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Vector version of the basic float type. Provides three float fields packed into a single 128 bit field with 128 bit alignment. </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00200">200</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="adb5162dc168ddd471d948faa60b37c5e"></a><!-- doxytag: member="rs_types.rsh::float4" ref="adb5162dc168ddd471d948faa60b37c5e" args="" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef float <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Vector version of the basic float type. Provides four float fields packed into a single 128 bit field with 128 bit alignment. </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00206">206</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="aa343fa3b3d06292b959ffdd4c4703b06"></a><!-- doxytag: member="rs_types.rsh::int16_t" ref="aa343fa3b3d06292b959ffdd4c4703b06" args="" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef short <a class="el" href="rs__types_8rsh.html#aa343fa3b3d06292b959ffdd4c4703b06">int16_t</a></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>16 bit integer type </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00067">67</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a6bc1fa1354fe2145b8f12b4bbfafcf4c"></a><!-- doxytag: member="rs_types.rsh::int2" ref="a6bc1fa1354fe2145b8f12b4bbfafcf4c" args="" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef int <a class="el" href="rs__types_8rsh.html#a6bc1fa1354fe2145b8f12b4bbfafcf4c">int2</a></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Vector version of the basic int type. Provides two int fields packed into a single 64 bit field with 64 bit alignment. </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00324">324</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ad5512266b63fd06dcf450f6c9d5326c8"></a><!-- doxytag: member="rs_types.rsh::int3" ref="ad5512266b63fd06dcf450f6c9d5326c8" args="" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef int <a class="el" href="rs__types_8rsh.html#ad5512266b63fd06dcf450f6c9d5326c8">int3</a></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Vector version of the basic int type. Provides three int fields packed into a single 128 bit field with 128 bit alignment. </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00329">329</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a32f2e37ee053cf2ce8ca28d1f74630e5"></a><!-- doxytag: member="rs_types.rsh::int32_t" ref="a32f2e37ee053cf2ce8ca28d1f74630e5" args="" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef int <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>32 bit integer type </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00071">71</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a897deab71f679999ed99d4153c797e70"></a><!-- doxytag: member="rs_types.rsh::int4" ref="a897deab71f679999ed99d4153c797e70" args="" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef int <a class="el" href="rs__types_8rsh.html#a897deab71f679999ed99d4153c797e70">int4</a></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Vector version of the basic int type. Provides two four fields packed into a single 128 bit field with 128 bit alignment. </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00334">334</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a996e72f71b11a5bb8b3b7b6936b1516d"></a><!-- doxytag: member="rs_types.rsh::int64_t" ref="a996e72f71b11a5bb8b3b7b6936b1516d" args="" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef long long <a class="el" href="rs__types_8rsh.html#a996e72f71b11a5bb8b3b7b6936b1516d">int64_t</a></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>64 bit integer type </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00075">75</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ad566f6541e98b74246db1a3a3a85ad49"></a><!-- doxytag: member="rs_types.rsh::int8_t" ref="ad566f6541e98b74246db1a3a3a85ad49" args="" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef char <a class="el" href="rs__types_8rsh.html#ad566f6541e98b74246db1a3a3a85ad49">int8_t</a></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>8 bit integer type </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00063">63</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="afd55d62cee0785034b73375acd0df9da"></a><!-- doxytag: member="rs_types.rsh::long2" ref="afd55d62cee0785034b73375acd0df9da" args="" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef long <a class="el" href="rs__types_8rsh.html#afd55d62cee0785034b73375acd0df9da">long2</a></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Vector version of the basic long type. Provides two long fields packed into a single 128 bit field with 128 bit alignment. </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00340">340</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ad9cedbf4050fad14138d1dcb3428ec18"></a><!-- doxytag: member="rs_types.rsh::long3" ref="ad9cedbf4050fad14138d1dcb3428ec18" args="" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef long <a class="el" href="rs__types_8rsh.html#ad9cedbf4050fad14138d1dcb3428ec18">long3</a></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Vector version of the basic long type. Provides three long fields packed into a single 256 bit field with 256 bit alignment. </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00345">345</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ae177e4918f36e5c9da36d524cdb7a2e7"></a><!-- doxytag: member="rs_types.rsh::long4" ref="ae177e4918f36e5c9da36d524cdb7a2e7" args="" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef long <a class="el" href="rs__types_8rsh.html#ae177e4918f36e5c9da36d524cdb7a2e7">long4</a></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Vector version of the basic long type. Provides four long fields packed into a single 256 bit field with 256 bit alignment. </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00350">350</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a86f99f382dc35fc8ad98b524fe6d5447"></a><!-- doxytag: member="rs_types.rsh::rs_quaternion" ref="a86f99f382dc35fc8ad98b524fe6d5447" args="" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef <a class="el" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> <a class="el" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>quaternion type for use with the quaternion functions </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00383">383</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a303d3ad18aaeacfcfeda2b8580b98796"></a><!-- doxytag: member="rs_types.rsh::short2" ref="a303d3ad18aaeacfcfeda2b8580b98796" args="" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef short <a class="el" href="rs__types_8rsh.html#a303d3ad18aaeacfcfeda2b8580b98796">short2</a></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Vector version of the basic short type. Provides two short fields packed into a single 32 bit field with 32 bit alignment. </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00308">308</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a3f4967691ae2b249511b5f3dd9e18793"></a><!-- doxytag: member="rs_types.rsh::short3" ref="a3f4967691ae2b249511b5f3dd9e18793" args="" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef short <a class="el" href="rs__types_8rsh.html#a3f4967691ae2b249511b5f3dd9e18793">short3</a></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Vector version of the basic short type. Provides three short fields packed into a single 64 bit field with 64 bit alignment. </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00313">313</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a198219da0b1d51c8d7f8f12aad7e502d"></a><!-- doxytag: member="rs_types.rsh::short4" ref="a198219da0b1d51c8d7f8f12aad7e502d" args="" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef short <a class="el" href="rs__types_8rsh.html#a198219da0b1d51c8d7f8f12aad7e502d">short4</a></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Vector version of the basic short type. Provides four short fields packed into a single 64 bit field with 64 bit alignment. </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00318">318</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a29d85914ddff32967d85ada69854206d"></a><!-- doxytag: member="rs_types.rsh::size_t" ref="a29d85914ddff32967d85ada69854206d" args="" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> <a class="el" href="rs__types_8rsh.html#a29d85914ddff32967d85ada69854206d">size_t</a></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Typedef for unsigned int </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00111">111</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a170745d0d946e79c4c2a056d1d158996"></a><!-- doxytag: member="rs_types.rsh::ssize_t" ref="a170745d0d946e79c4c2a056d1d158996" args="" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef <a class="el" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> <a class="el" href="rs__types_8rsh.html#a170745d0d946e79c4c2a056d1d158996">ssize_t</a></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Typedef for int (use for 32-bit integers) </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00115">115</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a27c902d5ca78afa82d5ed75554d5cedc"></a><!-- doxytag: member="rs_types.rsh::uchar" ref="a27c902d5ca78afa82d5ed75554d5cedc" args="" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef <a class="el" href="rs__types_8rsh.html#aba7bc1797add20fe3efdf37ced1182c5">uint8_t</a> <a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>8 bit unsigned integer type </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00095">95</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="aff5eb7cd53a34bb01924bf64485296de"></a><!-- doxytag: member="rs_types.rsh::uchar2" ref="aff5eb7cd53a34bb01924bf64485296de" args="" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef <a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> <a class="el" href="rs__types_8rsh.html#aff5eb7cd53a34bb01924bf64485296de">uchar2</a></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Vector version of the basic uchar type. Provides two uchar fields packed into a single 16 bit field with 16 bit alignment. </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00228">228</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a247b5eacf2b662849668cbc33120343f"></a><!-- doxytag: member="rs_types.rsh::uchar3" ref="a247b5eacf2b662849668cbc33120343f" args="" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef <a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> <a class="el" href="rs__types_8rsh.html#a247b5eacf2b662849668cbc33120343f">uchar3</a></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Vector version of the basic uchar type. Provides three uchar fields packed into a single 32 bit field with 32 bit alignment. </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00233">233</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ae6ed52a87d4ff920c303b13b00f7396d"></a><!-- doxytag: member="rs_types.rsh::uchar4" ref="ae6ed52a87d4ff920c303b13b00f7396d" args="" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef <a class="el" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> <a class="el" href="rs__types_8rsh.html#ae6ed52a87d4ff920c303b13b00f7396d">uchar4</a></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Vector version of the basic uchar type. Provides four uchar fields packed into a single 32 bit field with 32 bit alignment. </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00238">238</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a4f5fce8c1ef282264f9214809524d836"></a><!-- doxytag: member="rs_types.rsh::uint" ref="a4f5fce8c1ef282264f9214809524d836" args="" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> <a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>32 bit unsigned integer type </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00103">103</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a273cf69d639a59973b6019625df33e30"></a><!-- doxytag: member="rs_types.rsh::uint16_t" ref="a273cf69d639a59973b6019625df33e30" args="" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef unsigned short <a class="el" href="rs__types_8rsh.html#a273cf69d639a59973b6019625df33e30">uint16_t</a></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>16 bit unsigned integer type </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00083">83</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="aaf90cd1f01a121e824fc6e1b927e7683"></a><!-- doxytag: member="rs_types.rsh::uint2" ref="aaf90cd1f01a121e824fc6e1b927e7683" args="" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef <a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> <a class="el" href="rs__types_8rsh.html#aaf90cd1f01a121e824fc6e1b927e7683">uint2</a></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Vector version of the basic uint type. Provides two uint fields packed into a single 64 bit field with 64 bit alignment. </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00260">260</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ae80e36ac834c891aa76b09a220344e78"></a><!-- doxytag: member="rs_types.rsh::uint3" ref="ae80e36ac834c891aa76b09a220344e78" args="" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef <a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> <a class="el" href="rs__types_8rsh.html#ae80e36ac834c891aa76b09a220344e78">uint3</a></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Vector version of the basic uint type. Provides three uint fields packed into a single 128 bit field with 128 bit alignment. </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00265">265</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a435d1572bf3f880d55459d9805097f62"></a><!-- doxytag: member="rs_types.rsh::uint32_t" ref="a435d1572bf3f880d55459d9805097f62" args="" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef unsigned int <a class="el" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>32 bit unsigned integer type </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00087">87</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ad92f0ec6c2cdc1f11a6d7fe321047462"></a><!-- doxytag: member="rs_types.rsh::uint4" ref="ad92f0ec6c2cdc1f11a6d7fe321047462" args="" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef <a class="el" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> <a class="el" href="rs__types_8rsh.html#ad92f0ec6c2cdc1f11a6d7fe321047462">uint4</a></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Vector version of the basic uint type. Provides four uint fields packed into a single 128 bit field with 128 bit alignment. </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00270">270</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="aaa5d1cd013383c889537491c3cfd9aad"></a><!-- doxytag: member="rs_types.rsh::uint64_t" ref="aaa5d1cd013383c889537491c3cfd9aad" args="" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef unsigned long long <a class="el" href="rs__types_8rsh.html#aaa5d1cd013383c889537491c3cfd9aad">uint64_t</a></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>64 bit unsigned integer type </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00091">91</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="aba7bc1797add20fe3efdf37ced1182c5"></a><!-- doxytag: member="rs_types.rsh::uint8_t" ref="aba7bc1797add20fe3efdf37ced1182c5" args="" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef unsigned char <a class="el" href="rs__types_8rsh.html#aba7bc1797add20fe3efdf37ced1182c5">uint8_t</a></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>8 bit unsigned integer type </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00079">79</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ab46637ef82283186e57f54756fe67203"></a><!-- doxytag: member="rs_types.rsh::ulong" ref="ab46637ef82283186e57f54756fe67203" args="" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef <a class="el" href="rs__types_8rsh.html#aaa5d1cd013383c889537491c3cfd9aad">uint64_t</a> <a class="el" href="rs__types_8rsh.html#ab46637ef82283186e57f54756fe67203">ulong</a></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Typedef for unsigned long (use for 64-bit unsigned integers) </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00107">107</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a56988b12ab16acf753356f7a5c70565a"></a><!-- doxytag: member="rs_types.rsh::ulong2" ref="a56988b12ab16acf753356f7a5c70565a" args="" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef <a class="el" href="rs__types_8rsh.html#ab46637ef82283186e57f54756fe67203">ulong</a> <a class="el" href="rs__types_8rsh.html#a56988b12ab16acf753356f7a5c70565a">ulong2</a></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Vector version of the basic ulong type. Provides two ulong fields packed into a single 128 bit field with 128 bit alignment. </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00276">276</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ac623a569c28935fbedd3a8ed27ae0696"></a><!-- doxytag: member="rs_types.rsh::ulong3" ref="ac623a569c28935fbedd3a8ed27ae0696" args="" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef <a class="el" href="rs__types_8rsh.html#ab46637ef82283186e57f54756fe67203">ulong</a> <a class="el" href="rs__types_8rsh.html#ac623a569c28935fbedd3a8ed27ae0696">ulong3</a></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Vector version of the basic ulong type. Provides three ulong fields packed into a single 256 bit field with 256 bit alignment. </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00281">281</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a3029c54b8e1779a1ddbdfe875432d137"></a><!-- doxytag: member="rs_types.rsh::ulong4" ref="a3029c54b8e1779a1ddbdfe875432d137" args="" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef <a class="el" href="rs__types_8rsh.html#ab46637ef82283186e57f54756fe67203">ulong</a> <a class="el" href="rs__types_8rsh.html#a3029c54b8e1779a1ddbdfe875432d137">ulong4</a></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Vector version of the basic ulong type. Provides four ulong fields packed into a single 256 bit field with 256 bit alignment. </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00286">286</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a9e58a7bf060b7a5fbf6a401d3020adca"></a><!-- doxytag: member="rs_types.rsh::ushort" ref="a9e58a7bf060b7a5fbf6a401d3020adca" args="" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef <a class="el" href="rs__types_8rsh.html#a273cf69d639a59973b6019625df33e30">uint16_t</a> <a class="el" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>16 bit unsigned integer type </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00099">99</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a24a9d78cfc32475e2c6eb1cdec239bf2"></a><!-- doxytag: member="rs_types.rsh::ushort2" ref="a24a9d78cfc32475e2c6eb1cdec239bf2" args="" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef <a class="el" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a> <a class="el" href="rs__types_8rsh.html#a24a9d78cfc32475e2c6eb1cdec239bf2">ushort2</a></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Vector version of the basic ushort type. Provides two ushort fields packed into a single 32 bit field with 32 bit alignment. </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00244">244</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ab78391445785d2ca0276392a9c97fcba"></a><!-- doxytag: member="rs_types.rsh::ushort3" ref="ab78391445785d2ca0276392a9c97fcba" args="" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef <a class="el" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a> <a class="el" href="rs__types_8rsh.html#ab78391445785d2ca0276392a9c97fcba">ushort3</a></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Vector version of the basic ushort type. Provides three ushort fields packed into a single 64 bit field with 64 bit alignment. </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00249">249</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a77a09fa01d7fc721bbc44c32aac2d487"></a><!-- doxytag: member="rs_types.rsh::ushort4" ref="a77a09fa01d7fc721bbc44c32aac2d487" args="" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef <a class="el" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a> <a class="el" href="rs__types_8rsh.html#a77a09fa01d7fc721bbc44c32aac2d487">ushort4</a></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Vector version of the basic ushort type. Provides four ushort fields packed into a single 64 bit field with 64 bit alignment. </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00254">254</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<hr/><h2>Enumeration Type Documentation</h2>
-<a class="anchor" id="af8c988b9715d55b6e41e0ee1925fb171"></a><!-- doxytag: member="rs_types.rsh::rs_allocation_usage_type" ref="af8c988b9715d55b6e41e0ee1925fb171" args="" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">enum <a class="el" href="rs__types_8rsh.html#af8c988b9715d55b6e41e0ee1925fb171">rs_allocation_usage_type</a></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-
-<p>Bitfield to specify the usage types for an allocation. </p>
-<p>These values are ORed together to specify which usages or memory spaces are relevant to an allocation or an operation on an allocation. </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00408">408</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a1692d177c4a3fe1544bd91172056581a"></a><!-- doxytag: member="rs_types.rsh::rs_data_kind" ref="a1692d177c4a3fe1544bd91172056581a" args="" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">enum <a class="el" href="rs__types_8rsh.html#a1692d177c4a3fe1544bd91172056581a">rs_data_kind</a></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-
-<p>Enumeration for possible element data kind. </p>
-<p>The special interpretation of the data if required. This is primarly useful for graphical data. USER indicates no special interpretation is expected. PIXEL is used in conjunction with the standard data types for representing texture formats. </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00524">524</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="ae7551db5705f864fde49c13660aff647"></a><!-- doxytag: member="rs_types.rsh::rs_data_type" ref="ae7551db5705f864fde49c13660aff647" args="" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">enum <a class="el" href="rs__types_8rsh.html#ae7551db5705f864fde49c13660aff647">rs_data_type</a></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-
-<p>Enumeration for possible element data types. </p>
-<p>DataType represents the basic type information for a basic element. The naming convention follows. For numeric types it is FLOAT, SIGNED, or UNSIGNED followed by the _BITS where BITS is the size of the data. BOOLEAN is a true / false (1,0) represented in an 8 bit container. The UNSIGNED variants with multiple bit definitions are for packed graphical data formats and represent vectors with per vector member sizes which are treated as a single unit for packing and alignment purposes.</p>
-<p>MATRIX the three matrix types contain FLOAT_32 elements and are treated as 32 bits for alignment purposes.</p>
-<p>RS_* objects. 32 bit opaque handles. </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00478">478</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="a03e91ad8ebfc283ba20f7443dea4a4bf"></a><!-- doxytag: member="rs_types.rsh::rs_depth_func" ref="a03e91ad8ebfc283ba20f7443dea4a4bf" args="" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">enum <a class="el" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bf">rs_depth_func</a></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
-<tr><td valign="top"><em><a class="anchor" id="a03e91ad8ebfc283ba20f7443dea4a4bfa8d469fa992bac113a001d75aa7cfbb5a"></a><!-- doxytag: member="RS_DEPTH_FUNC_ALWAYS" ref="a03e91ad8ebfc283ba20f7443dea4a4bfa8d469fa992bac113a001d75aa7cfbb5a" args="" -->RS_DEPTH_FUNC_ALWAYS</em> </td><td>
-<p>Always drawn </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="a03e91ad8ebfc283ba20f7443dea4a4bfac1ddb06fe80be898bf8d4a517187575a"></a><!-- doxytag: member="RS_DEPTH_FUNC_LESS" ref="a03e91ad8ebfc283ba20f7443dea4a4bfac1ddb06fe80be898bf8d4a517187575a" args="" -->RS_DEPTH_FUNC_LESS</em> </td><td>
-<p>Drawn if the incoming depth value is less than that in the depth buffer </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="a03e91ad8ebfc283ba20f7443dea4a4bfa62459990f41930a88542b878ddd53d9f"></a><!-- doxytag: member="RS_DEPTH_FUNC_LEQUAL" ref="a03e91ad8ebfc283ba20f7443dea4a4bfa62459990f41930a88542b878ddd53d9f" args="" -->RS_DEPTH_FUNC_LEQUAL</em> </td><td>
-<p>Drawn if the incoming depth value is less or equal to that in the depth buffer </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="a03e91ad8ebfc283ba20f7443dea4a4bfa412bb65be35e058a7699b8211cc2ef7d"></a><!-- doxytag: member="RS_DEPTH_FUNC_GREATER" ref="a03e91ad8ebfc283ba20f7443dea4a4bfa412bb65be35e058a7699b8211cc2ef7d" args="" -->RS_DEPTH_FUNC_GREATER</em> </td><td>
-<p>Drawn if the incoming depth value is greater than that in the depth buffer </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="a03e91ad8ebfc283ba20f7443dea4a4bfa2858ef91becfeb84d8f34a1458a4126d"></a><!-- doxytag: member="RS_DEPTH_FUNC_GEQUAL" ref="a03e91ad8ebfc283ba20f7443dea4a4bfa2858ef91becfeb84d8f34a1458a4126d" args="" -->RS_DEPTH_FUNC_GEQUAL</em> </td><td>
-<p>Drawn if the incoming depth value is greater or equal to that in the depth buffer </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="a03e91ad8ebfc283ba20f7443dea4a4bfa56339400e4089e546199547717bdcd21"></a><!-- doxytag: member="RS_DEPTH_FUNC_EQUAL" ref="a03e91ad8ebfc283ba20f7443dea4a4bfa56339400e4089e546199547717bdcd21" args="" -->RS_DEPTH_FUNC_EQUAL</em> </td><td>
-<p>Drawn if the incoming depth value is equal to that in the depth buffer </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="a03e91ad8ebfc283ba20f7443dea4a4bfa2105e438ae89b89a2f4361483e65966d"></a><!-- doxytag: member="RS_DEPTH_FUNC_NOTEQUAL" ref="a03e91ad8ebfc283ba20f7443dea4a4bfa2105e438ae89b89a2f4361483e65966d" args="" -->RS_DEPTH_FUNC_NOTEQUAL</em> </td><td>
-<p>Drawn if the incoming depth value is not equal to that in the depth buffer </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="a03e91ad8ebfc283ba20f7443dea4a4bfadfc3917c562a540b4114181440b909e3"></a><!-- doxytag: member="RS_DEPTH_FUNC_INVALID" ref="a03e91ad8ebfc283ba20f7443dea4a4bfadfc3917c562a540b4114181440b909e3" args="" -->RS_DEPTH_FUNC_INVALID</em> </td><td>
-<p>Invalid depth function </p>
-</td></tr>
-</table>
-</dd>
-</dl>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00538">538</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-<a class="anchor" id="aaaa4ecd4a284cf9cccc6e06407229951"></a><!-- doxytag: member="rs_types.rsh::rs_primitive" ref="aaaa4ecd4a284cf9cccc6e06407229951" args="" -->
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">enum <a class="el" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951">rs_primitive</a></td>
- </tr>
- </table>
-</div>
-<div class="memdoc">
-<p>Describes the way mesh vertex data is interpreted when rendering </p>
-<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
-<tr><td valign="top"><em><a class="anchor" id="aaaa4ecd4a284cf9cccc6e06407229951a337ab7046b7cb5cc9eb14bc325ae3158"></a><!-- doxytag: member="RS_PRIMITIVE_POINT" ref="aaaa4ecd4a284cf9cccc6e06407229951a337ab7046b7cb5cc9eb14bc325ae3158" args="" -->RS_PRIMITIVE_POINT</em> </td><td>
-<p>Vertex data will be rendered as a series of points </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="aaaa4ecd4a284cf9cccc6e06407229951a09a49eaa42585d6181c8a2f711b63ddf"></a><!-- doxytag: member="RS_PRIMITIVE_LINE" ref="aaaa4ecd4a284cf9cccc6e06407229951a09a49eaa42585d6181c8a2f711b63ddf" args="" -->RS_PRIMITIVE_LINE</em> </td><td>
-<p>Vertex pairs will be rendered as lines </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="aaaa4ecd4a284cf9cccc6e06407229951abe563a9f68706a5aa567793a5088b4da"></a><!-- doxytag: member="RS_PRIMITIVE_LINE_STRIP" ref="aaaa4ecd4a284cf9cccc6e06407229951abe563a9f68706a5aa567793a5088b4da" args="" -->RS_PRIMITIVE_LINE_STRIP</em> </td><td>
-<p>Vertex data will be rendered as a connected line strip </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="aaaa4ecd4a284cf9cccc6e06407229951aeb062ef8811156915afccfc5f4259b79"></a><!-- doxytag: member="RS_PRIMITIVE_TRIANGLE" ref="aaaa4ecd4a284cf9cccc6e06407229951aeb062ef8811156915afccfc5f4259b79" args="" -->RS_PRIMITIVE_TRIANGLE</em> </td><td>
-<p>Vertices will be rendered as individual triangles </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="aaaa4ecd4a284cf9cccc6e06407229951a497d5376ef6c9f9ead810a053b9b35d9"></a><!-- doxytag: member="RS_PRIMITIVE_TRIANGLE_STRIP" ref="aaaa4ecd4a284cf9cccc6e06407229951a497d5376ef6c9f9ead810a053b9b35d9" args="" -->RS_PRIMITIVE_TRIANGLE_STRIP</em> </td><td>
-<p>Vertices will be rendered as a connected triangle strip defined by the first three vertices with each additional triangle defined by a new vertex </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="aaaa4ecd4a284cf9cccc6e06407229951afadd96d3a17724e061d9eb07bfca4a01"></a><!-- doxytag: member="RS_PRIMITIVE_TRIANGLE_FAN" ref="aaaa4ecd4a284cf9cccc6e06407229951afadd96d3a17724e061d9eb07bfca4a01" args="" -->RS_PRIMITIVE_TRIANGLE_FAN</em> </td><td>
-<p>Vertices will be rendered as a sequence of triangles that all share first vertex as the origin </p>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" id="aaaa4ecd4a284cf9cccc6e06407229951a136481c7695b09f01126da71bb132c9d"></a><!-- doxytag: member="RS_PRIMITIVE_INVALID" ref="aaaa4ecd4a284cf9cccc6e06407229951a136481c7695b09f01126da71bb132c9d" args="" -->RS_PRIMITIVE_INVALID</em> </td><td>
-<p>Invalid primitive </p>
-</td></tr>
-</table>
-</dd>
-</dl>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00425">425</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-
-</div>
-</div>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/rs__types_8rsh_source.html b/docs/html/reference/renderscript/rs__types_8rsh_source.html
deleted file mode 100644
index f580306..0000000
--- a/docs/html/reference/renderscript/rs__types_8rsh_source.html
+++ /dev/null
@@ -1,300 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_types.rsh Source File</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
- <div id="navrow1" class="tabs">
- <ul class="tablist">
- <li><a href="index.html"><span>Overview</span></a></li>
- <li class="current"><a href="globals.html"><span>Globals</span></a></li>
- <li><a href="annotated.html"><span>Structs</span></a></li>
- </ul>
- </div>
-<div class="header">
- <div class="headertitle">
-<div class="title">/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/rs_types.rsh</div> </div>
-</div>
-<div class="contents">
-<a href="rs__types_8rsh.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * Copyright (C) 2013 The Android Open Source Project</span>
-<a name="l00003"></a>00003 <span class="comment"> *</span>
-<a name="l00004"></a>00004 <span class="comment"> * Licensed under the Apache License, Version 2.0 (the "License");</span>
-<a name="l00005"></a>00005 <span class="comment"> * you may not use this file except in compliance with the License.</span>
-<a name="l00006"></a>00006 <span class="comment"> * You may obtain a copy of the License at</span>
-<a name="l00007"></a>00007 <span class="comment"> *</span>
-<a name="l00008"></a>00008 <span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span>
-<a name="l00011"></a>00011 <span class="comment"> * distributed under the License is distributed on an "AS IS" BASIS,</span>
-<a name="l00012"></a>00012 <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
-<a name="l00013"></a>00013 <span class="comment"> * See the License for the specific language governing permissions and</span>
-<a name="l00014"></a>00014 <span class="comment"> * limitations under the License.</span>
-<a name="l00015"></a>00015 <span class="comment"> */</span>
-<a name="l00016"></a>00016
-<a name="l00041"></a>00041 <span class="preprocessor">#ifndef __RS_TYPES_RSH__</span>
-<a name="l00042"></a>00042 <span class="preprocessor"></span><span class="preprocessor">#define __RS_TYPES_RSH__</span>
-<a name="l00043"></a>00043 <span class="preprocessor"></span>
-<a name="l00044"></a>00044 <span class="comment">/* Constants */</span>
-<a name="l00045"></a>00045 <span class="preprocessor">#define M_E 2.718281828459045235360287471352662498f </span><span class="comment">/* e */</span>
-<a name="l00046"></a>00046 <span class="preprocessor">#define M_LOG2E 1.442695040888963407359924681001892137f </span><span class="comment">/* log_2 e */</span>
-<a name="l00047"></a>00047 <span class="preprocessor">#define M_LOG10E 0.434294481903251827651128918916605082f </span><span class="comment">/* log_10 e */</span>
-<a name="l00048"></a>00048 <span class="preprocessor">#define M_LN2 0.693147180559945309417232121458176568f </span><span class="comment">/* log_e 2 */</span>
-<a name="l00049"></a>00049 <span class="preprocessor">#define M_LN10 2.302585092994045684017991454684364208f </span><span class="comment">/* log_e 10 */</span>
-<a name="l00050"></a>00050 <span class="preprocessor">#define M_PI 3.141592653589793238462643383279502884f </span><span class="comment">/* pi */</span>
-<a name="l00051"></a>00051 <span class="preprocessor">#define M_PI_2 1.570796326794896619231321691639751442f </span><span class="comment">/* pi/2 */</span>
-<a name="l00052"></a>00052 <span class="preprocessor">#define M_PI_4 0.785398163397448309615660845819875721f </span><span class="comment">/* pi/4 */</span>
-<a name="l00053"></a>00053 <span class="preprocessor">#define M_1_PI 0.318309886183790671537767526745028724f </span><span class="comment">/* 1/pi */</span>
-<a name="l00054"></a>00054 <span class="preprocessor">#define M_2_PIl 0.636619772367581343075535053490057448f </span><span class="comment">/* 2/pi */</span>
-<a name="l00055"></a>00055 <span class="preprocessor">#define M_2_SQRTPI 1.128379167095512573896158903121545172f </span><span class="comment">/* 2/sqrt(pi) */</span>
-<a name="l00056"></a>00056 <span class="preprocessor">#define M_SQRT2 1.414213562373095048801688724209698079f </span><span class="comment">/* sqrt(2) */</span>
-<a name="l00057"></a>00057 <span class="preprocessor">#define M_SQRT1_2 0.707106781186547524400844362104849039f </span><span class="comment">/* 1/sqrt(2) */</span>
-<a name="l00058"></a>00058
-<a name="l00059"></a>00059 <span class="preprocessor">#include "stdbool.h"</span>
-<a name="l00063"></a><a class="code" href="rs__types_8rsh.html#ad566f6541e98b74246db1a3a3a85ad49">00063</a> <span class="keyword">typedef</span> <span class="keywordtype">char</span> <a class="code" href="rs__types_8rsh.html#ad566f6541e98b74246db1a3a3a85ad49">int8_t</a>;
-<a name="l00067"></a><a class="code" href="rs__types_8rsh.html#aa343fa3b3d06292b959ffdd4c4703b06">00067</a> <span class="keyword">typedef</span> <span class="keywordtype">short</span> <a class="code" href="rs__types_8rsh.html#aa343fa3b3d06292b959ffdd4c4703b06">int16_t</a>;
-<a name="l00071"></a><a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">00071</a> <span class="keyword">typedef</span> <span class="keywordtype">int</span> <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a>;
-<a name="l00075"></a><a class="code" href="rs__types_8rsh.html#a996e72f71b11a5bb8b3b7b6936b1516d">00075</a> <span class="keyword">typedef</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> <a class="code" href="rs__types_8rsh.html#a996e72f71b11a5bb8b3b7b6936b1516d">int64_t</a>;
-<a name="l00079"></a><a class="code" href="rs__types_8rsh.html#aba7bc1797add20fe3efdf37ced1182c5">00079</a> <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="rs__types_8rsh.html#aba7bc1797add20fe3efdf37ced1182c5">uint8_t</a>;
-<a name="l00083"></a><a class="code" href="rs__types_8rsh.html#a273cf69d639a59973b6019625df33e30">00083</a> <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> <a class="code" href="rs__types_8rsh.html#a273cf69d639a59973b6019625df33e30">uint16_t</a>;
-<a name="l00087"></a><a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">00087</a> <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a>;
-<a name="l00091"></a><a class="code" href="rs__types_8rsh.html#aaa5d1cd013383c889537491c3cfd9aad">00091</a> <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> <a class="code" href="rs__types_8rsh.html#aaa5d1cd013383c889537491c3cfd9aad">uint64_t</a>;
-<a name="l00095"></a><a class="code" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">00095</a> <span class="keyword">typedef</span> <a class="code" href="rs__types_8rsh.html#aba7bc1797add20fe3efdf37ced1182c5">uint8_t</a> <a class="code" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a>;
-<a name="l00099"></a><a class="code" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">00099</a> <span class="keyword">typedef</span> <a class="code" href="rs__types_8rsh.html#a273cf69d639a59973b6019625df33e30">uint16_t</a> <a class="code" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a>;
-<a name="l00103"></a><a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">00103</a> <span class="keyword">typedef</span> <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> <a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a>;
-<a name="l00107"></a><a class="code" href="rs__types_8rsh.html#ab46637ef82283186e57f54756fe67203">00107</a> <span class="keyword">typedef</span> <a class="code" href="rs__types_8rsh.html#aaa5d1cd013383c889537491c3cfd9aad">uint64_t</a> <a class="code" href="rs__types_8rsh.html#ab46637ef82283186e57f54756fe67203">ulong</a>;
-<a name="l00111"></a><a class="code" href="rs__types_8rsh.html#a29d85914ddff32967d85ada69854206d">00111</a> <span class="keyword">typedef</span> <a class="code" href="rs__types_8rsh.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> <a class="code" href="rs__types_8rsh.html#a29d85914ddff32967d85ada69854206d">size_t</a>;
-<a name="l00115"></a><a class="code" href="rs__types_8rsh.html#a170745d0d946e79c4c2a056d1d158996">00115</a> <span class="keyword">typedef</span> <a class="code" href="rs__types_8rsh.html#a32f2e37ee053cf2ce8ca28d1f74630e5">int32_t</a> <a class="code" href="rs__types_8rsh.html#a170745d0d946e79c4c2a056d1d158996">ssize_t</a>;
-<a name="l00116"></a>00116
-<a name="l00122"></a><a class="code" href="structrs__element.html">00122</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{ <span class="keyword">const</span> <span class="keywordtype">int</span>* <span class="keyword">const</span> p; } __attribute__((packed, aligned(4))) <a class="code" href="structrs__element.html" title="Opaque handle to a RenderScript element.">rs_element</a>;
-<a name="l00128"></a><a class="code" href="structrs__type.html">00128</a> typedef struct { <span class="keyword">const</span> <span class="keywordtype">int</span>* <span class="keyword">const</span> p; } __attribute__((packed, aligned(4))) <a class="code" href="structrs__type.html" title="Opaque handle to a RenderScript type.">rs_type</a>;
-<a name="l00134"></a><a class="code" href="structrs__allocation.html">00134</a> typedef struct { <span class="keyword">const</span> <span class="keywordtype">int</span>* <span class="keyword">const</span> p; } __attribute__((packed, aligned(4))) <a class="code" href="structrs__allocation.html" title="Opaque handle to a RenderScript allocation.">rs_allocation</a>;
-<a name="l00140"></a><a class="code" href="structrs__sampler.html">00140</a> typedef struct { <span class="keyword">const</span> <span class="keywordtype">int</span>* <span class="keyword">const</span> p; } __attribute__((packed, aligned(4))) <a class="code" href="structrs__sampler.html" title="Opaque handle to a RenderScript sampler object.">rs_sampler</a>;
-<a name="l00146"></a><a class="code" href="structrs__script.html">00146</a> typedef struct { <span class="keyword">const</span> <span class="keywordtype">int</span>* <span class="keyword">const</span> p; } __attribute__((packed, aligned(4))) <a class="code" href="structrs__script.html" title="Opaque handle to a RenderScript script object.">rs_script</a>;
-<a name="l00152"></a><a class="code" href="structrs__mesh.html">00152</a> typedef struct { <span class="keyword">const</span> <span class="keywordtype">int</span>* <span class="keyword">const</span> p; } __attribute__((packed, aligned(4))) <a class="code" href="structrs__mesh.html" title="Opaque handle to a RenderScript mesh object.">rs_mesh</a>;
-<a name="l00158"></a><a class="code" href="structrs__path.html">00158</a> typedef struct { <span class="keyword">const</span> <span class="keywordtype">int</span>* <span class="keyword">const</span> p; } __attribute__((packed, aligned(4))) <a class="code" href="structrs__path.html" title="Opaque handle to a RenderScript Path object.">rs_path</a>;
-<a name="l00164"></a><a class="code" href="structrs__program__fragment.html">00164</a> typedef struct { <span class="keyword">const</span> <span class="keywordtype">int</span>* <span class="keyword">const</span> p; } __attribute__((packed, aligned(4))) <a class="code" href="structrs__program__fragment.html" title="Opaque handle to a RenderScript ProgramFragment object.">rs_program_fragment</a>;
-<a name="l00170"></a><a class="code" href="structrs__program__vertex.html">00170</a> typedef struct { <span class="keyword">const</span> <span class="keywordtype">int</span>* <span class="keyword">const</span> p; } __attribute__((packed, aligned(4))) <a class="code" href="structrs__program__vertex.html" title="Opaque handle to a RenderScript ProgramVertex object.">rs_program_vertex</a>;
-<a name="l00176"></a><a class="code" href="structrs__program__raster.html">00176</a> typedef struct { <span class="keyword">const</span> <span class="keywordtype">int</span>* <span class="keyword">const</span> p; } __attribute__((packed, aligned(4))) <a class="code" href="structrs__program__raster.html" title="Opaque handle to a RenderScript ProgramRaster object.">rs_program_raster</a>;
-<a name="l00182"></a><a class="code" href="structrs__program__store.html">00182</a> typedef struct { <span class="keyword">const</span> <span class="keywordtype">int</span>* <span class="keyword">const</span> p; } __attribute__((packed, aligned(4))) <a class="code" href="structrs__program__store.html" title="Opaque handle to a RenderScript ProgramStore object.">rs_program_store</a>;
-<a name="l00188"></a><a class="code" href="structrs__font.html">00188</a> typedef struct { <span class="keyword">const</span> <span class="keywordtype">int</span>* <span class="keyword">const</span> p; } __attribute__((packed, aligned(4))) <a class="code" href="structrs__font.html" title="Opaque handle to a RenderScript font object.">rs_font</a>;
-<a name="l00189"></a>00189
-<a name="l00195"></a><a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">00195</a> typedef <span class="keywordtype">float</span> <a class="code" href="rs__types_8rsh.html#a5086d0fcb71f916c936af486ccf0dd41">float2</a> __attribute__((ext_vector_type(2)));
-<a name="l00200"></a><a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">00200</a> typedef <span class="keywordtype">float</span> <a class="code" href="rs__types_8rsh.html#a0046fa0f208d0899adbcf1f8b5aafadd">float3</a> __attribute__((ext_vector_type(3)));
-<a name="l00206"></a><a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">00206</a> typedef <span class="keywordtype">float</span> <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> __attribute__((ext_vector_type(4)));
-<a name="l00207"></a>00207
-<a name="l00212"></a><a class="code" href="rs__types_8rsh.html#a75ef868cedebc2a6eeb1bc6ca6ca49c3">00212</a> typedef <span class="keywordtype">double</span> <a class="code" href="rs__types_8rsh.html#a75ef868cedebc2a6eeb1bc6ca6ca49c3">double2</a> __attribute__((ext_vector_type(2)));
-<a name="l00217"></a><a class="code" href="rs__types_8rsh.html#aa3c90d5a23d674185a13e95402eda7eb">00217</a> typedef <span class="keywordtype">double</span> <a class="code" href="rs__types_8rsh.html#aa3c90d5a23d674185a13e95402eda7eb">double3</a> __attribute__((ext_vector_type(3)));
-<a name="l00222"></a><a class="code" href="rs__types_8rsh.html#a60f4b04e076f0dd0ecc99c365fc4ca21">00222</a> typedef <span class="keywordtype">double</span> <a class="code" href="rs__types_8rsh.html#a60f4b04e076f0dd0ecc99c365fc4ca21">double4</a> __attribute__((ext_vector_type(4)));
-<a name="l00223"></a>00223
-<a name="l00228"></a><a class="code" href="rs__types_8rsh.html#aff5eb7cd53a34bb01924bf64485296de">00228</a> typedef <a class="code" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> <a class="code" href="rs__types_8rsh.html#aff5eb7cd53a34bb01924bf64485296de">uchar2</a> __attribute__((ext_vector_type(2)));
-<a name="l00233"></a><a class="code" href="rs__types_8rsh.html#a247b5eacf2b662849668cbc33120343f">00233</a> typedef <a class="code" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> <a class="code" href="rs__types_8rsh.html#a247b5eacf2b662849668cbc33120343f">uchar3</a> __attribute__((ext_vector_type(3)));
-<a name="l00238"></a><a class="code" href="rs__types_8rsh.html#ae6ed52a87d4ff920c303b13b00f7396d">00238</a> typedef <a class="code" href="rs__types_8rsh.html#a27c902d5ca78afa82d5ed75554d5cedc">uchar</a> <a class="code" href="rs__types_8rsh.html#ae6ed52a87d4ff920c303b13b00f7396d">uchar4</a> __attribute__((ext_vector_type(4)));
-<a name="l00239"></a>00239
-<a name="l00244"></a><a class="code" href="rs__types_8rsh.html#a24a9d78cfc32475e2c6eb1cdec239bf2">00244</a> typedef <a class="code" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a> <a class="code" href="rs__types_8rsh.html#a24a9d78cfc32475e2c6eb1cdec239bf2">ushort2</a> __attribute__((ext_vector_type(2)));
-<a name="l00249"></a><a class="code" href="rs__types_8rsh.html#ab78391445785d2ca0276392a9c97fcba">00249</a> typedef <a class="code" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a> <a class="code" href="rs__types_8rsh.html#ab78391445785d2ca0276392a9c97fcba">ushort3</a> __attribute__((ext_vector_type(3)));
-<a name="l00254"></a><a class="code" href="rs__types_8rsh.html#a77a09fa01d7fc721bbc44c32aac2d487">00254</a> typedef <a class="code" href="rs__types_8rsh.html#a9e58a7bf060b7a5fbf6a401d3020adca">ushort</a> <a class="code" href="rs__types_8rsh.html#a77a09fa01d7fc721bbc44c32aac2d487">ushort4</a> __attribute__((ext_vector_type(4)));
-<a name="l00255"></a>00255
-<a name="l00260"></a><a class="code" href="rs__types_8rsh.html#aaf90cd1f01a121e824fc6e1b927e7683">00260</a> typedef <a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> <a class="code" href="rs__types_8rsh.html#aaf90cd1f01a121e824fc6e1b927e7683">uint2</a> __attribute__((ext_vector_type(2)));
-<a name="l00265"></a><a class="code" href="rs__types_8rsh.html#ae80e36ac834c891aa76b09a220344e78">00265</a> typedef <a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> <a class="code" href="rs__types_8rsh.html#ae80e36ac834c891aa76b09a220344e78">uint3</a> __attribute__((ext_vector_type(3)));
-<a name="l00270"></a><a class="code" href="rs__types_8rsh.html#ad92f0ec6c2cdc1f11a6d7fe321047462">00270</a> typedef <a class="code" href="rs__types_8rsh.html#a4f5fce8c1ef282264f9214809524d836">uint</a> <a class="code" href="rs__types_8rsh.html#ad92f0ec6c2cdc1f11a6d7fe321047462">uint4</a> __attribute__((ext_vector_type(4)));
-<a name="l00271"></a>00271
-<a name="l00276"></a><a class="code" href="rs__types_8rsh.html#a56988b12ab16acf753356f7a5c70565a">00276</a> typedef <a class="code" href="rs__types_8rsh.html#ab46637ef82283186e57f54756fe67203">ulong</a> <a class="code" href="rs__types_8rsh.html#a56988b12ab16acf753356f7a5c70565a">ulong2</a> __attribute__((ext_vector_type(2)));
-<a name="l00281"></a><a class="code" href="rs__types_8rsh.html#ac623a569c28935fbedd3a8ed27ae0696">00281</a> typedef <a class="code" href="rs__types_8rsh.html#ab46637ef82283186e57f54756fe67203">ulong</a> <a class="code" href="rs__types_8rsh.html#ac623a569c28935fbedd3a8ed27ae0696">ulong3</a> __attribute__((ext_vector_type(3)));
-<a name="l00286"></a><a class="code" href="rs__types_8rsh.html#a3029c54b8e1779a1ddbdfe875432d137">00286</a> typedef <a class="code" href="rs__types_8rsh.html#ab46637ef82283186e57f54756fe67203">ulong</a> <a class="code" href="rs__types_8rsh.html#a3029c54b8e1779a1ddbdfe875432d137">ulong4</a> __attribute__((ext_vector_type(4)));
-<a name="l00287"></a>00287
-<a name="l00292"></a><a class="code" href="rs__types_8rsh.html#ac532b4c1895c8bd4fb75dc370c484351">00292</a> typedef <span class="keywordtype">char</span> <a class="code" href="rs__types_8rsh.html#ac532b4c1895c8bd4fb75dc370c484351">char2</a> __attribute__((ext_vector_type(2)));
-<a name="l00297"></a><a class="code" href="rs__types_8rsh.html#a4617fb31f4c03402515efee0a9b56210">00297</a> typedef <span class="keywordtype">char</span> <a class="code" href="rs__types_8rsh.html#a4617fb31f4c03402515efee0a9b56210">char3</a> __attribute__((ext_vector_type(3)));
-<a name="l00302"></a><a class="code" href="rs__types_8rsh.html#aecb498648daac97c7cc5f31c242dfa03">00302</a> typedef <span class="keywordtype">char</span> <a class="code" href="rs__types_8rsh.html#aecb498648daac97c7cc5f31c242dfa03">char4</a> __attribute__((ext_vector_type(4)));
-<a name="l00303"></a>00303
-<a name="l00308"></a><a class="code" href="rs__types_8rsh.html#a303d3ad18aaeacfcfeda2b8580b98796">00308</a> typedef <span class="keywordtype">short</span> <a class="code" href="rs__types_8rsh.html#a303d3ad18aaeacfcfeda2b8580b98796">short2</a> __attribute__((ext_vector_type(2)));
-<a name="l00313"></a><a class="code" href="rs__types_8rsh.html#a3f4967691ae2b249511b5f3dd9e18793">00313</a> typedef <span class="keywordtype">short</span> <a class="code" href="rs__types_8rsh.html#a3f4967691ae2b249511b5f3dd9e18793">short3</a> __attribute__((ext_vector_type(3)));
-<a name="l00318"></a><a class="code" href="rs__types_8rsh.html#a198219da0b1d51c8d7f8f12aad7e502d">00318</a> typedef <span class="keywordtype">short</span> <a class="code" href="rs__types_8rsh.html#a198219da0b1d51c8d7f8f12aad7e502d">short4</a> __attribute__((ext_vector_type(4)));
-<a name="l00319"></a>00319
-<a name="l00324"></a><a class="code" href="rs__types_8rsh.html#a6bc1fa1354fe2145b8f12b4bbfafcf4c">00324</a> typedef <span class="keywordtype">int</span> <a class="code" href="rs__types_8rsh.html#a6bc1fa1354fe2145b8f12b4bbfafcf4c">int2</a> __attribute__((ext_vector_type(2)));
-<a name="l00329"></a><a class="code" href="rs__types_8rsh.html#ad5512266b63fd06dcf450f6c9d5326c8">00329</a> typedef <span class="keywordtype">int</span> <a class="code" href="rs__types_8rsh.html#ad5512266b63fd06dcf450f6c9d5326c8">int3</a> __attribute__((ext_vector_type(3)));
-<a name="l00334"></a><a class="code" href="rs__types_8rsh.html#a897deab71f679999ed99d4153c797e70">00334</a> typedef <span class="keywordtype">int</span> <a class="code" href="rs__types_8rsh.html#a897deab71f679999ed99d4153c797e70">int4</a> __attribute__((ext_vector_type(4)));
-<a name="l00335"></a>00335
-<a name="l00340"></a><a class="code" href="rs__types_8rsh.html#afd55d62cee0785034b73375acd0df9da">00340</a> typedef <span class="keywordtype">long</span> <a class="code" href="rs__types_8rsh.html#afd55d62cee0785034b73375acd0df9da">long2</a> __attribute__((ext_vector_type(2)));
-<a name="l00345"></a><a class="code" href="rs__types_8rsh.html#ad9cedbf4050fad14138d1dcb3428ec18">00345</a> typedef <span class="keywordtype">long</span> <a class="code" href="rs__types_8rsh.html#ad9cedbf4050fad14138d1dcb3428ec18">long3</a> __attribute__((ext_vector_type(3)));
-<a name="l00350"></a><a class="code" href="rs__types_8rsh.html#ae177e4918f36e5c9da36d524cdb7a2e7">00350</a> typedef <span class="keywordtype">long</span> <a class="code" href="rs__types_8rsh.html#ae177e4918f36e5c9da36d524cdb7a2e7">long4</a> __attribute__((ext_vector_type(4)));
-<a name="l00351"></a>00351
-<a name="l00358"></a><a class="code" href="structrs__matrix4x4.html">00358</a> typedef struct {
-<a name="l00359"></a>00359 <span class="keywordtype">float</span> m[16];
-<a name="l00360"></a>00360 } <a class="code" href="structrs__matrix4x4.html" title="4x4 float matrix">rs_matrix4x4</a>;
-<a name="l00367"></a><a class="code" href="structrs__matrix3x3.html">00367</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
-<a name="l00368"></a>00368 <span class="keywordtype">float</span> m[9];
-<a name="l00369"></a>00369 } <a class="code" href="structrs__matrix3x3.html" title="3x3 float matrix">rs_matrix3x3</a>;
-<a name="l00376"></a><a class="code" href="structrs__matrix2x2.html">00376</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
-<a name="l00377"></a>00377 <span class="keywordtype">float</span> m[4];
-<a name="l00378"></a>00378 } <a class="code" href="structrs__matrix2x2.html" title="2x2 float matrix">rs_matrix2x2</a>;
-<a name="l00379"></a>00379
-<a name="l00383"></a><a class="code" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">00383</a> <span class="keyword">typedef</span> <a class="code" href="rs__types_8rsh.html#adb5162dc168ddd471d948faa60b37c5e">float4</a> <a class="code" href="rs__types_8rsh.html#a86f99f382dc35fc8ad98b524fe6d5447">rs_quaternion</a>;
-<a name="l00384"></a>00384
-<a name="l00385"></a>00385 <span class="preprocessor">#define RS_PACKED __attribute__((packed, aligned(4)))</span>
-<a name="l00386"></a>00386 <span class="preprocessor"></span><span class="preprocessor">#define NULL ((void *)0)</span>
-<a name="l00387"></a>00387 <span class="preprocessor"></span>
-<a name="l00388"></a>00388 <span class="preprocessor">#if (defined(RS_VERSION) && (RS_VERSION >= 14))</span>
-<a name="l00389"></a>00389 <span class="preprocessor"></span>
-<a name="l00393"></a><a class="code" href="rs__types_8rsh.html#acc6f9a94176656c73fd74f789cfa2229">00393</a> <span class="keyword">typedef</span> <span class="keyword">enum</span> {
-<a name="l00394"></a>00394 RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X = 0,
-<a name="l00395"></a>00395 RS_ALLOCATION_CUBEMAP_FACE_NEGATIVE_X = 1,
-<a name="l00396"></a>00396 RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_Y = 2,
-<a name="l00397"></a>00397 RS_ALLOCATION_CUBEMAP_FACE_NEGATIVE_Y = 3,
-<a name="l00398"></a>00398 RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_Z = 4,
-<a name="l00399"></a>00399 RS_ALLOCATION_CUBEMAP_FACE_NEGATIVE_Z = 5
-<a name="l00400"></a>00400 } <a class="code" href="rs__types_8rsh.html#acc6f9a94176656c73fd74f789cfa2229" title="Enum for selecting cube map faces.">rs_allocation_cubemap_face</a>;
-<a name="l00401"></a>00401
-<a name="l00408"></a><a class="code" href="rs__types_8rsh.html#af8c988b9715d55b6e41e0ee1925fb171">00408</a> <span class="keyword">typedef</span> <span class="keyword">enum</span> {
-<a name="l00409"></a>00409 RS_ALLOCATION_USAGE_SCRIPT = 0x0001,
-<a name="l00410"></a>00410 RS_ALLOCATION_USAGE_GRAPHICS_TEXTURE = 0x0002,
-<a name="l00411"></a>00411 RS_ALLOCATION_USAGE_GRAPHICS_VERTEX = 0x0004,
-<a name="l00412"></a>00412 RS_ALLOCATION_USAGE_GRAPHICS_CONSTANTS = 0x0008,
-<a name="l00413"></a>00413 RS_ALLOCATION_USAGE_GRAPHICS_RENDER_TARGET = 0x0010
-<a name="l00414"></a>00414 } <a class="code" href="rs__types_8rsh.html#af8c988b9715d55b6e41e0ee1925fb171" title="Bitfield to specify the usage types for an allocation.">rs_allocation_usage_type</a>;
-<a name="l00415"></a>00415
-<a name="l00416"></a>00416 <span class="preprocessor">#endif //defined(RS_VERSION) && (RS_VERSION >= 14)</span>
-<a name="l00417"></a>00417 <span class="preprocessor"></span>
-<a name="l00418"></a>00418 <span class="comment">// New API's</span>
-<a name="l00419"></a>00419 <span class="preprocessor">#if (defined(RS_VERSION) && (RS_VERSION >= 16))</span>
-<a name="l00420"></a>00420 <span class="preprocessor"></span>
-<a name="l00425"></a><a class="code" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951">00425</a> <span class="keyword">typedef</span> <span class="keyword">enum</span> {
-<a name="l00429"></a><a class="code" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951a337ab7046b7cb5cc9eb14bc325ae3158">00429</a> <a class="code" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951a337ab7046b7cb5cc9eb14bc325ae3158">RS_PRIMITIVE_POINT</a> = 0,
-<a name="l00433"></a><a class="code" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951a09a49eaa42585d6181c8a2f711b63ddf">00433</a> <a class="code" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951a09a49eaa42585d6181c8a2f711b63ddf">RS_PRIMITIVE_LINE</a> = 1,
-<a name="l00437"></a><a class="code" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951abe563a9f68706a5aa567793a5088b4da">00437</a> <a class="code" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951abe563a9f68706a5aa567793a5088b4da">RS_PRIMITIVE_LINE_STRIP</a> = 2,
-<a name="l00441"></a><a class="code" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951aeb062ef8811156915afccfc5f4259b79">00441</a> <a class="code" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951aeb062ef8811156915afccfc5f4259b79">RS_PRIMITIVE_TRIANGLE</a> = 3,
-<a name="l00447"></a><a class="code" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951a497d5376ef6c9f9ead810a053b9b35d9">00447</a> <a class="code" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951a497d5376ef6c9f9ead810a053b9b35d9">RS_PRIMITIVE_TRIANGLE_STRIP</a> = 4,
-<a name="l00452"></a><a class="code" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951afadd96d3a17724e061d9eb07bfca4a01">00452</a> <a class="code" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951afadd96d3a17724e061d9eb07bfca4a01">RS_PRIMITIVE_TRIANGLE_FAN</a> = 5,
-<a name="l00453"></a>00453
-<a name="l00457"></a><a class="code" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951a136481c7695b09f01126da71bb132c9d">00457</a> <a class="code" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951a136481c7695b09f01126da71bb132c9d">RS_PRIMITIVE_INVALID</a> = 100,
-<a name="l00458"></a>00458 } <a class="code" href="rs__types_8rsh.html#aaaa4ecd4a284cf9cccc6e06407229951">rs_primitive</a>;
-<a name="l00459"></a>00459
-<a name="l00478"></a><a class="code" href="rs__types_8rsh.html#ae7551db5705f864fde49c13660aff647">00478</a> <span class="keyword">typedef</span> <span class="keyword">enum</span> {
-<a name="l00479"></a>00479 RS_TYPE_NONE = 0,
-<a name="l00480"></a>00480 RS_TYPE_FLOAT_32 = 2,
-<a name="l00481"></a>00481 RS_TYPE_FLOAT_64 = 3,
-<a name="l00482"></a>00482 RS_TYPE_SIGNED_8 = 4,
-<a name="l00483"></a>00483 RS_TYPE_SIGNED_16 = 5,
-<a name="l00484"></a>00484 RS_TYPE_SIGNED_32 = 6,
-<a name="l00485"></a>00485 RS_TYPE_SIGNED_64 = 7,
-<a name="l00486"></a>00486 RS_TYPE_UNSIGNED_8 = 8,
-<a name="l00487"></a>00487 RS_TYPE_UNSIGNED_16 = 9,
-<a name="l00488"></a>00488 RS_TYPE_UNSIGNED_32 = 10,
-<a name="l00489"></a>00489 RS_TYPE_UNSIGNED_64 = 11,
-<a name="l00490"></a>00490
-<a name="l00491"></a>00491 RS_TYPE_BOOLEAN = 12,
-<a name="l00492"></a>00492
-<a name="l00493"></a>00493 RS_TYPE_UNSIGNED_5_6_5 = 13,
-<a name="l00494"></a>00494 RS_TYPE_UNSIGNED_5_5_5_1 = 14,
-<a name="l00495"></a>00495 RS_TYPE_UNSIGNED_4_4_4_4 = 15,
-<a name="l00496"></a>00496
-<a name="l00497"></a>00497 RS_TYPE_MATRIX_4X4 = 16,
-<a name="l00498"></a>00498 RS_TYPE_MATRIX_3X3 = 17,
-<a name="l00499"></a>00499 RS_TYPE_MATRIX_2X2 = 18,
-<a name="l00500"></a>00500
-<a name="l00501"></a>00501 RS_TYPE_ELEMENT = 1000,
-<a name="l00502"></a>00502 RS_TYPE_TYPE = 1001,
-<a name="l00503"></a>00503 RS_TYPE_ALLOCATION = 1002,
-<a name="l00504"></a>00504 RS_TYPE_SAMPLER = 1003,
-<a name="l00505"></a>00505 RS_TYPE_SCRIPT = 1004,
-<a name="l00506"></a>00506 RS_TYPE_MESH = 1005,
-<a name="l00507"></a>00507 RS_TYPE_PROGRAM_FRAGMENT = 1006,
-<a name="l00508"></a>00508 RS_TYPE_PROGRAM_VERTEX = 1007,
-<a name="l00509"></a>00509 RS_TYPE_PROGRAM_RASTER = 1008,
-<a name="l00510"></a>00510 RS_TYPE_PROGRAM_STORE = 1009,
-<a name="l00511"></a>00511 RS_TYPE_FONT = 1010,
-<a name="l00512"></a>00512
-<a name="l00513"></a>00513 RS_TYPE_INVALID = 10000,
-<a name="l00514"></a>00514 } <a class="code" href="rs__types_8rsh.html#ae7551db5705f864fde49c13660aff647" title="Enumeration for possible element data types.">rs_data_type</a>;
-<a name="l00515"></a>00515
-<a name="l00524"></a><a class="code" href="rs__types_8rsh.html#a1692d177c4a3fe1544bd91172056581a">00524</a> <span class="keyword">typedef</span> <span class="keyword">enum</span> {
-<a name="l00525"></a>00525 RS_KIND_USER = 0,
-<a name="l00526"></a>00526
-<a name="l00527"></a>00527 RS_KIND_PIXEL_L = 7,
-<a name="l00528"></a>00528 RS_KIND_PIXEL_A = 8,
-<a name="l00529"></a>00529 RS_KIND_PIXEL_LA = 9,
-<a name="l00530"></a>00530 RS_KIND_PIXEL_RGB = 10,
-<a name="l00531"></a>00531 RS_KIND_PIXEL_RGBA = 11,
-<a name="l00532"></a>00532 RS_KIND_PIXEL_DEPTH = 12,
-<a name="l00533"></a>00533 RS_KIND_PIXEL_YUV = 13,
-<a name="l00534"></a>00534
-<a name="l00535"></a>00535 RS_KIND_INVALID = 100,
-<a name="l00536"></a>00536 } <a class="code" href="rs__types_8rsh.html#a1692d177c4a3fe1544bd91172056581a" title="Enumeration for possible element data kind.">rs_data_kind</a>;
-<a name="l00537"></a>00537
-<a name="l00538"></a><a class="code" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bf">00538</a> <span class="keyword">typedef</span> <span class="keyword">enum</span> {
-<a name="l00542"></a><a class="code" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bfa8d469fa992bac113a001d75aa7cfbb5a">00542</a> <a class="code" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bfa8d469fa992bac113a001d75aa7cfbb5a">RS_DEPTH_FUNC_ALWAYS</a> = 0,
-<a name="l00547"></a><a class="code" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bfac1ddb06fe80be898bf8d4a517187575a">00547</a> <a class="code" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bfac1ddb06fe80be898bf8d4a517187575a">RS_DEPTH_FUNC_LESS</a> = 1,
-<a name="l00552"></a><a class="code" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bfa62459990f41930a88542b878ddd53d9f">00552</a> <a class="code" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bfa62459990f41930a88542b878ddd53d9f">RS_DEPTH_FUNC_LEQUAL</a> = 2,
-<a name="l00557"></a><a class="code" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bfa412bb65be35e058a7699b8211cc2ef7d">00557</a> <a class="code" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bfa412bb65be35e058a7699b8211cc2ef7d">RS_DEPTH_FUNC_GREATER</a> = 3,
-<a name="l00562"></a><a class="code" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bfa2858ef91becfeb84d8f34a1458a4126d">00562</a> <a class="code" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bfa2858ef91becfeb84d8f34a1458a4126d">RS_DEPTH_FUNC_GEQUAL</a> = 4,
-<a name="l00567"></a><a class="code" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bfa56339400e4089e546199547717bdcd21">00567</a> <a class="code" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bfa56339400e4089e546199547717bdcd21">RS_DEPTH_FUNC_EQUAL</a> = 5,
-<a name="l00572"></a><a class="code" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bfa2105e438ae89b89a2f4361483e65966d">00572</a> <a class="code" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bfa2105e438ae89b89a2f4361483e65966d">RS_DEPTH_FUNC_NOTEQUAL</a> = 6,
-<a name="l00576"></a><a class="code" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bfadfc3917c562a540b4114181440b909e3">00576</a> <a class="code" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bfadfc3917c562a540b4114181440b909e3">RS_DEPTH_FUNC_INVALID</a> = 100,
-<a name="l00577"></a>00577 } <a class="code" href="rs__types_8rsh.html#a03e91ad8ebfc283ba20f7443dea4a4bf">rs_depth_func</a>;
-<a name="l00578"></a>00578
-<a name="l00579"></a>00579 <span class="keyword">typedef</span> <span class="keyword">enum</span> {
-<a name="l00580"></a>00580 RS_BLEND_SRC_ZERO = 0,
-<a name="l00581"></a>00581 RS_BLEND_SRC_ONE = 1,
-<a name="l00582"></a>00582 RS_BLEND_SRC_DST_COLOR = 2,
-<a name="l00583"></a>00583 RS_BLEND_SRC_ONE_MINUS_DST_COLOR = 3,
-<a name="l00584"></a>00584 RS_BLEND_SRC_SRC_ALPHA = 4,
-<a name="l00585"></a>00585 RS_BLEND_SRC_ONE_MINUS_SRC_ALPHA = 5,
-<a name="l00586"></a>00586 RS_BLEND_SRC_DST_ALPHA = 6,
-<a name="l00587"></a>00587 RS_BLEND_SRC_ONE_MINUS_DST_ALPHA = 7,
-<a name="l00588"></a>00588 RS_BLEND_SRC_SRC_ALPHA_SATURATE = 8,
-<a name="l00589"></a>00589
-<a name="l00590"></a>00590 RS_BLEND_SRC_INVALID = 100,
-<a name="l00591"></a>00591 } rs_blend_src_func;
-<a name="l00592"></a>00592
-<a name="l00593"></a>00593 <span class="keyword">typedef</span> <span class="keyword">enum</span> {
-<a name="l00594"></a>00594 RS_BLEND_DST_ZERO = 0,
-<a name="l00595"></a>00595 RS_BLEND_DST_ONE = 1,
-<a name="l00596"></a>00596 RS_BLEND_DST_SRC_COLOR = 2,
-<a name="l00597"></a>00597 RS_BLEND_DST_ONE_MINUS_SRC_COLOR = 3,
-<a name="l00598"></a>00598 RS_BLEND_DST_SRC_ALPHA = 4,
-<a name="l00599"></a>00599 RS_BLEND_DST_ONE_MINUS_SRC_ALPHA = 5,
-<a name="l00600"></a>00600 RS_BLEND_DST_DST_ALPHA = 6,
-<a name="l00601"></a>00601 RS_BLEND_DST_ONE_MINUS_DST_ALPHA = 7,
-<a name="l00602"></a>00602
-<a name="l00603"></a>00603 RS_BLEND_DST_INVALID = 100,
-<a name="l00604"></a>00604 } rs_blend_dst_func;
-<a name="l00605"></a>00605
-<a name="l00606"></a>00606 <span class="keyword">typedef</span> <span class="keyword">enum</span> {
-<a name="l00607"></a>00607 RS_CULL_BACK = 0,
-<a name="l00608"></a>00608 RS_CULL_FRONT = 1,
-<a name="l00609"></a>00609 RS_CULL_NONE = 2,
-<a name="l00610"></a>00610
-<a name="l00611"></a>00611 RS_CULL_INVALID = 100,
-<a name="l00612"></a>00612 } rs_cull_mode;
-<a name="l00613"></a>00613
-<a name="l00614"></a>00614 <span class="keyword">typedef</span> <span class="keyword">enum</span> {
-<a name="l00615"></a>00615 RS_SAMPLER_NEAREST = 0,
-<a name="l00616"></a>00616 RS_SAMPLER_LINEAR = 1,
-<a name="l00617"></a>00617 RS_SAMPLER_LINEAR_MIP_LINEAR = 2,
-<a name="l00618"></a>00618 RS_SAMPLER_WRAP = 3,
-<a name="l00619"></a>00619 RS_SAMPLER_CLAMP = 4,
-<a name="l00620"></a>00620 RS_SAMPLER_LINEAR_MIP_NEAREST = 5,
-<a name="l00621"></a>00621 RS_SAMPLER_MIRRORED_REPEAT = 6,
-<a name="l00622"></a>00622
-<a name="l00623"></a>00623 RS_SAMPLER_INVALID = 100,
-<a name="l00624"></a>00624 } rs_sampler_value;
-<a name="l00625"></a>00625
-<a name="l00626"></a>00626 <span class="preprocessor">#endif // (defined(RS_VERSION) && (RS_VERSION >= 16))</span>
-<a name="l00627"></a>00627 <span class="preprocessor"></span>
-<a name="l00628"></a>00628 <span class="preprocessor">#endif // __RS_TYPES_RSH__</span>
-</pre></div></div>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/structrs__allocation.html b/docs/html/reference/renderscript/structrs__allocation.html
deleted file mode 100644
index 1ffbc47..0000000
--- a/docs/html/reference/renderscript/structrs__allocation.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>rs_allocation Struct Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
- <div id="navrow1" class="tabs">
- <ul class="tablist">
- <li><a href="index.html"><span>Overview</span></a></li>
- <li><a href="globals.html"><span>Globals</span></a></li>
- <li class="current"><a href="annotated.html"><span>Structs</span></a></li>
- </ul>
- </div>
-</div>
-<div class="header">
- <div class="headertitle">
-<div class="title">rs_allocation Struct Reference</div> </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="rs_allocation" -->
-<p>Opaque handle to a RenderScript allocation.
- <a href="structrs__allocation.html#details">More...</a></p>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Opaque handle to a RenderScript allocation. </p>
-<p>See: android.renderscript.Allocation </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00134">134</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-</div><hr/>The documentation for this struct was generated from the following file:<ul>
-<li>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/<a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a></li>
-</ul>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/structrs__element.html b/docs/html/reference/renderscript/structrs__element.html
deleted file mode 100644
index d6a1460b..0000000
--- a/docs/html/reference/renderscript/structrs__element.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>rs_element Struct Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
- <div id="navrow1" class="tabs">
- <ul class="tablist">
- <li><a href="index.html"><span>Overview</span></a></li>
- <li><a href="globals.html"><span>Globals</span></a></li>
- <li class="current"><a href="annotated.html"><span>Structs</span></a></li>
- </ul>
- </div>
-</div>
-<div class="header">
- <div class="headertitle">
-<div class="title">rs_element Struct Reference</div> </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="rs_element" -->
-<p>Opaque handle to a RenderScript element.
- <a href="structrs__element.html#details">More...</a></p>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Opaque handle to a RenderScript element. </p>
-<p>See: android.renderscript.Element </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00122">122</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-</div><hr/>The documentation for this struct was generated from the following file:<ul>
-<li>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/<a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a></li>
-</ul>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/structrs__font.html b/docs/html/reference/renderscript/structrs__font.html
deleted file mode 100644
index dbc4c4d..0000000
--- a/docs/html/reference/renderscript/structrs__font.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>rs_font Struct Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
- <div id="navrow1" class="tabs">
- <ul class="tablist">
- <li><a href="index.html"><span>Overview</span></a></li>
- <li><a href="globals.html"><span>Globals</span></a></li>
- <li class="current"><a href="annotated.html"><span>Structs</span></a></li>
- </ul>
- </div>
-</div>
-<div class="header">
- <div class="headertitle">
-<div class="title">rs_font Struct Reference</div> </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="rs_font" -->
-<p>Opaque handle to a RenderScript font object.
- <a href="structrs__font.html#details">More...</a></p>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Opaque handle to a RenderScript font object. </p>
-<p>See: android.renderscript.Font </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00188">188</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-</div><hr/>The documentation for this struct was generated from the following file:<ul>
-<li>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/<a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a></li>
-</ul>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/structrs__matrix2x2.html b/docs/html/reference/renderscript/structrs__matrix2x2.html
deleted file mode 100644
index bacfa02..0000000
--- a/docs/html/reference/renderscript/structrs__matrix2x2.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>rs_matrix2x2 Struct Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
- <div id="navrow1" class="tabs">
- <ul class="tablist">
- <li><a href="index.html"><span>Overview</span></a></li>
- <li><a href="globals.html"><span>Globals</span></a></li>
- <li class="current"><a href="annotated.html"><span>Structs</span></a></li>
- </ul>
- </div>
-</div>
-<div class="header">
- <div class="headertitle">
-<div class="title">rs_matrix2x2 Struct Reference</div> </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="rs_matrix2x2" -->
-<p>2x2 float matrix
- <a href="structrs__matrix2x2.html#details">More...</a></p>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>2x2 float matrix </p>
-<p>Native holder for RS matrix. Elements are stored in the array at the location [row*2 + col] </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00376">376</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-</div><hr/>The documentation for this struct was generated from the following file:<ul>
-<li>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/<a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a></li>
-</ul>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/structrs__matrix3x3.html b/docs/html/reference/renderscript/structrs__matrix3x3.html
deleted file mode 100644
index 3745608..0000000
--- a/docs/html/reference/renderscript/structrs__matrix3x3.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>rs_matrix3x3 Struct Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
- <div id="navrow1" class="tabs">
- <ul class="tablist">
- <li><a href="index.html"><span>Overview</span></a></li>
- <li><a href="globals.html"><span>Globals</span></a></li>
- <li class="current"><a href="annotated.html"><span>Structs</span></a></li>
- </ul>
- </div>
-</div>
-<div class="header">
- <div class="headertitle">
-<div class="title">rs_matrix3x3 Struct Reference</div> </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="rs_matrix3x3" -->
-<p>3x3 float matrix
- <a href="structrs__matrix3x3.html#details">More...</a></p>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>3x3 float matrix </p>
-<p>Native holder for RS matrix. Elements are stored in the array at the location [row*3 + col] </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00367">367</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-</div><hr/>The documentation for this struct was generated from the following file:<ul>
-<li>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/<a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a></li>
-</ul>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/structrs__matrix4x4.html b/docs/html/reference/renderscript/structrs__matrix4x4.html
deleted file mode 100644
index 26b57d1..0000000
--- a/docs/html/reference/renderscript/structrs__matrix4x4.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>rs_matrix4x4 Struct Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
- <div id="navrow1" class="tabs">
- <ul class="tablist">
- <li><a href="index.html"><span>Overview</span></a></li>
- <li><a href="globals.html"><span>Globals</span></a></li>
- <li class="current"><a href="annotated.html"><span>Structs</span></a></li>
- </ul>
- </div>
-</div>
-<div class="header">
- <div class="headertitle">
-<div class="title">rs_matrix4x4 Struct Reference</div> </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="rs_matrix4x4" -->
-<p>4x4 float matrix
- <a href="structrs__matrix4x4.html#details">More...</a></p>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>4x4 float matrix </p>
-<p>Native holder for RS matrix. Elements are stored in the array at the location [row*4 + col] </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00358">358</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-</div><hr/>The documentation for this struct was generated from the following file:<ul>
-<li>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/<a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a></li>
-</ul>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/structrs__mesh.html b/docs/html/reference/renderscript/structrs__mesh.html
deleted file mode 100644
index fed96d9..0000000
--- a/docs/html/reference/renderscript/structrs__mesh.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>rs_mesh Struct Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
- <div id="navrow1" class="tabs">
- <ul class="tablist">
- <li><a href="index.html"><span>Overview</span></a></li>
- <li><a href="globals.html"><span>Globals</span></a></li>
- <li class="current"><a href="annotated.html"><span>Structs</span></a></li>
- </ul>
- </div>
-</div>
-<div class="header">
- <div class="headertitle">
-<div class="title">rs_mesh Struct Reference</div> </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="rs_mesh" -->
-<p>Opaque handle to a RenderScript mesh object.
- <a href="structrs__mesh.html#details">More...</a></p>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Opaque handle to a RenderScript mesh object. </p>
-<p>See: android.renderscript.Mesh </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00152">152</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-</div><hr/>The documentation for this struct was generated from the following file:<ul>
-<li>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/<a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a></li>
-</ul>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/structrs__path.html b/docs/html/reference/renderscript/structrs__path.html
deleted file mode 100644
index ef7f650..0000000
--- a/docs/html/reference/renderscript/structrs__path.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>rs_path Struct Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
- <div id="navrow1" class="tabs">
- <ul class="tablist">
- <li><a href="index.html"><span>Overview</span></a></li>
- <li><a href="globals.html"><span>Globals</span></a></li>
- <li class="current"><a href="annotated.html"><span>Structs</span></a></li>
- </ul>
- </div>
-</div>
-<div class="header">
- <div class="headertitle">
-<div class="title">rs_path Struct Reference</div> </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="rs_path" -->
-<p>Opaque handle to a RenderScript Path object.
- <a href="structrs__path.html#details">More...</a></p>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Opaque handle to a RenderScript Path object. </p>
-<p>See: android.renderscript.Path </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00158">158</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-</div><hr/>The documentation for this struct was generated from the following file:<ul>
-<li>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/<a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a></li>
-</ul>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/structrs__program__fragment.html b/docs/html/reference/renderscript/structrs__program__fragment.html
deleted file mode 100644
index 707e899..0000000
--- a/docs/html/reference/renderscript/structrs__program__fragment.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>rs_program_fragment Struct Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
- <div id="navrow1" class="tabs">
- <ul class="tablist">
- <li><a href="index.html"><span>Overview</span></a></li>
- <li><a href="globals.html"><span>Globals</span></a></li>
- <li class="current"><a href="annotated.html"><span>Structs</span></a></li>
- </ul>
- </div>
-</div>
-<div class="header">
- <div class="headertitle">
-<div class="title">rs_program_fragment Struct Reference</div> </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="rs_program_fragment" -->
-<p>Opaque handle to a RenderScript ProgramFragment object.
- <a href="structrs__program__fragment.html#details">More...</a></p>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Opaque handle to a RenderScript ProgramFragment object. </p>
-<p>See: android.renderscript.ProgramFragment </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00164">164</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-</div><hr/>The documentation for this struct was generated from the following file:<ul>
-<li>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/<a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a></li>
-</ul>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/structrs__program__raster.html b/docs/html/reference/renderscript/structrs__program__raster.html
deleted file mode 100644
index 444aaf9..0000000
--- a/docs/html/reference/renderscript/structrs__program__raster.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>rs_program_raster Struct Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
- <div id="navrow1" class="tabs">
- <ul class="tablist">
- <li><a href="index.html"><span>Overview</span></a></li>
- <li><a href="globals.html"><span>Globals</span></a></li>
- <li class="current"><a href="annotated.html"><span>Structs</span></a></li>
- </ul>
- </div>
-</div>
-<div class="header">
- <div class="headertitle">
-<div class="title">rs_program_raster Struct Reference</div> </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="rs_program_raster" -->
-<p>Opaque handle to a RenderScript ProgramRaster object.
- <a href="structrs__program__raster.html#details">More...</a></p>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Opaque handle to a RenderScript ProgramRaster object. </p>
-<p>See: android.renderscript.ProgramRaster </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00176">176</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-</div><hr/>The documentation for this struct was generated from the following file:<ul>
-<li>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/<a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a></li>
-</ul>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/structrs__program__store.html b/docs/html/reference/renderscript/structrs__program__store.html
deleted file mode 100644
index c187392..0000000
--- a/docs/html/reference/renderscript/structrs__program__store.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>rs_program_store Struct Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
- <div id="navrow1" class="tabs">
- <ul class="tablist">
- <li><a href="index.html"><span>Overview</span></a></li>
- <li><a href="globals.html"><span>Globals</span></a></li>
- <li class="current"><a href="annotated.html"><span>Structs</span></a></li>
- </ul>
- </div>
-</div>
-<div class="header">
- <div class="headertitle">
-<div class="title">rs_program_store Struct Reference</div> </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="rs_program_store" -->
-<p>Opaque handle to a RenderScript ProgramStore object.
- <a href="structrs__program__store.html#details">More...</a></p>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Opaque handle to a RenderScript ProgramStore object. </p>
-<p>See: android.renderscript.ProgramStore </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00182">182</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-</div><hr/>The documentation for this struct was generated from the following file:<ul>
-<li>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/<a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a></li>
-</ul>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/structrs__program__vertex.html b/docs/html/reference/renderscript/structrs__program__vertex.html
deleted file mode 100644
index c3688b7..0000000
--- a/docs/html/reference/renderscript/structrs__program__vertex.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>rs_program_vertex Struct Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
- <div id="navrow1" class="tabs">
- <ul class="tablist">
- <li><a href="index.html"><span>Overview</span></a></li>
- <li><a href="globals.html"><span>Globals</span></a></li>
- <li class="current"><a href="annotated.html"><span>Structs</span></a></li>
- </ul>
- </div>
-</div>
-<div class="header">
- <div class="headertitle">
-<div class="title">rs_program_vertex Struct Reference</div> </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="rs_program_vertex" -->
-<p>Opaque handle to a RenderScript ProgramVertex object.
- <a href="structrs__program__vertex.html#details">More...</a></p>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Opaque handle to a RenderScript ProgramVertex object. </p>
-<p>See: android.renderscript.ProgramVertex </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00170">170</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-</div><hr/>The documentation for this struct was generated from the following file:<ul>
-<li>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/<a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a></li>
-</ul>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/structrs__sampler.html b/docs/html/reference/renderscript/structrs__sampler.html
deleted file mode 100644
index daba2bb..0000000
--- a/docs/html/reference/renderscript/structrs__sampler.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>rs_sampler Struct Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
- <div id="navrow1" class="tabs">
- <ul class="tablist">
- <li><a href="index.html"><span>Overview</span></a></li>
- <li><a href="globals.html"><span>Globals</span></a></li>
- <li class="current"><a href="annotated.html"><span>Structs</span></a></li>
- </ul>
- </div>
-</div>
-<div class="header">
- <div class="headertitle">
-<div class="title">rs_sampler Struct Reference</div> </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="rs_sampler" -->
-<p>Opaque handle to a RenderScript sampler object.
- <a href="structrs__sampler.html#details">More...</a></p>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Opaque handle to a RenderScript sampler object. </p>
-<p>See: android.renderscript.Sampler </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00140">140</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-</div><hr/>The documentation for this struct was generated from the following file:<ul>
-<li>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/<a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a></li>
-</ul>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/structrs__script.html b/docs/html/reference/renderscript/structrs__script.html
deleted file mode 100644
index ea39d95..0000000
--- a/docs/html/reference/renderscript/structrs__script.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>rs_script Struct Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
- <div id="navrow1" class="tabs">
- <ul class="tablist">
- <li><a href="index.html"><span>Overview</span></a></li>
- <li><a href="globals.html"><span>Globals</span></a></li>
- <li class="current"><a href="annotated.html"><span>Structs</span></a></li>
- </ul>
- </div>
-</div>
-<div class="header">
- <div class="headertitle">
-<div class="title">rs_script Struct Reference</div> </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="rs_script" -->
-<p>Opaque handle to a RenderScript script object.
- <a href="structrs__script.html#details">More...</a></p>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Opaque handle to a RenderScript script object. </p>
-<p>See: android.renderscript.ScriptC </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00146">146</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-</div><hr/>The documentation for this struct was generated from the following file:<ul>
-<li>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/<a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a></li>
-</ul>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/structrs__script__call.html b/docs/html/reference/renderscript/structrs__script__call.html
deleted file mode 100644
index e4c0820..0000000
--- a/docs/html/reference/renderscript/structrs__script__call.html
+++ /dev/null
@@ -1,41 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>rs_script_call Struct Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
- <div id="navrow1" class="tabs">
- <ul class="tablist">
- <li><a href="index.html"><span>Overview</span></a></li>
- <li><a href="globals.html"><span>Globals</span></a></li>
- <li class="current"><a href="annotated.html"><span>Structs</span></a></li>
- </ul>
- </div>
-</div>
-<div class="header">
- <div class="headertitle">
-<div class="title">rs_script_call Struct Reference</div> </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="rs_script_call" --><hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Structure to provide extra information to a rsForEach call. Primarly used to restrict the call to a subset of cells in the allocation. </p>
-
-<p>Definition at line <a class="el" href="rs__core_8rsh_source.html#l00110">110</a> of file <a class="el" href="rs__core_8rsh_source.html">rs_core.rsh</a>.</p>
-</div><hr/>The documentation for this struct was generated from the following file:<ul>
-<li>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/<a class="el" href="rs__core_8rsh_source.html">rs_core.rsh</a></li>
-</ul>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/structrs__tm.html b/docs/html/reference/renderscript/structrs__tm.html
deleted file mode 100644
index b6447b5..0000000
--- a/docs/html/reference/renderscript/structrs__tm.html
+++ /dev/null
@@ -1,75 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>rs_tm Struct Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
- <div id="navrow1" class="tabs">
- <ul class="tablist">
- <li><a href="index.html"><span>Overview</span></a></li>
- <li><a href="globals.html"><span>Globals</span></a></li>
- <li class="current"><a href="annotated.html"><span>Structs</span></a></li>
- </ul>
- </div>
-</div>
-<div class="header">
- <div class="summary">
-<a href="#pub-attribs">Data Fields</a> </div>
- <div class="headertitle">
-<div class="title">rs_tm Struct Reference</div> </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="rs_tm" --><table class="memberdecls">
-<tr><td colspan="2"><h2><a name="pub-attribs"></a>
-Data Fields</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae1590aa8850370a4712da801edb8da9e"></a><!-- doxytag: member="rs_tm::tm_sec" ref="ae1590aa8850370a4712da801edb8da9e" args="" -->
-int </td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__tm.html#ae1590aa8850370a4712da801edb8da9e">tm_sec</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">seconds <br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abd4bd6ccf0d1f20859ecaecf850ce85b"></a><!-- doxytag: member="rs_tm::tm_min" ref="abd4bd6ccf0d1f20859ecaecf850ce85b" args="" -->
-int </td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__tm.html#abd4bd6ccf0d1f20859ecaecf850ce85b">tm_min</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">minutes <br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afb46962bc20f8724567981adc3711b5a"></a><!-- doxytag: member="rs_tm::tm_hour" ref="afb46962bc20f8724567981adc3711b5a" args="" -->
-int </td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__tm.html#afb46962bc20f8724567981adc3711b5a">tm_hour</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">hours <br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac87e43828f05bf62d0c770889b81ff15"></a><!-- doxytag: member="rs_tm::tm_mday" ref="ac87e43828f05bf62d0c770889b81ff15" args="" -->
-int </td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__tm.html#ac87e43828f05bf62d0c770889b81ff15">tm_mday</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">day of the month <br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a34a5466d376e405f343ed4e1592d7832"></a><!-- doxytag: member="rs_tm::tm_mon" ref="a34a5466d376e405f343ed4e1592d7832" args="" -->
-int </td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__tm.html#a34a5466d376e405f343ed4e1592d7832">tm_mon</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">month <br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a74e582a615a448949969a0982d8a62d2"></a><!-- doxytag: member="rs_tm::tm_year" ref="a74e582a615a448949969a0982d8a62d2" args="" -->
-int </td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__tm.html#a74e582a615a448949969a0982d8a62d2">tm_year</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">year <br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4d40217d3cd15b51e0093db1810426e4"></a><!-- doxytag: member="rs_tm::tm_wday" ref="a4d40217d3cd15b51e0093db1810426e4" args="" -->
-int </td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__tm.html#a4d40217d3cd15b51e0093db1810426e4">tm_wday</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">day of the week <br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a589eab24c4d79f05f0b3601162ed34d0"></a><!-- doxytag: member="rs_tm::tm_yday" ref="a589eab24c4d79f05f0b3601162ed34d0" args="" -->
-int </td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__tm.html#a589eab24c4d79f05f0b3601162ed34d0">tm_yday</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">day of the year <br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8cffdd224d2ea30a079a86ef1e41e111"></a><!-- doxytag: member="rs_tm::tm_isdst" ref="a8cffdd224d2ea30a079a86ef1e41e111" args="" -->
-int </td><td class="memItemRight" valign="bottom"><a class="el" href="structrs__tm.html#a8cffdd224d2ea30a079a86ef1e41e111">tm_isdst</a></td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">daylight savings time <br/></td></tr>
-</table>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Data structure for broken-down time components.</p>
-<p>tm_sec - Seconds after the minute. This ranges from 0 to 59, but possibly up to 60 for leap seconds. tm_min - Minutes after the hour. This ranges from 0 to 59. tm_hour - Hours past midnight. This ranges from 0 to 23. tm_mday - Day of the month. This ranges from 1 to 31. tm_mon - Months since January. This ranges from 0 to 11. tm_year - Years since 1900. tm_wday - Days since Sunday. This ranges from 0 to 6. tm_yday - Days since January 1. This ranges from 0 to 365. tm_isdst - Flag to indicate whether daylight saving time is in effect. The value is positive if it is in effect, zero if it is not, and negative if the information is not available. </p>
-
-<p>Definition at line <a class="el" href="rs__time_8rsh_source.html#l00049">49</a> of file <a class="el" href="rs__time_8rsh_source.html">rs_time.rsh</a>.</p>
-</div><hr/>The documentation for this struct was generated from the following file:<ul>
-<li>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/<a class="el" href="rs__time_8rsh_source.html">rs_time.rsh</a></li>
-</ul>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/structrs__type.html b/docs/html/reference/renderscript/structrs__type.html
deleted file mode 100644
index ef95ed18..0000000
--- a/docs/html/reference/renderscript/structrs__type.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-
-<title>rs_type Struct Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-
-
-
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-
-<!-- Generated by Doxygen 1.7.5.1 -->
- <div id="navrow1" class="tabs">
- <ul class="tablist">
- <li><a href="index.html"><span>Overview</span></a></li>
- <li><a href="globals.html"><span>Globals</span></a></li>
- <li class="current"><a href="annotated.html"><span>Structs</span></a></li>
- </ul>
- </div>
-</div>
-<div class="header">
- <div class="headertitle">
-<div class="title">rs_type Struct Reference</div> </div>
-</div>
-<div class="contents">
-<!-- doxytag: class="rs_type" -->
-<p>Opaque handle to a RenderScript type.
- <a href="structrs__type.html#details">More...</a></p>
-<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
-<div class="textblock"><p>Opaque handle to a RenderScript type. </p>
-<p>See: android.renderscript.Type </p>
-
-<p>Definition at line <a class="el" href="rs__types_8rsh_source.html#l00128">128</a> of file <a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a>.</p>
-</div><hr/>The documentation for this struct was generated from the following file:<ul>
-<li>/usr/local/google/home/srhines/android_trees/jb-mr2-dev/frameworks/rs/scriptc/<a class="el" href="rs__types_8rsh_source.html">rs_types.rsh</a></li>
-</ul>
-</div>
-
-</body>
-</html>
diff --git a/docs/html/reference/renderscript/tab_a.png b/docs/html/reference/renderscript/tab_a.png
deleted file mode 100644
index 2d99ef2..0000000
--- a/docs/html/reference/renderscript/tab_a.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/reference/renderscript/tab_b.png b/docs/html/reference/renderscript/tab_b.png
deleted file mode 100644
index b2c3d2b..0000000
--- a/docs/html/reference/renderscript/tab_b.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/reference/renderscript/tab_h.png b/docs/html/reference/renderscript/tab_h.png
deleted file mode 100644
index c11f48f..0000000
--- a/docs/html/reference/renderscript/tab_h.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/reference/renderscript/tab_s.png b/docs/html/reference/renderscript/tab_s.png
deleted file mode 100644
index 978943ac..0000000
--- a/docs/html/reference/renderscript/tab_s.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/reference/renderscript/tabs.css b/docs/html/reference/renderscript/tabs.css
deleted file mode 100644
index 2192056..0000000
--- a/docs/html/reference/renderscript/tabs.css
+++ /dev/null
@@ -1,59 +0,0 @@
-.tabs, .tabs2, .tabs3 {
- background-image: url('tab_b.png');
- width: 100%;
- z-index: 101;
- font-size: 13px;
-}
-
-.tabs2 {
- font-size: 10px;
-}
-.tabs3 {
- font-size: 9px;
-}
-
-.tablist {
- margin: 0;
- padding: 0;
- display: table;
-}
-
-.tablist li {
- float: left;
- display: table-cell;
- background-image: url('tab_b.png');
- line-height: 36px;
- list-style: none;
-}
-
-.tablist a {
- display: block;
- padding: 0 20px;
- font-weight: bold;
- background-image:url('tab_s.png');
- background-repeat:no-repeat;
- background-position:right;
- color: #283A5D;
- text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
- text-decoration: none;
- outline: none;
-}
-
-.tabs3 .tablist a {
- padding: 0 10px;
-}
-
-.tablist a:hover {
- background-image: url('tab_h.png');
- background-repeat:repeat-x;
- color: #fff;
- text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
- text-decoration: none;
-}
-
-.tablist li.current a {
- background-image: url('tab_a.png');
- background-repeat:repeat-x;
- color: #fff;
- text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
-}
diff --git a/docs/html/tools/debugging/debugging-log.jd b/docs/html/tools/debugging/debugging-log.jd
index d2baaf26..e222b2a 100644
--- a/docs/html/tools/debugging/debugging-log.jd
+++ b/docs/html/tools/debugging/debugging-log.jd
@@ -284,22 +284,8 @@
<h2 id="viewingStd">Viewing stdout and stderr</h2>
<p>By default, the Android system sends <code>stdout</code> and <code>stderr</code>
- (<code>System.out</code> and <code>System.err</code>) output to <code>/dev/null</code>. In
- processes that run the Dalvik VM, you can have the system write a copy of the output to the log
- file. In this case, the system writes the messages to the log using the log tags
- <code>stdout</code> and <code>stderr</code>, both with priority <code>I</code>.</p>
-
- <p>To route the output in this way, you stop a running emulator/device instance and then use the
- shell command <code>setprop</code> to enable the redirection of output. Here's how you do it:</p>
- <pre>
-$ adb shell stop
-$ adb shell setprop log.redirect-stdio true
-$ adb shell start
-</pre>
-
- <p>The system retains this setting until you terminate the emulator/device instance. To use the
- setting as a default on the emulator/device instance, you can add an entry to
- <code>/data/local.prop</code> on the device.</p>
+ output to <code>/dev/null</code>. (The Java <code>System.out</code> and <code>System.err</code>
+ streams go to the log.)
<h2 id="DebuggingWebPages">Debugging Web Apps</h2>
<p>
diff --git a/docs/html/tools/help/hprof-conv.jd b/docs/html/tools/help/hprof-conv.jd
index f96def2..982f337 100644
--- a/docs/html/tools/help/hprof-conv.jd
+++ b/docs/html/tools/help/hprof-conv.jd
@@ -8,9 +8,13 @@
generated by the Android SDK tools to a standard format so you
can view the file in a profiling tool of your choice. </p>
-<pre> hprof-conv <infile> <outfile></pre>
+<pre> hprof-conv [-z] <infile> <outfile></pre>
<p>
You can use "-" for <code><infile></code> or <code><outfile></code>
to specify stdin or stdout.
</p>
+
+<p>
+You can use "-z" to filter out zygote allocations shared by all applications.
+</p>
diff --git a/docs/knowntags.txt b/docs/knowntags.txt
index 5bebabb..3b7c8c7 100644
--- a/docs/knowntags.txt
+++ b/docs/knowntags.txt
@@ -15,7 +15,6 @@
#
# The grandfathered list. We should get rid of these if possible.
#
-@ToBeFixed
@stable
@com.intel.drl.spec_ref
@ar.org.fitc.spec_ref
diff --git a/graphics/java/android/graphics/drawable/DrawableContainer.java b/graphics/java/android/graphics/drawable/DrawableContainer.java
index 39ef10c..233ff1a 100644
--- a/graphics/java/android/graphics/drawable/DrawableContainer.java
+++ b/graphics/java/android/graphics/drawable/DrawableContainer.java
@@ -291,9 +291,9 @@
@Override
public void setHotspotBounds(int left, int top, int right, int bottom) {
if (mHotspotBounds == null) {
- mHotspotBounds = new Rect(left, top, bottom, right);
+ mHotspotBounds = new Rect(left, top, right, bottom);
} else {
- mHotspotBounds.set(left, top, bottom, right);
+ mHotspotBounds.set(left, top, right, bottom);
}
if (mCurrDrawable != null) {
diff --git a/include/androidfw/Asset.h b/include/androidfw/Asset.h
index 1fe0e06..ee77e97 100644
--- a/include/androidfw/Asset.h
+++ b/include/androidfw/Asset.h
@@ -182,11 +182,11 @@
/*
* Create the asset from a memory-mapped file segment with compressed
- * data. "method" is a Zip archive compression method constant.
+ * data.
*
* The asset takes ownership of the FileMap.
*/
- static Asset* createFromCompressedMap(FileMap* dataMap, int method,
+ static Asset* createFromCompressedMap(FileMap* dataMap,
size_t uncompressedLen, AccessMode mode);
@@ -286,8 +286,7 @@
*
* On success, the object takes ownership of "fd".
*/
- status_t openChunk(FileMap* dataMap, int compressionMethod,
- size_t uncompressedLen);
+ status_t openChunk(FileMap* dataMap, size_t uncompressedLen);
/*
* Standard Asset interfaces.
diff --git a/include/androidfw/ResourceTypes.h b/include/androidfw/ResourceTypes.h
index 0822afd..8de0138 100644
--- a/include/androidfw/ResourceTypes.h
+++ b/include/androidfw/ResourceTypes.h
@@ -372,7 +372,8 @@
};
// The data for this item, as interpreted according to dataType.
- uint32_t data;
+ typedef uint32_t data_type;
+ data_type data;
void copyFrom_dtoh(const Res_value& src);
};
@@ -1502,6 +1503,8 @@
KeyedVector<String16, uint8_t> mEntries;
};
+bool U16StringToInt(const char16_t* s, size_t len, Res_value* outValue);
+
/**
* Convenience class for accessing data in a ResTable resource.
*/
diff --git a/include/androidfw/ZipFileRO.h b/include/androidfw/ZipFileRO.h
index ad5be12..7680342 100644
--- a/include/androidfw/ZipFileRO.h
+++ b/include/androidfw/ZipFileRO.h
@@ -35,6 +35,7 @@
#include <utils/FileMap.h>
#include <utils/threads.h>
+#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
@@ -68,9 +69,9 @@
class ZipFileRO {
public:
/* Zip compression methods we support */
- enum {
- kCompressStored = 0, // no compression
- kCompressDeflated = 8, // standard deflate
+ enum : uint16_t {
+ kCompressStored = 0,
+ kCompressDeflated = 8
};
/*
@@ -90,6 +91,7 @@
* a matching call to endIteration with the same cookie.
*/
bool startIteration(void** cookie);
+ bool startIteration(void** cookie, const char* prefix, const char* suffix);
/**
* Return the next entry in iteration order, or NULL if there are no more
@@ -108,10 +110,10 @@
/*
* Copy the filename into the supplied buffer. Returns 0 on success,
- * -1 if "entry" is invalid, or the filename length if it didn't fit. The
+ * -1 if "entry" is invalid, or the filename length if it didn't fit. The
* length, and the returned string, include the null-termination.
*/
- int getEntryFileName(ZipEntryRO entry, char* buffer, int bufLen) const;
+ int getEntryFileName(ZipEntryRO entry, char* buffer, size_t bufLen) const;
/*
* Get the vital stats for an entry. Pass in NULL pointers for anything
@@ -122,8 +124,9 @@
* Returns "false" if "entry" is bogus or if the data in the Zip file
* appears to be bad.
*/
- bool getEntryInfo(ZipEntryRO entry, int* pMethod, size_t* pUncompLen,
- size_t* pCompLen, off64_t* pOffset, long* pModWhen, long* pCrc32) const;
+ bool getEntryInfo(ZipEntryRO entry, uint16_t* pMethod, uint32_t* pUncompLen,
+ uint32_t* pCompLen, off64_t* pOffset, uint32_t* pModWhen,
+ uint32_t* pCrc32) const;
/*
* Create a new FileMap object that maps a subset of the archive. For
diff --git a/include/androidfw/ZipUtils.h b/include/androidfw/ZipUtils.h
index 6bea25a..094eaa8 100644
--- a/include/androidfw/ZipUtils.h
+++ b/include/androidfw/ZipUtils.h
@@ -20,6 +20,7 @@
#ifndef __LIBS_ZIPUTILS_H
#define __LIBS_ZIPUTILS_H
+#include <stdint.h>
#include <stdio.h>
#include <time.h>
@@ -63,8 +64,8 @@
/*
* Utility function to convert ZIP's time format to a timespec struct.
*/
- static inline void zipTimeToTimespec(long when, struct tm* timespec) {
- const long date = when >> 16;
+ static inline void zipTimeToTimespec(uint32_t when, struct tm* timespec) {
+ const uint32_t date = when >> 16;
timespec->tm_year = ((date >> 9) & 0x7F) + 80; // Zip is years since 1980
timespec->tm_mon = (date >> 5) & 0x0F;
timespec->tm_mday = date & 0x1F;
diff --git a/keystore/java/android/security/AndroidKeyPairGenerator.java b/keystore/java/android/security/AndroidKeyPairGenerator.java
index 5fae831..3b25ba6 100644
--- a/keystore/java/android/security/AndroidKeyPairGenerator.java
+++ b/keystore/java/android/security/AndroidKeyPairGenerator.java
@@ -17,7 +17,7 @@
package android.security;
import com.android.org.bouncycastle.x509.X509V3CertificateGenerator;
-import com.android.org.conscrypt.NativeCrypto;
+import com.android.org.conscrypt.NativeConstants;
import com.android.org.conscrypt.OpenSSLEngine;
import java.security.InvalidAlgorithmParameterException;
@@ -206,9 +206,9 @@
}
private static int getDefaultKeySize(int keyType) {
- if (keyType == NativeCrypto.EVP_PKEY_EC) {
+ if (keyType == NativeConstants.EVP_PKEY_EC) {
return EC_DEFAULT_KEY_SIZE;
- } else if (keyType == NativeCrypto.EVP_PKEY_RSA) {
+ } else if (keyType == NativeConstants.EVP_PKEY_RSA) {
return RSA_DEFAULT_KEY_SIZE;
}
return -1;
@@ -216,12 +216,12 @@
private static void checkValidKeySize(String keyAlgorithm, int keyType, int keySize)
throws InvalidAlgorithmParameterException {
- if (keyType == NativeCrypto.EVP_PKEY_EC) {
+ if (keyType == NativeConstants.EVP_PKEY_EC) {
if (keySize < EC_MIN_KEY_SIZE || keySize > EC_MAX_KEY_SIZE) {
throw new InvalidAlgorithmParameterException("EC keys must be >= "
+ EC_MIN_KEY_SIZE + " and <= " + EC_MAX_KEY_SIZE);
}
- } else if (keyType == NativeCrypto.EVP_PKEY_RSA) {
+ } else if (keyType == NativeConstants.EVP_PKEY_RSA) {
if (keySize < RSA_MIN_KEY_SIZE || keySize > RSA_MAX_KEY_SIZE) {
throw new InvalidAlgorithmParameterException("RSA keys must be >= "
+ RSA_MIN_KEY_SIZE + " and <= " + RSA_MAX_KEY_SIZE);
@@ -234,7 +234,7 @@
private static void checkCorrectParametersSpec(int keyType, int keySize,
AlgorithmParameterSpec spec) throws InvalidAlgorithmParameterException {
- if (keyType == NativeCrypto.EVP_PKEY_RSA && spec != null) {
+ if (keyType == NativeConstants.EVP_PKEY_RSA && spec != null) {
if (spec instanceof RSAKeyGenParameterSpec) {
RSAKeyGenParameterSpec rsaSpec = (RSAKeyGenParameterSpec) spec;
if (keySize != -1 && keySize != rsaSpec.getKeysize()) {
@@ -260,7 +260,7 @@
private static byte[][] getArgsForKeyType(int keyType, AlgorithmParameterSpec spec) {
switch (keyType) {
- case NativeCrypto.EVP_PKEY_RSA:
+ case NativeConstants.EVP_PKEY_RSA:
if (spec instanceof RSAKeyGenParameterSpec) {
RSAKeyGenParameterSpec rsaSpec = (RSAKeyGenParameterSpec) spec;
return new byte[][] { rsaSpec.getPublicExponent().toByteArray() };
diff --git a/keystore/java/android/security/AndroidKeyStore.java b/keystore/java/android/security/AndroidKeyStore.java
index 55a8b4f..964fb21 100644
--- a/keystore/java/android/security/AndroidKeyStore.java
+++ b/keystore/java/android/security/AndroidKeyStore.java
@@ -19,6 +19,8 @@
import com.android.org.conscrypt.OpenSSLEngine;
import com.android.org.conscrypt.OpenSSLKeyHolder;
+import libcore.util.EmptyArray;
+
import android.security.keymaster.KeyCharacteristics;
import android.security.keymaster.KeymasterArguments;
import android.security.keymaster.KeymasterDefs;
@@ -46,12 +48,14 @@
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.Enumeration;
import java.util.HashSet;
import java.util.Iterator;
+import java.util.List;
import java.util.Set;
import javax.crypto.SecretKey;
@@ -112,34 +116,22 @@
if (keymasterAlgorithm == -1) {
throw new UnrecoverableKeyException("Key algorithm unknown");
}
- @KeyStoreKeyConstraints.AlgorithmEnum int keyAlgorithm;
- try {
- keyAlgorithm = KeyStoreKeyConstraints.Algorithm.fromKeymaster(keymasterAlgorithm);
- } catch (IllegalArgumentException e) {
- throw (UnrecoverableKeyException)
- new UnrecoverableKeyException("Unsupported key algorithm").initCause(e);
- }
- int keymasterDigest =
- keyCharacteristics.hwEnforced.getInt(KeymasterDefs.KM_TAG_DIGEST, -1);
- if (keymasterDigest == -1) {
- keymasterDigest =
- keyCharacteristics.swEnforced.getInt(KeymasterDefs.KM_TAG_DIGEST, -1);
- }
- @KeyStoreKeyConstraints.DigestEnum Integer digest = null;
- if (keymasterDigest != -1) {
- try {
- digest = KeyStoreKeyConstraints.Digest.fromKeymaster(keymasterDigest);
- } catch (IllegalArgumentException e) {
- throw (UnrecoverableKeyException)
- new UnrecoverableKeyException("Unsupported digest").initCause(e);
- }
+ List<Integer> keymasterDigests =
+ keyCharacteristics.getInts(KeymasterDefs.KM_TAG_DIGEST);
+ int keymasterDigest;
+ if (keymasterDigests.isEmpty()) {
+ keymasterDigest = -1;
+ } else {
+ // More than one digest can be permitted for this key. Use the first one to form the
+ // JCA key algorithm name.
+ keymasterDigest = keymasterDigests.get(0);
}
String keyAlgorithmString;
try {
- keyAlgorithmString = KeyStoreKeyConstraints.Algorithm.toJCASecretKeyAlgorithm(
- keyAlgorithm, digest);
+ keyAlgorithmString = KeymasterUtils.getJcaSecretKeyAlgorithm(
+ keymasterAlgorithm, keymasterDigest);
} catch (IllegalArgumentException e) {
throw (UnrecoverableKeyException)
new UnrecoverableKeyException("Unsupported secret key type").initCause(e);
@@ -456,90 +448,92 @@
}
String keyAlgorithmString = key.getAlgorithm();
- @KeyStoreKeyConstraints.AlgorithmEnum int keyAlgorithm;
- @KeyStoreKeyConstraints.DigestEnum Integer digest;
+ int keymasterAlgorithm;
+ int keymasterDigest;
try {
- keyAlgorithm =
- KeyStoreKeyConstraints.Algorithm.fromJCASecretKeyAlgorithm(keyAlgorithmString);
- digest = KeyStoreKeyConstraints.Digest.fromJCASecretKeyAlgorithm(keyAlgorithmString);
+ keymasterAlgorithm = KeymasterUtils.getKeymasterAlgorithmFromJcaSecretKeyAlgorithm(
+ keyAlgorithmString);
+ keymasterDigest =
+ KeymasterUtils.getKeymasterDigestfromJcaSecretKeyAlgorithm(keyAlgorithmString);
} catch (IllegalArgumentException e) {
throw new KeyStoreException("Unsupported secret key algorithm: " + keyAlgorithmString);
}
KeymasterArguments args = new KeymasterArguments();
- args.addInt(KeymasterDefs.KM_TAG_ALGORITHM,
- KeyStoreKeyConstraints.Algorithm.toKeymaster(keyAlgorithm));
+ args.addInt(KeymasterDefs.KM_TAG_ALGORITHM, keymasterAlgorithm);
- @KeyStoreKeyConstraints.DigestEnum int digests;
+ int[] keymasterDigests;
if (params.isDigestsSpecified()) {
// Digest(s) specified in parameters
- if (digest != null) {
+ keymasterDigests =
+ KeymasterUtils.getKeymasterDigestsFromJcaDigestAlgorithms(params.getDigests());
+ if (keymasterDigest != -1) {
// Digest also specified in the JCA key algorithm name.
- if ((params.getDigests() & digest) != digest) {
+ if (!com.android.internal.util.ArrayUtils.contains(
+ keymasterDigests, keymasterDigest)) {
throw new KeyStoreException("Key digest mismatch"
+ ". Key: " + keyAlgorithmString
- + ", parameter spec: "
- + KeyStoreKeyConstraints.Digest.allToString(params.getDigests()));
+ + ", parameter spec: " + Arrays.asList(params.getDigests()));
}
}
- digests = params.getDigests();
} else {
// No digest specified in parameters
- if (digest != null) {
+ if (keymasterDigest != -1) {
// Digest specified in the JCA key algorithm name.
- digests = digest;
+ keymasterDigests = new int[] {keymasterDigest};
} else {
- digests = 0;
+ keymasterDigests = EmptyArray.INT;
}
}
- for (int keymasterDigest : KeyStoreKeyConstraints.Digest.allToKeymaster(digests)) {
- args.addInt(KeymasterDefs.KM_TAG_DIGEST, keymasterDigest);
- }
- if (digests != 0) {
+ args.addInts(KeymasterDefs.KM_TAG_DIGEST, keymasterDigests);
+ if (keymasterDigests.length > 0) {
// TODO: Remove MAC length constraint once Keymaster API no longer requires it.
// This code will blow up if mode than one digest is specified.
- Integer digestOutputSizeBytes =
- KeyStoreKeyConstraints.Digest.getOutputSizeBytes(digest);
- if (digestOutputSizeBytes != null) {
+ int digestOutputSizeBytes =
+ KeymasterUtils.getDigestOutputSizeBytes(keymasterDigests[0]);
+ if (digestOutputSizeBytes != -1) {
// TODO: Switch to bits instead of bytes, once this is fixed in Keymaster
args.addInt(KeymasterDefs.KM_TAG_MAC_LENGTH, digestOutputSizeBytes);
}
}
- if (keyAlgorithm == KeyStoreKeyConstraints.Algorithm.HMAC) {
- if (digests == 0) {
+ if (keymasterAlgorithm == KeymasterDefs.KM_ALGORITHM_HMAC) {
+ if (keymasterDigests.length == 0) {
throw new KeyStoreException("At least one digest algorithm must be specified"
+ " for key algorithm " + keyAlgorithmString);
}
}
- @KeyStoreKeyConstraints.PurposeEnum int purposes = params.getPurposes();
- @KeyStoreKeyConstraints.BlockModeEnum int blockModes = params.getBlockModes();
- if (((purposes & KeyStoreKeyConstraints.Purpose.ENCRYPT) != 0)
+ @KeyStoreKeyProperties.PurposeEnum int purposes = params.getPurposes();
+ int[] keymasterBlockModes = KeymasterUtils.getKeymasterBlockModesFromJcaBlockModes(
+ params.getBlockModes());
+ if (((purposes & KeyStoreKeyProperties.Purpose.ENCRYPT) != 0)
&& (params.isRandomizedEncryptionRequired())) {
- @KeyStoreKeyConstraints.BlockModeEnum int incompatibleBlockModes =
- blockModes & ~KeyStoreKeyConstraints.BlockMode.IND_CPA_COMPATIBLE_MODES;
- if (incompatibleBlockModes != 0) {
- throw new KeyStoreException("Randomized encryption (IND-CPA) required but may be"
- + " violated by block mode(s): "
- + KeyStoreKeyConstraints.BlockMode.allToString(incompatibleBlockModes)
- + ". See KeyStoreParameter documentation.");
+ for (int keymasterBlockMode : keymasterBlockModes) {
+ if (!KeymasterUtils.isKeymasterBlockModeIndCpaCompatible(keymasterBlockMode)) {
+ throw new KeyStoreException(
+ "Randomized encryption (IND-CPA) required but may be violated by block"
+ + " mode: "
+ + KeymasterUtils.getJcaBlockModeFromKeymasterBlockMode(
+ keymasterBlockMode)
+ + ". See KeyStoreParameter documentation.");
+ }
}
}
- for (int keymasterPurpose : KeyStoreKeyConstraints.Purpose.allToKeymaster(purposes)) {
+ for (int keymasterPurpose : KeyStoreKeyProperties.Purpose.allToKeymaster(purposes)) {
args.addInt(KeymasterDefs.KM_TAG_PURPOSE, keymasterPurpose);
}
- for (int keymasterBlockMode : KeyStoreKeyConstraints.BlockMode.allToKeymaster(blockModes)) {
- args.addInt(KeymasterDefs.KM_TAG_BLOCK_MODE, keymasterBlockMode);
- }
- for (int keymasterPadding :
- KeyStoreKeyConstraints.Padding.allToKeymaster(params.getPaddings())) {
- args.addInt(KeymasterDefs.KM_TAG_PADDING, keymasterPadding);
- }
+ args.addInts(KeymasterDefs.KM_TAG_BLOCK_MODE, keymasterBlockModes);
+ int[] keymasterPaddings = ArrayUtils.concat(
+ KeymasterUtils.getKeymasterPaddingsFromJcaEncryptionPaddings(
+ params.getEncryptionPaddings()),
+ KeymasterUtils.getKeymasterPaddingsFromJcaSignaturePaddings(
+ params.getSignaturePaddings()));
+ args.addInts(KeymasterDefs.KM_TAG_PADDING, keymasterPaddings);
if (params.getUserAuthenticators() == 0) {
args.addBoolean(KeymasterDefs.KM_TAG_NO_AUTH_REQUIRED);
} else {
args.addInt(KeymasterDefs.KM_TAG_USER_AUTH_TYPE,
- KeyStoreKeyConstraints.UserAuthenticator.allToKeymaster(
+ KeyStoreKeyProperties.UserAuthenticator.allToKeymaster(
params.getUserAuthenticators()));
}
if (params.getUserAuthenticationValidityDurationSeconds() != -1) {
@@ -559,7 +553,7 @@
// TODO: Remove this once keymaster does not require us to specify the size of imported key.
args.addInt(KeymasterDefs.KM_TAG_KEY_SIZE, keyMaterial.length * 8);
- if (((purposes & KeyStoreKeyConstraints.Purpose.ENCRYPT) != 0)
+ if (((purposes & KeyStoreKeyProperties.Purpose.ENCRYPT) != 0)
&& (!params.isRandomizedEncryptionRequired())) {
// Permit caller-provided IV when encrypting with this key
args.addBoolean(KeymasterDefs.KM_TAG_CALLER_NONCE);
diff --git a/keystore/java/android/security/AndroidKeyStoreProvider.java b/keystore/java/android/security/AndroidKeyStoreProvider.java
index 43f3b30..532848f 100644
--- a/keystore/java/android/security/AndroidKeyStoreProvider.java
+++ b/keystore/java/android/security/AndroidKeyStoreProvider.java
@@ -110,6 +110,7 @@
*
* @throws IllegalArgumentException if the provided primitive is not supported or is not backed
* by AndroidKeyStore provider.
+ * @throws IllegalStateException if the provided primitive is not initialized.
*/
public static Long getKeyStoreOperationHandle(Object cryptoPrimitive) {
if (cryptoPrimitive == null) {
@@ -117,15 +118,17 @@
}
Object spi;
if (cryptoPrimitive instanceof Mac) {
- spi = ((Mac) cryptoPrimitive).getSpi();
+ spi = ((Mac) cryptoPrimitive).getCurrentSpi();
} else if (cryptoPrimitive instanceof Cipher) {
- spi = ((Cipher) cryptoPrimitive).getSpi();
+ spi = ((Cipher) cryptoPrimitive).getCurrentSpi();
} else {
throw new IllegalArgumentException("Unsupported crypto primitive: " + cryptoPrimitive);
}
- if (!(spi instanceof KeyStoreCryptoOperation)) {
+ if (spi == null) {
+ throw new IllegalStateException("Crypto primitive not initialized");
+ } else if (!(spi instanceof KeyStoreCryptoOperation)) {
throw new IllegalArgumentException(
- "Crypto primitive not backed by AndroidKeyStore: " + cryptoPrimitive
+ "Crypto primitive not backed by AndroidKeyStore provider: " + cryptoPrimitive
+ ", spi: " + spi);
}
return ((KeyStoreCryptoOperation) spi).getOperationHandle();
diff --git a/keystore/java/android/security/ArrayUtils.java b/keystore/java/android/security/ArrayUtils.java
new file mode 100644
index 0000000..2047d3f
--- /dev/null
+++ b/keystore/java/android/security/ArrayUtils.java
@@ -0,0 +1,62 @@
+package android.security;
+
+import libcore.util.EmptyArray;
+
+/**
+ * @hide
+ */
+abstract class ArrayUtils {
+ private ArrayUtils() {}
+
+ public static String[] nullToEmpty(String[] array) {
+ return (array != null) ? array : EmptyArray.STRING;
+ }
+
+ public static String[] cloneIfNotEmpty(String[] array) {
+ return ((array != null) && (array.length > 0)) ? array.clone() : array;
+ }
+
+ public static byte[] concat(byte[] arr1, byte[] arr2) {
+ return concat(arr1, 0, (arr1 != null) ? arr1.length : 0,
+ arr2, 0, (arr2 != null) ? arr2.length : 0);
+ }
+
+ public static byte[] concat(byte[] arr1, int offset1, int len1, byte[] arr2, int offset2,
+ int len2) {
+ if (len1 == 0) {
+ return subarray(arr2, offset2, len2);
+ } else if (len2 == 0) {
+ return subarray(arr1, offset1, len1);
+ } else {
+ byte[] result = new byte[len1 + len2];
+ System.arraycopy(arr1, offset1, result, 0, len1);
+ System.arraycopy(arr2, offset2, result, len1, len2);
+ return result;
+ }
+ }
+
+ public static byte[] subarray(byte[] arr, int offset, int len) {
+ if (len == 0) {
+ return EmptyArray.BYTE;
+ }
+ if ((offset == 0) && (len == arr.length)) {
+ return arr;
+ }
+ byte[] result = new byte[len];
+ System.arraycopy(arr, offset, result, 0, len);
+ return result;
+ }
+
+ public static int[] concat(int[] arr1, int[] arr2) {
+ if ((arr1 == null) || (arr1.length == 0)) {
+ return arr2;
+ } else if ((arr2 == null) || (arr2.length == 0)) {
+ return arr1;
+ } else {
+ int[] result = new int[arr1.length + arr2.length];
+ System.arraycopy(arr1, 0, result, 0, arr1.length);
+ System.arraycopy(arr2, 0, result, arr1.length, arr2.length);
+ return result;
+ }
+ }
+}
diff --git a/keystore/java/android/security/CryptoOperationException.java b/keystore/java/android/security/CryptoOperationException.java
deleted file mode 100644
index 00c142f..0000000
--- a/keystore/java/android/security/CryptoOperationException.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.security;
-
-/**
- * Base class for exceptions during cryptographic operations which cannot throw a suitable checked
- * exception.
- *
- * <p>The contract of the majority of crypto primitives/operations (e.g. {@code Cipher} or
- * {@code Signature}) is that they can throw a checked exception during initialization, but are not
- * permitted to throw a checked exception during operation. Because crypto operations can fail
- * for a variety of reasons after initialization, this base class provides type-safety for unchecked
- * exceptions that may be thrown in those cases.
- *
- * @hide
- */
-public class CryptoOperationException extends RuntimeException {
-
- /**
- * Constructs a new {@code CryptoOperationException} without detail message and cause.
- */
- public CryptoOperationException() {
- super();
- }
-
- /**
- * Constructs a new {@code CryptoOperationException} with the provided detail message and no
- * cause.
- */
- public CryptoOperationException(String message) {
- super(message);
- }
-
- /**
- * Constructs a new {@code CryptoOperationException} with the provided detail message and cause.
- */
- public CryptoOperationException(String message, Throwable cause) {
- super(message, cause);
- }
-
- /**
- * Constructs a new {@code CryptoOperationException} with the provided cause.
- */
- public CryptoOperationException(Throwable cause) {
- super(cause);
- }
-}
diff --git a/keystore/java/android/security/EcIesParameterSpec.java b/keystore/java/android/security/EcIesParameterSpec.java
index 0f19812..3372da9 100644
--- a/keystore/java/android/security/EcIesParameterSpec.java
+++ b/keystore/java/android/security/EcIesParameterSpec.java
@@ -85,11 +85,10 @@
}
/**
- * Default parameter spec: NIST P-256 curve (aka secp256r1 aka prime256v1), compressed point
- * format, {@code HKDFwithSHA256}, DEM uses 128-bit AES GCM.
+ * Default parameter spec: compressed point format, {@code HKDFwithSHA256}, DEM uses 128-bit AES
+ * GCM.
*/
public static final EcIesParameterSpec DEFAULT = new EcIesParameterSpec(
- "P-256",
PointFormat.COMPRESSED,
"HKDFwithSHA256",
"AES/GCM/NoPadding",
@@ -97,7 +96,6 @@
null,
0);
- private final String mKemCurveName;
private final @PointFormatEnum int mKemPointFormat;
private final String mKemKdfAlgorithm;
private final String mDemCipherTransformation;
@@ -106,14 +104,12 @@
private final int mDemMacKeySize;
private EcIesParameterSpec(
- String kemCurveName,
@PointFormatEnum int kemPointFormat,
String kemKdfAlgorithm,
String demCipherTransformation,
int demCipherKeySize,
String demMacAlgorithm,
int demMacKeySize) {
- mKemCurveName = kemCurveName;
mKemPointFormat = kemPointFormat;
mKemKdfAlgorithm = kemKdfAlgorithm;
mDemCipherTransformation = demCipherTransformation;
@@ -123,13 +119,6 @@
}
/**
- * Returns KEM EC curve name (e.g., {@code secp256r1}) or {@code null} if not specified.
- */
- public String getKemCurveName() {
- return mKemCurveName;
- }
-
- /**
* Returns KEM EC point wire format or {@link PointFormat#UNSPECIFIED} if not specified.
*/
public @PointFormatEnum int getKemPointFormat() {
@@ -188,7 +177,6 @@
* Builder of {@link EcIesParameterSpec}.
*/
public static class Builder {
- private String mKemCurveName;
private @PointFormatEnum int mKemPointFormat = PointFormat.UNSPECIFIED;
private String mKemKdfAlgorithm;
private String mDemCipherTransformation;
@@ -197,16 +185,6 @@
private int mDemMacKeySize = -1;
/**
- * Sets KEM EC curve name. For example, {@code P-256} or {@code secp256r1}.
- *
- * <p>NOTE: Only curves with cofactor of {@code 1} are supported.
- */
- public Builder setKemCurveName(String name) {
- mKemCurveName = name;
- return this;
- }
-
- /**
* Sets KEM EC point wire format.
*/
public Builder setKemPointFormat(@PointFormatEnum int pointFormat) {
@@ -274,7 +252,6 @@
public EcIesParameterSpec build() {
int demMacKeySize = (mDemMacKeySize != -1) ? mDemMacKeySize : mDemCipherKeySize;
return new EcIesParameterSpec(
- mKemCurveName,
mKemPointFormat,
mKemKdfAlgorithm,
mDemCipherTransformation,
diff --git a/keystore/java/android/security/KeyExpiredException.java b/keystore/java/android/security/KeyExpiredException.java
index 35a5acc..e64bffa 100644
--- a/keystore/java/android/security/KeyExpiredException.java
+++ b/keystore/java/android/security/KeyExpiredException.java
@@ -16,13 +16,15 @@
package android.security;
+import java.security.InvalidKeyException;
+
/**
* Indicates that a cryptographic operation failed because the employed key's validity end date
* is in the past.
*
* @hide
*/
-public class KeyExpiredException extends CryptoOperationException {
+public class KeyExpiredException extends InvalidKeyException {
/**
* Constructs a new {@code KeyExpiredException} without detail message and cause.
diff --git a/keystore/java/android/security/KeyGeneratorSpec.java b/keystore/java/android/security/KeyGeneratorSpec.java
index 4dcabd0..a22c31c 100644
--- a/keystore/java/android/security/KeyGeneratorSpec.java
+++ b/keystore/java/android/security/KeyGeneratorSpec.java
@@ -49,11 +49,11 @@
private final Date mKeyValidityStart;
private final Date mKeyValidityForOriginationEnd;
private final Date mKeyValidityForConsumptionEnd;
- private final @KeyStoreKeyConstraints.PurposeEnum int mPurposes;
- private final @KeyStoreKeyConstraints.PaddingEnum int mPaddings;
- private final @KeyStoreKeyConstraints.BlockModeEnum int mBlockModes;
+ private final @KeyStoreKeyProperties.PurposeEnum int mPurposes;
+ private final String[] mEncryptionPaddings;
+ private final String[] mBlockModes;
private final boolean mRandomizedEncryptionRequired;
- private final @KeyStoreKeyConstraints.UserAuthenticatorEnum int mUserAuthenticators;
+ private final @KeyStoreKeyProperties.UserAuthenticatorEnum int mUserAuthenticators;
private final int mUserAuthenticationValidityDurationSeconds;
private KeyGeneratorSpec(
@@ -64,11 +64,11 @@
Date keyValidityStart,
Date keyValidityForOriginationEnd,
Date keyValidityForConsumptionEnd,
- @KeyStoreKeyConstraints.PurposeEnum int purposes,
- @KeyStoreKeyConstraints.PaddingEnum int paddings,
- @KeyStoreKeyConstraints.BlockModeEnum int blockModes,
+ @KeyStoreKeyProperties.PurposeEnum int purposes,
+ String[] encryptionPaddings,
+ String[] blockModes,
boolean randomizedEncryptionRequired,
- @KeyStoreKeyConstraints.UserAuthenticatorEnum int userAuthenticators,
+ @KeyStoreKeyProperties.UserAuthenticatorEnum int userAuthenticators,
int userAuthenticationValidityDurationSeconds) {
if (context == null) {
throw new IllegalArgumentException("context == null");
@@ -88,8 +88,9 @@
mKeyValidityForOriginationEnd = keyValidityForOriginationEnd;
mKeyValidityForConsumptionEnd = keyValidityForConsumptionEnd;
mPurposes = purposes;
- mPaddings = paddings;
- mBlockModes = blockModes;
+ mEncryptionPaddings =
+ ArrayUtils.cloneIfNotEmpty(ArrayUtils.nullToEmpty(encryptionPaddings));
+ mBlockModes = ArrayUtils.cloneIfNotEmpty(ArrayUtils.nullToEmpty(blockModes));
mRandomizedEncryptionRequired = randomizedEncryptionRequired;
mUserAuthenticators = userAuthenticators;
mUserAuthenticationValidityDurationSeconds = userAuthenticationValidityDurationSeconds;
@@ -154,22 +155,22 @@
/**
* Gets the set of purposes for which the key can be used.
*/
- public @KeyStoreKeyConstraints.PurposeEnum int getPurposes() {
+ public @KeyStoreKeyProperties.PurposeEnum int getPurposes() {
return mPurposes;
}
/**
- * Gets the set of padding schemes to which the key is restricted.
+ * Gets the set of padding schemes with which the key can be used when encrypting/decrypting.
*/
- public @KeyStoreKeyConstraints.PaddingEnum int getPaddings() {
- return mPaddings;
+ public String[] getEncryptionPaddings() {
+ return ArrayUtils.cloneIfNotEmpty(mEncryptionPaddings);
}
/**
- * Gets the set of block modes to which the key is restricted.
+ * Gets the set of block modes with which the key can be used.
*/
- public @KeyStoreKeyConstraints.BlockModeEnum int getBlockModes() {
- return mBlockModes;
+ public String[] getBlockModes() {
+ return ArrayUtils.cloneIfNotEmpty(mBlockModes);
}
/**
@@ -191,7 +192,7 @@
*
* @return user authenticators or {@code 0} if the key can be used without user authentication.
*/
- public @KeyStoreKeyConstraints.UserAuthenticatorEnum int getUserAuthenticators() {
+ public @KeyStoreKeyProperties.UserAuthenticatorEnum int getUserAuthenticators() {
return mUserAuthenticators;
}
@@ -221,11 +222,11 @@
private Date mKeyValidityStart;
private Date mKeyValidityForOriginationEnd;
private Date mKeyValidityForConsumptionEnd;
- private @KeyStoreKeyConstraints.PurposeEnum int mPurposes;
- private @KeyStoreKeyConstraints.PaddingEnum int mPaddings;
- private @KeyStoreKeyConstraints.BlockModeEnum int mBlockModes;
+ private @KeyStoreKeyProperties.PurposeEnum int mPurposes;
+ private String[] mEncryptionPaddings;
+ private String[] mBlockModes;
private boolean mRandomizedEncryptionRequired = true;
- private @KeyStoreKeyConstraints.UserAuthenticatorEnum int mUserAuthenticators;
+ private @KeyStoreKeyProperties.UserAuthenticatorEnum int mUserAuthenticators;
private int mUserAuthenticationValidityDurationSeconds = -1;
/**
@@ -332,34 +333,35 @@
}
/**
- * Restricts the key to being used only for the provided set of purposes.
+ * Sets the set of purposes for which the key can be used.
*
- * <p>This restriction must be specified. There is no default.
+ * <p>This must be specified for all keys. There is no default.
*/
- public Builder setPurposes(@KeyStoreKeyConstraints.PurposeEnum int purposes) {
+ public Builder setPurposes(@KeyStoreKeyProperties.PurposeEnum int purposes) {
mPurposes = purposes;
return this;
}
/**
- * Restricts the key to being used only with the provided padding schemes. Attempts to use
- * the key with any other padding will be rejected.
+ * Sets the set of padding schemes with which the key can be used when
+ * encrypting/decrypting. Attempts to use the key with any other padding scheme will be
+ * rejected.
*
- * <p>This restriction must be specified for keys which are used for encryption/decryption.
+ * <p>This must be specified for keys which are used for encryption/decryption.
*/
- public Builder setPaddings(@KeyStoreKeyConstraints.PaddingEnum int paddings) {
- mPaddings = paddings;
+ public Builder setEncryptionPaddings(String... paddings) {
+ mEncryptionPaddings = ArrayUtils.cloneIfNotEmpty(paddings);
return this;
}
/**
- * Restricts the key to being used only with the provided block modes. Attempts to use the
- * key with any other block modes will be rejected.
+ * Sets the set of block modes with which the key can be used when encrypting/decrypting.
+ * Attempts to use the key with any other block modes will be rejected.
*
- * <p>This restriction must be specified for keys which are used for encryption/decryption.
+ * <p>This must be specified for encryption/decryption keys.
*/
- public Builder setBlockModes(@KeyStoreKeyConstraints.BlockModeEnum int blockModes) {
- mBlockModes = blockModes;
+ public Builder setBlockModes(String... blockModes) {
+ mBlockModes = ArrayUtils.cloneIfNotEmpty(blockModes);
return this;
}
@@ -412,7 +414,7 @@
* @see #setUserAuthenticationValidityDurationSeconds(int)
*/
public Builder setUserAuthenticators(
- @KeyStoreKeyConstraints.UserAuthenticatorEnum int userAuthenticators) {
+ @KeyStoreKeyProperties.UserAuthenticatorEnum int userAuthenticators) {
mUserAuthenticators = userAuthenticators;
return this;
}
@@ -447,7 +449,7 @@
mKeyValidityForOriginationEnd,
mKeyValidityForConsumptionEnd,
mPurposes,
- mPaddings,
+ mEncryptionPaddings,
mBlockModes,
mRandomizedEncryptionRequired,
mUserAuthenticators,
diff --git a/keystore/java/android/security/KeyNotYetValidException.java b/keystore/java/android/security/KeyNotYetValidException.java
index f1c2cac..d36d80c 100644
--- a/keystore/java/android/security/KeyNotYetValidException.java
+++ b/keystore/java/android/security/KeyNotYetValidException.java
@@ -16,13 +16,15 @@
package android.security;
+import java.security.InvalidKeyException;
+
/**
* Indicates that a cryptographic operation failed because the employed key's validity start date
* is in the future.
*
* @hide
*/
-public class KeyNotYetValidException extends CryptoOperationException {
+public class KeyNotYetValidException extends InvalidKeyException {
/**
* Constructs a new {@code KeyNotYetValidException} without detail message and cause.
diff --git a/keystore/java/android/security/KeyPairGeneratorSpec.java b/keystore/java/android/security/KeyPairGeneratorSpec.java
index db310ea..fce02df 100644
--- a/keystore/java/android/security/KeyPairGeneratorSpec.java
+++ b/keystore/java/android/security/KeyPairGeneratorSpec.java
@@ -52,6 +52,11 @@
*/
public final class KeyPairGeneratorSpec implements AlgorithmParameterSpec {
+ private static final X500Principal DEFAULT_CERT_SUBJECT = new X500Principal("CN=fake");
+ private static final BigInteger DEFAULT_CERT_SERIAL_NUMBER = new BigInteger("1");
+ private static final Date DEFAULT_CERT_NOT_BEFORE = new Date(0L); // Jan 1 1970
+ private static final Date DEFAULT_CERT_NOT_AFTER = new Date(2461449600000L); // Jan 1 2048
+
private final Context mContext;
private final String mKeystoreAlias;
@@ -78,17 +83,19 @@
private final Date mKeyValidityForConsumptionEnd;
- private final @KeyStoreKeyConstraints.PurposeEnum int mPurposes;
+ private final @KeyStoreKeyProperties.PurposeEnum int mPurposes;
- private final @KeyStoreKeyConstraints.DigestEnum int mDigests;
+ private final String[] mDigests;
- private final @KeyStoreKeyConstraints.PaddingEnum int mPaddings;
+ private final String[] mEncryptionPaddings;
- private final @KeyStoreKeyConstraints.BlockModeEnum int mBlockModes;
+ private final String[] mSignaturePaddings;
+
+ private final String[] mBlockModes;
private final boolean mRandomizedEncryptionRequired;
- private final @KeyStoreKeyConstraints.UserAuthenticatorEnum int mUserAuthenticators;
+ private final @KeyStoreKeyProperties.UserAuthenticatorEnum int mUserAuthenticators;
private final int mUserAuthenticationValidityDurationSeconds;
@@ -130,33 +137,41 @@
Date keyValidityStart,
Date keyValidityForOriginationEnd,
Date keyValidityForConsumptionEnd,
- @KeyStoreKeyConstraints.PurposeEnum int purposes,
- @KeyStoreKeyConstraints.DigestEnum int digests,
- @KeyStoreKeyConstraints.PaddingEnum int paddings,
- @KeyStoreKeyConstraints.BlockModeEnum int blockModes,
+ @KeyStoreKeyProperties.PurposeEnum int purposes,
+ String[] digests,
+ String[] encryptionPaddings,
+ String[] signaturePaddings,
+ String[] blockModes,
boolean randomizedEncryptionRequired,
- @KeyStoreKeyConstraints.UserAuthenticatorEnum int userAuthenticators,
+ @KeyStoreKeyProperties.UserAuthenticatorEnum int userAuthenticators,
int userAuthenticationValidityDurationSeconds) {
if (context == null) {
throw new IllegalArgumentException("context == null");
} else if (TextUtils.isEmpty(keyStoreAlias)) {
throw new IllegalArgumentException("keyStoreAlias must not be empty");
- } else if (subjectDN == null) {
- throw new IllegalArgumentException("subjectDN == null");
- } else if (serialNumber == null) {
- throw new IllegalArgumentException("serialNumber == null");
- } else if (startDate == null) {
- throw new IllegalArgumentException("startDate == null");
- } else if (endDate == null) {
- throw new IllegalArgumentException("endDate == null");
- } else if (endDate.before(startDate)) {
- throw new IllegalArgumentException("endDate < startDate");
} else if ((userAuthenticationValidityDurationSeconds < 0)
&& (userAuthenticationValidityDurationSeconds != -1)) {
throw new IllegalArgumentException(
"userAuthenticationValidityDurationSeconds must not be negative");
}
+ if (subjectDN == null) {
+ subjectDN = DEFAULT_CERT_SUBJECT;
+ }
+ if (startDate == null) {
+ startDate = DEFAULT_CERT_NOT_BEFORE;
+ }
+ if (endDate == null) {
+ endDate = DEFAULT_CERT_NOT_AFTER;
+ }
+ if (serialNumber == null) {
+ serialNumber = DEFAULT_CERT_SERIAL_NUMBER;
+ }
+
+ if (endDate.before(startDate)) {
+ throw new IllegalArgumentException("endDate < startDate");
+ }
+
mContext = context;
mKeystoreAlias = keyStoreAlias;
mKeyType = keyType;
@@ -171,9 +186,11 @@
mKeyValidityForOriginationEnd = keyValidityForOriginationEnd;
mKeyValidityForConsumptionEnd = keyValidityForConsumptionEnd;
mPurposes = purposes;
- mDigests = digests;
- mPaddings = paddings;
- mBlockModes = blockModes;
+ mDigests = ArrayUtils.cloneIfNotEmpty(ArrayUtils.nullToEmpty(digests));
+ mEncryptionPaddings =
+ ArrayUtils.cloneIfNotEmpty(ArrayUtils.nullToEmpty(encryptionPaddings));
+ mSignaturePaddings = ArrayUtils.cloneIfNotEmpty(ArrayUtils.nullToEmpty(signaturePaddings));
+ mBlockModes = ArrayUtils.cloneIfNotEmpty(ArrayUtils.nullToEmpty(blockModes));
mRandomizedEncryptionRequired = randomizedEncryptionRequired;
mUserAuthenticators = userAuthenticators;
mUserAuthenticationValidityDurationSeconds = userAuthenticationValidityDurationSeconds;
@@ -199,13 +216,15 @@
startDate,
endDate,
endDate,
- 0,
- 0,
- 0,
- 0,
- true,
- 0,
- -1);
+ 0, // purposes
+ null, // digests
+ null, // encryption paddings
+ null, // signature paddings
+ null, // block modes
+ false, // randomized encryption required
+ 0, // user authenticators
+ -1 // user authentication validity duration (seconds)
+ );
}
/**
@@ -333,35 +352,44 @@
*
* @hide
*/
- public @KeyStoreKeyConstraints.PurposeEnum int getPurposes() {
+ public @KeyStoreKeyProperties.PurposeEnum int getPurposes() {
return mPurposes;
}
/**
- * Gets the set of digests to which the key is restricted.
+ * Gets the set of digest algorithms with which the key can be used.
*
* @hide
*/
- public @KeyStoreKeyConstraints.DigestEnum int getDigests() {
- return mDigests;
+ public String[] getDigests() {
+ return ArrayUtils.cloneIfNotEmpty(mDigests);
}
/**
- * Gets the set of padding schemes to which the key is restricted.
+ * Gets the set of padding schemes with which the key can be used when encrypting/decrypting.
*
* @hide
*/
- public @KeyStoreKeyConstraints.PaddingEnum int getPaddings() {
- return mPaddings;
+ public String[] getEncryptionPaddings() {
+ return ArrayUtils.cloneIfNotEmpty(mEncryptionPaddings);
}
/**
- * Gets the set of block modes to which the key is restricted.
+ * Gets the set of padding schemes with which the key can be used when signing/verifying.
*
* @hide
*/
- public @KeyStoreKeyConstraints.BlockModeEnum int getBlockModes() {
- return mBlockModes;
+ public String[] getSignaturePaddings() {
+ return ArrayUtils.cloneIfNotEmpty(mSignaturePaddings);
+ }
+
+ /**
+ * Gets the set of block modes with which the key can be used.
+ *
+ * @hide
+ */
+ public String[] getBlockModes() {
+ return ArrayUtils.cloneIfNotEmpty(mBlockModes);
}
/**
@@ -390,7 +418,7 @@
*
* @hide
*/
- public @KeyStoreKeyConstraints.UserAuthenticatorEnum int getUserAuthenticators() {
+ public @KeyStoreKeyProperties.UserAuthenticatorEnum int getUserAuthenticators() {
return mUserAuthenticators;
}
@@ -458,17 +486,19 @@
private Date mKeyValidityForConsumptionEnd;
- private @KeyStoreKeyConstraints.PurposeEnum int mPurposes;
+ private @KeyStoreKeyProperties.PurposeEnum int mPurposes;
- private @KeyStoreKeyConstraints.DigestEnum int mDigests;
+ private String[] mDigests;
- private @KeyStoreKeyConstraints.PaddingEnum int mPaddings;
+ private String[] mEncryptionPaddings;
- private @KeyStoreKeyConstraints.BlockModeEnum int mBlockModes;
+ private String[] mSignaturePaddings;
+
+ private String[] mBlockModes;
private boolean mRandomizedEncryptionRequired = true;
- private @KeyStoreKeyConstraints.UserAuthenticatorEnum int mUserAuthenticators;
+ private @KeyStoreKeyProperties.UserAuthenticatorEnum int mUserAuthenticators;
private int mUserAuthenticationValidityDurationSeconds = -1;
@@ -541,6 +571,10 @@
/**
* Sets the subject used for the self-signed certificate of the
* generated key pair.
+ *
+ * <p>The subject must be specified on API Level
+ * {@link android.os.Build.VERSION_CODES#LOLLIPOP_MR1 LOLLIPOP_MR1} and older platforms. On
+ * newer platforms the subject defaults to {@code CN=fake} if not specified.
*/
public Builder setSubject(X500Principal subject) {
if (subject == null) {
@@ -553,6 +587,10 @@
/**
* Sets the serial number used for the self-signed certificate of the
* generated key pair.
+ *
+ * <p>The serial number must be specified on API Level
+ * {@link android.os.Build.VERSION_CODES#LOLLIPOP_MR1 LOLLIPOP_MR1} and older platforms. On
+ * newer platforms the serial number defaults to {@code 1} if not specified.
*/
public Builder setSerialNumber(BigInteger serialNumber) {
if (serialNumber == null) {
@@ -565,6 +603,10 @@
/**
* Sets the start of the validity period for the self-signed certificate
* of the generated key pair.
+ *
+ * <p>The date must be specified on API Level
+ * {@link android.os.Build.VERSION_CODES#LOLLIPOP_MR1 LOLLIPOP_MR1} and older platforms. On
+ * newer platforms the date defaults to {@code Jan 1 1970} if not specified.
*/
public Builder setStartDate(Date startDate) {
if (startDate == null) {
@@ -577,6 +619,10 @@
/**
* Sets the end of the validity period for the self-signed certificate
* of the generated key pair.
+ *
+ * <p>The date must be specified on API Level
+ * {@link android.os.Build.VERSION_CODES#LOLLIPOP_MR1 LOLLIPOP_MR1} and older platforms. On
+ * newer platforms the date defaults to {@code Jan 1 2048} if not specified.
*/
public Builder setEndDate(Date endDate) {
if (endDate == null) {
@@ -658,53 +704,68 @@
}
/**
- * Restricts the key to being used only for the provided set of purposes.
+ * Sets the set of purposes for which the key can be used.
*
- * <p>This restriction must be specified. There is no default.
+ * <p>This must be specified for all keys. There is no default.
*
* @hide
*/
- public Builder setPurposes(@KeyStoreKeyConstraints.PurposeEnum int purposes) {
+ public Builder setPurposes(@KeyStoreKeyProperties.PurposeEnum int purposes) {
mPurposes = purposes;
return this;
}
/**
- * Restricts the key to being used only with the provided digests. Attempts to use the key
- * with any other digests be rejected.
+ * Sets the set of digests with which the key can be used when signing/verifying. Attempts
+ * to use the key with any other digest will be rejected.
*
- * <p>This restriction must be specified for keys which are used for signing/verification.
+ * <p>This must be specified for keys which are used for signing/verification.
*
* @hide
*/
- public Builder setDigests(@KeyStoreKeyConstraints.DigestEnum int digests) {
- mDigests = digests;
+ public Builder setDigests(String... digests) {
+ mDigests = ArrayUtils.cloneIfNotEmpty(digests);
return this;
}
/**
- * Restricts the key to being used only with the provided padding schemes. Attempts to use
- * the key with any other padding will be rejected.
+ * Sets the set of padding schemes with which the key can be used when
+ * encrypting/decrypting. Attempts to use the key with any other padding scheme will be
+ * rejected.
*
- * <p>This restriction must be specified for keys which are used for encryption/decryption.
+ * <p>This must be specified for keys which are used for encryption/decryption.
*
* @hide
*/
- public Builder setPaddings(@KeyStoreKeyConstraints.PaddingEnum int paddings) {
- mPaddings = paddings;
+ public Builder setEncryptionPaddings(String... paddings) {
+ mEncryptionPaddings = ArrayUtils.cloneIfNotEmpty(paddings);
return this;
}
/**
- * Restricts the key to being used only with the provided block mode when encrypting or
- * decrypting. Attempts to use the key with any other block modes will be rejected.
+ * Sets the set of padding schemes with which the key can be used when
+ * signing/verifying. Attempts to use the key with any other padding scheme will be
+ * rejected.
*
- * <p>This restriction must be specified for keys which are used for encryption/decryption.
+ * <p>This must be specified for RSA keys which are used for signing/verification.
*
* @hide
*/
- public Builder setBlockModes(@KeyStoreKeyConstraints.BlockModeEnum int blockModes) {
- mBlockModes = blockModes;
+ public Builder setSignaturePaddings(String... paddings) {
+ mSignaturePaddings = ArrayUtils.cloneIfNotEmpty(paddings);
+ return this;
+ }
+
+ /**
+ * Sets the set of block modes with which the key can be used when encrypting/decrypting.
+ * Attempts to use the key with any other block modes will be rejected.
+ *
+ * <p>This must be specified for encryption/decryption keys.
+ *
+ * @hide
+ */
+ public Builder setBlockModes(String... blockModes) {
+ mBlockModes = ArrayUtils.cloneIfNotEmpty(blockModes);
return this;
}
@@ -752,7 +813,7 @@
* @hide
*/
public Builder setUserAuthenticators(
- @KeyStoreKeyConstraints.UserAuthenticatorEnum int userAuthenticators) {
+ @KeyStoreKeyProperties.UserAuthenticatorEnum int userAuthenticators) {
mUserAuthenticators = userAuthenticators;
return this;
}
@@ -800,7 +861,8 @@
mKeyValidityForConsumptionEnd,
mPurposes,
mDigests,
- mPaddings,
+ mEncryptionPaddings,
+ mSignaturePaddings,
mBlockModes,
mRandomizedEncryptionRequired,
mUserAuthenticators,
diff --git a/keystore/java/android/security/KeyStore.java b/keystore/java/android/security/KeyStore.java
index 84a664e..c85c3a8 100644
--- a/keystore/java/android/security/KeyStore.java
+++ b/keystore/java/android/security/KeyStore.java
@@ -16,12 +16,14 @@
package android.security;
-import com.android.org.conscrypt.NativeCrypto;
+import com.android.org.conscrypt.NativeConstants;
import android.os.Binder;
import android.os.IBinder;
+import android.os.Process;
import android.os.RemoteException;
import android.os.ServiceManager;
+import android.os.UserHandle;
import android.security.keymaster.ExportResult;
import android.security.keymaster.KeyCharacteristics;
import android.security.keymaster.KeymasterArguments;
@@ -30,6 +32,7 @@
import android.security.keymaster.OperationResult;
import android.util.Log;
+import java.security.InvalidKeyException;
import java.util.Locale;
/**
@@ -52,6 +55,14 @@
public static final int UNDEFINED_ACTION = 9;
public static final int WRONG_PASSWORD = 10;
+ /**
+ * Per operation authentication is needed before this operation is valid.
+ * This is returned from {@link #begin} when begin succeeds but the operation uses
+ * per-operation authentication and must authenticate before calling {@link #update} or
+ * {@link #finish}.
+ */
+ public static final int OP_AUTH_NEEDED = 15;
+
// Used for UID field to indicate the calling UID.
public static final int UID_SELF = -1;
@@ -87,18 +98,18 @@
static int getKeyTypeForAlgorithm(String keyType) {
if ("RSA".equalsIgnoreCase(keyType)) {
- return NativeCrypto.EVP_PKEY_RSA;
+ return NativeConstants.EVP_PKEY_RSA;
} else if ("EC".equalsIgnoreCase(keyType)) {
- return NativeCrypto.EVP_PKEY_EC;
+ return NativeConstants.EVP_PKEY_EC;
} else {
return -1;
}
}
- public State state() {
+ public State state(int userId) {
final int ret;
try {
- ret = mBinder.test();
+ ret = mBinder.getState(userId);
} catch (RemoteException e) {
Log.w(TAG, "Cannot connect to keystore", e);
throw new AssertionError(e);
@@ -112,6 +123,10 @@
}
}
+ public State state() {
+ return state(UserHandle.myUserId());
+ }
+
public boolean isUnlocked() {
return state() == State.UNLOCKED;
}
@@ -160,15 +175,26 @@
return contains(key, UID_SELF);
}
- public String[] saw(String prefix, int uid) {
+ /**
+ * List all entries in the keystore for {@code uid} starting with {@code prefix}.
+ */
+ public String[] list(String prefix, int uid) {
try {
- return mBinder.saw(prefix, uid);
+ return mBinder.list(prefix, uid);
} catch (RemoteException e) {
Log.w(TAG, "Cannot connect to keystore", e);
return null;
}
}
+ public String[] list(String prefix) {
+ return list(prefix, UID_SELF);
+ }
+
+ public String[] saw(String prefix, int uid) {
+ return list(prefix, uid);
+ }
+
public String[] saw(String prefix) {
return saw(prefix, UID_SELF);
}
@@ -182,9 +208,15 @@
}
}
- public boolean password(String password) {
+ /**
+ * Attempt to lock the keystore for {@code user}.
+ *
+ * @param user Android user to lock.
+ * @return whether {@code user}'s keystore was locked.
+ */
+ public boolean lock(int userId) {
try {
- return mBinder.password(password) == NO_ERROR;
+ return mBinder.lock(userId) == NO_ERROR;
} catch (RemoteException e) {
Log.w(TAG, "Cannot connect to keystore", e);
return false;
@@ -192,17 +224,23 @@
}
public boolean lock() {
- try {
- return mBinder.lock() == NO_ERROR;
- } catch (RemoteException e) {
- Log.w(TAG, "Cannot connect to keystore", e);
- return false;
- }
+ return lock(UserHandle.myUserId());
}
- public boolean unlock(String password) {
+ /**
+ * Attempt to unlock the keystore for {@code user} with the password {@code password}.
+ * This is required before keystore entries created with FLAG_ENCRYPTED can be accessed or
+ * created.
+ *
+ * @param user Android user ID to operate on
+ * @param password user's keystore password. Should be the most recent value passed to
+ * {@link #onUserPasswordChanged} for the user.
+ *
+ * @return whether the keystore was unlocked.
+ */
+ public boolean unlock(int userId, String password) {
try {
- mError = mBinder.unlock(password);
+ mError = mBinder.unlock(userId, password);
return mError == NO_ERROR;
} catch (RemoteException e) {
Log.w(TAG, "Cannot connect to keystore", e);
@@ -210,15 +248,26 @@
}
}
- public boolean isEmpty() {
+ public boolean unlock(String password) {
+ return unlock(UserHandle.getUserId(Process.myUid()), password);
+ }
+
+ /**
+ * Check if the keystore for {@code userId} is empty.
+ */
+ public boolean isEmpty(int userId) {
try {
- return mBinder.zero() == KEY_NOT_FOUND;
+ return mBinder.isEmpty(userId) != 0;
} catch (RemoteException e) {
Log.w(TAG, "Cannot connect to keystore", e);
return false;
}
}
+ public boolean isEmpty() {
+ return isEmpty(UserHandle.myUserId());
+ }
+
public boolean generate(String key, int uid, int keyType, int keySize, int flags,
byte[][] args) {
try {
@@ -249,12 +298,7 @@
}
public boolean delKey(String key, int uid) {
- try {
- return mBinder.del_key(key, uid) == NO_ERROR;
- } catch (RemoteException e) {
- Log.w(TAG, "Cannot connect to keystore", e);
- return false;
- }
+ return delete(key, uid);
}
public boolean delKey(String key) {
@@ -347,36 +391,6 @@
}
}
- public boolean resetUid(int uid) {
- try {
- mError = mBinder.reset_uid(uid);
- return mError == NO_ERROR;
- } catch (RemoteException e) {
- Log.w(TAG, "Cannot connect to keystore", e);
- return false;
- }
- }
-
- public boolean syncUid(int sourceUid, int targetUid) {
- try {
- mError = mBinder.sync_uid(sourceUid, targetUid);
- return mError == NO_ERROR;
- } catch (RemoteException e) {
- Log.w(TAG, "Cannot connect to keystore", e);
- return false;
- }
- }
-
- public boolean passwordUid(String password, int uid) {
- try {
- mError = mBinder.password_uid(password, uid);
- return mError == NO_ERROR;
- } catch (RemoteException e) {
- Log.w(TAG, "Cannot connect to keystore", e);
- return false;
- }
- }
-
public int getLastError() {
return mError;
}
@@ -460,15 +474,20 @@
}
}
- public OperationResult finish(IBinder token, KeymasterArguments arguments, byte[] signature) {
+ public OperationResult finish(IBinder token, KeymasterArguments arguments, byte[] signature,
+ byte[] entropy) {
try {
- return mBinder.finish(token, arguments, signature);
+ return mBinder.finish(token, arguments, signature, entropy);
} catch (RemoteException e) {
Log.w(TAG, "Cannot connect to keystore", e);
return null;
}
}
+ public OperationResult finish(IBinder token, KeymasterArguments arguments, byte[] signature) {
+ return finish(token, arguments, signature, null);
+ }
+
public int abort(IBinder token) {
try {
return mBinder.abort(token);
@@ -508,7 +527,73 @@
}
}
- public static KeyStoreException getKeyStoreException(int errorCode) {
+ /**
+ * Notify keystore that a user's password has changed.
+ *
+ * @param userId the user whose password changed.
+ * @param newPassword the new password or "" if the password was removed.
+ */
+ public boolean onUserPasswordChanged(int userId, String newPassword) {
+ // Parcel.cpp doesn't support deserializing null strings and treats them as "". Make that
+ // explicit here.
+ if (newPassword == null) {
+ newPassword = "";
+ }
+ try {
+ return mBinder.onUserPasswordChanged(userId, newPassword) == NO_ERROR;
+ } catch (RemoteException e) {
+ Log.w(TAG, "Cannot connect to keystore", e);
+ return false;
+ }
+ }
+
+ /**
+ * Notify keystore that a user was added.
+ *
+ * @param userId the new user.
+ * @param parentId the parent of the new user, or -1 if the user has no parent. If parentId is
+ * specified then the new user's keystore will be intialized with the same secure lockscreen
+ * password as the parent.
+ */
+ public void onUserAdded(int userId, int parentId) {
+ try {
+ mBinder.onUserAdded(userId, parentId);
+ } catch (RemoteException e) {
+ Log.w(TAG, "Cannot connect to keystore", e);
+ }
+ }
+
+ /**
+ * Notify keystore that a user was added.
+ *
+ * @param userId the new user.
+ */
+ public void onUserAdded(int userId) {
+ onUserAdded(userId, -1);
+ }
+
+ /**
+ * Notify keystore that a user was removed.
+ *
+ * @param userId the removed user.
+ */
+ public void onUserRemoved(int userId) {
+ try {
+ mBinder.onUserRemoved(userId);
+ } catch (RemoteException e) {
+ Log.w(TAG, "Cannot connect to keystore", e);
+ }
+ }
+
+ public boolean onUserPasswordChanged(String newPassword) {
+ return onUserPasswordChanged(UserHandle.getUserId(Process.myUid()), newPassword);
+ }
+
+ /**
+ * Returns a {@link KeyStoreException} corresponding to the provided keystore/keymaster error
+ * code.
+ */
+ static KeyStoreException getKeyStoreException(int errorCode) {
if (errorCode > 0) {
// KeyStore layer error
switch (errorCode) {
@@ -544,7 +629,11 @@
}
}
- public static CryptoOperationException getCryptoOperationException(KeyStoreException e) {
+ /**
+ * Returns an {@link InvalidKeyException} corresponding to the provided
+ * {@link KeyStoreException}.
+ */
+ static InvalidKeyException getInvalidKeyException(KeyStoreException e) {
switch (e.getErrorCode()) {
case KeymasterDefs.KM_ERROR_KEY_EXPIRED:
return new KeyExpiredException();
@@ -553,11 +642,15 @@
case KeymasterDefs.KM_ERROR_KEY_USER_NOT_AUTHENTICATED:
return new UserNotAuthenticatedException();
default:
- return new CryptoOperationException("Crypto operation failed", e);
+ return new InvalidKeyException("Keystore operation failed", e);
}
}
- public static CryptoOperationException getCryptoOperationException(int errorCode) {
- return getCryptoOperationException(getKeyStoreException(errorCode));
+ /**
+ * Returns an {@link InvalidKeyException} corresponding to the provided keystore/keymaster error
+ * code.
+ */
+ static InvalidKeyException getInvalidKeyException(int errorCode) {
+ return getInvalidKeyException(getKeyStoreException(errorCode));
}
}
diff --git a/keystore/java/android/security/KeyStoreCipherSpi.java b/keystore/java/android/security/KeyStoreCipherSpi.java
index 487eac0..3b13e83 100644
--- a/keystore/java/android/security/KeyStoreCipherSpi.java
+++ b/keystore/java/android/security/KeyStoreCipherSpi.java
@@ -48,68 +48,67 @@
public abstract class KeyStoreCipherSpi extends CipherSpi implements KeyStoreCryptoOperation {
public abstract static class AES extends KeyStoreCipherSpi {
- protected AES(@KeyStoreKeyConstraints.BlockModeEnum int blockMode,
- @KeyStoreKeyConstraints.PaddingEnum int padding, boolean ivUsed) {
- super(KeyStoreKeyConstraints.Algorithm.AES,
- blockMode,
- padding,
+ protected AES(int keymasterBlockMode, int keymasterPadding, boolean ivUsed) {
+ super(KeymasterDefs.KM_ALGORITHM_AES,
+ keymasterBlockMode,
+ keymasterPadding,
16,
ivUsed);
}
public abstract static class ECB extends AES {
- protected ECB(@KeyStoreKeyConstraints.PaddingEnum int padding) {
- super(KeyStoreKeyConstraints.BlockMode.ECB, padding, false);
+ protected ECB(int keymasterPadding) {
+ super(KeymasterDefs.KM_MODE_ECB, keymasterPadding, false);
}
public static class NoPadding extends ECB {
public NoPadding() {
- super(KeyStoreKeyConstraints.Padding.NONE);
+ super(KeymasterDefs.KM_PAD_NONE);
}
}
public static class PKCS7Padding extends ECB {
public PKCS7Padding() {
- super(KeyStoreKeyConstraints.Padding.PKCS7);
+ super(KeymasterDefs.KM_PAD_PKCS7);
}
}
}
public abstract static class CBC extends AES {
- protected CBC(@KeyStoreKeyConstraints.BlockModeEnum int padding) {
- super(KeyStoreKeyConstraints.BlockMode.CBC, padding, true);
+ protected CBC(int keymasterPadding) {
+ super(KeymasterDefs.KM_MODE_CBC, keymasterPadding, true);
}
public static class NoPadding extends CBC {
public NoPadding() {
- super(KeyStoreKeyConstraints.Padding.NONE);
+ super(KeymasterDefs.KM_PAD_NONE);
}
}
public static class PKCS7Padding extends CBC {
public PKCS7Padding() {
- super(KeyStoreKeyConstraints.Padding.PKCS7);
+ super(KeymasterDefs.KM_PAD_PKCS7);
}
}
}
public abstract static class CTR extends AES {
- protected CTR(@KeyStoreKeyConstraints.BlockModeEnum int padding) {
- super(KeyStoreKeyConstraints.BlockMode.CTR, padding, true);
+ protected CTR(int keymasterPadding) {
+ super(KeymasterDefs.KM_MODE_CTR, keymasterPadding, true);
}
public static class NoPadding extends CTR {
public NoPadding() {
- super(KeyStoreKeyConstraints.Padding.NONE);
+ super(KeymasterDefs.KM_PAD_NONE);
}
}
}
}
private final KeyStore mKeyStore;
- private final @KeyStoreKeyConstraints.AlgorithmEnum int mAlgorithm;
- private final @KeyStoreKeyConstraints.BlockModeEnum int mBlockMode;
- private final @KeyStoreKeyConstraints.PaddingEnum int mPadding;
+ private final int mKeymasterAlgorithm;
+ private final int mKeymasterBlockMode;
+ private final int mKeymasterPadding;
private final int mBlockSizeBytes;
/** Whether this transformation requires an IV. */
@@ -137,45 +136,86 @@
private Long mOperationHandle;
private KeyStoreCryptoOperationChunkedStreamer mMainDataStreamer;
+ /**
+ * Encountered exception which could not be immediately thrown because it was encountered inside
+ * a method that does not throw checked exception. This exception will be thrown from
+ * {@code engineDoFinal}. Once such an exception is encountered, {@code engineUpdate} and
+ * {@code engineDoFinal} start ignoring input data.
+ */
+ private Exception mCachedException;
+
protected KeyStoreCipherSpi(
- @KeyStoreKeyConstraints.AlgorithmEnum int algorithm,
- @KeyStoreKeyConstraints.BlockModeEnum int blockMode,
- @KeyStoreKeyConstraints.PaddingEnum int padding,
+ int keymasterAlgorithm,
+ int keymasterBlockMode,
+ int keymasterPadding,
int blockSizeBytes,
boolean ivUsed) {
mKeyStore = KeyStore.getInstance();
- mAlgorithm = algorithm;
- mBlockMode = blockMode;
- mPadding = padding;
+ mKeymasterAlgorithm = keymasterAlgorithm;
+ mKeymasterBlockMode = keymasterBlockMode;
+ mKeymasterPadding = keymasterPadding;
mBlockSizeBytes = blockSizeBytes;
mIvRequired = ivUsed;
}
@Override
protected void engineInit(int opmode, Key key, SecureRandom random) throws InvalidKeyException {
- init(opmode, key, random);
- initAlgorithmSpecificParameters();
- ensureKeystoreOperationInitialized();
+ resetAll();
+
+ boolean success = false;
+ try {
+ init(opmode, key, random);
+ initAlgorithmSpecificParameters();
+ try {
+ ensureKeystoreOperationInitialized();
+ } catch (InvalidAlgorithmParameterException e) {
+ throw new InvalidKeyException(e);
+ }
+ success = true;
+ } finally {
+ if (!success) {
+ resetAll();
+ }
+ }
}
@Override
protected void engineInit(int opmode, Key key, AlgorithmParameters params, SecureRandom random)
throws InvalidKeyException, InvalidAlgorithmParameterException {
- init(opmode, key, random);
- initAlgorithmSpecificParameters(params);
- ensureKeystoreOperationInitialized();
+ resetAll();
+
+ boolean success = false;
+ try {
+ init(opmode, key, random);
+ initAlgorithmSpecificParameters(params);
+ ensureKeystoreOperationInitialized();
+ success = true;
+ } finally {
+ if (!success) {
+ resetAll();
+ }
+ }
}
@Override
protected void engineInit(int opmode, Key key, AlgorithmParameterSpec params,
SecureRandom random) throws InvalidKeyException, InvalidAlgorithmParameterException {
- init(opmode, key, random);
- initAlgorithmSpecificParameters(params);
- ensureKeystoreOperationInitialized();
+ resetAll();
+
+ boolean success = false;
+ try {
+ init(opmode, key, random);
+ initAlgorithmSpecificParameters(params);
+ ensureKeystoreOperationInitialized();
+ success = true;
+ } finally {
+ if (!success) {
+ resetAll();
+ }
+ }
}
private void init(int opmode, Key key, SecureRandom random) throws InvalidKeyException {
- resetAll();
if (!(key instanceof KeyStoreSecretKey)) {
throw new InvalidKeyException(
"Unsupported key: " + ((key != null) ? key.getClass().getName() : "null"));
@@ -208,6 +248,7 @@
mOperationToken = null;
mOperationHandle = null;
mMainDataStreamer = null;
+ mCachedException = null;
}
private void resetWhilePreservingInitState() {
@@ -219,12 +260,17 @@
mOperationHandle = null;
mMainDataStreamer = null;
mAdditionalEntropyForBegin = null;
+ mCachedException = null;
}
- private void ensureKeystoreOperationInitialized() {
+ private void ensureKeystoreOperationInitialized() throws InvalidKeyException,
+ InvalidAlgorithmParameterException {
if (mMainDataStreamer != null) {
return;
}
+ if (mCachedException != null) {
+ return;
+ }
if (mKey == null) {
throw new IllegalStateException("Not initialized");
}
@@ -236,9 +282,9 @@
}
KeymasterArguments keymasterInputArgs = new KeymasterArguments();
- keymasterInputArgs.addInt(KeymasterDefs.KM_TAG_ALGORITHM, mAlgorithm);
- keymasterInputArgs.addInt(KeymasterDefs.KM_TAG_BLOCK_MODE, mBlockMode);
- keymasterInputArgs.addInt(KeymasterDefs.KM_TAG_PADDING, mPadding);
+ keymasterInputArgs.addInt(KeymasterDefs.KM_TAG_ALGORITHM, mKeymasterAlgorithm);
+ keymasterInputArgs.addInt(KeymasterDefs.KM_TAG_BLOCK_MODE, mKeymasterBlockMode);
+ keymasterInputArgs.addInt(KeymasterDefs.KM_TAG_PADDING, mKeymasterPadding);
addAlgorithmSpecificParametersToBegin(keymasterInputArgs);
KeymasterArguments keymasterOutputArgs = new KeymasterArguments();
@@ -253,11 +299,15 @@
if (opResult == null) {
throw new KeyStoreConnectException();
} else if (opResult.resultCode != KeyStore.NO_ERROR) {
- throw KeyStore.getCryptoOperationException(opResult.resultCode);
+ switch (opResult.resultCode) {
+ case KeymasterDefs.KM_ERROR_INVALID_NONCE:
+ throw new InvalidAlgorithmParameterException("Invalid IV");
+ }
+ throw KeyStore.getInvalidKeyException(opResult.resultCode);
}
if (opResult.token == null) {
- throw new CryptoOperationException("Keystore returned null operation token");
+ throw new IllegalStateException("Keystore returned null operation token");
}
mOperationToken = opResult.token;
mOperationHandle = opResult.operationHandle;
@@ -271,7 +321,15 @@
@Override
protected byte[] engineUpdate(byte[] input, int inputOffset, int inputLen) {
- ensureKeystoreOperationInitialized();
+ if (mCachedException != null) {
+ return null;
+ }
+ try {
+ ensureKeystoreOperationInitialized();
+ } catch (InvalidKeyException | InvalidAlgorithmParameterException e) {
+ mCachedException = e;
+ return null;
+ }
if (inputLen == 0) {
return null;
@@ -281,7 +339,8 @@
try {
output = mMainDataStreamer.update(input, inputOffset, inputLen);
} catch (KeyStoreException e) {
- throw KeyStore.getCryptoOperationException(e);
+ mCachedException = e;
+ return null;
}
if (output.length == 0) {
@@ -310,7 +369,16 @@
@Override
protected byte[] engineDoFinal(byte[] input, int inputOffset, int inputLen)
throws IllegalBlockSizeException, BadPaddingException {
- ensureKeystoreOperationInitialized();
+ if (mCachedException != null) {
+ throw (IllegalBlockSizeException)
+ new IllegalBlockSizeException().initCause(mCachedException);
+ }
+
+ try {
+ ensureKeystoreOperationInitialized();
+ } catch (InvalidKeyException | InvalidAlgorithmParameterException e) {
+ throw (IllegalBlockSizeException) new IllegalBlockSizeException().initCause(e);
+ }
byte[] output;
try {
@@ -324,7 +392,7 @@
case KeymasterDefs.KM_ERROR_VERIFICATION_FAILED:
throw new AEADBadTagException();
default:
- throw KeyStore.getCryptoOperationException(e);
+ throw (IllegalBlockSizeException) new IllegalBlockSizeException().initCause(e);
}
}
@@ -548,18 +616,12 @@
if (mIvRequired) {
// IV is needed
if ((mIv == null) && (mEncrypting)) {
- // TODO: Switch to keymaster-generated IV code below once keymaster supports
- // that.
- // IV is needed but was not provided by the caller -- generate an IV.
- mIv = new byte[mBlockSizeBytes];
- SecureRandom rng = (mRng != null) ? mRng : new SecureRandom();
- rng.nextBytes(mIv);
-// // IV was not provided by the caller and thus will be generated by keymaster.
-// // Mix in some additional entropy from the provided SecureRandom.
-// if (mRng != null) {
-// mAdditionalEntropyForBegin = new byte[mBlockSizeBytes];
-// mRng.nextBytes(mAdditionalEntropyForBegin);
-// }
+ // IV was not provided by the caller and thus will be generated by keymaster.
+ // Mix in some additional entropy from the provided SecureRandom.
+ if (mRng != null) {
+ mAdditionalEntropyForBegin = new byte[mBlockSizeBytes];
+ mRng.nextBytes(mAdditionalEntropyForBegin);
+ }
}
}
}
@@ -591,11 +653,11 @@
if (mIv == null) {
mIv = returnedIv;
} else if ((returnedIv != null) && (!Arrays.equals(returnedIv, mIv))) {
- throw new CryptoOperationException("IV in use differs from provided IV");
+ throw new IllegalStateException("IV in use differs from provided IV");
}
} else {
if (returnedIv != null) {
- throw new CryptoOperationException(
+ throw new IllegalStateException(
"IV in use despite IV not being used by this transformation");
}
}
diff --git a/keystore/java/android/security/KeyStoreConnectException.java b/keystore/java/android/security/KeyStoreConnectException.java
index 8ed6e04..1aa3aec 100644
--- a/keystore/java/android/security/KeyStoreConnectException.java
+++ b/keystore/java/android/security/KeyStoreConnectException.java
@@ -21,7 +21,7 @@
*
* @hide
*/
-public class KeyStoreConnectException extends CryptoOperationException {
+public class KeyStoreConnectException extends IllegalStateException {
public KeyStoreConnectException() {
super("Failed to communicate with keystore service");
}
diff --git a/keystore/java/android/security/KeyStoreCryptoOperationChunkedStreamer.java b/keystore/java/android/security/KeyStoreCryptoOperationChunkedStreamer.java
index 1f8b7e4..0619199 100644
--- a/keystore/java/android/security/KeyStoreCryptoOperationChunkedStreamer.java
+++ b/keystore/java/android/security/KeyStoreCryptoOperationChunkedStreamer.java
@@ -19,6 +19,8 @@
import android.os.IBinder;
import android.security.keymaster.OperationResult;
+import libcore.util.EmptyArray;
+
import java.io.ByteArrayOutputStream;
import java.io.IOException;
@@ -95,7 +97,7 @@
// Too much input for one chunk -- extract one max-sized chunk and feed it into the
// update operation.
inputBytesInChunk = mMaxChunkSize - mBufferedLength;
- chunk = concat(mBuffered, mBufferedOffset, mBufferedLength,
+ chunk = ArrayUtils.concat(mBuffered, mBufferedOffset, mBufferedLength,
input, inputOffset, inputBytesInChunk);
} else {
// All of available input fits into one chunk.
@@ -108,7 +110,7 @@
} else {
// Need to combine buffered data with input data into one array.
inputBytesInChunk = inputLength;
- chunk = concat(mBuffered, mBufferedOffset, mBufferedLength,
+ chunk = ArrayUtils.concat(mBuffered, mBufferedOffset, mBufferedLength,
input, inputOffset, inputBytesInChunk);
}
}
@@ -134,7 +136,7 @@
// More input is available, but it wasn't included into the previous chunk
// because the chunk reached its maximum permitted size.
// Shouldn't have happened.
- throw new CryptoOperationException("Nothing consumed from max-sized chunk: "
+ throw new IllegalStateException("Nothing consumed from max-sized chunk: "
+ chunk.length + " bytes");
}
mBuffered = chunk;
@@ -146,7 +148,7 @@
mBufferedOffset = opResult.inputConsumed;
mBufferedLength = chunk.length - opResult.inputConsumed;
} else {
- throw new CryptoOperationException("Consumed more than provided: "
+ throw new IllegalStateException("Consumed more than provided: "
+ opResult.inputConsumed + ", provided: " + chunk.length);
}
@@ -158,7 +160,7 @@
try {
bufferedOutput.write(opResult.output);
} catch (IOException e) {
- throw new CryptoOperationException("Failed to buffer output", e);
+ throw new IllegalStateException("Failed to buffer output", e);
}
}
} else {
@@ -171,7 +173,7 @@
try {
bufferedOutput.write(opResult.output);
} catch (IOException e) {
- throw new CryptoOperationException("Failed to buffer output", e);
+ throw new IllegalStateException("Failed to buffer output", e);
}
return bufferedOutput.toByteArray();
}
@@ -197,7 +199,7 @@
// Flush all buffered input and provided input into keystore/keymaster.
byte[] output = update(input, inputOffset, inputLength);
- output = concat(output, flush());
+ output = ArrayUtils.concat(output, flush());
OperationResult opResult = mKeyStoreStream.finish();
if (opResult == null) {
@@ -206,7 +208,7 @@
throw KeyStore.getKeyStoreException(opResult.resultCode);
}
- return concat(output, opResult.output);
+ return ArrayUtils.concat(output, opResult.output);
}
/**
@@ -215,11 +217,11 @@
*/
public byte[] flush() throws KeyStoreException {
if (mBufferedLength <= 0) {
- return EMPTY_BYTE_ARRAY;
+ return EmptyArray.BYTE;
}
- byte[] chunk = subarray(mBuffered, mBufferedOffset, mBufferedLength);
- mBuffered = EMPTY_BYTE_ARRAY;
+ byte[] chunk = ArrayUtils.subarray(mBuffered, mBufferedOffset, mBufferedLength);
+ mBuffered = EmptyArray.BYTE;
mBufferedLength = 0;
mBufferedOffset = 0;
@@ -231,53 +233,14 @@
}
if (opResult.inputConsumed < chunk.length) {
- throw new CryptoOperationException("Keystore failed to consume all input. Provided: "
+ throw new IllegalStateException("Keystore failed to consume all input. Provided: "
+ chunk.length + ", consumed: " + opResult.inputConsumed);
} else if (opResult.inputConsumed > chunk.length) {
- throw new CryptoOperationException("Keystore consumed more input than provided"
+ throw new IllegalStateException("Keystore consumed more input than provided"
+ " . Provided: " + chunk.length + ", consumed: " + opResult.inputConsumed);
}
- return (opResult.output != null) ? opResult.output : EMPTY_BYTE_ARRAY;
- }
-
- private static byte[] concat(byte[] arr1, byte[] arr2) {
- if ((arr1 == null) || (arr1.length == 0)) {
- return arr2;
- } else if ((arr2 == null) || (arr2.length == 0)) {
- return arr1;
- } else {
- byte[] result = new byte[arr1.length + arr2.length];
- System.arraycopy(arr1, 0, result, 0, arr1.length);
- System.arraycopy(arr2, 0, result, arr1.length, arr2.length);
- return result;
- }
- }
-
- private static byte[] concat(byte[] arr1, int offset1, int len1, byte[] arr2, int offset2,
- int len2) {
- if (len1 == 0) {
- return subarray(arr2, offset2, len2);
- } else if (len2 == 0) {
- return subarray(arr1, offset1, len1);
- } else {
- byte[] result = new byte[len1 + len2];
- System.arraycopy(arr1, offset1, result, 0, len1);
- System.arraycopy(arr2, offset2, result, len1, len2);
- return result;
- }
- }
-
- private static byte[] subarray(byte[] arr, int offset, int len) {
- if (len == 0) {
- return EMPTY_BYTE_ARRAY;
- }
- if ((offset == 0) && (len == arr.length)) {
- return arr;
- }
- byte[] result = new byte[len];
- System.arraycopy(arr, offset, result, 0, len);
- return result;
+ return (opResult.output != null) ? opResult.output : EmptyArray.BYTE;
}
/**
diff --git a/keystore/java/android/security/KeyStoreHmacSpi.java b/keystore/java/android/security/KeyStoreHmacSpi.java
index f69e7d1..175369c 100644
--- a/keystore/java/android/security/KeyStoreHmacSpi.java
+++ b/keystore/java/android/security/KeyStoreHmacSpi.java
@@ -37,48 +37,49 @@
public static class HmacSHA1 extends KeyStoreHmacSpi {
public HmacSHA1() {
- super(KeyStoreKeyConstraints.Digest.SHA1);
+ super(KeymasterDefs.KM_DIGEST_SHA1);
}
}
public static class HmacSHA224 extends KeyStoreHmacSpi {
public HmacSHA224() {
- super(KeyStoreKeyConstraints.Digest.SHA224);
+ super(KeymasterDefs.KM_DIGEST_SHA_2_224);
}
}
public static class HmacSHA256 extends KeyStoreHmacSpi {
public HmacSHA256() {
- super(KeyStoreKeyConstraints.Digest.SHA256);
+ super(KeymasterDefs.KM_DIGEST_SHA_2_256);
}
}
public static class HmacSHA384 extends KeyStoreHmacSpi {
public HmacSHA384() {
- super(KeyStoreKeyConstraints.Digest.SHA384);
+ super(KeymasterDefs.KM_DIGEST_SHA_2_384);
}
}
public static class HmacSHA512 extends KeyStoreHmacSpi {
public HmacSHA512() {
- super(KeyStoreKeyConstraints.Digest.SHA512);
+ super(KeymasterDefs.KM_DIGEST_SHA_2_512);
}
}
private final KeyStore mKeyStore = KeyStore.getInstance();
- private final @KeyStoreKeyConstraints.DigestEnum int mDigest;
+ private final int mKeymasterDigest;
private final int mMacSizeBytes;
- private String mKeyAliasInKeyStore;
+ // Fields below are populated by engineInit and should be preserved after engineDoFinal.
+ private KeyStoreSecretKey mKey;
- // The fields below are reset by the engineReset operation.
+ // Fields below are reset when engineDoFinal succeeds.
private KeyStoreCryptoOperationChunkedStreamer mChunkedStreamer;
private IBinder mOperationToken;
private Long mOperationHandle;
- protected KeyStoreHmacSpi(@KeyStoreKeyConstraints.DigestEnum int digest) {
- mDigest = digest;
- mMacSizeBytes = KeyStoreKeyConstraints.Digest.getOutputSizeBytes(digest);
+ protected KeyStoreHmacSpi(int keymasterDigest) {
+ mKeymasterDigest = keymasterDigest;
+ mMacSizeBytes = KeymasterUtils.getDigestOutputSizeBytes(keymasterDigest);
}
@Override
@@ -89,28 +90,39 @@
@Override
protected void engineInit(Key key, AlgorithmParameterSpec params) throws InvalidKeyException,
InvalidAlgorithmParameterException {
+ resetAll();
+
+ boolean success = false;
+ try {
+ init(key, params);
+ ensureKeystoreOperationInitialized();
+ success = true;
+ } finally {
+ if (!success) {
+ resetAll();
+ }
+ }
+ }
+
+ private void init(Key key, AlgorithmParameterSpec params) throws InvalidKeyException,
+ InvalidAlgorithmParameterException {
if (key == null) {
throw new InvalidKeyException("key == null");
} else if (!(key instanceof KeyStoreSecretKey)) {
throw new InvalidKeyException(
"Only Android KeyStore secret keys supported. Key: " + key);
}
+ mKey = (KeyStoreSecretKey) key;
if (params != null) {
throw new InvalidAlgorithmParameterException(
"Unsupported algorithm parameters: " + params);
}
- mKeyAliasInKeyStore = ((KeyStoreSecretKey) key).getAlias();
- if (mKeyAliasInKeyStore == null) {
- throw new InvalidKeyException("Key's KeyStore alias not known");
- }
- engineReset();
- ensureKeystoreOperationInitialized();
}
- @Override
- protected void engineReset() {
+ private void resetAll() {
+ mKey = null;
IBinder operationToken = mOperationToken;
if (operationToken != null) {
mOperationToken = null;
@@ -120,19 +132,35 @@
mChunkedStreamer = null;
}
- private void ensureKeystoreOperationInitialized() {
+ private void resetWhilePreservingInitState() {
+ IBinder operationToken = mOperationToken;
+ if (operationToken != null) {
+ mOperationToken = null;
+ mKeyStore.abort(operationToken);
+ }
+ mOperationHandle = null;
+ mChunkedStreamer = null;
+ }
+
+ @Override
+ protected void engineReset() {
+ resetWhilePreservingInitState();
+ }
+
+ private void ensureKeystoreOperationInitialized() throws InvalidKeyException {
if (mChunkedStreamer != null) {
return;
}
- if (mKeyAliasInKeyStore == null) {
+ if (mKey == null) {
throw new IllegalStateException("Not initialized");
}
KeymasterArguments keymasterArgs = new KeymasterArguments();
- keymasterArgs.addInt(KeymasterDefs.KM_TAG_ALGORITHM, KeyStoreKeyConstraints.Algorithm.HMAC);
- keymasterArgs.addInt(KeymasterDefs.KM_TAG_DIGEST, mDigest);
+ keymasterArgs.addInt(KeymasterDefs.KM_TAG_ALGORITHM, KeymasterDefs.KM_ALGORITHM_HMAC);
+ keymasterArgs.addInt(KeymasterDefs.KM_TAG_DIGEST, mKeymasterDigest);
- OperationResult opResult = mKeyStore.begin(mKeyAliasInKeyStore,
+ OperationResult opResult = mKeyStore.begin(
+ mKey.getAlias(),
KeymasterDefs.KM_PURPOSE_SIGN,
true,
keymasterArgs,
@@ -141,10 +169,10 @@
if (opResult == null) {
throw new KeyStoreConnectException();
} else if (opResult.resultCode != KeyStore.NO_ERROR) {
- throw KeyStore.getCryptoOperationException(opResult.resultCode);
+ throw KeyStore.getInvalidKeyException(opResult.resultCode);
}
if (opResult.token == null) {
- throw new CryptoOperationException("Keystore returned null operation token");
+ throw new IllegalStateException("Keystore returned null operation token");
}
mOperationToken = opResult.token;
mOperationHandle = opResult.operationHandle;
@@ -160,31 +188,39 @@
@Override
protected void engineUpdate(byte[] input, int offset, int len) {
- ensureKeystoreOperationInitialized();
+ try {
+ ensureKeystoreOperationInitialized();
+ } catch (InvalidKeyException e) {
+ throw new IllegalStateException("Failed to reinitialize MAC", e);
+ }
byte[] output;
try {
output = mChunkedStreamer.update(input, offset, len);
} catch (KeyStoreException e) {
- throw KeyStore.getCryptoOperationException(e);
+ throw new IllegalStateException("Keystore operation failed", e);
}
if ((output != null) && (output.length != 0)) {
- throw new CryptoOperationException("Update operation unexpectedly produced output");
+ throw new IllegalStateException("Update operation unexpectedly produced output");
}
}
@Override
protected byte[] engineDoFinal() {
- ensureKeystoreOperationInitialized();
+ try {
+ ensureKeystoreOperationInitialized();
+ } catch (InvalidKeyException e) {
+ throw new IllegalStateException("Failed to reinitialize MAC", e);
+ }
byte[] result;
try {
result = mChunkedStreamer.doFinal(null, 0, 0);
} catch (KeyStoreException e) {
- throw KeyStore.getCryptoOperationException(e);
+ throw new IllegalStateException("Keystore operation failed", e);
}
- engineReset();
+ resetWhilePreservingInitState();
return result;
}
diff --git a/keystore/java/android/security/KeyStoreKeyCharacteristics.java b/keystore/java/android/security/KeyStoreKeyCharacteristics.java
deleted file mode 100644
index 1f5d400..0000000
--- a/keystore/java/android/security/KeyStoreKeyCharacteristics.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.security;
-
-import android.annotation.IntDef;
-import android.security.keymaster.KeymasterDefs;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-/**
- * Characteristics of {@code AndroidKeyStore} keys.
- *
- * @hide
- */
-public abstract class KeyStoreKeyCharacteristics {
- private KeyStoreKeyCharacteristics() {}
-
- @Retention(RetentionPolicy.SOURCE)
- @IntDef({Origin.GENERATED, Origin.IMPORTED})
- public @interface OriginEnum {}
-
- /**
- * Origin of the key.
- */
- public static abstract class Origin {
- private Origin() {}
-
- /** Key was generated inside AndroidKeyStore. */
- public static final int GENERATED = 1 << 0;
-
- /** Key was imported into AndroidKeyStore. */
- public static final int IMPORTED = 1 << 1;
-
- /**
- * @hide
- */
- public static @OriginEnum int fromKeymaster(int origin) {
- switch (origin) {
- case KeymasterDefs.KM_ORIGIN_HARDWARE:
- return GENERATED;
- case KeymasterDefs.KM_ORIGIN_IMPORTED:
- return IMPORTED;
- default:
- throw new IllegalArgumentException("Unknown origin: " + origin);
- }
- }
- }
-}
diff --git a/keystore/java/android/security/KeyStoreKeyConstraints.java b/keystore/java/android/security/KeyStoreKeyConstraints.java
deleted file mode 100644
index 055b702..0000000
--- a/keystore/java/android/security/KeyStoreKeyConstraints.java
+++ /dev/null
@@ -1,937 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.security;
-
-import android.annotation.IntDef;
-import android.security.keymaster.KeymasterDefs;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.util.Collection;
-import java.util.Locale;
-
-/**
- * Constraints for {@code AndroidKeyStore} keys.
- *
- * @hide
- */
-public abstract class KeyStoreKeyConstraints {
- private KeyStoreKeyConstraints() {}
-
- @Retention(RetentionPolicy.SOURCE)
- @IntDef(flag = true,
- value = {Purpose.ENCRYPT, Purpose.DECRYPT, Purpose.SIGN, Purpose.VERIFY})
- public @interface PurposeEnum {}
-
- /**
- * Purpose of key.
- */
- public static abstract class Purpose {
- private Purpose() {}
-
- /**
- * Purpose: encryption.
- */
- public static final int ENCRYPT = 1 << 0;
-
- /**
- * Purpose: decryption.
- */
- public static final int DECRYPT = 1 << 1;
-
- /**
- * Purpose: signing.
- */
- public static final int SIGN = 1 << 2;
-
- /**
- * Purpose: signature verification.
- */
- public static final int VERIFY = 1 << 3;
-
- /**
- * @hide
- */
- public static int toKeymaster(@PurposeEnum int purpose) {
- switch (purpose) {
- case ENCRYPT:
- return KeymasterDefs.KM_PURPOSE_ENCRYPT;
- case DECRYPT:
- return KeymasterDefs.KM_PURPOSE_DECRYPT;
- case SIGN:
- return KeymasterDefs.KM_PURPOSE_SIGN;
- case VERIFY:
- return KeymasterDefs.KM_PURPOSE_VERIFY;
- default:
- throw new IllegalArgumentException("Unknown purpose: " + purpose);
- }
- }
-
- /**
- * @hide
- */
- public static @PurposeEnum int fromKeymaster(int purpose) {
- switch (purpose) {
- case KeymasterDefs.KM_PURPOSE_ENCRYPT:
- return ENCRYPT;
- case KeymasterDefs.KM_PURPOSE_DECRYPT:
- return DECRYPT;
- case KeymasterDefs.KM_PURPOSE_SIGN:
- return SIGN;
- case KeymasterDefs.KM_PURPOSE_VERIFY:
- return VERIFY;
- default:
- throw new IllegalArgumentException("Unknown purpose: " + purpose);
- }
- }
-
- /**
- * @hide
- */
- public static int[] allToKeymaster(@PurposeEnum int purposes) {
- int[] result = getSetFlags(purposes);
- for (int i = 0; i < result.length; i++) {
- result[i] = toKeymaster(result[i]);
- }
- return result;
- }
-
- /**
- * @hide
- */
- public static @PurposeEnum int allFromKeymaster(Collection<Integer> purposes) {
- @PurposeEnum int result = 0;
- for (int keymasterPurpose : purposes) {
- result |= fromKeymaster(keymasterPurpose);
- }
- return result;
- }
- }
-
- @Retention(RetentionPolicy.SOURCE)
- @IntDef({Algorithm.AES, Algorithm.HMAC, Algorithm.RSA, Algorithm.EC})
- public @interface AlgorithmEnum {}
-
- /**
- * Key algorithm.
- */
- public static abstract class Algorithm {
- private Algorithm() {}
-
- /**
- * Key algorithm: AES.
- */
- public static final int AES = 1 << 0;
-
- /**
- * Key algorithm: HMAC.
- */
- public static final int HMAC = 1 << 1;
-
- /**
- * Key algorithm: RSA.
- */
- public static final int RSA = 1 << 2;
-
- /**
- * Key algorithm: EC.
- */
- public static final int EC = 1 << 3;
-
- /**
- * @hide
- */
- public static int toKeymaster(@AlgorithmEnum int algorithm) {
- switch (algorithm) {
- case AES:
- return KeymasterDefs.KM_ALGORITHM_AES;
- case HMAC:
- return KeymasterDefs.KM_ALGORITHM_HMAC;
- case RSA:
- return KeymasterDefs.KM_ALGORITHM_RSA;
- case EC:
- return KeymasterDefs.KM_ALGORITHM_EC;
- default:
- throw new IllegalArgumentException("Unknown algorithm: " + algorithm);
- }
- }
-
- /**
- * @hide
- */
- public static @AlgorithmEnum int fromKeymaster(int algorithm) {
- switch (algorithm) {
- case KeymasterDefs.KM_ALGORITHM_AES:
- return AES;
- case KeymasterDefs.KM_ALGORITHM_HMAC:
- return HMAC;
- case KeymasterDefs.KM_ALGORITHM_RSA:
- return RSA;
- case KeymasterDefs.KM_ALGORITHM_EC:
- return EC;
- default:
- throw new IllegalArgumentException("Unknown algorithm: " + algorithm);
- }
- }
-
- /**
- * @hide
- */
- public static String toString(@AlgorithmEnum int algorithm) {
- switch (algorithm) {
- case AES:
- return "AES";
- case HMAC:
- return "HMAC";
- case RSA:
- return "RSA";
- case EC:
- return "EC";
- default:
- throw new IllegalArgumentException("Unknown algorithm: " + algorithm);
- }
- }
-
- /**
- * @hide
- */
- public static @AlgorithmEnum int fromJCASecretKeyAlgorithm(String algorithm) {
- if (algorithm == null) {
- throw new NullPointerException("algorithm == null");
- } else if ("AES".equalsIgnoreCase(algorithm)) {
- return AES;
- } else if (algorithm.toLowerCase(Locale.US).startsWith("hmac")) {
- return HMAC;
- } else {
- throw new IllegalArgumentException(
- "Unsupported secret key algorithm: " + algorithm);
- }
- }
-
- /**
- * @hide
- */
- public static String toJCASecretKeyAlgorithm(@AlgorithmEnum int algorithm,
- @DigestEnum Integer digest) {
- switch (algorithm) {
- case AES:
- return "AES";
- case HMAC:
- if (digest == null) {
- throw new IllegalArgumentException("HMAC digest not specified");
- }
- switch (digest) {
- case Digest.MD5:
- return "HmacMD5";
- case Digest.SHA1:
- return "HmacSHA1";
- case Digest.SHA224:
- return "HmacSHA224";
- case Digest.SHA256:
- return "HmacSHA256";
- case Digest.SHA384:
- return "HmacSHA384";
- case Digest.SHA512:
- return "HmacSHA512";
- default:
- throw new IllegalArgumentException(
- "Unsupported HMAC digest: " + digest);
- }
- default:
- throw new IllegalArgumentException("Unsupported key algorithm: " + algorithm);
- }
- }
-
- /**
- * @hide
- */
- public static String toJCAKeyPairAlgorithm(@AlgorithmEnum int algorithm) {
- switch (algorithm) {
- case RSA:
- return "RSA";
- case EC:
- return "EC";
- default:
- throw new IllegalArgumentException("Unsupported key alorithm: " + algorithm);
- }
- }
- }
-
- @Retention(RetentionPolicy.SOURCE)
- @IntDef(flag = true,
- value = {
- Padding.NONE,
- Padding.PKCS7,
- Padding.RSA_PKCS1_ENCRYPTION,
- Padding.RSA_PKCS1_SIGNATURE,
- Padding.RSA_OAEP,
- Padding.RSA_PSS,
- })
- public @interface PaddingEnum {}
-
- /**
- * Padding for signing and encryption.
- */
- public static abstract class Padding {
- private Padding() {}
-
- /**
- * No padding.
- */
- public static final int NONE = 1 << 0;
-
- /**
- * PKCS#7 padding.
- */
- public static final int PKCS7 = 1 << 1;
-
- /**
- * RSA PKCS#1 v1.5 padding for encryption/decryption.
- */
- public static final int RSA_PKCS1_ENCRYPTION = 1 << 2;
-
- /**
- * RSA PKCS#1 v1.5 padding for signatures.
- */
- public static final int RSA_PKCS1_SIGNATURE = 1 << 3;
-
- /**
- * RSA Optimal Asymmetric Encryption Padding (OAEP).
- */
- public static final int RSA_OAEP = 1 << 4;
-
- /**
- * RSA PKCS#1 v2.1 Probabilistic Signature Scheme (PSS) padding.
- */
- public static final int RSA_PSS = 1 << 5;
-
- /**
- * @hide
- */
- public static int toKeymaster(int padding) {
- switch (padding) {
- case NONE:
- return KeymasterDefs.KM_PAD_NONE;
- case PKCS7:
- return KeymasterDefs.KM_PAD_PKCS7;
- case RSA_PKCS1_ENCRYPTION:
- return KeymasterDefs.KM_PAD_RSA_PKCS1_1_5_ENCRYPT;
- case RSA_PKCS1_SIGNATURE:
- return KeymasterDefs.KM_PAD_RSA_PKCS1_1_5_SIGN;
- case RSA_OAEP:
- return KeymasterDefs.KM_PAD_RSA_OAEP;
- case RSA_PSS:
- return KeymasterDefs.KM_PAD_RSA_PSS;
- default:
- throw new IllegalArgumentException("Unknown padding: " + padding);
- }
- }
-
- /**
- * @hide
- */
- public static @PaddingEnum int fromKeymaster(int padding) {
- switch (padding) {
- case KeymasterDefs.KM_PAD_NONE:
- return NONE;
- case KeymasterDefs.KM_PAD_PKCS7:
- return PKCS7;
- case KeymasterDefs.KM_PAD_RSA_PKCS1_1_5_ENCRYPT:
- return RSA_PKCS1_ENCRYPTION;
- case KeymasterDefs.KM_PAD_RSA_PKCS1_1_5_SIGN:
- return RSA_PKCS1_SIGNATURE;
- case KeymasterDefs.KM_PAD_RSA_OAEP:
- return RSA_OAEP;
- case KeymasterDefs.KM_PAD_RSA_PSS:
- return RSA_PSS;
- default:
- throw new IllegalArgumentException("Unknown padding: " + padding);
- }
- }
-
- /**
- * @hide
- */
- public static String toString(@PaddingEnum int padding) {
- switch (padding) {
- case NONE:
- return "NONE";
- case PKCS7:
- return "PKCS#7";
- case RSA_PKCS1_ENCRYPTION:
- return "RSA PKCS#1 (encryption)";
- case RSA_PKCS1_SIGNATURE:
- return "RSA PKCS#1 (signature)";
- case RSA_OAEP:
- return "RSA OAEP";
- case RSA_PSS:
- return "RSA PSS";
- default:
- throw new IllegalArgumentException("Unknown padding: " + padding);
- }
- }
-
- /**
- * @hide
- */
- public static @PaddingEnum int fromJCACipherPadding(String padding) {
- String paddingLower = padding.toLowerCase(Locale.US);
- if ("nopadding".equals(paddingLower)) {
- return NONE;
- } else if ("pkcs7padding".equals(paddingLower)) {
- return PKCS7;
- } else if ("pkcs1padding".equals(paddingLower)) {
- return RSA_PKCS1_ENCRYPTION;
- } else if (("oaeppadding".equals(paddingLower))
- || ((paddingLower.startsWith("oaepwith"))
- && (paddingLower.endsWith("padding")))) {
- return RSA_OAEP;
- } else {
- throw new IllegalArgumentException("Unknown padding: " + padding);
- }
- }
-
- /**
- * @hide
- */
- public static int[] allToKeymaster(@PaddingEnum int paddings) {
- int[] result = getSetFlags(paddings);
- for (int i = 0; i < result.length; i++) {
- result[i] = toKeymaster(result[i]);
- }
- return result;
- }
-
- /**
- * @hide
- */
- public static @PaddingEnum int allFromKeymaster(Collection<Integer> paddings) {
- @PaddingEnum int result = 0;
- for (int keymasterPadding : paddings) {
- result |= fromKeymaster(keymasterPadding);
- }
- return result;
- }
- }
-
- @Retention(RetentionPolicy.SOURCE)
- @IntDef(flag = true,
- value = {
- Digest.NONE,
- Digest.MD5,
- Digest.SHA1,
- Digest.SHA224,
- Digest.SHA256,
- Digest.SHA384,
- Digest.SHA512,
- })
- public @interface DigestEnum {}
-
- /**
- * Digests that can be used with a key when signing or generating Message Authentication
- * Codes (MACs).
- */
- public static abstract class Digest {
- private Digest() {}
-
- /**
- * No digest: sign/authenticate the raw message.
- */
- public static final int NONE = 1 << 0;
-
- /**
- * MD5 digest.
- */
- public static final int MD5 = 1 << 1;
-
- /**
- * SHA-1 digest.
- */
- public static final int SHA1 = 1 << 2;
-
- /**
- * SHA-2 224 (aka SHA-224) digest.
- */
- public static final int SHA224 = 1 << 3;
-
- /**
- * SHA-2 256 (aka SHA-256) digest.
- */
- public static final int SHA256 = 1 << 4;
-
- /**
- * SHA-2 384 (aka SHA-384) digest.
- */
- public static final int SHA384 = 1 << 5;
-
- /**
- * SHA-2 512 (aka SHA-512) digest.
- */
- public static final int SHA512 = 1 << 6;
-
- /**
- * @hide
- */
- public static String toString(@DigestEnum int digest) {
- switch (digest) {
- case NONE:
- return "NONE";
- case MD5:
- return "MD5";
- case SHA1:
- return "SHA-1";
- case SHA224:
- return "SHA-224";
- case SHA256:
- return "SHA-256";
- case SHA384:
- return "SHA-384";
- case SHA512:
- return "SHA-512";
- default:
- throw new IllegalArgumentException("Unknown digest: " + digest);
- }
- }
-
- /**
- * @hide
- */
- public static String allToString(@DigestEnum int digests) {
- StringBuilder result = new StringBuilder("[");
- boolean firstValue = true;
- for (@DigestEnum int digest : getSetFlags(digests)) {
- if (firstValue) {
- firstValue = false;
- } else {
- result.append(", ");
- }
- result.append(toString(digest));
- }
- result.append(']');
- return result.toString();
- }
-
- /**
- * @hide
- */
- public static int toKeymaster(@DigestEnum int digest) {
- switch (digest) {
- case NONE:
- return KeymasterDefs.KM_DIGEST_NONE;
- case MD5:
- return KeymasterDefs.KM_DIGEST_MD5;
- case SHA1:
- return KeymasterDefs.KM_DIGEST_SHA1;
- case SHA224:
- return KeymasterDefs.KM_DIGEST_SHA_2_224;
- case SHA256:
- return KeymasterDefs.KM_DIGEST_SHA_2_256;
- case SHA384:
- return KeymasterDefs.KM_DIGEST_SHA_2_384;
- case SHA512:
- return KeymasterDefs.KM_DIGEST_SHA_2_512;
- default:
- throw new IllegalArgumentException("Unknown digest: " + digest);
- }
- }
-
- /**
- * @hide
- */
- public static @DigestEnum int fromKeymaster(int digest) {
- switch (digest) {
- case KeymasterDefs.KM_DIGEST_NONE:
- return NONE;
- case KeymasterDefs.KM_DIGEST_MD5:
- return MD5;
- case KeymasterDefs.KM_DIGEST_SHA1:
- return SHA1;
- case KeymasterDefs.KM_DIGEST_SHA_2_224:
- return SHA224;
- case KeymasterDefs.KM_DIGEST_SHA_2_256:
- return SHA256;
- case KeymasterDefs.KM_DIGEST_SHA_2_384:
- return SHA384;
- case KeymasterDefs.KM_DIGEST_SHA_2_512:
- return SHA512;
- default:
- throw new IllegalArgumentException("Unknown digest: " + digest);
- }
- }
-
- /**
- * @hide
- */
- public static int[] allToKeymaster(@DigestEnum int digests) {
- int[] result = getSetFlags(digests);
- for (int i = 0; i < result.length; i++) {
- result[i] = toKeymaster(result[i]);
- }
- return result;
- }
-
- /**
- * @hide
- */
- public static @DigestEnum int allFromKeymaster(Collection<Integer> digests) {
- @DigestEnum int result = 0;
- for (int keymasterDigest : digests) {
- result |= fromKeymaster(keymasterDigest);
- }
- return result;
- }
-
- /**
- * @hide
- */
- public static @DigestEnum Integer fromJCASecretKeyAlgorithm(String algorithm) {
- String algorithmLower = algorithm.toLowerCase(Locale.US);
- if (algorithmLower.startsWith("hmac")) {
- String digestLower = algorithmLower.substring("hmac".length());
- if ("md5".equals(digestLower)) {
- return MD5;
- } else if ("sha1".equals(digestLower)) {
- return SHA1;
- } else if ("sha224".equals(digestLower)) {
- return SHA224;
- } else if ("sha256".equals(digestLower)) {
- return SHA256;
- } else if ("sha384".equals(digestLower)) {
- return SHA384;
- } else if ("sha512".equals(digestLower)) {
- return SHA512;
- } else {
- throw new IllegalArgumentException("Unsupported digest: " + digestLower);
- }
- } else {
- return null;
- }
- }
-
- /**
- * @hide
- */
- public static String toJCASignatureAlgorithmDigest(@DigestEnum int digest) {
- switch (digest) {
- case NONE:
- return "NONE";
- case MD5:
- return "MD5";
- case SHA1:
- return "SHA1";
- case SHA224:
- return "SHA224";
- case SHA256:
- return "SHA256";
- case SHA384:
- return "SHA384";
- case SHA512:
- return "SHA512";
- default:
- throw new IllegalArgumentException("Unknown digest: " + digest);
- }
- }
-
- /**
- * @hide
- */
- public static Integer getOutputSizeBytes(@DigestEnum int digest) {
- switch (digest) {
- case NONE:
- return null;
- case MD5:
- return 128 / 8;
- case SHA1:
- return 160 / 8;
- case SHA224:
- return 224 / 8;
- case SHA256:
- return 256 / 8;
- case SHA384:
- return 384 / 8;
- case SHA512:
- return 512 / 8;
- default:
- throw new IllegalArgumentException("Unknown digest: " + digest);
- }
- }
- }
-
- @Retention(RetentionPolicy.SOURCE)
- @IntDef(flag = true,
- value = {BlockMode.ECB, BlockMode.CBC, BlockMode.CTR, BlockMode.GCM})
- public @interface BlockModeEnum {}
-
- /**
- * Block modes that can be used when encrypting/decrypting using a key.
- */
- public static abstract class BlockMode {
- private BlockMode() {}
-
- /** Electronic Codebook (ECB) block mode. */
- public static final int ECB = 1 << 0;
-
- /** Cipher Block Chaining (CBC) block mode. */
- public static final int CBC = 1 << 1;
-
- /** Counter (CTR) block mode. */
- public static final int CTR = 1 << 2;
-
- /** Galois/Counter Mode (GCM) block mode. */
- public static final int GCM = 1 << 3;
-
- /**
- * Set of block modes compatible with IND-CPA if used correctly.
- *
- * @hide
- */
- public static final @BlockModeEnum int IND_CPA_COMPATIBLE_MODES =
- CBC | CTR | GCM;
-
- /**
- * @hide
- */
- public static int toKeymaster(@BlockModeEnum int mode) {
- switch (mode) {
- case ECB:
- return KeymasterDefs.KM_MODE_ECB;
- case CBC:
- return KeymasterDefs.KM_MODE_CBC;
- case CTR:
- return KeymasterDefs.KM_MODE_CTR;
- case GCM:
- return KeymasterDefs.KM_MODE_GCM;
- default:
- throw new IllegalArgumentException("Unknown block mode: " + mode);
- }
- }
-
- /**
- * @hide
- */
- public static @BlockModeEnum int fromKeymaster(int mode) {
- switch (mode) {
- case KeymasterDefs.KM_MODE_ECB:
- return ECB;
- case KeymasterDefs.KM_MODE_CBC:
- return CBC;
- case KeymasterDefs.KM_MODE_CTR:
- return CTR;
- case KeymasterDefs.KM_MODE_GCM:
- return GCM;
- default:
- throw new IllegalArgumentException("Unknown block mode: " + mode);
- }
- }
-
- /**
- * @hide
- */
- public static int[] allToKeymaster(@BlockModeEnum int modes) {
- int[] result = getSetFlags(modes);
- for (int i = 0; i < result.length; i++) {
- result[i] = toKeymaster(result[i]);
- }
- return result;
- }
-
- /**
- * @hide
- */
- public static @BlockModeEnum int allFromKeymaster(Collection<Integer> modes) {
- @BlockModeEnum int result = 0;
- for (int keymasterMode : modes) {
- result |= fromKeymaster(keymasterMode);
- }
- return result;
- }
-
- /**
- * @hide
- */
- public static String toString(@BlockModeEnum int mode) {
- switch (mode) {
- case ECB:
- return "ECB";
- case CBC:
- return "CBC";
- case CTR:
- return "CTR";
- case GCM:
- return "GCM";
- default:
- throw new IllegalArgumentException("Unknown block mode: " + mode);
- }
- }
-
- /**
- * @hide
- */
- public static String allToString(@BlockModeEnum int modes) {
- StringBuilder result = new StringBuilder("[");
- boolean firstValue = true;
- for (@BlockModeEnum int mode : getSetFlags(modes)) {
- if (firstValue) {
- firstValue = false;
- } else {
- result.append(", ");
- }
- result.append(toString(mode));
- }
- result.append(']');
- return result.toString();
- }
-
- /**
- * @hide
- */
- public static @BlockModeEnum int fromJCAMode(String mode) {
- String modeLower = mode.toLowerCase(Locale.US);
- if ("ecb".equals(modeLower)) {
- return ECB;
- } else if ("cbc".equals(modeLower)) {
- return CBC;
- } else if ("ctr".equals(modeLower)) {
- return CTR;
- } else if ("gcm".equals(modeLower)) {
- return GCM;
- } else {
- throw new IllegalArgumentException("Unknown block mode: " + mode);
- }
- }
- }
-
- @Retention(RetentionPolicy.SOURCE)
- @IntDef(flag = true,
- value = {UserAuthenticator.LOCK_SCREEN})
- public @interface UserAuthenticatorEnum {}
-
- /**
- * User authenticators which can be used to restrict/protect access to keys.
- */
- public static abstract class UserAuthenticator {
- private UserAuthenticator() {}
-
- /** Lock screen. */
- public static final int LOCK_SCREEN = 1 << 0;
-
- /**
- * @hide
- */
- public static int toKeymaster(@UserAuthenticatorEnum int userAuthenticator) {
- switch (userAuthenticator) {
- case LOCK_SCREEN:
- return KeymasterDefs.HW_AUTH_PASSWORD;
- default:
- throw new IllegalArgumentException(
- "Unknown user authenticator: " + userAuthenticator);
- }
- }
-
- /**
- * @hide
- */
- public static @UserAuthenticatorEnum int fromKeymaster(int userAuthenticator) {
- switch (userAuthenticator) {
- case KeymasterDefs.HW_AUTH_PASSWORD:
- return LOCK_SCREEN;
- default:
- throw new IllegalArgumentException(
- "Unknown user authenticator: " + userAuthenticator);
- }
- }
-
- /**
- * @hide
- */
- public static int allToKeymaster(@UserAuthenticatorEnum int userAuthenticators) {
- int result = 0;
- int userAuthenticator = 1;
- while (userAuthenticators != 0) {
- if ((userAuthenticators & 1) != 0) {
- result |= toKeymaster(userAuthenticator);
- }
- userAuthenticators >>>= 1;
- userAuthenticator <<= 1;
- }
- return result;
- }
-
- /**
- * @hide
- */
- public static @UserAuthenticatorEnum int allFromKeymaster(int userAuthenticators) {
- @UserAuthenticatorEnum int result = 0;
- int userAuthenticator = 1;
- while (userAuthenticators != 0) {
- if ((userAuthenticators & 1) != 0) {
- result |= fromKeymaster(userAuthenticator);
- }
- userAuthenticators >>>= 1;
- userAuthenticator <<= 1;
- }
- return result;
- }
-
- /**
- * @hide
- */
- public static String toString(@UserAuthenticatorEnum int userAuthenticator) {
- switch (userAuthenticator) {
- case LOCK_SCREEN:
- return "LOCK_SCREEN";
- default:
- throw new IllegalArgumentException(
- "Unknown user authenticator: " + userAuthenticator);
- }
- }
- }
-
- private static final int[] EMPTY_INT_ARRAY = new int[0];
-
- private static int[] getSetFlags(int flags) {
- if (flags == 0) {
- return EMPTY_INT_ARRAY;
- }
- int result[] = new int[getSetBitCount(flags)];
- int resultOffset = 0;
- int flag = 1;
- while (flags != 0) {
- if ((flags & 1) != 0) {
- result[resultOffset] = flag;
- resultOffset++;
- }
- flags >>>= 1;
- flag <<= 1;
- }
- return result;
- }
-
- private static int getSetBitCount(int value) {
- if (value == 0) {
- return 0;
- }
- int result = 0;
- while (value != 0) {
- if ((value & 1) != 0) {
- result++;
- }
- value >>>= 1;
- }
- return result;
- }
-}
diff --git a/keystore/java/android/security/KeyStoreKeyGeneratorSpi.java b/keystore/java/android/security/KeyStoreKeyGeneratorSpi.java
index a500786..dde3b8f 100644
--- a/keystore/java/android/security/KeyStoreKeyGeneratorSpi.java
+++ b/keystore/java/android/security/KeyStoreKeyGeneratorSpi.java
@@ -37,68 +37,68 @@
public static class AES extends KeyStoreKeyGeneratorSpi {
public AES() {
- super(KeyStoreKeyConstraints.Algorithm.AES, 128);
+ super(KeymasterDefs.KM_ALGORITHM_AES, 128);
}
}
protected static abstract class HmacBase extends KeyStoreKeyGeneratorSpi {
- protected HmacBase(@KeyStoreKeyConstraints.DigestEnum int digest) {
- super(KeyStoreKeyConstraints.Algorithm.HMAC,
- digest,
- KeyStoreKeyConstraints.Digest.getOutputSizeBytes(digest) * 8);
+ protected HmacBase(int keymasterDigest) {
+ super(KeymasterDefs.KM_ALGORITHM_HMAC,
+ keymasterDigest,
+ KeymasterUtils.getDigestOutputSizeBytes(keymasterDigest) * 8);
}
}
public static class HmacSHA1 extends HmacBase {
public HmacSHA1() {
- super(KeyStoreKeyConstraints.Digest.SHA1);
+ super(KeymasterDefs.KM_DIGEST_SHA1);
}
}
public static class HmacSHA224 extends HmacBase {
public HmacSHA224() {
- super(KeyStoreKeyConstraints.Digest.SHA224);
+ super(KeymasterDefs.KM_DIGEST_SHA_2_224);
}
}
public static class HmacSHA256 extends HmacBase {
public HmacSHA256() {
- super(KeyStoreKeyConstraints.Digest.SHA256);
+ super(KeymasterDefs.KM_DIGEST_SHA_2_256);
}
}
public static class HmacSHA384 extends HmacBase {
public HmacSHA384() {
- super(KeyStoreKeyConstraints.Digest.SHA384);
+ super(KeymasterDefs.KM_DIGEST_SHA_2_384);
}
}
public static class HmacSHA512 extends HmacBase {
public HmacSHA512() {
- super(KeyStoreKeyConstraints.Digest.SHA512);
+ super(KeymasterDefs.KM_DIGEST_SHA_2_512);
}
}
private final KeyStore mKeyStore = KeyStore.getInstance();
- private final @KeyStoreKeyConstraints.AlgorithmEnum int mAlgorithm;
- private final @KeyStoreKeyConstraints.DigestEnum Integer mDigest;
+ private final int mKeymasterAlgorithm;
+ private final int mKeymasterDigest;
private final int mDefaultKeySizeBits;
private KeyGeneratorSpec mSpec;
private SecureRandom mRng;
protected KeyStoreKeyGeneratorSpi(
- @KeyStoreKeyConstraints.AlgorithmEnum int algorithm,
+ int keymasterAlgorithm,
int defaultKeySizeBits) {
- this(algorithm, null, defaultKeySizeBits);
+ this(keymasterAlgorithm, -1, defaultKeySizeBits);
}
protected KeyStoreKeyGeneratorSpi(
- @KeyStoreKeyConstraints.AlgorithmEnum int algorithm,
- @KeyStoreKeyConstraints.DigestEnum Integer digest,
+ int keymasterAlgorithm,
+ int keymasterDigest,
int defaultKeySizeBits) {
- mAlgorithm = algorithm;
- mDigest = digest;
+ mKeymasterAlgorithm = keymasterAlgorithm;
+ mKeymasterDigest = keymasterDigest;
mDefaultKeySizeBits = defaultKeySizeBits;
}
@@ -117,58 +117,55 @@
}
KeymasterArguments args = new KeymasterArguments();
- args.addInt(KeymasterDefs.KM_TAG_ALGORITHM,
- KeyStoreKeyConstraints.Algorithm.toKeymaster(mAlgorithm));
- if (mDigest != null) {
- args.addInt(KeymasterDefs.KM_TAG_DIGEST,
- KeyStoreKeyConstraints.Digest.toKeymaster(mDigest));
- Integer digestOutputSizeBytes =
- KeyStoreKeyConstraints.Digest.getOutputSizeBytes(mDigest);
- if (digestOutputSizeBytes != null) {
+ args.addInt(KeymasterDefs.KM_TAG_ALGORITHM, mKeymasterAlgorithm);
+ if (mKeymasterDigest != -1) {
+ args.addInt(KeymasterDefs.KM_TAG_DIGEST, mKeymasterDigest);
+ int digestOutputSizeBytes =
+ KeymasterUtils.getDigestOutputSizeBytes(mKeymasterDigest);
+ if (digestOutputSizeBytes != -1) {
// TODO: Remove MAC length constraint once Keymaster API no longer requires it.
// TODO: Switch to bits instead of bytes, once this is fixed in Keymaster
args.addInt(KeymasterDefs.KM_TAG_MAC_LENGTH, digestOutputSizeBytes);
}
}
- if (mAlgorithm == KeyStoreKeyConstraints.Algorithm.HMAC) {
- if (mDigest == null) {
- throw new IllegalStateException("Digest algorithm must be specified for key"
- + " algorithm " + KeyStoreKeyConstraints.Algorithm.toString(mAlgorithm));
+ if (mKeymasterAlgorithm == KeymasterDefs.KM_ALGORITHM_HMAC) {
+ if (mKeymasterDigest == -1) {
+ throw new IllegalStateException("Digest algorithm must be specified for HMAC key");
}
}
int keySizeBits = (spec.getKeySize() != null) ? spec.getKeySize() : mDefaultKeySizeBits;
args.addInt(KeymasterDefs.KM_TAG_KEY_SIZE, keySizeBits);
- @KeyStoreKeyConstraints.PurposeEnum int purposes = spec.getPurposes();
- @KeyStoreKeyConstraints.BlockModeEnum int blockModes = spec.getBlockModes();
- if (((purposes & KeyStoreKeyConstraints.Purpose.ENCRYPT) != 0)
+ @KeyStoreKeyProperties.PurposeEnum int purposes = spec.getPurposes();
+ int[] keymasterBlockModes = KeymasterUtils.getKeymasterBlockModesFromJcaBlockModes(
+ spec.getBlockModes());
+ if (((purposes & KeyStoreKeyProperties.Purpose.ENCRYPT) != 0)
&& (spec.isRandomizedEncryptionRequired())) {
- @KeyStoreKeyConstraints.BlockModeEnum int incompatibleBlockModes =
- blockModes & ~KeyStoreKeyConstraints.BlockMode.IND_CPA_COMPATIBLE_MODES;
- if (incompatibleBlockModes != 0) {
- throw new IllegalStateException(
- "Randomized encryption (IND-CPA) required but may be violated by block"
- + " mode(s): "
- + KeyStoreKeyConstraints.BlockMode.allToString(incompatibleBlockModes)
- + ". See KeyGeneratorSpec documentation.");
+ for (int keymasterBlockMode : keymasterBlockModes) {
+ if (!KeymasterUtils.isKeymasterBlockModeIndCpaCompatible(keymasterBlockMode)) {
+ throw new IllegalStateException(
+ "Randomized encryption (IND-CPA) required but may be violated by block"
+ + " mode: "
+ + KeymasterUtils.getJcaBlockModeFromKeymasterBlockMode(
+ keymasterBlockMode)
+ + ". See KeyGeneratorSpec documentation.");
+ }
}
}
for (int keymasterPurpose :
- KeyStoreKeyConstraints.Purpose.allToKeymaster(purposes)) {
+ KeyStoreKeyProperties.Purpose.allToKeymaster(purposes)) {
args.addInt(KeymasterDefs.KM_TAG_PURPOSE, keymasterPurpose);
}
- for (int keymasterBlockMode : KeyStoreKeyConstraints.BlockMode.allToKeymaster(blockModes)) {
- args.addInt(KeymasterDefs.KM_TAG_BLOCK_MODE, keymasterBlockMode);
- }
- for (int keymasterPadding :
- KeyStoreKeyConstraints.Padding.allToKeymaster(spec.getPaddings())) {
- args.addInt(KeymasterDefs.KM_TAG_PADDING, keymasterPadding);
- }
+ args.addInts(KeymasterDefs.KM_TAG_BLOCK_MODE, keymasterBlockModes);
+ args.addInts(
+ KeymasterDefs.KM_TAG_PADDING,
+ KeymasterUtils.getKeymasterPaddingsFromJcaEncryptionPaddings(
+ spec.getEncryptionPaddings()));
if (spec.getUserAuthenticators() == 0) {
args.addBoolean(KeymasterDefs.KM_TAG_NO_AUTH_REQUIRED);
} else {
args.addInt(KeymasterDefs.KM_TAG_USER_AUTH_TYPE,
- KeyStoreKeyConstraints.UserAuthenticator.allToKeymaster(
+ KeyStoreKeyProperties.UserAuthenticator.allToKeymaster(
spec.getUserAuthenticators()));
}
if (spec.getUserAuthenticationValidityDurationSeconds() != -1) {
@@ -185,7 +182,7 @@
(spec.getKeyValidityForConsumptionEnd() != null)
? spec.getKeyValidityForConsumptionEnd() : new Date(Long.MAX_VALUE));
- if (((purposes & KeyStoreKeyConstraints.Purpose.ENCRYPT) != 0)
+ if (((purposes & KeyStoreKeyProperties.Purpose.ENCRYPT) != 0)
&& (!spec.isRandomizedEncryptionRequired())) {
// Permit caller-provided IV when encrypting with this key
args.addBoolean(KeymasterDefs.KM_TAG_CALLER_NONCE);
@@ -203,10 +200,11 @@
int errorCode = mKeyStore.generateKey(
keyAliasInKeystore, args, additionalEntropy, flags, new KeyCharacteristics());
if (errorCode != KeyStore.NO_ERROR) {
- throw KeyStore.getCryptoOperationException(errorCode);
+ throw new IllegalStateException(
+ "Keystore operation failed", KeyStore.getKeyStoreException(errorCode));
}
String keyAlgorithmJCA =
- KeyStoreKeyConstraints.Algorithm.toJCASecretKeyAlgorithm(mAlgorithm, mDigest);
+ KeymasterUtils.getJcaSecretKeyAlgorithm(mKeymasterAlgorithm, mKeymasterDigest);
return new KeyStoreSecretKey(keyAliasInKeystore, keyAlgorithmJCA);
}
diff --git a/keystore/java/android/security/KeyStoreKeyProperties.java b/keystore/java/android/security/KeyStoreKeyProperties.java
new file mode 100644
index 0000000..1077af4
--- /dev/null
+++ b/keystore/java/android/security/KeyStoreKeyProperties.java
@@ -0,0 +1,284 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.security;
+
+import android.annotation.IntDef;
+import android.security.keymaster.KeymasterDefs;
+
+import libcore.util.EmptyArray;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.util.Collection;
+
+/**
+ * Properties of {@code AndroidKeyStore} keys.
+ *
+ * @hide
+ */
+public abstract class KeyStoreKeyProperties {
+ private KeyStoreKeyProperties() {}
+
+ @Retention(RetentionPolicy.SOURCE)
+ @IntDef(flag = true,
+ value = {Purpose.ENCRYPT, Purpose.DECRYPT, Purpose.SIGN, Purpose.VERIFY})
+ public @interface PurposeEnum {}
+
+ /**
+ * Purpose of key.
+ */
+ public static abstract class Purpose {
+ private Purpose() {}
+
+ /**
+ * Purpose: encryption.
+ */
+ public static final int ENCRYPT = 1 << 0;
+
+ /**
+ * Purpose: decryption.
+ */
+ public static final int DECRYPT = 1 << 1;
+
+ /**
+ * Purpose: signing.
+ */
+ public static final int SIGN = 1 << 2;
+
+ /**
+ * Purpose: signature verification.
+ */
+ public static final int VERIFY = 1 << 3;
+
+ /**
+ * @hide
+ */
+ public static int toKeymaster(@PurposeEnum int purpose) {
+ switch (purpose) {
+ case ENCRYPT:
+ return KeymasterDefs.KM_PURPOSE_ENCRYPT;
+ case DECRYPT:
+ return KeymasterDefs.KM_PURPOSE_DECRYPT;
+ case SIGN:
+ return KeymasterDefs.KM_PURPOSE_SIGN;
+ case VERIFY:
+ return KeymasterDefs.KM_PURPOSE_VERIFY;
+ default:
+ throw new IllegalArgumentException("Unknown purpose: " + purpose);
+ }
+ }
+
+ /**
+ * @hide
+ */
+ public static @PurposeEnum int fromKeymaster(int purpose) {
+ switch (purpose) {
+ case KeymasterDefs.KM_PURPOSE_ENCRYPT:
+ return ENCRYPT;
+ case KeymasterDefs.KM_PURPOSE_DECRYPT:
+ return DECRYPT;
+ case KeymasterDefs.KM_PURPOSE_SIGN:
+ return SIGN;
+ case KeymasterDefs.KM_PURPOSE_VERIFY:
+ return VERIFY;
+ default:
+ throw new IllegalArgumentException("Unknown purpose: " + purpose);
+ }
+ }
+
+ /**
+ * @hide
+ */
+ public static int[] allToKeymaster(@PurposeEnum int purposes) {
+ int[] result = getSetFlags(purposes);
+ for (int i = 0; i < result.length; i++) {
+ result[i] = toKeymaster(result[i]);
+ }
+ return result;
+ }
+
+ /**
+ * @hide
+ */
+ public static @PurposeEnum int allFromKeymaster(Collection<Integer> purposes) {
+ @PurposeEnum int result = 0;
+ for (int keymasterPurpose : purposes) {
+ result |= fromKeymaster(keymasterPurpose);
+ }
+ return result;
+ }
+ }
+
+ @Retention(RetentionPolicy.SOURCE)
+ @IntDef(flag = true,
+ value = {UserAuthenticator.LOCK_SCREEN})
+ public @interface UserAuthenticatorEnum {}
+
+ /**
+ * User authenticators which can be used to restrict/protect access to keys.
+ */
+ public static abstract class UserAuthenticator {
+ private UserAuthenticator() {}
+
+ /** Lock screen. */
+ public static final int LOCK_SCREEN = 1 << 0;
+
+ /**
+ * @hide
+ */
+ public static int toKeymaster(@UserAuthenticatorEnum int userAuthenticator) {
+ switch (userAuthenticator) {
+ case LOCK_SCREEN:
+ return KeymasterDefs.HW_AUTH_PASSWORD;
+ default:
+ throw new IllegalArgumentException(
+ "Unknown user authenticator: " + userAuthenticator);
+ }
+ }
+
+ /**
+ * @hide
+ */
+ public static @UserAuthenticatorEnum int fromKeymaster(int userAuthenticator) {
+ switch (userAuthenticator) {
+ case KeymasterDefs.HW_AUTH_PASSWORD:
+ return LOCK_SCREEN;
+ default:
+ throw new IllegalArgumentException(
+ "Unknown user authenticator: " + userAuthenticator);
+ }
+ }
+
+ /**
+ * @hide
+ */
+ public static int allToKeymaster(@UserAuthenticatorEnum int userAuthenticators) {
+ int result = 0;
+ int userAuthenticator = 1;
+ while (userAuthenticators != 0) {
+ if ((userAuthenticators & 1) != 0) {
+ result |= toKeymaster(userAuthenticator);
+ }
+ userAuthenticators >>>= 1;
+ userAuthenticator <<= 1;
+ }
+ return result;
+ }
+
+ /**
+ * @hide
+ */
+ public static @UserAuthenticatorEnum int allFromKeymaster(int userAuthenticators) {
+ @UserAuthenticatorEnum int result = 0;
+ int userAuthenticator = 1;
+ while (userAuthenticators != 0) {
+ if ((userAuthenticators & 1) != 0) {
+ result |= fromKeymaster(userAuthenticator);
+ }
+ userAuthenticators >>>= 1;
+ userAuthenticator <<= 1;
+ }
+ return result;
+ }
+
+ /**
+ * @hide
+ */
+ public static String toString(@UserAuthenticatorEnum int userAuthenticator) {
+ switch (userAuthenticator) {
+ case LOCK_SCREEN:
+ return "LOCK_SCREEN";
+ default:
+ throw new IllegalArgumentException(
+ "Unknown user authenticator: " + userAuthenticator);
+ }
+ }
+ }
+
+ @Retention(RetentionPolicy.SOURCE)
+ @IntDef({Origin.GENERATED, Origin.IMPORTED})
+ public @interface OriginEnum {}
+
+ /**
+ * Origin of the key.
+ */
+ public static abstract class Origin {
+ private Origin() {}
+
+ /** Key was generated inside AndroidKeyStore. */
+ public static final int GENERATED = 1 << 0;
+
+ /** Key was imported into AndroidKeyStore. */
+ public static final int IMPORTED = 1 << 1;
+
+ /**
+ * Origin of the key is unknown. This can occur only for keys backed by an old TEE
+ * implementation which does not record origin information.
+ *
+ * @hide
+ */
+ public static final int UNKNOWN = 1 << 2;
+
+ /**
+ * @hide
+ */
+ public static @OriginEnum int fromKeymaster(int origin) {
+ switch (origin) {
+ case KeymasterDefs.KM_ORIGIN_GENERATED:
+ return GENERATED;
+ case KeymasterDefs.KM_ORIGIN_IMPORTED:
+ return IMPORTED;
+ case KeymasterDefs.KM_ORIGIN_UNKNOWN:
+ return UNKNOWN;
+ default:
+ throw new IllegalArgumentException("Unknown origin: " + origin);
+ }
+ }
+ }
+
+ private static int[] getSetFlags(int flags) {
+ if (flags == 0) {
+ return EmptyArray.INT;
+ }
+ int result[] = new int[getSetBitCount(flags)];
+ int resultOffset = 0;
+ int flag = 1;
+ while (flags != 0) {
+ if ((flags & 1) != 0) {
+ result[resultOffset] = flag;
+ resultOffset++;
+ }
+ flags >>>= 1;
+ flag <<= 1;
+ }
+ return result;
+ }
+
+ private static int getSetBitCount(int value) {
+ if (value == 0) {
+ return 0;
+ }
+ int result = 0;
+ while (value != 0) {
+ if ((value & 1) != 0) {
+ result++;
+ }
+ value >>>= 1;
+ }
+ return result;
+ }
+}
diff --git a/keystore/java/android/security/KeyStoreKeySpec.java b/keystore/java/android/security/KeyStoreKeySpec.java
index 27b444e..861ed34 100644
--- a/keystore/java/android/security/KeyStoreKeySpec.java
+++ b/keystore/java/android/security/KeyStoreKeySpec.java
@@ -29,17 +29,17 @@
private final String mKeystoreAlias;
private final int mKeySize;
private final boolean mTeeBacked;
- private final @KeyStoreKeyCharacteristics.OriginEnum int mOrigin;
+ private final @KeyStoreKeyProperties.OriginEnum int mOrigin;
private final Date mKeyValidityStart;
private final Date mKeyValidityForOriginationEnd;
private final Date mKeyValidityForConsumptionEnd;
- private final @KeyStoreKeyConstraints.PurposeEnum int mPurposes;
- private final @KeyStoreKeyConstraints.AlgorithmEnum int mAlgorithm;
- private final @KeyStoreKeyConstraints.PaddingEnum int mPaddings;
- private final @KeyStoreKeyConstraints.DigestEnum int mDigests;
- private final @KeyStoreKeyConstraints.BlockModeEnum int mBlockModes;
- private final @KeyStoreKeyConstraints.UserAuthenticatorEnum int mUserAuthenticators;
- private final @KeyStoreKeyConstraints.UserAuthenticatorEnum int mTeeEnforcedUserAuthenticators;
+ private final @KeyStoreKeyProperties.PurposeEnum int mPurposes;
+ private final String[] mEncryptionPaddings;
+ private final String[] mSignaturePaddings;
+ private final String[] mDigests;
+ private final String[] mBlockModes;
+ private final @KeyStoreKeyProperties.UserAuthenticatorEnum int mUserAuthenticators;
+ private final @KeyStoreKeyProperties.UserAuthenticatorEnum int mTeeEnforcedUserAuthenticators;
private final int mUserAuthenticationValidityDurationSeconds;
@@ -48,18 +48,18 @@
*/
KeyStoreKeySpec(String keystoreKeyAlias,
boolean teeBacked,
- @KeyStoreKeyCharacteristics.OriginEnum int origin,
+ @KeyStoreKeyProperties.OriginEnum int origin,
int keySize,
Date keyValidityStart,
Date keyValidityForOriginationEnd,
Date keyValidityForConsumptionEnd,
- @KeyStoreKeyConstraints.PurposeEnum int purposes,
- @KeyStoreKeyConstraints.AlgorithmEnum int algorithm,
- @KeyStoreKeyConstraints.PaddingEnum int paddings,
- @KeyStoreKeyConstraints.DigestEnum int digests,
- @KeyStoreKeyConstraints.BlockModeEnum int blockModes,
- @KeyStoreKeyConstraints.UserAuthenticatorEnum int userAuthenticators,
- @KeyStoreKeyConstraints.UserAuthenticatorEnum int teeEnforcedUserAuthenticators,
+ @KeyStoreKeyProperties.PurposeEnum int purposes,
+ String[] encryptionPaddings,
+ String[] signaturePaddings,
+ String[] digests,
+ String[] blockModes,
+ @KeyStoreKeyProperties.UserAuthenticatorEnum int userAuthenticators,
+ @KeyStoreKeyProperties.UserAuthenticatorEnum int teeEnforcedUserAuthenticators,
int userAuthenticationValidityDurationSeconds) {
mKeystoreAlias = keystoreKeyAlias;
mTeeBacked = teeBacked;
@@ -69,10 +69,12 @@
mKeyValidityForOriginationEnd = keyValidityForOriginationEnd;
mKeyValidityForConsumptionEnd = keyValidityForConsumptionEnd;
mPurposes = purposes;
- mAlgorithm = algorithm;
- mPaddings = paddings;
- mDigests = digests;
- mBlockModes = blockModes;
+ mEncryptionPaddings =
+ ArrayUtils.cloneIfNotEmpty(ArrayUtils.nullToEmpty(encryptionPaddings));
+ mSignaturePaddings =
+ ArrayUtils.cloneIfNotEmpty(ArrayUtils.nullToEmpty(signaturePaddings));
+ mDigests = ArrayUtils.cloneIfNotEmpty(ArrayUtils.nullToEmpty(digests));
+ mBlockModes = ArrayUtils.cloneIfNotEmpty(ArrayUtils.nullToEmpty(blockModes));
mUserAuthenticators = userAuthenticators;
mTeeEnforcedUserAuthenticators = teeEnforcedUserAuthenticators;
mUserAuthenticationValidityDurationSeconds = userAuthenticationValidityDurationSeconds;
@@ -96,7 +98,7 @@
/**
* Gets the origin of the key.
*/
- public @KeyStoreKeyCharacteristics.OriginEnum int getOrigin() {
+ public @KeyStoreKeyProperties.OriginEnum int getOrigin() {
return mOrigin;
}
@@ -137,36 +139,36 @@
/**
* Gets the set of purposes for which the key can be used.
*/
- public @KeyStoreKeyConstraints.PurposeEnum int getPurposes() {
+ public @KeyStoreKeyProperties.PurposeEnum int getPurposes() {
return mPurposes;
}
/**
- * Gets the algorithm of the key.
- */
- public @KeyStoreKeyConstraints.AlgorithmEnum int getAlgorithm() {
- return mAlgorithm;
- }
-
- /**
* Gets the set of block modes with which the key can be used.
*/
- public @KeyStoreKeyConstraints.BlockModeEnum int getBlockModes() {
- return mBlockModes;
+ public String[] getBlockModes() {
+ return ArrayUtils.cloneIfNotEmpty(mBlockModes);
}
/**
- * Gets the set of padding modes with which the key can be used.
+ * Gets the set of padding modes with which the key can be used when encrypting/decrypting.
*/
- public @KeyStoreKeyConstraints.PaddingEnum int getPaddings() {
- return mPaddings;
+ public String[] getEncryptionPaddings() {
+ return ArrayUtils.cloneIfNotEmpty(mEncryptionPaddings);
+ }
+
+ /**
+ * Gets the set of padding modes with which the key can be used when signing/verifying.
+ */
+ public String[] getSignaturePaddings() {
+ return ArrayUtils.cloneIfNotEmpty(mSignaturePaddings);
}
/**
* Gets the set of digest algorithms with which the key can be used.
*/
- public @KeyStoreKeyConstraints.DigestEnum int getDigests() {
- return mDigests;
+ public String[] getDigests() {
+ return ArrayUtils.cloneIfNotEmpty(mDigests);
}
/**
@@ -175,7 +177,7 @@
*
* @return user authenticators or {@code 0} if the key can be used without user authentication.
*/
- public @KeyStoreKeyConstraints.UserAuthenticatorEnum int getUserAuthenticators() {
+ public @KeyStoreKeyProperties.UserAuthenticatorEnum int getUserAuthenticators() {
return mUserAuthenticators;
}
@@ -184,7 +186,7 @@
* key. This is a subset of the user authentications returned by
* {@link #getUserAuthenticators()}.
*/
- public @KeyStoreKeyConstraints.UserAuthenticatorEnum int getTeeEnforcedUserAuthenticators() {
+ public @KeyStoreKeyProperties.UserAuthenticatorEnum int getTeeEnforcedUserAuthenticators() {
return mTeeEnforcedUserAuthenticators;
}
diff --git a/keystore/java/android/security/KeyStoreParameter.java b/keystore/java/android/security/KeyStoreParameter.java
index fb534b4..9fce177 100644
--- a/keystore/java/android/security/KeyStoreParameter.java
+++ b/keystore/java/android/security/KeyStoreParameter.java
@@ -43,24 +43,26 @@
private final Date mKeyValidityStart;
private final Date mKeyValidityForOriginationEnd;
private final Date mKeyValidityForConsumptionEnd;
- private final @KeyStoreKeyConstraints.PurposeEnum int mPurposes;
- private final @KeyStoreKeyConstraints.PaddingEnum int mPaddings;
- private final @KeyStoreKeyConstraints.DigestEnum Integer mDigests;
- private final @KeyStoreKeyConstraints.BlockModeEnum int mBlockModes;
+ private final @KeyStoreKeyProperties.PurposeEnum int mPurposes;
+ private final String[] mEncryptionPaddings;
+ private final String[] mSignaturePaddings;
+ private final String[] mDigests;
+ private final String[] mBlockModes;
private final boolean mRandomizedEncryptionRequired;
- private final @KeyStoreKeyConstraints.UserAuthenticatorEnum int mUserAuthenticators;
+ private final @KeyStoreKeyProperties.UserAuthenticatorEnum int mUserAuthenticators;
private final int mUserAuthenticationValidityDurationSeconds;
private KeyStoreParameter(int flags,
Date keyValidityStart,
Date keyValidityForOriginationEnd,
Date keyValidityForConsumptionEnd,
- @KeyStoreKeyConstraints.PurposeEnum int purposes,
- @KeyStoreKeyConstraints.PaddingEnum int paddings,
- @KeyStoreKeyConstraints.DigestEnum Integer digests,
- @KeyStoreKeyConstraints.BlockModeEnum int blockModes,
+ @KeyStoreKeyProperties.PurposeEnum int purposes,
+ String[] encryptionPaddings,
+ String[] signaturePaddings,
+ String[] digests,
+ String[] blockModes,
boolean randomizedEncryptionRequired,
- @KeyStoreKeyConstraints.UserAuthenticatorEnum int userAuthenticators,
+ @KeyStoreKeyProperties.UserAuthenticatorEnum int userAuthenticators,
int userAuthenticationValidityDurationSeconds) {
if ((userAuthenticationValidityDurationSeconds < 0)
&& (userAuthenticationValidityDurationSeconds != -1)) {
@@ -73,9 +75,12 @@
mKeyValidityForOriginationEnd = keyValidityForOriginationEnd;
mKeyValidityForConsumptionEnd = keyValidityForConsumptionEnd;
mPurposes = purposes;
- mPaddings = paddings;
- mDigests = digests;
- mBlockModes = blockModes;
+ mEncryptionPaddings =
+ ArrayUtils.cloneIfNotEmpty(ArrayUtils.nullToEmpty(encryptionPaddings));
+ mSignaturePaddings =
+ ArrayUtils.cloneIfNotEmpty(ArrayUtils.nullToEmpty(signaturePaddings));
+ mDigests = ArrayUtils.cloneIfNotEmpty(digests);
+ mBlockModes = ArrayUtils.cloneIfNotEmpty(ArrayUtils.nullToEmpty(blockModes));
mRandomizedEncryptionRequired = randomizedEncryptionRequired;
mUserAuthenticators = userAuthenticators;
mUserAuthenticationValidityDurationSeconds = userAuthenticationValidityDurationSeconds;
@@ -133,37 +138,48 @@
*
* @hide
*/
- public @KeyStoreKeyConstraints.PurposeEnum int getPurposes() {
+ public @KeyStoreKeyProperties.PurposeEnum int getPurposes() {
return mPurposes;
}
/**
- * Gets the set of padding schemes to which the key is restricted.
+ * Gets the set of padding schemes with which the key can be used when encrypting/decrypting.
*
* @hide
*/
- public @KeyStoreKeyConstraints.PaddingEnum int getPaddings() {
- return mPaddings;
+ public String[] getEncryptionPaddings() {
+ return ArrayUtils.cloneIfNotEmpty(mEncryptionPaddings);
}
/**
- * Gets the set of digests to which the key is restricted.
+ * Gets the set of padding schemes with which the key can be used when signing or verifying
+ * signatures.
*
- * @throws IllegalStateException if this restriction has not been specified.
+ * @hide
+ */
+ public String[] getSignaturePaddings() {
+ return ArrayUtils.cloneIfNotEmpty(mSignaturePaddings);
+ }
+
+ /**
+ * Gets the set of digest algorithms with which the key can be used.
+ *
+ * @throws IllegalStateException if this set has not been specified.
*
* @see #isDigestsSpecified()
*
* @hide
*/
- public @KeyStoreKeyConstraints.DigestEnum int getDigests() {
+ public String[] getDigests() {
if (mDigests == null) {
throw new IllegalStateException("Digests not specified");
}
- return mDigests;
+ return ArrayUtils.cloneIfNotEmpty(mDigests);
}
/**
- * Returns {@code true} if digest restrictions have been specified.
+ * Returns {@code true} if the set of digest algorithms with which the key can be used has been
+ * specified.
*
* @see #getDigests()
*
@@ -174,12 +190,12 @@
}
/**
- * Gets the set of block modes to which the key is restricted.
+ * Gets the set of block modes with which the key can be used.
*
* @hide
*/
- public @KeyStoreKeyConstraints.BlockModeEnum int getBlockModes() {
- return mBlockModes;
+ public String[] getBlockModes() {
+ return ArrayUtils.cloneIfNotEmpty(mBlockModes);
}
/**
@@ -205,7 +221,7 @@
*
* @hide
*/
- public @KeyStoreKeyConstraints.UserAuthenticatorEnum int getUserAuthenticators() {
+ public @KeyStoreKeyProperties.UserAuthenticatorEnum int getUserAuthenticators() {
return mUserAuthenticators;
}
@@ -244,12 +260,13 @@
private Date mKeyValidityStart;
private Date mKeyValidityForOriginationEnd;
private Date mKeyValidityForConsumptionEnd;
- private @KeyStoreKeyConstraints.PurposeEnum int mPurposes;
- private @KeyStoreKeyConstraints.PaddingEnum int mPaddings;
- private @KeyStoreKeyConstraints.DigestEnum Integer mDigests;
- private @KeyStoreKeyConstraints.BlockModeEnum int mBlockModes;
+ private @KeyStoreKeyProperties.PurposeEnum int mPurposes;
+ private String[] mEncryptionPaddings;
+ private String[] mSignaturePaddings;
+ private String[] mDigests;
+ private String[] mBlockModes;
private boolean mRandomizedEncryptionRequired = true;
- private @KeyStoreKeyConstraints.UserAuthenticatorEnum int mUserAuthenticators;
+ private @KeyStoreKeyProperties.UserAuthenticatorEnum int mUserAuthenticators;
private int mUserAuthenticationValidityDurationSeconds = -1;
/**
@@ -342,55 +359,70 @@
}
/**
- * Restricts the key to being used only for the provided set of purposes.
+ * Sets the set of purposes for which the key can be used.
*
- * <p>This restriction must be specified. There is no default.
+ * <p>This must be specified for all keys. There is no default.
*
* @hide
*/
- public Builder setPurposes(@KeyStoreKeyConstraints.PurposeEnum int purposes) {
+ public Builder setPurposes(@KeyStoreKeyProperties.PurposeEnum int purposes) {
mPurposes = purposes;
return this;
}
/**
- * Restricts the key to being used only with the provided padding schemes. Attempts to use
- * the key with any other padding will be rejected.
+ * Sets the set of padding schemes with which the key can be used when
+ * encrypting/decrypting. Attempts to use the key with any other padding scheme will be
+ * rejected.
*
- * <p>This restriction must be specified for keys which are used for encryption/decryption.
+ * <p>This must be specified for keys which are used for encryption/decryption.
*
* @hide
*/
- public Builder setPaddings(@KeyStoreKeyConstraints.PaddingEnum int paddings) {
- mPaddings = paddings;
+ public Builder setEncryptionPaddings(String... paddings) {
+ mEncryptionPaddings = ArrayUtils.cloneIfNotEmpty(paddings);
return this;
}
/**
- * Restricts the key to being used only with the provided digests when generating signatures
- * or HMACs. Attempts to use the key with any other digest will be rejected.
+ * Sets the set of padding schemes with which the key can be used when
+ * signing/verifying. Attempts to use the key with any other padding scheme will be
+ * rejected.
*
- * <p>For HMAC keys, the default is to restrict to the digest specified in
- * {@link Key#getAlgorithm()}. For asymmetric signing keys this constraint must be specified
- * because there is no default.
+ * <p>This must be specified for RSA keys which are used for signing/verification.
*
* @hide
*/
- public Builder setDigests(@KeyStoreKeyConstraints.DigestEnum int digests) {
- mDigests = digests;
+ public Builder setSignaturePaddings(String... paddings) {
+ mSignaturePaddings = ArrayUtils.cloneIfNotEmpty(paddings);
+ return this;
+ }
+
+
+ /**
+ * Sets the set of digests with which the key can be used when signing/verifying or
+ * generating MACs. Attempts to use the key with any other digest will be rejected.
+ *
+ * <p>For HMAC keys, the default is the digest specified in {@link Key#getAlgorithm()}. For
+ * asymmetric signing keys this constraint must be specified.
+ *
+ * @hide
+ */
+ public Builder setDigests(String... digests) {
+ mDigests = ArrayUtils.cloneIfNotEmpty(digests);
return this;
}
/**
- * Restricts the key to being used only with the provided block modes. Attempts to use the
- * key with any other block modes will be rejected.
+ * Sets the set of block modes with which the key can be used when encrypting/decrypting.
+ * Attempts to use the key with any other block modes will be rejected.
*
- * <p>This restriction must be specified for symmetric encryption/decryption keys.
+ * <p>This must be specified for encryption/decryption keys.
*
* @hide
*/
- public Builder setBlockModes(@KeyStoreKeyConstraints.BlockModeEnum int blockModes) {
- mBlockModes = blockModes;
+ public Builder setBlockModes(String... blockModes) {
+ mBlockModes = ArrayUtils.cloneIfNotEmpty(blockModes);
return this;
}
@@ -449,7 +481,7 @@
* @hide
*/
public Builder setUserAuthenticators(
- @KeyStoreKeyConstraints.UserAuthenticatorEnum int userAuthenticators) {
+ @KeyStoreKeyProperties.UserAuthenticatorEnum int userAuthenticators) {
mUserAuthenticators = userAuthenticators;
return this;
}
@@ -484,7 +516,8 @@
mKeyValidityForOriginationEnd,
mKeyValidityForConsumptionEnd,
mPurposes,
- mPaddings,
+ mEncryptionPaddings,
+ mSignaturePaddings,
mDigests,
mBlockModes,
mRandomizedEncryptionRequired,
diff --git a/keystore/java/android/security/KeyStoreSecretKeyFactorySpi.java b/keystore/java/android/security/KeyStoreSecretKeyFactorySpi.java
index 99a8168..33073a4 100644
--- a/keystore/java/android/security/KeyStoreSecretKeyFactorySpi.java
+++ b/keystore/java/android/security/KeyStoreSecretKeyFactorySpi.java
@@ -19,10 +19,14 @@
import android.security.keymaster.KeyCharacteristics;
import android.security.keymaster.KeymasterDefs;
+import libcore.util.EmptyArray;
+
import java.security.InvalidKeyException;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.KeySpec;
+import java.util.ArrayList;
import java.util.Date;
+import java.util.List;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactorySpi;
@@ -71,84 +75,90 @@
}
boolean teeBacked;
- @KeyStoreKeyCharacteristics.OriginEnum int origin;
+ @KeyStoreKeyProperties.OriginEnum int origin;
int keySize;
- @KeyStoreKeyConstraints.PurposeEnum int purposes;
- @KeyStoreKeyConstraints.AlgorithmEnum int algorithm;
- @KeyStoreKeyConstraints.PaddingEnum int paddings;
- @KeyStoreKeyConstraints.DigestEnum int digests;
- @KeyStoreKeyConstraints.BlockModeEnum int blockModes;
- @KeyStoreKeyConstraints.UserAuthenticatorEnum int userAuthenticators;
- @KeyStoreKeyConstraints.UserAuthenticatorEnum int teeEnforcedUserAuthenticators;
+ @KeyStoreKeyProperties.PurposeEnum int purposes;
+ String[] encryptionPaddings;
+ String[] digests;
+ String[] blockModes;
+ @KeyStoreKeyProperties.UserAuthenticatorEnum int userAuthenticators;
+ @KeyStoreKeyProperties.UserAuthenticatorEnum int teeEnforcedUserAuthenticators;
try {
if (keyCharacteristics.hwEnforced.containsTag(KeymasterDefs.KM_TAG_ORIGIN)) {
teeBacked = true;
- origin = KeyStoreKeyCharacteristics.Origin.fromKeymaster(
+ origin = KeyStoreKeyProperties.Origin.fromKeymaster(
keyCharacteristics.hwEnforced.getInt(KeymasterDefs.KM_TAG_ORIGIN, -1));
} else if (keyCharacteristics.swEnforced.containsTag(KeymasterDefs.KM_TAG_ORIGIN)) {
teeBacked = false;
- origin = KeyStoreKeyCharacteristics.Origin.fromKeymaster(
+ origin = KeyStoreKeyProperties.Origin.fromKeymaster(
keyCharacteristics.swEnforced.getInt(KeymasterDefs.KM_TAG_ORIGIN, -1));
} else {
throw new InvalidKeySpecException("Key origin not available");
}
- Integer keySizeInteger =
- KeymasterUtils.getInt(keyCharacteristics, KeymasterDefs.KM_TAG_KEY_SIZE);
+ Integer keySizeInteger = keyCharacteristics.getInteger(KeymasterDefs.KM_TAG_KEY_SIZE);
if (keySizeInteger == null) {
throw new InvalidKeySpecException("Key size not available");
}
keySize = keySizeInteger;
- purposes = KeyStoreKeyConstraints.Purpose.allFromKeymaster(
- KeymasterUtils.getInts(keyCharacteristics, KeymasterDefs.KM_TAG_PURPOSE));
- Integer alg = KeymasterUtils.getInt(keyCharacteristics, KeymasterDefs.KM_TAG_ALGORITHM);
- if (alg == null) {
- throw new InvalidKeySpecException("Key algorithm not available");
- }
- algorithm = KeyStoreKeyConstraints.Algorithm.fromKeymaster(alg);
- paddings = KeyStoreKeyConstraints.Padding.allFromKeymaster(
- KeymasterUtils.getInts(keyCharacteristics, KeymasterDefs.KM_TAG_PADDING));
- digests = KeyStoreKeyConstraints.Digest.allFromKeymaster(
- KeymasterUtils.getInts(keyCharacteristics, KeymasterDefs.KM_TAG_DIGEST));
- blockModes = KeyStoreKeyConstraints.BlockMode.allFromKeymaster(
- KeymasterUtils.getInts(keyCharacteristics, KeymasterDefs.KM_TAG_BLOCK_MODE));
+ purposes = KeyStoreKeyProperties.Purpose.allFromKeymaster(
+ keyCharacteristics.getInts(KeymasterDefs.KM_TAG_PURPOSE));
- @KeyStoreKeyConstraints.UserAuthenticatorEnum
+ List<String> encryptionPaddingsList = new ArrayList<String>();
+ for (int keymasterPadding : keyCharacteristics.getInts(KeymasterDefs.KM_TAG_PADDING)) {
+ String jcaPadding;
+ try {
+ jcaPadding = KeymasterUtils.getJcaEncryptionPaddingFromKeymasterPadding(
+ keymasterPadding);
+ } catch (IllegalArgumentException e) {
+ throw new InvalidKeySpecException(
+ "Unsupported encryption padding: " + keymasterPadding);
+ }
+ encryptionPaddingsList.add(jcaPadding);
+ }
+ encryptionPaddings =
+ encryptionPaddingsList.toArray(new String[encryptionPaddingsList.size()]);
+
+ digests = KeymasterUtils.getJcaDigestAlgorithmsFromKeymasterDigests(
+ keyCharacteristics.getInts(KeymasterDefs.KM_TAG_DIGEST));
+ blockModes = KeymasterUtils.getJcaBlockModesFromKeymasterBlockModes(
+ keyCharacteristics.getInts(KeymasterDefs.KM_TAG_BLOCK_MODE));
+
+ @KeyStoreKeyProperties.UserAuthenticatorEnum
int swEnforcedKeymasterUserAuthenticators =
keyCharacteristics.swEnforced.getInt(KeymasterDefs.KM_TAG_USER_AUTH_TYPE, 0);
- @KeyStoreKeyConstraints.UserAuthenticatorEnum
+ @KeyStoreKeyProperties.UserAuthenticatorEnum
int hwEnforcedKeymasterUserAuthenticators =
keyCharacteristics.hwEnforced.getInt(KeymasterDefs.KM_TAG_USER_AUTH_TYPE, 0);
- @KeyStoreKeyConstraints.UserAuthenticatorEnum
+ @KeyStoreKeyProperties.UserAuthenticatorEnum
int keymasterUserAuthenticators =
swEnforcedKeymasterUserAuthenticators | hwEnforcedKeymasterUserAuthenticators;
- userAuthenticators = KeyStoreKeyConstraints.UserAuthenticator.allFromKeymaster(
+ userAuthenticators = KeyStoreKeyProperties.UserAuthenticator.allFromKeymaster(
keymasterUserAuthenticators);
teeEnforcedUserAuthenticators =
- KeyStoreKeyConstraints.UserAuthenticator.allFromKeymaster(
+ KeyStoreKeyProperties.UserAuthenticator.allFromKeymaster(
hwEnforcedKeymasterUserAuthenticators);
} catch (IllegalArgumentException e) {
throw new InvalidKeySpecException("Unsupported key characteristic", e);
}
- Date keyValidityStart =
- KeymasterUtils.getDate(keyCharacteristics, KeymasterDefs.KM_TAG_ACTIVE_DATETIME);
+ Date keyValidityStart = keyCharacteristics.getDate(KeymasterDefs.KM_TAG_ACTIVE_DATETIME);
if ((keyValidityStart != null) && (keyValidityStart.getTime() <= 0)) {
keyValidityStart = null;
}
- Date keyValidityForOriginationEnd = KeymasterUtils.getDate(keyCharacteristics,
- KeymasterDefs.KM_TAG_ORIGINATION_EXPIRE_DATETIME);
+ Date keyValidityForOriginationEnd =
+ keyCharacteristics.getDate(KeymasterDefs.KM_TAG_ORIGINATION_EXPIRE_DATETIME);
if ((keyValidityForOriginationEnd != null)
&& (keyValidityForOriginationEnd.getTime() == Long.MAX_VALUE)) {
keyValidityForOriginationEnd = null;
}
- Date keyValidityForConsumptionEnd = KeymasterUtils.getDate(keyCharacteristics,
- KeymasterDefs.KM_TAG_USAGE_EXPIRE_DATETIME);
+ Date keyValidityForConsumptionEnd =
+ keyCharacteristics.getDate(KeymasterDefs.KM_TAG_USAGE_EXPIRE_DATETIME);
if ((keyValidityForConsumptionEnd != null)
&& (keyValidityForConsumptionEnd.getTime() == Long.MAX_VALUE)) {
keyValidityForConsumptionEnd = null;
}
- Integer userAuthenticationValidityDurationSeconds =
- KeymasterUtils.getInt(keyCharacteristics, KeymasterDefs.KM_TAG_AUTH_TIMEOUT);
+ int userAuthenticationValidityDurationSeconds =
+ keyCharacteristics.getInt(KeymasterDefs.KM_TAG_AUTH_TIMEOUT, -1);
return new KeyStoreKeySpec(entryAlias,
teeBacked,
@@ -158,14 +168,13 @@
keyValidityForOriginationEnd,
keyValidityForConsumptionEnd,
purposes,
- algorithm,
- paddings,
+ encryptionPaddings,
+ EmptyArray.STRING, // no signature paddings -- this is symmetric crypto
digests,
blockModes,
userAuthenticators,
teeEnforcedUserAuthenticators,
- ((userAuthenticationValidityDurationSeconds != null)
- ? userAuthenticationValidityDurationSeconds : -1));
+ userAuthenticationValidityDurationSeconds);
}
@Override
diff --git a/keystore/java/android/security/KeymasterUtils.java b/keystore/java/android/security/KeymasterUtils.java
index 3143d4d..67f75c2 100644
--- a/keystore/java/android/security/KeymasterUtils.java
+++ b/keystore/java/android/security/KeymasterUtils.java
@@ -16,48 +16,327 @@
package android.security;
-import android.security.keymaster.KeyCharacteristics;
+import android.security.keymaster.KeymasterDefs;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
+import libcore.util.EmptyArray;
+
+import java.util.Collection;
+import java.util.Locale;
/**
* @hide
*/
public abstract class KeymasterUtils {
+
private KeymasterUtils() {}
- public static Integer getInt(KeyCharacteristics keyCharacteristics, int tag) {
- if (keyCharacteristics.hwEnforced.containsTag(tag)) {
- return keyCharacteristics.hwEnforced.getInt(tag, -1);
- } else if (keyCharacteristics.swEnforced.containsTag(tag)) {
- return keyCharacteristics.swEnforced.getInt(tag, -1);
+ public static int getKeymasterAlgorithmFromJcaSecretKeyAlgorithm(String jcaKeyAlgorithm) {
+ if ("AES".equalsIgnoreCase(jcaKeyAlgorithm)) {
+ return KeymasterDefs.KM_ALGORITHM_AES;
+ } else if (jcaKeyAlgorithm.toUpperCase(Locale.US).startsWith("HMAC")) {
+ return KeymasterDefs.KM_ALGORITHM_HMAC;
} else {
- return null;
+ throw new IllegalArgumentException(
+ "Unsupported secret key algorithm: " + jcaKeyAlgorithm);
}
}
- public static List<Integer> getInts(KeyCharacteristics keyCharacteristics, int tag) {
- List<Integer> result = new ArrayList<Integer>();
- result.addAll(keyCharacteristics.hwEnforced.getInts(tag));
- result.addAll(keyCharacteristics.swEnforced.getInts(tag));
- return result;
+ public static String getJcaSecretKeyAlgorithm(int keymasterAlgorithm, int keymasterDigest) {
+ switch (keymasterAlgorithm) {
+ case KeymasterDefs.KM_ALGORITHM_AES:
+ if (keymasterDigest != -1) {
+ throw new IllegalArgumentException(
+ "Digest not supported for AES key: " + keymasterDigest);
+ }
+ return "AES";
+ case KeymasterDefs.KM_ALGORITHM_HMAC:
+ switch (keymasterDigest) {
+ case KeymasterDefs.KM_DIGEST_SHA1:
+ return "HmacSHA1";
+ case KeymasterDefs.KM_DIGEST_SHA_2_224:
+ return "HmacSHA224";
+ case KeymasterDefs.KM_DIGEST_SHA_2_256:
+ return "HmacSHA256";
+ case KeymasterDefs.KM_DIGEST_SHA_2_384:
+ return "HmacSHA384";
+ case KeymasterDefs.KM_DIGEST_SHA_2_512:
+ return "HmacSHA512";
+ default:
+ throw new IllegalArgumentException(
+ "Unsupported HMAC digest: " + keymasterDigest);
+ }
+ default:
+ throw new IllegalArgumentException("Unsupported algorithm: " + keymasterAlgorithm);
+ }
}
- public static Date getDate(KeyCharacteristics keyCharacteristics, int tag) {
- Date result = keyCharacteristics.hwEnforced.getDate(tag, null);
- if (result == null) {
- result = keyCharacteristics.swEnforced.getDate(tag, null);
+ public static String getJcaKeyPairAlgorithmFromKeymasterAlgorithm(int keymasterAlgorithm) {
+ switch (keymasterAlgorithm) {
+ case KeymasterDefs.KM_ALGORITHM_RSA:
+ return "RSA";
+ case KeymasterDefs.KM_ALGORITHM_EC:
+ return "EC";
+ default:
+ throw new IllegalArgumentException("Unsupported algorithm: " + keymasterAlgorithm);
+ }
+ }
+
+ public static int getKeymasterDigestfromJcaSecretKeyAlgorithm(String jcaKeyAlgorithm) {
+ String algorithmUpper = jcaKeyAlgorithm.toUpperCase(Locale.US);
+ if (algorithmUpper.startsWith("HMAC")) {
+ String digestUpper = algorithmUpper.substring("HMAC".length());
+ switch (digestUpper) {
+ case "MD5":
+ return KeymasterDefs.KM_DIGEST_MD5;
+ case "SHA1":
+ return KeymasterDefs.KM_DIGEST_SHA1;
+ case "SHA224":
+ return KeymasterDefs.KM_DIGEST_SHA_2_224;
+ case "SHA256":
+ return KeymasterDefs.KM_DIGEST_SHA_2_256;
+ case "SHA384":
+ return KeymasterDefs.KM_DIGEST_SHA_2_384;
+ case "SHA512":
+ return KeymasterDefs.KM_DIGEST_SHA_2_512;
+ default:
+ throw new IllegalArgumentException("Unsupported HMAC digest: " + digestUpper);
+ }
+ } else {
+ return -1;
+ }
+ }
+
+ public static int getKeymasterDigestFromJcaDigestAlgorithm(String jcaDigestAlgorithm) {
+ if (jcaDigestAlgorithm.equalsIgnoreCase("SHA-1")) {
+ return KeymasterDefs.KM_DIGEST_SHA1;
+ } else if (jcaDigestAlgorithm.equalsIgnoreCase("SHA-224")) {
+ return KeymasterDefs.KM_DIGEST_SHA_2_224;
+ } else if (jcaDigestAlgorithm.equalsIgnoreCase("SHA-256")) {
+ return KeymasterDefs.KM_DIGEST_SHA_2_256;
+ } else if (jcaDigestAlgorithm.equalsIgnoreCase("SHA-384")) {
+ return KeymasterDefs.KM_DIGEST_SHA_2_384;
+ } else if (jcaDigestAlgorithm.equalsIgnoreCase("SHA-512")) {
+ return KeymasterDefs.KM_DIGEST_SHA_2_512;
+ } else if (jcaDigestAlgorithm.equalsIgnoreCase("NONE")) {
+ return KeymasterDefs.KM_DIGEST_NONE;
+ } else if (jcaDigestAlgorithm.equalsIgnoreCase("MD5")) {
+ return KeymasterDefs.KM_DIGEST_MD5;
+ } else {
+ throw new IllegalArgumentException(
+ "Unsupported digest algorithm: " + jcaDigestAlgorithm);
+ }
+ }
+
+ public static String getJcaDigestAlgorithmFromKeymasterDigest(int keymasterDigest) {
+ switch (keymasterDigest) {
+ case KeymasterDefs.KM_DIGEST_NONE:
+ return "NONE";
+ case KeymasterDefs.KM_DIGEST_MD5:
+ return "MD5";
+ case KeymasterDefs.KM_DIGEST_SHA1:
+ return "SHA-1";
+ case KeymasterDefs.KM_DIGEST_SHA_2_224:
+ return "SHA-224";
+ case KeymasterDefs.KM_DIGEST_SHA_2_256:
+ return "SHA-256";
+ case KeymasterDefs.KM_DIGEST_SHA_2_384:
+ return "SHA-384";
+ case KeymasterDefs.KM_DIGEST_SHA_2_512:
+ return "SHA-512";
+ default:
+ throw new IllegalArgumentException(
+ "Unsupported digest algorithm: " + keymasterDigest);
+ }
+ }
+
+ public static String[] getJcaDigestAlgorithmsFromKeymasterDigests(
+ Collection<Integer> keymasterDigests) {
+ if (keymasterDigests.isEmpty()) {
+ return EmptyArray.STRING;
+ }
+ String[] result = new String[keymasterDigests.size()];
+ int offset = 0;
+ for (int keymasterDigest : keymasterDigests) {
+ result[offset] = getJcaDigestAlgorithmFromKeymasterDigest(keymasterDigest);
+ offset++;
}
return result;
}
- public static boolean getBoolean(KeyCharacteristics keyCharacteristics, int tag) {
- if (keyCharacteristics.hwEnforced.containsTag(tag)) {
- return keyCharacteristics.hwEnforced.getBoolean(tag, false);
- } else {
- return keyCharacteristics.swEnforced.getBoolean(tag, false);
+ public static int[] getKeymasterDigestsFromJcaDigestAlgorithms(String[] jcaDigestAlgorithms) {
+ if ((jcaDigestAlgorithms == null) || (jcaDigestAlgorithms.length == 0)) {
+ return EmptyArray.INT;
}
+ int[] result = new int[jcaDigestAlgorithms.length];
+ int offset = 0;
+ for (String jcaDigestAlgorithm : jcaDigestAlgorithms) {
+ result[offset] = getKeymasterDigestFromJcaDigestAlgorithm(jcaDigestAlgorithm);
+ offset++;
+ }
+ return result;
+ }
+
+ public static int getDigestOutputSizeBytes(int keymasterDigest) {
+ switch (keymasterDigest) {
+ case KeymasterDefs.KM_DIGEST_NONE:
+ return -1;
+ case KeymasterDefs.KM_DIGEST_MD5:
+ return 128 / 8;
+ case KeymasterDefs.KM_DIGEST_SHA1:
+ return 160 / 8;
+ case KeymasterDefs.KM_DIGEST_SHA_2_224:
+ return 224 / 8;
+ case KeymasterDefs.KM_DIGEST_SHA_2_256:
+ return 256 / 8;
+ case KeymasterDefs.KM_DIGEST_SHA_2_384:
+ return 384 / 8;
+ case KeymasterDefs.KM_DIGEST_SHA_2_512:
+ return 512 / 8;
+ default:
+ throw new IllegalArgumentException("Unknown digest: " + keymasterDigest);
+ }
+ }
+
+ public static int getKeymasterBlockModeFromJcaBlockMode(String jcaBlockMode) {
+ if ("ECB".equalsIgnoreCase(jcaBlockMode)) {
+ return KeymasterDefs.KM_MODE_ECB;
+ } else if ("CBC".equalsIgnoreCase(jcaBlockMode)) {
+ return KeymasterDefs.KM_MODE_CBC;
+ } else if ("CTR".equalsIgnoreCase(jcaBlockMode)) {
+ return KeymasterDefs.KM_MODE_CTR;
+ } else if ("GCM".equalsIgnoreCase(jcaBlockMode)) {
+ return KeymasterDefs.KM_MODE_GCM;
+ } else {
+ throw new IllegalArgumentException("Unsupported block mode: " + jcaBlockMode);
+ }
+ }
+
+ public static String getJcaBlockModeFromKeymasterBlockMode(int keymasterBlockMode) {
+ switch (keymasterBlockMode) {
+ case KeymasterDefs.KM_MODE_ECB:
+ return "ECB";
+ case KeymasterDefs.KM_MODE_CBC:
+ return "CBC";
+ case KeymasterDefs.KM_MODE_CTR:
+ return "CTR";
+ case KeymasterDefs.KM_MODE_GCM:
+ return "GCM";
+ default:
+ throw new IllegalArgumentException("Unsupported block mode: " + keymasterBlockMode);
+ }
+ }
+
+ public static String[] getJcaBlockModesFromKeymasterBlockModes(
+ Collection<Integer> keymasterBlockModes) {
+ if ((keymasterBlockModes == null) || (keymasterBlockModes.isEmpty())) {
+ return EmptyArray.STRING;
+ }
+ String[] result = new String[keymasterBlockModes.size()];
+ int offset = 0;
+ for (int keymasterBlockMode : keymasterBlockModes) {
+ result[offset] = getJcaBlockModeFromKeymasterBlockMode(keymasterBlockMode);
+ offset++;
+ }
+ return result;
+ }
+
+ public static int[] getKeymasterBlockModesFromJcaBlockModes(String[] jcaBlockModes) {
+ if ((jcaBlockModes == null) || (jcaBlockModes.length == 0)) {
+ return EmptyArray.INT;
+ }
+ int[] result = new int[jcaBlockModes.length];
+ for (int i = 0; i < jcaBlockModes.length; i++) {
+ result[i] = getKeymasterBlockModeFromJcaBlockMode(jcaBlockModes[i]);
+ }
+ return result;
+ }
+
+ public static boolean isKeymasterBlockModeIndCpaCompatible(int keymasterBlockMode) {
+ switch (keymasterBlockMode) {
+ case KeymasterDefs.KM_MODE_ECB:
+ return false;
+ case KeymasterDefs.KM_MODE_CBC:
+ case KeymasterDefs.KM_MODE_CTR:
+ case KeymasterDefs.KM_MODE_GCM:
+ return true;
+ default:
+ throw new IllegalArgumentException("Unsupported block mode: " + keymasterBlockMode);
+ }
+ }
+
+ public static int getKeymasterPaddingFromJcaEncryptionPadding(String jcaPadding) {
+ if ("NoPadding".equalsIgnoreCase(jcaPadding)) {
+ return KeymasterDefs.KM_PAD_NONE;
+ } else if ("PKCS7Padding".equalsIgnoreCase(jcaPadding)) {
+ return KeymasterDefs.KM_PAD_PKCS7;
+ } else if ("PKCS1Padding".equalsIgnoreCase(jcaPadding)) {
+ return KeymasterDefs.KM_PAD_RSA_PKCS1_1_5_ENCRYPT;
+ } else if ("OEAPPadding".equalsIgnoreCase(jcaPadding)) {
+ return KeymasterDefs.KM_PAD_RSA_OAEP;
+ } else {
+ throw new IllegalArgumentException(
+ "Unsupported encryption padding scheme: " + jcaPadding);
+ }
+ }
+
+ public static String getJcaEncryptionPaddingFromKeymasterPadding(int keymasterPadding) {
+ switch (keymasterPadding) {
+ case KeymasterDefs.KM_PAD_NONE:
+ return "NoPadding";
+ case KeymasterDefs.KM_PAD_PKCS7:
+ return "PKCS7Padding";
+ case KeymasterDefs.KM_PAD_RSA_PKCS1_1_5_ENCRYPT:
+ return "PKCS1Padding";
+ case KeymasterDefs.KM_PAD_RSA_OAEP:
+ return "OEAPPadding";
+ default:
+ throw new IllegalArgumentException(
+ "Unsupported encryption padding: " + keymasterPadding);
+ }
+ }
+
+ public static int getKeymasterPaddingFromJcaSignaturePadding(String jcaPadding) {
+ if ("PKCS#1".equalsIgnoreCase(jcaPadding)) {
+ return KeymasterDefs.KM_PAD_RSA_PKCS1_1_5_SIGN;
+ } if ("PSS".equalsIgnoreCase(jcaPadding)) {
+ return KeymasterDefs.KM_PAD_RSA_PSS;
+ } else {
+ throw new IllegalArgumentException(
+ "Unsupported signature padding scheme: " + jcaPadding);
+ }
+ }
+
+ public static String getJcaSignaturePaddingFromKeymasterPadding(int keymasterPadding) {
+ switch (keymasterPadding) {
+ case KeymasterDefs.KM_PAD_RSA_PKCS1_1_5_SIGN:
+ return "PKCS#1";
+ case KeymasterDefs.KM_PAD_RSA_PSS:
+ return "PSS";
+ default:
+ throw new IllegalArgumentException(
+ "Unsupported signature padding: " + keymasterPadding);
+ }
+ }
+
+ public static int[] getKeymasterPaddingsFromJcaEncryptionPaddings(String[] jcaPaddings) {
+ if ((jcaPaddings == null) || (jcaPaddings.length == 0)) {
+ return EmptyArray.INT;
+ }
+ int[] result = new int[jcaPaddings.length];
+ for (int i = 0; i < jcaPaddings.length; i++) {
+ result[i] = getKeymasterPaddingFromJcaEncryptionPadding(jcaPaddings[i]);
+ }
+ return result;
+ }
+
+ public static int[] getKeymasterPaddingsFromJcaSignaturePaddings(String[] jcaPaddings) {
+ if ((jcaPaddings == null) || (jcaPaddings.length == 0)) {
+ return EmptyArray.INT;
+ }
+ int[] result = new int[jcaPaddings.length];
+ for (int i = 0; i < jcaPaddings.length; i++) {
+ result[i] = getKeymasterPaddingFromJcaSignaturePadding(jcaPaddings[i]);
+ }
+ return result;
}
}
diff --git a/keystore/java/android/security/UserNotAuthenticatedException.java b/keystore/java/android/security/UserNotAuthenticatedException.java
index e6342ef..d0410b8 100644
--- a/keystore/java/android/security/UserNotAuthenticatedException.java
+++ b/keystore/java/android/security/UserNotAuthenticatedException.java
@@ -16,13 +16,15 @@
package android.security;
+import java.security.InvalidKeyException;
+
/**
* Indicates that a cryptographic operation could not be performed because the user has not been
* authenticated recently enough.
*
* @hide
*/
-public class UserNotAuthenticatedException extends CryptoOperationException {
+public class UserNotAuthenticatedException extends InvalidKeyException {
/**
* Constructs a new {@code UserNotAuthenticatedException} without detail message and cause.
diff --git a/keystore/tests/src/android/security/AndroidKeyPairGeneratorTest.java b/keystore/tests/src/android/security/AndroidKeyPairGeneratorTest.java
index 95d14b7..9c2f358 100644
--- a/keystore/tests/src/android/security/AndroidKeyPairGeneratorTest.java
+++ b/keystore/tests/src/android/security/AndroidKeyPairGeneratorTest.java
@@ -73,7 +73,7 @@
}
private void setupPassword() {
- assertTrue(mAndroidKeyStore.password("1111"));
+ assertTrue(mAndroidKeyStore.onUserPasswordChanged("1111"));
assertTrue(mAndroidKeyStore.isUnlocked());
String[] aliases = mAndroidKeyStore.saw("");
@@ -288,7 +288,7 @@
} catch (IllegalStateException expected) {
}
- assertTrue(mAndroidKeyStore.password("1111"));
+ assertTrue(mAndroidKeyStore.onUserPasswordChanged("1111"));
assertTrue(mAndroidKeyStore.isUnlocked());
final KeyPair pair2 = mGenerator.generateKeyPair();
diff --git a/keystore/tests/src/android/security/AndroidKeyStoreTest.java b/keystore/tests/src/android/security/AndroidKeyStoreTest.java
index 7a88dee..4b2b9b5 100644
--- a/keystore/tests/src/android/security/AndroidKeyStoreTest.java
+++ b/keystore/tests/src/android/security/AndroidKeyStoreTest.java
@@ -18,7 +18,7 @@
import com.android.org.bouncycastle.x509.X509V3CertificateGenerator;
-import com.android.org.conscrypt.NativeCrypto;
+import com.android.org.conscrypt.NativeConstants;
import com.android.org.conscrypt.OpenSSLEngine;
import android.test.AndroidTestCase;
@@ -736,7 +736,7 @@
}
private void setupPassword() {
- assertTrue(mAndroidKeyStore.password("1111"));
+ assertTrue(mAndroidKeyStore.onUserPasswordChanged("1111"));
assertTrue(mAndroidKeyStore.isUnlocked());
assertEquals(0, mAndroidKeyStore.saw("").length);
@@ -768,7 +768,7 @@
assertAliases(new String[] {});
assertTrue(mAndroidKeyStore.generate(Credentials.USER_PRIVATE_KEY + TEST_ALIAS_1,
- KeyStore.UID_SELF, NativeCrypto.EVP_PKEY_RSA, 1024, KeyStore.FLAG_ENCRYPTED,
+ KeyStore.UID_SELF, NativeConstants.EVP_PKEY_RSA, 1024, KeyStore.FLAG_ENCRYPTED,
null));
assertAliases(new String[] { TEST_ALIAS_1 });
@@ -797,7 +797,7 @@
assertAliases(new String[] {});
assertTrue(mAndroidKeyStore.generate(Credentials.USER_PRIVATE_KEY + TEST_ALIAS_1,
- KeyStore.UID_SELF, NativeCrypto.EVP_PKEY_RSA, 1024, KeyStore.FLAG_ENCRYPTED,
+ KeyStore.UID_SELF, NativeConstants.EVP_PKEY_RSA, 1024, KeyStore.FLAG_ENCRYPTED,
null));
assertTrue("Should contain generated private key", mKeyStore.containsAlias(TEST_ALIAS_1));
@@ -1963,7 +1963,7 @@
{
final String privateKeyAlias = Credentials.USER_PRIVATE_KEY + TEST_ALIAS_1;
assertTrue(mAndroidKeyStore.generate(privateKeyAlias, KeyStore.UID_SELF,
- NativeCrypto.EVP_PKEY_RSA, 1024, KeyStore.FLAG_ENCRYPTED, null));
+ NativeConstants.EVP_PKEY_RSA, 1024, KeyStore.FLAG_ENCRYPTED, null));
Key key = mKeyStore.getKey(TEST_ALIAS_1, null);
@@ -2019,7 +2019,7 @@
{
final String privateKeyAlias = Credentials.USER_PRIVATE_KEY + TEST_ALIAS_1;
assertTrue(mAndroidKeyStore.generate(privateKeyAlias, KeyStore.UID_SELF,
- NativeCrypto.EVP_PKEY_RSA, 1024, KeyStore.FLAG_ENCRYPTED, null));
+ NativeConstants.EVP_PKEY_RSA, 1024, KeyStore.FLAG_ENCRYPTED, null));
X509Certificate cert = generateCertificate(mAndroidKeyStore, TEST_ALIAS_1,
TEST_SERIAL_1, TEST_DN_1, NOW, NOW_PLUS_10_YEARS);
@@ -2032,7 +2032,7 @@
{
final String privateKeyAlias = Credentials.USER_PRIVATE_KEY + TEST_ALIAS_2;
assertTrue(mAndroidKeyStore.generate(privateKeyAlias, KeyStore.UID_SELF,
- NativeCrypto.EVP_PKEY_RSA, 1024, KeyStore.FLAG_ENCRYPTED, null));
+ NativeConstants.EVP_PKEY_RSA, 1024, KeyStore.FLAG_ENCRYPTED, null));
X509Certificate cert = generateCertificate(mAndroidKeyStore, TEST_ALIAS_2,
TEST_SERIAL_2, TEST_DN_2, NOW, NOW_PLUS_10_YEARS);
@@ -2064,7 +2064,7 @@
{
final String privateKeyAlias = Credentials.USER_PRIVATE_KEY + TEST_ALIAS_1;
assertTrue(mAndroidKeyStore.generate(privateKeyAlias,
- android.security.KeyStore.UID_SELF, NativeCrypto.EVP_PKEY_RSA, 1024,
+ android.security.KeyStore.UID_SELF, NativeConstants.EVP_PKEY_RSA, 1024,
android.security.KeyStore.FLAG_NONE, null));
X509Certificate cert =
@@ -2089,7 +2089,7 @@
} catch (KeyStoreException success) {
}
- assertTrue(mAndroidKeyStore.password("1111"));
+ assertTrue(mAndroidKeyStore.onUserPasswordChanged("1111"));
assertTrue(mAndroidKeyStore.isUnlocked());
mKeyStore.setEntry(TEST_ALIAS_1, entry,
@@ -2116,7 +2116,7 @@
assertAliases(new String[] { TEST_ALIAS_1, TEST_ALIAS_2 });
assertTrue(mAndroidKeyStore.generate(Credentials.USER_PRIVATE_KEY + TEST_ALIAS_3,
- KeyStore.UID_SELF, NativeCrypto.EVP_PKEY_RSA, 1024, KeyStore.FLAG_ENCRYPTED,
+ KeyStore.UID_SELF, NativeConstants.EVP_PKEY_RSA, 1024, KeyStore.FLAG_ENCRYPTED,
null));
assertEquals("The keystore size should match expected", 3, mKeyStore.size());
@@ -2184,7 +2184,7 @@
private void setupKey() throws Exception {
final String privateKeyAlias = Credentials.USER_PRIVATE_KEY + TEST_ALIAS_1;
assertTrue(mAndroidKeyStore
- .generate(privateKeyAlias, KeyStore.UID_SELF, NativeCrypto.EVP_PKEY_RSA, 1024,
+ .generate(privateKeyAlias, KeyStore.UID_SELF, NativeConstants.EVP_PKEY_RSA, 1024,
KeyStore.FLAG_ENCRYPTED, null));
X509Certificate cert = generateCertificate(mAndroidKeyStore, TEST_ALIAS_1, TEST_SERIAL_1,
diff --git a/keystore/tests/src/android/security/KeyPairGeneratorSpecTest.java b/keystore/tests/src/android/security/KeyPairGeneratorSpecTest.java
index bc8dd13..681a9ff 100644
--- a/keystore/tests/src/android/security/KeyPairGeneratorSpecTest.java
+++ b/keystore/tests/src/android/security/KeyPairGeneratorSpecTest.java
@@ -24,6 +24,11 @@
import javax.security.auth.x500.X500Principal;
public class KeyPairGeneratorSpecTest extends AndroidTestCase {
+ private static final X500Principal DEFAULT_CERT_SUBJECT = new X500Principal("CN=fake");
+ private static final BigInteger DEFAULT_CERT_SERIAL_NUMBER = new BigInteger("1");
+ private static final Date DEFAULT_CERT_NOT_BEFORE = new Date(0L); // Jan 1 1980
+ private static final Date DEFAULT_CERT_NOT_AFTER = new Date(2461449600000L); // Jan 1 2048
+
private static final String TEST_ALIAS_1 = "test1";
private static final X500Principal TEST_DN_1 = new X500Principal("CN=test1");
@@ -105,46 +110,37 @@
}
}
- public void testConstructor_NullSubjectDN_Failure() throws Exception {
- try {
- new KeyPairGeneratorSpec(getContext(), TEST_ALIAS_1, "RSA", 1024, null, null, SERIAL_1, NOW,
- NOW_PLUS_10_YEARS, 0);
- fail("Should throw IllegalArgumentException when subjectDN is null");
- } catch (IllegalArgumentException success) {
- }
+ public void testConstructor_NullSubjectDN_Success() throws Exception {
+ KeyPairGeneratorSpec spec = new KeyPairGeneratorSpec(
+ getContext(), TEST_ALIAS_1, "RSA", 1024, null, null, SERIAL_1, NOW,
+ NOW_PLUS_10_YEARS, 0);
+ assertEquals(DEFAULT_CERT_SUBJECT, spec.getSubjectDN());
}
- public void testConstructor_NullSerial_Failure() throws Exception {
- try {
- new KeyPairGeneratorSpec(getContext(), TEST_ALIAS_1, "RSA", 1024, null, TEST_DN_1, null, NOW,
- NOW_PLUS_10_YEARS, 0);
- fail("Should throw IllegalArgumentException when startDate is null");
- } catch (IllegalArgumentException success) {
- }
+ public void testConstructor_NullSerial_Success() throws Exception {
+ KeyPairGeneratorSpec spec = new KeyPairGeneratorSpec(
+ getContext(), TEST_ALIAS_1, "RSA", 1024, null, TEST_DN_1, null, NOW,
+ NOW_PLUS_10_YEARS, 0);
+ assertEquals(DEFAULT_CERT_SERIAL_NUMBER, spec.getSerialNumber());
}
- public void testConstructor_NullStartDate_Failure() throws Exception {
- try {
- new KeyPairGeneratorSpec(getContext(), TEST_ALIAS_1, "RSA", 1024, null, TEST_DN_1, SERIAL_1,
- null, NOW_PLUS_10_YEARS, 0);
- fail("Should throw IllegalArgumentException when startDate is null");
- } catch (IllegalArgumentException success) {
- }
+ public void testConstructor_NullStartDate_Success() throws Exception {
+ KeyPairGeneratorSpec spec = new KeyPairGeneratorSpec(
+ getContext(), TEST_ALIAS_1, "RSA", 1024, null, TEST_DN_1, SERIAL_1, null,
+ NOW_PLUS_10_YEARS, 0);
+ assertEquals(DEFAULT_CERT_NOT_BEFORE, spec.getStartDate());
}
- public void testConstructor_NullEndDate_Failure() throws Exception {
- try {
- new KeyPairGeneratorSpec(getContext(), TEST_ALIAS_1, "RSA", 1024, null, TEST_DN_1, SERIAL_1,
- NOW, null, 0);
- fail("Should throw IllegalArgumentException when keystoreAlias is null");
- } catch (IllegalArgumentException success) {
- }
+ public void testConstructor_NullEndDate_Success() throws Exception {
+ KeyPairGeneratorSpec spec = new KeyPairGeneratorSpec(
+ getContext(), TEST_ALIAS_1, "RSA", 1024, null, TEST_DN_1, SERIAL_1, NOW, null, 0);
+ assertEquals(DEFAULT_CERT_NOT_AFTER, spec.getEndDate());
}
public void testConstructor_EndBeforeStart_Failure() throws Exception {
try {
- new KeyPairGeneratorSpec(getContext(), TEST_ALIAS_1, "RSA", 1024, null, TEST_DN_1, SERIAL_1,
- NOW_PLUS_10_YEARS, NOW, 0);
+ new KeyPairGeneratorSpec(getContext(), TEST_ALIAS_1, "RSA", 1024, null, TEST_DN_1,
+ SERIAL_1, NOW_PLUS_10_YEARS, NOW, 0);
fail("Should throw IllegalArgumentException when end is before start");
} catch (IllegalArgumentException success) {
}
diff --git a/keystore/tests/src/android/security/KeyStoreTest.java b/keystore/tests/src/android/security/KeyStoreTest.java
index 1a5552a..836b514 100644
--- a/keystore/tests/src/android/security/KeyStoreTest.java
+++ b/keystore/tests/src/android/security/KeyStoreTest.java
@@ -32,7 +32,7 @@
import android.test.AssertionFailedError;
import android.test.MoreAsserts;
import android.test.suitebuilder.annotation.MediumTest;
-import com.android.org.conscrypt.NativeCrypto;
+import com.android.org.conscrypt.NativeConstants;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.Date;
@@ -152,13 +152,13 @@
}
public void testPassword() throws Exception {
- assertTrue(mKeyStore.password(TEST_PASSWD));
+ assertTrue(mKeyStore.onUserPasswordChanged(TEST_PASSWD));
assertEquals(KeyStore.State.UNLOCKED, mKeyStore.state());
}
public void testGet() throws Exception {
assertNull(mKeyStore.get(TEST_KEYNAME));
- mKeyStore.password(TEST_PASSWD);
+ mKeyStore.onUserPasswordChanged(TEST_PASSWD);
assertNull(mKeyStore.get(TEST_KEYNAME));
assertTrue(mKeyStore.put(TEST_KEYNAME, TEST_KEYVALUE, KeyStore.UID_SELF,
KeyStore.FLAG_ENCRYPTED));
@@ -170,7 +170,7 @@
assertFalse(mKeyStore.put(TEST_KEYNAME, TEST_KEYVALUE, KeyStore.UID_SELF,
KeyStore.FLAG_ENCRYPTED));
assertFalse(mKeyStore.contains(TEST_KEYNAME));
- mKeyStore.password(TEST_PASSWD);
+ mKeyStore.onUserPasswordChanged(TEST_PASSWD);
assertTrue(mKeyStore.put(TEST_KEYNAME, TEST_KEYVALUE, KeyStore.UID_SELF,
KeyStore.FLAG_ENCRYPTED));
assertTrue(Arrays.equals(TEST_KEYVALUE, mKeyStore.get(TEST_KEYNAME)));
@@ -181,7 +181,7 @@
assertFalse(mKeyStore.put(TEST_KEYNAME, TEST_KEYVALUE, Process.WIFI_UID,
KeyStore.FLAG_ENCRYPTED));
assertFalse(mKeyStore.contains(TEST_KEYNAME, Process.WIFI_UID));
- mKeyStore.password(TEST_PASSWD);
+ mKeyStore.onUserPasswordChanged(TEST_PASSWD);
assertTrue(mKeyStore.put(TEST_KEYNAME, TEST_KEYVALUE, Process.WIFI_UID,
KeyStore.FLAG_ENCRYPTED));
assertTrue(mKeyStore.contains(TEST_KEYNAME, Process.WIFI_UID));
@@ -192,7 +192,7 @@
assertFalse(mKeyStore.put(TEST_KEYNAME, TEST_KEYVALUE, Process.BLUETOOTH_UID,
KeyStore.FLAG_ENCRYPTED));
assertFalse(mKeyStore.contains(TEST_KEYNAME, Process.BLUETOOTH_UID));
- mKeyStore.password(TEST_PASSWD);
+ mKeyStore.onUserPasswordChanged(TEST_PASSWD);
assertFalse(mKeyStore.put(TEST_KEYNAME, TEST_KEYVALUE, Process.BLUETOOTH_UID,
KeyStore.FLAG_ENCRYPTED));
assertFalse(mKeyStore.contains(TEST_KEYNAME, Process.BLUETOOTH_UID));
@@ -202,7 +202,7 @@
assertFalse(mKeyStore.put(TEST_I18N_KEY, TEST_I18N_VALUE, KeyStore.UID_SELF,
KeyStore.FLAG_ENCRYPTED));
assertFalse(mKeyStore.contains(TEST_I18N_KEY));
- mKeyStore.password(TEST_I18N_KEY);
+ mKeyStore.onUserPasswordChanged(TEST_I18N_KEY);
assertTrue(mKeyStore.put(TEST_I18N_KEY, TEST_I18N_VALUE, KeyStore.UID_SELF,
KeyStore.FLAG_ENCRYPTED));
assertTrue(mKeyStore.contains(TEST_I18N_KEY));
@@ -210,7 +210,7 @@
public void testDelete() throws Exception {
assertFalse(mKeyStore.delete(TEST_KEYNAME));
- mKeyStore.password(TEST_PASSWD);
+ mKeyStore.onUserPasswordChanged(TEST_PASSWD);
assertFalse(mKeyStore.delete(TEST_KEYNAME));
assertTrue(mKeyStore.put(TEST_KEYNAME, TEST_KEYVALUE, KeyStore.UID_SELF,
@@ -222,7 +222,7 @@
public void testDelete_grantedUid_Wifi() throws Exception {
assertFalse(mKeyStore.delete(TEST_KEYNAME, Process.WIFI_UID));
- mKeyStore.password(TEST_PASSWD);
+ mKeyStore.onUserPasswordChanged(TEST_PASSWD);
assertFalse(mKeyStore.delete(TEST_KEYNAME, Process.WIFI_UID));
assertTrue(mKeyStore.put(TEST_KEYNAME, TEST_KEYVALUE, Process.WIFI_UID,
@@ -234,7 +234,7 @@
public void testDelete_ungrantedUid_Bluetooth() throws Exception {
assertFalse(mKeyStore.delete(TEST_KEYNAME, Process.BLUETOOTH_UID));
- mKeyStore.password(TEST_PASSWD);
+ mKeyStore.onUserPasswordChanged(TEST_PASSWD);
assertFalse(mKeyStore.delete(TEST_KEYNAME, Process.BLUETOOTH_UID));
assertFalse(mKeyStore.put(TEST_KEYNAME, TEST_KEYVALUE, Process.BLUETOOTH_UID,
@@ -247,7 +247,7 @@
public void testContains() throws Exception {
assertFalse(mKeyStore.contains(TEST_KEYNAME));
- assertTrue(mKeyStore.password(TEST_PASSWD));
+ assertTrue(mKeyStore.onUserPasswordChanged(TEST_PASSWD));
assertFalse(mKeyStore.contains(TEST_KEYNAME));
assertTrue(mKeyStore.put(TEST_KEYNAME, TEST_KEYVALUE, KeyStore.UID_SELF,
@@ -258,7 +258,7 @@
public void testContains_grantedUid_Wifi() throws Exception {
assertFalse(mKeyStore.contains(TEST_KEYNAME, Process.WIFI_UID));
- assertTrue(mKeyStore.password(TEST_PASSWD));
+ assertTrue(mKeyStore.onUserPasswordChanged(TEST_PASSWD));
assertFalse(mKeyStore.contains(TEST_KEYNAME, Process.WIFI_UID));
assertTrue(mKeyStore.put(TEST_KEYNAME, TEST_KEYVALUE, Process.WIFI_UID,
@@ -269,7 +269,7 @@
public void testContains_grantedUid_Bluetooth() throws Exception {
assertFalse(mKeyStore.contains(TEST_KEYNAME, Process.BLUETOOTH_UID));
- assertTrue(mKeyStore.password(TEST_PASSWD));
+ assertTrue(mKeyStore.onUserPasswordChanged(TEST_PASSWD));
assertFalse(mKeyStore.contains(TEST_KEYNAME, Process.BLUETOOTH_UID));
assertFalse(mKeyStore.put(TEST_KEYNAME, TEST_KEYVALUE, Process.BLUETOOTH_UID,
@@ -282,7 +282,7 @@
assertNotNull(emptyResult);
assertEquals(0, emptyResult.length);
- mKeyStore.password(TEST_PASSWD);
+ mKeyStore.onUserPasswordChanged(TEST_PASSWD);
mKeyStore.put(TEST_KEYNAME1, TEST_KEYVALUE, KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED);
mKeyStore.put(TEST_KEYNAME2, TEST_KEYVALUE, KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED);
@@ -296,7 +296,7 @@
String[] results1 = mKeyStore.saw(TEST_KEYNAME, Process.BLUETOOTH_UID);
assertEquals(0, results1.length);
- mKeyStore.password(TEST_PASSWD);
+ mKeyStore.onUserPasswordChanged(TEST_PASSWD);
mKeyStore.put(TEST_KEYNAME1, TEST_KEYVALUE, KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED);
mKeyStore.put(TEST_KEYNAME2, TEST_KEYVALUE, KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED);
@@ -309,7 +309,7 @@
assertNotNull(results1);
assertEquals(0, results1.length);
- mKeyStore.password(TEST_PASSWD);
+ mKeyStore.onUserPasswordChanged(TEST_PASSWD);
mKeyStore.put(TEST_KEYNAME1, TEST_KEYVALUE, Process.WIFI_UID, KeyStore.FLAG_ENCRYPTED);
mKeyStore.put(TEST_KEYNAME2, TEST_KEYVALUE, Process.WIFI_UID, KeyStore.FLAG_ENCRYPTED);
@@ -324,7 +324,7 @@
assertNotNull(results1);
assertEquals(0, results1.length);
- mKeyStore.password(TEST_PASSWD);
+ mKeyStore.onUserPasswordChanged(TEST_PASSWD);
mKeyStore.put(TEST_KEYNAME1, TEST_KEYVALUE, Process.VPN_UID, KeyStore.FLAG_ENCRYPTED);
mKeyStore.put(TEST_KEYNAME2, TEST_KEYVALUE, Process.VPN_UID, KeyStore.FLAG_ENCRYPTED);
@@ -337,7 +337,7 @@
public void testLock() throws Exception {
assertFalse(mKeyStore.lock());
- mKeyStore.password(TEST_PASSWD);
+ mKeyStore.onUserPasswordChanged(TEST_PASSWD);
assertEquals(KeyStore.State.UNLOCKED, mKeyStore.state());
assertTrue(mKeyStore.lock());
@@ -345,7 +345,7 @@
}
public void testUnlock() throws Exception {
- mKeyStore.password(TEST_PASSWD);
+ mKeyStore.onUserPasswordChanged(TEST_PASSWD);
assertEquals(KeyStore.State.UNLOCKED, mKeyStore.state());
mKeyStore.lock();
@@ -355,7 +355,7 @@
public void testIsEmpty() throws Exception {
assertTrue(mKeyStore.isEmpty());
- mKeyStore.password(TEST_PASSWD);
+ mKeyStore.onUserPasswordChanged(TEST_PASSWD);
assertTrue(mKeyStore.isEmpty());
mKeyStore.put(TEST_KEYNAME, TEST_KEYVALUE, KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED);
assertFalse(mKeyStore.isEmpty());
@@ -365,50 +365,50 @@
public void testGenerate_NotInitialized_Fail() throws Exception {
assertFalse("Should fail when keystore is not initialized",
- mKeyStore.generate(TEST_KEYNAME, KeyStore.UID_SELF, NativeCrypto.EVP_PKEY_RSA,
+ mKeyStore.generate(TEST_KEYNAME, KeyStore.UID_SELF, NativeConstants.EVP_PKEY_RSA,
RSA_KEY_SIZE, KeyStore.FLAG_ENCRYPTED, null));
}
public void testGenerate_Locked_Fail() throws Exception {
- mKeyStore.password(TEST_PASSWD);
+ mKeyStore.onUserPasswordChanged(TEST_PASSWD);
mKeyStore.lock();
assertFalse("Should fail when keystore is locked",
- mKeyStore.generate(TEST_KEYNAME, KeyStore.UID_SELF, NativeCrypto.EVP_PKEY_RSA,
+ mKeyStore.generate(TEST_KEYNAME, KeyStore.UID_SELF, NativeConstants.EVP_PKEY_RSA,
RSA_KEY_SIZE, KeyStore.FLAG_ENCRYPTED, null));
}
public void testGenerate_Success() throws Exception {
- assertTrue(mKeyStore.password(TEST_PASSWD));
+ assertTrue(mKeyStore.onUserPasswordChanged(TEST_PASSWD));
assertTrue("Should be able to generate key when unlocked",
- mKeyStore.generate(TEST_KEYNAME, KeyStore.UID_SELF, NativeCrypto.EVP_PKEY_RSA,
+ mKeyStore.generate(TEST_KEYNAME, KeyStore.UID_SELF, NativeConstants.EVP_PKEY_RSA,
RSA_KEY_SIZE, KeyStore.FLAG_ENCRYPTED, null));
assertTrue(mKeyStore.contains(TEST_KEYNAME));
assertFalse(mKeyStore.contains(TEST_KEYNAME, Process.WIFI_UID));
}
public void testGenerate_grantedUid_Wifi_Success() throws Exception {
- assertTrue(mKeyStore.password(TEST_PASSWD));
+ assertTrue(mKeyStore.onUserPasswordChanged(TEST_PASSWD));
assertTrue("Should be able to generate key when unlocked",
- mKeyStore.generate(TEST_KEYNAME, Process.WIFI_UID, NativeCrypto.EVP_PKEY_RSA,
+ mKeyStore.generate(TEST_KEYNAME, Process.WIFI_UID, NativeConstants.EVP_PKEY_RSA,
RSA_KEY_SIZE, KeyStore.FLAG_ENCRYPTED, null));
assertTrue(mKeyStore.contains(TEST_KEYNAME, Process.WIFI_UID));
assertFalse(mKeyStore.contains(TEST_KEYNAME));
}
public void testGenerate_ungrantedUid_Bluetooth_Failure() throws Exception {
- assertTrue(mKeyStore.password(TEST_PASSWD));
+ assertTrue(mKeyStore.onUserPasswordChanged(TEST_PASSWD));
assertFalse(mKeyStore.generate(TEST_KEYNAME, Process.BLUETOOTH_UID,
- NativeCrypto.EVP_PKEY_RSA, RSA_KEY_SIZE, KeyStore.FLAG_ENCRYPTED, null));
+ NativeConstants.EVP_PKEY_RSA, RSA_KEY_SIZE, KeyStore.FLAG_ENCRYPTED, null));
assertFalse(mKeyStore.contains(TEST_KEYNAME, Process.BLUETOOTH_UID));
assertFalse(mKeyStore.contains(TEST_KEYNAME, Process.WIFI_UID));
assertFalse(mKeyStore.contains(TEST_KEYNAME));
}
public void testImport_Success() throws Exception {
- assertTrue(mKeyStore.password(TEST_PASSWD));
+ assertTrue(mKeyStore.onUserPasswordChanged(TEST_PASSWD));
assertTrue("Should be able to import key when unlocked", mKeyStore.importKey(TEST_KEYNAME,
PRIVKEY_BYTES, KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
@@ -417,7 +417,7 @@
}
public void testImport_grantedUid_Wifi_Success() throws Exception {
- assertTrue(mKeyStore.password(TEST_PASSWD));
+ assertTrue(mKeyStore.onUserPasswordChanged(TEST_PASSWD));
assertTrue("Should be able to import key when unlocked", mKeyStore.importKey(TEST_KEYNAME,
PRIVKEY_BYTES, Process.WIFI_UID, KeyStore.FLAG_ENCRYPTED));
@@ -426,7 +426,7 @@
}
public void testImport_ungrantedUid_Bluetooth_Failure() throws Exception {
- assertTrue(mKeyStore.password(TEST_PASSWD));
+ assertTrue(mKeyStore.onUserPasswordChanged(TEST_PASSWD));
assertFalse(mKeyStore.importKey(TEST_KEYNAME, PRIVKEY_BYTES, Process.BLUETOOTH_UID,
KeyStore.FLAG_ENCRYPTED));
@@ -436,7 +436,7 @@
}
public void testImport_Failure_BadEncoding() throws Exception {
- mKeyStore.password(TEST_PASSWD);
+ mKeyStore.onUserPasswordChanged(TEST_PASSWD);
assertFalse("Invalid DER-encoded key should not be imported", mKeyStore.importKey(
TEST_KEYNAME, TEST_DATA, KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
@@ -445,9 +445,9 @@
}
public void testSign_Success() throws Exception {
- mKeyStore.password(TEST_PASSWD);
+ mKeyStore.onUserPasswordChanged(TEST_PASSWD);
- assertTrue(mKeyStore.generate(TEST_KEYNAME, KeyStore.UID_SELF, NativeCrypto.EVP_PKEY_RSA,
+ assertTrue(mKeyStore.generate(TEST_KEYNAME, KeyStore.UID_SELF, NativeConstants.EVP_PKEY_RSA,
RSA_KEY_SIZE, KeyStore.FLAG_ENCRYPTED, null));
assertTrue(mKeyStore.contains(TEST_KEYNAME));
final byte[] signature = mKeyStore.sign(TEST_KEYNAME, TEST_DATA);
@@ -456,9 +456,9 @@
}
public void testVerify_Success() throws Exception {
- mKeyStore.password(TEST_PASSWD);
+ mKeyStore.onUserPasswordChanged(TEST_PASSWD);
- assertTrue(mKeyStore.generate(TEST_KEYNAME, KeyStore.UID_SELF, NativeCrypto.EVP_PKEY_RSA,
+ assertTrue(mKeyStore.generate(TEST_KEYNAME, KeyStore.UID_SELF, NativeConstants.EVP_PKEY_RSA,
RSA_KEY_SIZE, KeyStore.FLAG_ENCRYPTED, null));
assertTrue(mKeyStore.contains(TEST_KEYNAME));
final byte[] signature = mKeyStore.sign(TEST_KEYNAME, TEST_DATA);
@@ -475,7 +475,7 @@
}
public void testSign_NotGenerated_Failure() throws Exception {
- mKeyStore.password(TEST_PASSWD);
+ mKeyStore.onUserPasswordChanged(TEST_PASSWD);
assertNull("Should not be able to sign without first generating keys",
mKeyStore.sign(TEST_KEYNAME, TEST_DATA));
@@ -483,10 +483,10 @@
public void testGrant_Generated_Success() throws Exception {
assertTrue("Password should work for keystore",
- mKeyStore.password(TEST_PASSWD));
+ mKeyStore.onUserPasswordChanged(TEST_PASSWD));
assertTrue("Should be able to generate key for testcase",
- mKeyStore.generate(TEST_KEYNAME, KeyStore.UID_SELF, NativeCrypto.EVP_PKEY_RSA,
+ mKeyStore.generate(TEST_KEYNAME, KeyStore.UID_SELF, NativeConstants.EVP_PKEY_RSA,
RSA_KEY_SIZE, KeyStore.FLAG_ENCRYPTED, null));
assertTrue("Should be able to grant key to other user",
@@ -494,7 +494,7 @@
}
public void testGrant_Imported_Success() throws Exception {
- assertTrue("Password should work for keystore", mKeyStore.password(TEST_PASSWD));
+ assertTrue("Password should work for keystore", mKeyStore.onUserPasswordChanged(TEST_PASSWD));
assertTrue("Should be able to import key for testcase", mKeyStore.importKey(TEST_KEYNAME,
PRIVKEY_BYTES, KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
@@ -504,7 +504,7 @@
public void testGrant_NoKey_Failure() throws Exception {
assertTrue("Should be able to unlock keystore for test",
- mKeyStore.password(TEST_PASSWD));
+ mKeyStore.onUserPasswordChanged(TEST_PASSWD));
assertFalse("Should not be able to grant without first initializing the keystore",
mKeyStore.grant(TEST_KEYNAME, 0));
@@ -517,10 +517,10 @@
public void testUngrant_Generated_Success() throws Exception {
assertTrue("Password should work for keystore",
- mKeyStore.password(TEST_PASSWD));
+ mKeyStore.onUserPasswordChanged(TEST_PASSWD));
assertTrue("Should be able to generate key for testcase",
- mKeyStore.generate(TEST_KEYNAME, KeyStore.UID_SELF, NativeCrypto.EVP_PKEY_RSA,
+ mKeyStore.generate(TEST_KEYNAME, KeyStore.UID_SELF, NativeConstants.EVP_PKEY_RSA,
RSA_KEY_SIZE, KeyStore.FLAG_ENCRYPTED, null));
assertTrue("Should be able to grant key to other user",
@@ -532,7 +532,7 @@
public void testUngrant_Imported_Success() throws Exception {
assertTrue("Password should work for keystore",
- mKeyStore.password(TEST_PASSWD));
+ mKeyStore.onUserPasswordChanged(TEST_PASSWD));
assertTrue("Should be able to import key for testcase", mKeyStore.importKey(TEST_KEYNAME,
PRIVKEY_BYTES, KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
@@ -551,10 +551,10 @@
public void testUngrant_NoGrant_Failure() throws Exception {
assertTrue("Password should work for keystore",
- mKeyStore.password(TEST_PASSWD));
+ mKeyStore.onUserPasswordChanged(TEST_PASSWD));
assertTrue("Should be able to generate key for testcase",
- mKeyStore.generate(TEST_KEYNAME, KeyStore.UID_SELF, NativeCrypto.EVP_PKEY_RSA,
+ mKeyStore.generate(TEST_KEYNAME, KeyStore.UID_SELF, NativeConstants.EVP_PKEY_RSA,
RSA_KEY_SIZE, KeyStore.FLAG_ENCRYPTED, null));
assertFalse("Should not be able to revoke not existent grant",
@@ -563,10 +563,10 @@
public void testUngrant_DoubleUngrant_Failure() throws Exception {
assertTrue("Password should work for keystore",
- mKeyStore.password(TEST_PASSWD));
+ mKeyStore.onUserPasswordChanged(TEST_PASSWD));
assertTrue("Should be able to generate key for testcase",
- mKeyStore.generate(TEST_KEYNAME, KeyStore.UID_SELF, NativeCrypto.EVP_PKEY_RSA,
+ mKeyStore.generate(TEST_KEYNAME, KeyStore.UID_SELF, NativeConstants.EVP_PKEY_RSA,
RSA_KEY_SIZE, KeyStore.FLAG_ENCRYPTED, null));
assertTrue("Should be able to grant key to other user",
@@ -581,10 +581,10 @@
public void testUngrant_DoubleGrantUngrant_Failure() throws Exception {
assertTrue("Password should work for keystore",
- mKeyStore.password(TEST_PASSWD));
+ mKeyStore.onUserPasswordChanged(TEST_PASSWD));
assertTrue("Should be able to generate key for testcase",
- mKeyStore.generate(TEST_KEYNAME, KeyStore.UID_SELF, NativeCrypto.EVP_PKEY_RSA,
+ mKeyStore.generate(TEST_KEYNAME, KeyStore.UID_SELF, NativeConstants.EVP_PKEY_RSA,
RSA_KEY_SIZE, KeyStore.FLAG_ENCRYPTED, null));
assertTrue("Should be able to grant key to other user",
@@ -601,11 +601,11 @@
}
public void testDuplicate_grantedUid_Wifi_Success() throws Exception {
- assertTrue(mKeyStore.password(TEST_PASSWD));
+ assertTrue(mKeyStore.onUserPasswordChanged(TEST_PASSWD));
assertFalse(mKeyStore.contains(TEST_KEYNAME));
- assertTrue(mKeyStore.generate(TEST_KEYNAME, KeyStore.UID_SELF, NativeCrypto.EVP_PKEY_RSA,
+ assertTrue(mKeyStore.generate(TEST_KEYNAME, KeyStore.UID_SELF, NativeConstants.EVP_PKEY_RSA,
RSA_KEY_SIZE, KeyStore.FLAG_ENCRYPTED, null));
assertTrue(mKeyStore.contains(TEST_KEYNAME));
@@ -640,11 +640,11 @@
}
public void testDuplicate_ungrantedUid_Bluetooth_Failure() throws Exception {
- assertTrue(mKeyStore.password(TEST_PASSWD));
+ assertTrue(mKeyStore.onUserPasswordChanged(TEST_PASSWD));
assertFalse(mKeyStore.contains(TEST_KEYNAME));
- assertTrue(mKeyStore.generate(TEST_KEYNAME, KeyStore.UID_SELF, NativeCrypto.EVP_PKEY_RSA,
+ assertTrue(mKeyStore.generate(TEST_KEYNAME, KeyStore.UID_SELF, NativeConstants.EVP_PKEY_RSA,
RSA_KEY_SIZE, KeyStore.FLAG_ENCRYPTED, null));
assertTrue(mKeyStore.contains(TEST_KEYNAME));
@@ -666,7 +666,7 @@
public void testGetmtime_Success() throws Exception {
assertTrue("Password should work for keystore",
- mKeyStore.password(TEST_PASSWD));
+ mKeyStore.onUserPasswordChanged(TEST_PASSWD));
assertTrue("Should be able to import key when unlocked", mKeyStore.importKey(TEST_KEYNAME,
PRIVKEY_BYTES, KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
@@ -697,7 +697,7 @@
public void testGetmtime_NonExist_Failure() throws Exception {
assertTrue("Password should work for keystore",
- mKeyStore.password(TEST_PASSWD));
+ mKeyStore.onUserPasswordChanged(TEST_PASSWD));
assertTrue("Should be able to import key when unlocked", mKeyStore.importKey(TEST_KEYNAME,
PRIVKEY_BYTES, KeyStore.UID_SELF, KeyStore.FLAG_ENCRYPTED));
@@ -752,7 +752,7 @@
}
public void testGetKeyCharacteristicsSuccess() throws Exception {
- mKeyStore.password(TEST_PASSWD);
+ mKeyStore.onUserPasswordChanged(TEST_PASSWD);
String name = "test";
KeyCharacteristics gen = generateRsaKey(name);
KeyCharacteristics call = new KeyCharacteristics();
@@ -817,6 +817,9 @@
KeymasterArguments out = new KeymasterArguments();
args = new KeymasterArguments();
+ args.addInt(KeymasterDefs.KM_TAG_ALGORITHM, KeymasterDefs.KM_ALGORITHM_AES);
+ args.addInt(KeymasterDefs.KM_TAG_BLOCK_MODE, KeymasterDefs.KM_MODE_GCM);
+ args.addInt(KeymasterDefs.KM_TAG_PADDING, KeymasterDefs.KM_PAD_NONE);
OperationResult result = mKeyStore.begin(name, KeymasterDefs.KM_PURPOSE_ENCRYPT,
true, args, null, out);
IBinder token = result.token;
@@ -881,14 +884,18 @@
hexToBytes("591ccb10d410ed26dc5ba74a31362870"),
hexToBytes("b6ed21b99ca6f4f9f153e7b1beafed1d"),
hexToBytes("23304b7a39f9f3ff067d8d8f9e24ecc7")};
+ KeymasterArguments beginArgs = new KeymasterArguments();
+ beginArgs.addInt(KeymasterDefs.KM_TAG_ALGORITHM, KeymasterDefs.KM_ALGORITHM_AES);
+ beginArgs.addInt(KeymasterDefs.KM_TAG_BLOCK_MODE, KeymasterDefs.KM_MODE_ECB);
+ beginArgs.addInt(KeymasterDefs.KM_TAG_PADDING, KeymasterDefs.KM_PAD_NONE);
for (int i = 0; i < testVectors.length; i++) {
byte[] cipherText = doOperation(name, KeymasterDefs.KM_PURPOSE_ENCRYPT, testVectors[i],
- new KeymasterArguments());
+ beginArgs);
MoreAsserts.assertEquals(cipherVectors[i], cipherText);
}
for (int i = 0; i < testVectors.length; i++) {
byte[] plainText = doOperation(name, KeymasterDefs.KM_PURPOSE_DECRYPT,
- cipherVectors[i], new KeymasterArguments());
+ cipherVectors[i], beginArgs);
MoreAsserts.assertEquals(testVectors[i], plainText);
}
}
@@ -912,6 +919,9 @@
KeymasterArguments out = new KeymasterArguments();
args = new KeymasterArguments();
+ args.addInt(KeymasterDefs.KM_TAG_ALGORITHM, KeymasterDefs.KM_ALGORITHM_AES);
+ args.addInt(KeymasterDefs.KM_TAG_BLOCK_MODE, KeymasterDefs.KM_MODE_CTR);
+ args.addInt(KeymasterDefs.KM_TAG_PADDING, KeymasterDefs.KM_PAD_NONE);
OperationResult result = mKeyStore.begin(name, KeymasterDefs.KM_PURPOSE_ENCRYPT,
true, args, null, out);
assertEquals("Begin should succeed", KeyStore.NO_ERROR, result.resultCode);
@@ -944,10 +954,35 @@
assertEquals("Generate should succeed", KeyStore.NO_ERROR, rc);
OperationResult result = mKeyStore.begin(name, KeymasterDefs.KM_PURPOSE_ENCRYPT,
true, args, null, out);
- assertEquals("Begin should succeed", KeyStore.NO_ERROR, result.resultCode);
+ assertEquals("Begin should expect authorization", KeyStore.OP_AUTH_NEEDED,
+ result.resultCode);
IBinder token = result.token;
result = mKeyStore.update(token, null, new byte[] {0x01, 0x02, 0x03, 0x04});
assertEquals("Update should require authorization",
KeymasterDefs.KM_ERROR_KEY_USER_NOT_AUTHENTICATED, result.resultCode);
}
+
+ public void testPasswordRemovalEncryptedEntry() throws Exception {
+ mKeyStore.onUserPasswordChanged("test");
+ assertTrue(mKeyStore.put(TEST_KEYNAME, TEST_KEYVALUE, KeyStore.UID_SELF,
+ KeyStore.FLAG_ENCRYPTED));
+ assertTrue(mKeyStore.contains(TEST_KEYNAME));
+ assertTrue(Arrays.equals(TEST_KEYVALUE, mKeyStore.get(TEST_KEYNAME)));
+ mKeyStore.onUserPasswordChanged("");
+ // Removing the password should have deleted all entries using FLAG_ENCRYPTED
+ assertNull(mKeyStore.get(TEST_KEYNAME));
+ assertFalse(mKeyStore.contains(TEST_KEYNAME));
+ }
+
+ public void testPasswordRemovalUnencryptedEntry() throws Exception {
+ mKeyStore.onUserPasswordChanged("test");
+ assertTrue(mKeyStore.put(TEST_KEYNAME, TEST_KEYVALUE, KeyStore.UID_SELF,
+ KeyStore.FLAG_NONE));
+ assertTrue(mKeyStore.contains(TEST_KEYNAME));
+ assertTrue(Arrays.equals(TEST_KEYVALUE, mKeyStore.get(TEST_KEYNAME)));
+ mKeyStore.onUserPasswordChanged("");
+ // Removing the password should not delete unencrypted entries.
+ assertTrue(mKeyStore.contains(TEST_KEYNAME));
+ assertTrue(Arrays.equals(TEST_KEYVALUE, mKeyStore.get(TEST_KEYNAME)));
+ }
}
diff --git a/libs/androidfw/Android.mk b/libs/androidfw/Android.mk
index 461160a..2f28700 100644
--- a/libs/androidfw/Android.mk
+++ b/libs/androidfw/Android.mk
@@ -64,7 +64,7 @@
LOCAL_C_INCLUDES := \
external/zlib \
system/core/include
-LOCAL_STATIC_LIBRARIES := libziparchive
+LOCAL_STATIC_LIBRARIES := libziparchive libbase
LOCAL_SHARED_LIBRARIES := \
libbinder \
liblog \
diff --git a/libs/androidfw/Asset.cpp b/libs/androidfw/Asset.cpp
index 782806e..4e14b13 100644
--- a/libs/androidfw/Asset.cpp
+++ b/libs/androidfw/Asset.cpp
@@ -296,13 +296,13 @@
* Create a new Asset from compressed data in a memory mapping.
*/
/*static*/ Asset* Asset::createFromCompressedMap(FileMap* dataMap,
- int method, size_t uncompressedLen, AccessMode mode)
+ size_t uncompressedLen, AccessMode mode)
{
_CompressedAsset* pAsset;
status_t result;
pAsset = new _CompressedAsset;
- result = pAsset->openChunk(dataMap, method, uncompressedLen);
+ result = pAsset->openChunk(dataMap, uncompressedLen);
if (result != NO_ERROR)
return NULL;
@@ -734,18 +734,12 @@
*
* Nothing is expanded until the first read call.
*/
-status_t _CompressedAsset::openChunk(FileMap* dataMap, int compressionMethod,
- size_t uncompressedLen)
+status_t _CompressedAsset::openChunk(FileMap* dataMap, size_t uncompressedLen)
{
assert(mFd < 0); // no re-open
assert(mMap == NULL);
assert(dataMap != NULL);
- if (compressionMethod != ZipFileRO::kCompressDeflated) {
- assert(false);
- return UNKNOWN_ERROR;
- }
-
mMap = dataMap;
mStart = -1; // not used
mCompressedLen = dataMap->getDataLength();
diff --git a/libs/androidfw/AssetManager.cpp b/libs/androidfw/AssetManager.cpp
index 25cd363..623ea89 100644
--- a/libs/androidfw/AssetManager.cpp
+++ b/libs/androidfw/AssetManager.cpp
@@ -34,7 +34,7 @@
#include <utils/String8.h>
#include <utils/threads.h>
#include <utils/Timers.h>
-#ifdef HAVE_ANDROID_OS
+#ifdef __ANDROID__
#include <cutils/trace.h>
#endif
@@ -54,7 +54,7 @@
_rc; })
#endif
-#ifdef HAVE_ANDROID_OS
+#ifdef __ANDROID__
#define MY_TRACE_BEGIN(x) ATRACE_BEGIN(x)
#define MY_TRACE_END() ATRACE_END()
#else
@@ -229,7 +229,7 @@
*cookie = static_cast<int32_t>(mAssetPaths.size());
}
-#ifdef HAVE_ANDROID_OS
+#ifdef __ANDROID__
// Load overlays, if any
asset_path oap;
for (size_t idx = 0; mZipSet.getOverlay(ap.path, idx, &oap); idx++) {
@@ -657,7 +657,7 @@
ALOGV("Creating shared resources for %s", ap.path.string());
sharedRes = new ResTable();
sharedRes->add(ass, idmap, nextEntryIdx + 1, false);
-#ifdef HAVE_ANDROID_OS
+#ifdef __ANDROID__
const char* data = getenv("ANDROID_DATA");
LOG_ALWAYS_FATAL_IF(data == NULL, "ANDROID_DATA not set");
String8 overlaysListPath(data);
@@ -1156,13 +1156,11 @@
Asset* pAsset = NULL;
// TODO: look for previously-created shared memory slice?
- int method;
- size_t uncompressedLen;
+ uint16_t method;
+ uint32_t uncompressedLen;
//printf("USING Zip '%s'\n", pEntry->getFileName());
- //pZipFile->getEntryInfo(entry, &method, &uncompressedLen, &compressedLen,
- // &offset);
if (!pZipFile->getEntryInfo(entry, &method, &uncompressedLen, NULL, NULL,
NULL, NULL))
{
@@ -1181,8 +1179,8 @@
ALOGV("Opened uncompressed entry %s in zip %s mode %d: %p", entryName.string(),
dataMap->getFileName(), mode, pAsset);
} else {
- pAsset = Asset::createFromCompressedMap(dataMap, method,
- uncompressedLen, mode);
+ pAsset = Asset::createFromCompressedMap(dataMap,
+ static_cast<size_t>(uncompressedLen), mode);
ALOGV("Opened compressed entry %s in zip %s mode %d: %p", entryName.string(),
dataMap->getFileName(), mode, pAsset);
}
@@ -1547,7 +1545,7 @@
*/
int dirNameLen = dirName.length();
void *iterationCookie;
- if (!pZip->startIteration(&iterationCookie)) {
+ if (!pZip->startIteration(&iterationCookie, dirName.string(), NULL)) {
ALOGW("ZipFileRO::startIteration returned false");
return false;
}
@@ -1562,9 +1560,7 @@
continue;
}
//printf("Comparing %s in %s?\n", nameBuf, dirName.string());
- if (dirNameLen == 0 ||
- (strncmp(nameBuf, dirName.string(), dirNameLen) == 0 &&
- nameBuf[dirNameLen] == '/'))
+ if (dirNameLen == 0 || nameBuf[dirNameLen] == '/')
{
const char* cp;
const char* nextSlash;
diff --git a/libs/androidfw/ObbFile.cpp b/libs/androidfw/ObbFile.cpp
index 195fa9a..95332a3 100644
--- a/libs/androidfw/ObbFile.cpp
+++ b/libs/androidfw/ObbFile.cpp
@@ -337,7 +337,9 @@
return false;
}
- ftruncate(fd, mFooterStart);
+ if (ftruncate(fd, mFooterStart) == -1) {
+ return false;
+ }
return true;
}
diff --git a/libs/androidfw/ResourceTypes.cpp b/libs/androidfw/ResourceTypes.cpp
index 7241069..6c9b529 100644
--- a/libs/androidfw/ResourceTypes.cpp
+++ b/libs/androidfw/ResourceTypes.cpp
@@ -17,6 +17,16 @@
#define LOG_TAG "ResourceType"
//#define LOG_NDEBUG 0
+#include <ctype.h>
+#include <memory.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <limits>
+#include <type_traits>
+
#include <androidfw/ByteBucketArray.h>
#include <androidfw/ResourceTypes.h>
#include <androidfw/TypeWrappers.h>
@@ -27,24 +37,17 @@
#include <utils/String16.h>
#include <utils/String8.h>
-#ifdef HAVE_ANDROID_OS
+#ifdef __ANDROID__
#include <binder/TextOutput.h>
#endif
-#include <stdlib.h>
-#include <string.h>
-#include <memory.h>
-#include <ctype.h>
-#include <stdint.h>
-#include <stddef.h>
-
#ifndef INT32_MAX
#define INT32_MAX ((int32_t)(2147483647))
#endif
namespace android {
-#ifdef HAVE_WINSOCK
+#if defined(_WIN32)
#undef nhtol
#undef htonl
#define ntohl(x) ( ((x) << 24) | (((x) >> 24) & 255) | (((x) << 8) & 0xff0000) | (((x) >> 8) & 0xff00) )
@@ -718,7 +721,7 @@
AutoMutex lock(mDecodeLock);
if (mCache == NULL) {
-#ifndef HAVE_ANDROID_OS
+#ifndef __ANDROID__
if (kDebugStringPoolNoisy) {
ALOGI("CREATING STRING CACHE OF %zu bytes",
mHeader->stringCount*sizeof(char16_t**));
@@ -4551,8 +4554,7 @@
return false;
}
-
-bool ResTable::stringToInt(const char16_t* s, size_t len, Res_value* outValue)
+bool U16StringToInt(const char16_t* s, size_t len, Res_value* outValue)
{
while (len > 0 && isspace16(*s)) {
s++;
@@ -4564,7 +4566,7 @@
}
size_t i = 0;
- int32_t val = 0;
+ int64_t val = 0;
bool neg = false;
if (*s == '-') {
@@ -4576,28 +4578,50 @@
return false;
}
+ static_assert(std::is_same<uint32_t, Res_value::data_type>::value,
+ "Res_value::data_type has changed. The range checks in this "
+ "function are no longer correct.");
+
// Decimal or hex?
- if (s[i] == '0' && s[i+1] == 'x') {
- if (outValue)
- outValue->dataType = outValue->TYPE_INT_HEX;
+ bool isHex;
+ if (len > 1 && s[i] == '0' && s[i+1] == 'x') {
+ isHex = true;
i += 2;
+
+ if (neg) {
+ return false;
+ }
+
+ if (i == len) {
+ // Just u"0x"
+ return false;
+ }
+
bool error = false;
while (i < len && !error) {
val = (val*16) + get_hex(s[i], &error);
i++;
+
+ if (val > std::numeric_limits<uint32_t>::max()) {
+ return false;
+ }
}
if (error) {
return false;
}
} else {
- if (outValue)
- outValue->dataType = outValue->TYPE_INT_DEC;
+ isHex = false;
while (i < len) {
if (s[i] < '0' || s[i] > '9') {
return false;
}
val = (val*10) + s[i]-'0';
i++;
+
+ if ((neg && -val < std::numeric_limits<int32_t>::min()) ||
+ (!neg && val > std::numeric_limits<int32_t>::max())) {
+ return false;
+ }
}
}
@@ -4607,13 +4631,21 @@
i++;
}
- if (i == len) {
- if (outValue)
- outValue->data = val;
- return true;
+ if (i != len) {
+ return false;
}
- return false;
+ if (outValue) {
+ outValue->dataType =
+ isHex ? outValue->TYPE_INT_HEX : outValue->TYPE_INT_DEC;
+ outValue->data = static_cast<Res_value::data_type>(val);
+ }
+ return true;
+}
+
+bool ResTable::stringToInt(const char16_t* s, size_t len, Res_value* outValue)
+{
+ return U16StringToInt(s, len, outValue);
}
bool ResTable::stringToFloat(const char16_t* s, size_t len, Res_value* outValue)
diff --git a/libs/androidfw/ZipFileRO.cpp b/libs/androidfw/ZipFileRO.cpp
index af3d9b3..37aae52 100644
--- a/libs/androidfw/ZipFileRO.cpp
+++ b/libs/androidfw/ZipFileRO.cpp
@@ -39,7 +39,7 @@
class _ZipEntryRO {
public:
ZipEntry entry;
- ZipEntryName name;
+ ZipString name;
void *cookie;
_ZipEntryRO() : cookie(NULL) {}
@@ -79,7 +79,7 @@
{
_ZipEntryRO* data = new _ZipEntryRO;
- data->name = ZipEntryName(entryName);
+ data->name = ZipString(entryName);
const int32_t error = FindEntry(mHandle, data->name, &(data->entry));
if (error) {
@@ -96,8 +96,9 @@
* Returns "false" if the offsets to the fields or the contents of the fields
* appear to be bogus.
*/
-bool ZipFileRO::getEntryInfo(ZipEntryRO entry, int* pMethod, size_t* pUncompLen,
- size_t* pCompLen, off64_t* pOffset, long* pModWhen, long* pCrc32) const
+bool ZipFileRO::getEntryInfo(ZipEntryRO entry, uint16_t* pMethod,
+ uint32_t* pUncompLen, uint32_t* pCompLen, off64_t* pOffset,
+ uint32_t* pModWhen, uint32_t* pCrc32) const
{
const _ZipEntryRO* zipEntry = reinterpret_cast<_ZipEntryRO*>(entry);
const ZipEntry& ze = zipEntry->entry;
@@ -126,8 +127,17 @@
bool ZipFileRO::startIteration(void** cookie)
{
+ return startIteration(cookie, NULL, NULL);
+}
+
+bool ZipFileRO::startIteration(void** cookie, const char* prefix, const char* suffix)
+{
_ZipEntryRO* ze = new _ZipEntryRO;
- int32_t error = StartIteration(mHandle, &(ze->cookie), NULL /* prefix */);
+ ZipString pe(prefix ? prefix : "");
+ ZipString se(suffix ? suffix : "");
+ int32_t error = StartIteration(mHandle, &(ze->cookie),
+ prefix ? &pe : NULL,
+ suffix ? &se : NULL);
if (error) {
ALOGW("Could not start iteration over %s: %s", mFileName, ErrorCodeString(error));
delete ze;
@@ -165,7 +175,7 @@
/*
* Copy the entry's filename to the buffer.
*/
-int ZipFileRO::getEntryFileName(ZipEntryRO entry, char* buffer, int bufLen)
+int ZipFileRO::getEntryFileName(ZipEntryRO entry, char* buffer, size_t bufLen)
const
{
const _ZipEntryRO* zipEntry = reinterpret_cast<_ZipEntryRO*>(entry);
diff --git a/libs/androidfw/tests/Android.mk b/libs/androidfw/tests/Android.mk
index 58b78b5..a353575 100644
--- a/libs/androidfw/tests/Android.mk
+++ b/libs/androidfw/tests/Android.mk
@@ -19,6 +19,7 @@
# targets here.
# ==========================================================
LOCAL_PATH:= $(call my-dir)
+
testFiles := \
AttributeFinder_test.cpp \
ByteBucketArray_test.cpp \
@@ -32,27 +33,33 @@
TypeWrappers_test.cpp \
ZipUtils_test.cpp
+androidfw_test_cflags := \
+ -Wall \
+ -Werror \
+ -Wunused \
+ -Wunreachable-code \
+ -Wno-missing-field-initializers \
+
+# gtest is broken.
+androidfw_test_cflags += -Wno-unnamed-type-template-args
+
# ==========================================================
# Build the host tests: libandroidfw_tests
# ==========================================================
include $(CLEAR_VARS)
LOCAL_MODULE := libandroidfw_tests
-
-LOCAL_CFLAGS += -Wall -Werror -Wunused -Wunreachable-code
-# gtest is broken.
-LOCAL_CFLAGS += -Wno-unnamed-type-template-args
-
+LOCAL_CFLAGS := $(androidfw_test_cflags)
LOCAL_SRC_FILES := $(testFiles)
LOCAL_STATIC_LIBRARIES := \
libandroidfw \
libutils \
libcutils \
- liblog
+ liblog \
+ libz \
include $(BUILD_HOST_NATIVE_TEST)
-
# ==========================================================
# Build the device tests: libandroidfw_tests
# ==========================================================
@@ -60,14 +67,11 @@
include $(CLEAR_VARS)
LOCAL_MODULE := libandroidfw_tests
-
-LOCAL_CFLAGS += -Wall -Werror -Wunused -Wunreachable-code
-# gtest is broken.
-LOCAL_CFLAGS += -Wno-unnamed-type-template-args
-
+LOCAL_CFLAGS := $(androidfw_test_cflags)
LOCAL_SRC_FILES := $(testFiles) \
BackupData_test.cpp \
- ObbFile_test.cpp
+ ObbFile_test.cpp \
+
LOCAL_SHARED_LIBRARIES := \
libandroidfw \
libcutils \
diff --git a/libs/androidfw/tests/BackupData_test.cpp b/libs/androidfw/tests/BackupData_test.cpp
index 92af7fe..e25b616 100644
--- a/libs/androidfw/tests/BackupData_test.cpp
+++ b/libs/androidfw/tests/BackupData_test.cpp
@@ -108,7 +108,7 @@
EXPECT_EQ(DATA1[i], dataBytes[i])
<< "data character " << i << " should be equal";
}
- delete dataBytes;
+ delete[] dataBytes;
delete writer;
delete reader;
}
diff --git a/libs/androidfw/tests/ResTable_test.cpp b/libs/androidfw/tests/ResTable_test.cpp
index 6a9314e..dcfe91e 100644
--- a/libs/androidfw/tests/ResTable_test.cpp
+++ b/libs/androidfw/tests/ResTable_test.cpp
@@ -16,6 +16,10 @@
#include <androidfw/ResourceTypes.h>
+#include <codecvt>
+#include <locale>
+#include <string>
+
#include <utils/String8.h>
#include <utils/String16.h>
#include "TestHelpers.h"
@@ -201,4 +205,81 @@
ASSERT_LT(table.getResource(base::R::integer::number1, &val, MAY_NOT_BE_BAG), 0);
}
+void testU16StringToInt(const char16_t* str, uint32_t expectedValue,
+ bool expectSuccess, bool expectHex) {
+ size_t len = std::char_traits<char16_t>::length(str);
+
+ // Gtest can't print UTF-16 strings, so we have to convert to UTF-8 :(
+ std::wstring_convert<std::codecvt_utf8_utf16<char16_t>, char16_t> convert;
+ std::string s = convert.to_bytes(std::u16string(str, len));
+
+ Res_value out = {};
+ ASSERT_EQ(expectSuccess, U16StringToInt(str, len, &out))
+ << "Failed with " << s;
+
+ if (!expectSuccess) {
+ ASSERT_EQ(out.TYPE_NULL, out.dataType) << "Failed with " << s;
+ return;
+ }
+
+ if (expectHex) {
+ ASSERT_EQ(out.TYPE_INT_HEX, out.dataType) << "Failed with " << s;
+ } else {
+ ASSERT_EQ(out.TYPE_INT_DEC, out.dataType) << "Failed with " << s;
+ }
+
+ ASSERT_EQ(expectedValue, out.data) << "Failed with " << s;
+}
+
+TEST(ResTableTest, U16StringToInt) {
+ testU16StringToInt(u"", 0U, false, false);
+ testU16StringToInt(u" ", 0U, false, false);
+ testU16StringToInt(u"\t\n", 0U, false, false);
+
+ testU16StringToInt(u"abcd", 0U, false, false);
+ testU16StringToInt(u"10abcd", 0U, false, false);
+ testU16StringToInt(u"42 42", 0U, false, false);
+ testU16StringToInt(u"- 42", 0U, false, false);
+ testU16StringToInt(u"-", 0U, false, false);
+
+ testU16StringToInt(u"0x", 0U, false, true);
+ testU16StringToInt(u"0xnope", 0U, false, true);
+ testU16StringToInt(u"0X42", 0U, false, true);
+ testU16StringToInt(u"0x42 0x42", 0U, false, true);
+ testU16StringToInt(u"-0x0", 0U, false, true);
+ testU16StringToInt(u"-0x42", 0U, false, true);
+ testU16StringToInt(u"- 0x42", 0U, false, true);
+
+ // Note that u" 42" would pass. This preserves the old behavior, but it may
+ // not be desired.
+ testU16StringToInt(u"42 ", 0U, false, false);
+ testU16StringToInt(u"0x42 ", 0U, false, true);
+
+ // Decimal cases.
+ testU16StringToInt(u"0", 0U, true, false);
+ testU16StringToInt(u"-0", 0U, true, false);
+ testU16StringToInt(u"42", 42U, true, false);
+ testU16StringToInt(u" 42", 42U, true, false);
+ testU16StringToInt(u"-42", static_cast<uint32_t>(-42), true, false);
+ testU16StringToInt(u" -42", static_cast<uint32_t>(-42), true, false);
+ testU16StringToInt(u"042", 42U, true, false);
+ testU16StringToInt(u"-042", static_cast<uint32_t>(-42), true, false);
+
+ // Hex cases.
+ testU16StringToInt(u"0x0", 0x0, true, true);
+ testU16StringToInt(u"0x42", 0x42, true, true);
+ testU16StringToInt(u" 0x42", 0x42, true, true);
+
+ // Just before overflow cases:
+ testU16StringToInt(u"2147483647", INT_MAX, true, false);
+ testU16StringToInt(u"-2147483648", static_cast<uint32_t>(INT_MIN), true,
+ false);
+ testU16StringToInt(u"0xffffffff", UINT_MAX, true, true);
+
+ // Overflow cases:
+ testU16StringToInt(u"2147483648", 0U, false, false);
+ testU16StringToInt(u"-2147483649", 0U, false, false);
+ testU16StringToInt(u"0x1ffffffff", 0U, false, true);
+}
+
}
diff --git a/libs/hwui/AnimatorManager.cpp b/libs/hwui/AnimatorManager.cpp
index c28fb88..9dacce4 100644
--- a/libs/hwui/AnimatorManager.cpp
+++ b/libs/hwui/AnimatorManager.cpp
@@ -123,8 +123,6 @@
}
void AnimatorManager::animateNoDamage(TreeInfo& info) {
- if (!mAnimators.size()) return;
-
animateCommon(info);
}
@@ -167,7 +165,7 @@
};
void AnimatorManager::endAllActiveAnimators() {
- ALOGD("endAllStagingAnimators on %p (%s) with handle %p",
+ ALOGD("endAllActiveAnimators on %p (%s) with handle %p",
&mParent, mParent.getName(), mAnimationHandle);
EndActiveAnimatorsFunctor functor(mAnimationHandle->context());
for_each(mAnimators.begin(), mAnimators.end(), functor);
diff --git a/libs/hwui/Caches.cpp b/libs/hwui/Caches.cpp
index cdf8150..77b66f2 100644
--- a/libs/hwui/Caches.cpp
+++ b/libs/hwui/Caches.cpp
@@ -25,6 +25,7 @@
#include "LayerRenderer.h"
#include "ShadowTessellator.h"
#include "RenderState.h"
+#include "utils/GLUtils.h"
namespace android {
@@ -368,6 +369,12 @@
clearGarbage();
glFinish();
+
+ // glFinish() need dequeue buffer, and it is not 100% success
+ // It generates gl error sometimes, this error will be there
+ // until glGetError called. Call GLUtils::dumpGLErrors to clean
+ // the error in case it leaks to other functions
+ GLUtils::dumpGLErrors();
}
///////////////////////////////////////////////////////////////////////////////
diff --git a/libs/hwui/Extensions.cpp b/libs/hwui/Extensions.cpp
index 84e7e65..25004b6 100644
--- a/libs/hwui/Extensions.cpp
+++ b/libs/hwui/Extensions.cpp
@@ -61,6 +61,7 @@
mHasTiledRendering = hasGlExtension("GL_QCOM_tiled_rendering");
mHas1BitStencil = hasGlExtension("GL_OES_stencil1");
mHas4BitStencil = hasGlExtension("GL_OES_stencil4");
+ mHasUnpackSubImage = hasGlExtension("GL_EXT_unpack_subimage");
// Query EGL extensions
findExtensions(eglQueryString(eglGetCurrentDisplay(), EGL_EXTENSIONS), mEglExtensionList);
diff --git a/libs/hwui/Extensions.h b/libs/hwui/Extensions.h
index 25d4c5e..b3cc451 100644
--- a/libs/hwui/Extensions.h
+++ b/libs/hwui/Extensions.h
@@ -41,7 +41,7 @@
inline bool has1BitStencil() const { return mHas1BitStencil; }
inline bool has4BitStencil() const { return mHas4BitStencil; }
inline bool hasNvSystemTime() const { return mHasNvSystemTime; }
- inline bool hasUnpackRowLength() const { return mVersionMajor >= 3; }
+ inline bool hasUnpackRowLength() const { return mVersionMajor >= 3 || mHasUnpackSubImage; }
inline bool hasPixelBufferObjects() const { return mVersionMajor >= 3; }
inline bool hasOcclusionQueries() const { return mVersionMajor >= 3; }
inline bool hasFloatTextures() const { return mVersionMajor >= 3; }
@@ -74,6 +74,7 @@
bool mHas1BitStencil;
bool mHas4BitStencil;
bool mHasNvSystemTime;
+ bool mHasUnpackSubImage;
int mVersionMajor;
int mVersionMinor;
diff --git a/libs/hwui/ShadowTessellator.cpp b/libs/hwui/ShadowTessellator.cpp
index 93d4b31..c1b0f7f 100644
--- a/libs/hwui/ShadowTessellator.cpp
+++ b/libs/hwui/ShadowTessellator.cpp
@@ -20,6 +20,7 @@
#include <math.h>
#include <utils/Log.h>
#include <utils/Trace.h>
+#include <utils/MathUtils.h>
#include "AmbientShadow.h"
#include "Caches.h"
@@ -264,6 +265,8 @@
// acos( ) --- [0, M_PI]
// floor(...) --- [0, EXTRA_VERTEX_PER_PI]
float dotProduct = vector1.dot(vector2);
+ // make sure that dotProduct value is in acsof input range [-1, 1]
+ dotProduct = MathUtils::clamp(dotProduct, -1.0f, 1.0f);
// TODO: Use look up table for the dotProduct to extraVerticesNumber
// computation, if needed.
float angle = acosf(dotProduct);
diff --git a/libs/hwui/tests/Android.mk b/libs/hwui/tests/Android.mk
index 7bdce7f..3d405ef 100644
--- a/libs/hwui/tests/Android.mk
+++ b/libs/hwui/tests/Android.mk
@@ -50,7 +50,6 @@
LOCAL_MODULE_STEM_32 := hwuitest
LOCAL_MODULE_STEM_64 := hwuitest64
-include external/stlport/libstlport.mk
include $(BUILD_EXECUTABLE)
include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/media/java/android/media/AudioManager.java b/media/java/android/media/AudioManager.java
index ed6ce87..aced5b9 100644
--- a/media/java/android/media/AudioManager.java
+++ b/media/java/android/media/AudioManager.java
@@ -58,7 +58,8 @@
*/
public class AudioManager {
- private final Context mApplicationContext;
+ private Context mOriginalContext;
+ private Context mApplicationContext;
private long mVolumeKeyUpTime;
private final boolean mUseMasterVolume;
private final boolean mUseVolumeKeySounds;
@@ -641,16 +642,35 @@
* @hide
*/
public AudioManager(Context context) {
- mApplicationContext = context.getApplicationContext();
- mUseMasterVolume = mApplicationContext.getResources().getBoolean(
+ setContext(context);
+ mUseMasterVolume = getContext().getResources().getBoolean(
com.android.internal.R.bool.config_useMasterVolume);
- mUseVolumeKeySounds = mApplicationContext.getResources().getBoolean(
+ mUseVolumeKeySounds = getContext().getResources().getBoolean(
com.android.internal.R.bool.config_useVolumeKeySounds);
- mUseFixedVolume = mApplicationContext.getResources().getBoolean(
+ mUseFixedVolume = getContext().getResources().getBoolean(
com.android.internal.R.bool.config_useFixedVolume);
sAudioPortEventHandler.init();
}
+ private Context getContext() {
+ if (mApplicationContext == null) {
+ setContext(mOriginalContext);
+ }
+ if (mApplicationContext != null) {
+ return mApplicationContext;
+ }
+ return mOriginalContext;
+ }
+
+ private void setContext(Context context) {
+ mApplicationContext = context.getApplicationContext();
+ if (mApplicationContext != null) {
+ mOriginalContext = null;
+ } else {
+ mOriginalContext = context;
+ }
+ }
+
private static IAudioService getService()
{
if (sService != null) {
@@ -685,7 +705,7 @@
* or {@link KeyEvent#KEYCODE_MEDIA_AUDIO_TRACK}.
*/
public void dispatchMediaKeyEvent(KeyEvent keyEvent) {
- MediaSessionLegacyHelper helper = MediaSessionLegacyHelper.getHelper(mApplicationContext);
+ MediaSessionLegacyHelper helper = MediaSessionLegacyHelper.getHelper(getContext());
helper.sendMediaButtonEvent(keyEvent, false);
}
@@ -746,7 +766,7 @@
break;
case KeyEvent.KEYCODE_VOLUME_MUTE:
if (event.getRepeatCount() == 0) {
- MediaSessionLegacyHelper.getHelper(mApplicationContext)
+ MediaSessionLegacyHelper.getHelper(getContext())
.sendVolumeKeyEvent(event, false);
}
break;
@@ -779,7 +799,7 @@
mVolumeKeyUpTime = SystemClock.uptimeMillis();
break;
case KeyEvent.KEYCODE_VOLUME_MUTE:
- MediaSessionLegacyHelper.getHelper(mApplicationContext)
+ MediaSessionLegacyHelper.getHelper(getContext())
.sendVolumeKeyEvent(event, false);
break;
}
@@ -826,10 +846,10 @@
try {
if (mUseMasterVolume) {
service.adjustMasterVolume(direction, flags,
- mApplicationContext.getOpPackageName());
+ getContext().getOpPackageName());
} else {
service.adjustStreamVolume(streamType, direction, flags,
- mApplicationContext.getOpPackageName());
+ getContext().getOpPackageName());
}
} catch (RemoteException e) {
Log.e(TAG, "Dead object in adjustStreamVolume", e);
@@ -860,10 +880,10 @@
try {
if (mUseMasterVolume) {
service.adjustMasterVolume(direction, flags,
- mApplicationContext.getOpPackageName());
+ getContext().getOpPackageName());
} else {
MediaSessionLegacyHelper helper =
- MediaSessionLegacyHelper.getHelper(mApplicationContext);
+ MediaSessionLegacyHelper.getHelper(getContext());
helper.sendAdjustVolumeBy(USE_DEFAULT_STREAM_TYPE, direction, flags);
}
} catch (RemoteException e) {
@@ -896,10 +916,10 @@
try {
if (mUseMasterVolume) {
service.adjustMasterVolume(direction, flags,
- mApplicationContext.getOpPackageName());
+ getContext().getOpPackageName());
} else {
MediaSessionLegacyHelper helper =
- MediaSessionLegacyHelper.getHelper(mApplicationContext);
+ MediaSessionLegacyHelper.getHelper(getContext());
helper.sendAdjustVolumeBy(suggestedStreamType, direction, flags);
}
} catch (RemoteException e) {
@@ -919,7 +939,7 @@
public void adjustMasterVolume(int steps, int flags) {
IAudioService service = getService();
try {
- service.adjustMasterVolume(steps, flags, mApplicationContext.getOpPackageName());
+ service.adjustMasterVolume(steps, flags, getContext().getOpPackageName());
} catch (RemoteException e) {
Log.e(TAG, "Dead object in adjustMasterVolume", e);
}
@@ -1060,7 +1080,7 @@
}
IAudioService service = getService();
try {
- service.setRingerModeExternal(ringerMode, mApplicationContext.getOpPackageName());
+ service.setRingerModeExternal(ringerMode, getContext().getOpPackageName());
} catch (RemoteException e) {
Log.e(TAG, "Dead object in setRingerMode", e);
}
@@ -1082,10 +1102,10 @@
IAudioService service = getService();
try {
if (mUseMasterVolume) {
- service.setMasterVolume(index, flags, mApplicationContext.getOpPackageName());
+ service.setMasterVolume(index, flags, getContext().getOpPackageName());
} else {
service.setStreamVolume(streamType, index, flags,
- mApplicationContext.getOpPackageName());
+ getContext().getOpPackageName());
}
} catch (RemoteException e) {
Log.e(TAG, "Dead object in setStreamVolume", e);
@@ -1151,7 +1171,7 @@
public void setMasterVolume(int index, int flags) {
IAudioService service = getService();
try {
- service.setMasterVolume(index, flags, mApplicationContext.getOpPackageName());
+ service.setMasterVolume(index, flags, getContext().getOpPackageName());
} catch (RemoteException e) {
Log.e(TAG, "Dead object in setMasterVolume", e);
}
@@ -1252,7 +1272,7 @@
public void setMasterMute(boolean state, int flags) {
IAudioService service = getService();
try {
- service.setMasterMute(state, flags, mApplicationContext.getOpPackageName(), mICallBack);
+ service.setMasterMute(state, flags, getContext().getOpPackageName(), mICallBack);
} catch (RemoteException e) {
Log.e(TAG, "Dead object in setMasterMute", e);
}
@@ -1490,7 +1510,7 @@
* @see #startBluetoothSco()
*/
public boolean isBluetoothScoAvailableOffCall() {
- return mApplicationContext.getResources().getBoolean(
+ return getContext().getResources().getBoolean(
com.android.internal.R.bool.config_bluetooth_sco_off_call);
}
@@ -1543,7 +1563,7 @@
IAudioService service = getService();
try {
service.startBluetoothSco(mICallBack,
- mApplicationContext.getApplicationInfo().targetSdkVersion);
+ getContext().getApplicationInfo().targetSdkVersion);
} catch (RemoteException e) {
Log.e(TAG, "Dead object in startBluetoothSco", e);
}
@@ -1691,7 +1711,7 @@
public void setMicrophoneMute(boolean on){
IAudioService service = getService();
try {
- service.setMicrophoneMute(on, mApplicationContext.getOpPackageName());
+ service.setMicrophoneMute(on, getContext().getOpPackageName());
} catch (RemoteException e) {
Log.e(TAG, "Dead object in setMicrophoneMute", e);
}
@@ -2122,7 +2142,7 @@
* Settings has an in memory cache, so this is fast.
*/
private boolean querySoundEffectsEnabled(int user) {
- return Settings.System.getIntForUser(mApplicationContext.getContentResolver(),
+ return Settings.System.getIntForUser(getContext().getContentResolver(),
Settings.System.SOUND_EFFECTS_ENABLED, 0, user) != 0;
}
@@ -2534,7 +2554,7 @@
try {
status = service.requestAudioFocus(requestAttributes, durationHint, mICallBack,
mAudioFocusDispatcher, getIdForAudioFocusListener(l),
- mApplicationContext.getOpPackageName() /* package name */, flags,
+ getContext().getOpPackageName() /* package name */, flags,
ap != null ? ap.cb() : null);
} catch (RemoteException e) {
Log.e(TAG, "Can't call requestAudioFocus() on AudioService:", e);
@@ -2559,7 +2579,7 @@
.setInternalLegacyStreamType(streamType).build(),
durationHint, mICallBack, null,
MediaFocusControl.IN_VOICE_COMM_FOCUS_ID,
- mApplicationContext.getOpPackageName(),
+ getContext().getOpPackageName(),
AUDIOFOCUS_FLAG_LOCK,
null /* policy token */);
} catch (RemoteException e) {
@@ -2628,7 +2648,7 @@
if (eventReceiver == null) {
return;
}
- if (!eventReceiver.getPackageName().equals(mApplicationContext.getPackageName())) {
+ if (!eventReceiver.getPackageName().equals(getContext().getPackageName())) {
Log.e(TAG, "registerMediaButtonEventReceiver() error: " +
"receiver and context package names don't match");
return;
@@ -2637,7 +2657,7 @@
Intent mediaButtonIntent = new Intent(Intent.ACTION_MEDIA_BUTTON);
// the associated intent will be handled by the component being registered
mediaButtonIntent.setComponent(eventReceiver);
- PendingIntent pi = PendingIntent.getBroadcast(mApplicationContext,
+ PendingIntent pi = PendingIntent.getBroadcast(getContext(),
0/*requestCode, ignored*/, mediaButtonIntent, 0/*flags*/);
registerMediaButtonIntent(pi, eventReceiver);
}
@@ -2671,8 +2691,8 @@
Log.e(TAG, "Cannot call registerMediaButtonIntent() with a null parameter");
return;
}
- MediaSessionLegacyHelper helper = MediaSessionLegacyHelper.getHelper(mApplicationContext);
- helper.addMediaButtonListener(pi, eventReceiver, mApplicationContext);
+ MediaSessionLegacyHelper helper = MediaSessionLegacyHelper.getHelper(getContext());
+ helper.addMediaButtonListener(pi, eventReceiver, getContext());
}
/**
@@ -2690,7 +2710,7 @@
Intent mediaButtonIntent = new Intent(Intent.ACTION_MEDIA_BUTTON);
// the associated intent will be handled by the component being registered
mediaButtonIntent.setComponent(eventReceiver);
- PendingIntent pi = PendingIntent.getBroadcast(mApplicationContext,
+ PendingIntent pi = PendingIntent.getBroadcast(getContext(),
0/*requestCode, ignored*/, mediaButtonIntent, 0/*flags*/);
unregisterMediaButtonIntent(pi);
}
@@ -2713,7 +2733,7 @@
* @hide
*/
public void unregisterMediaButtonIntent(PendingIntent pi) {
- MediaSessionLegacyHelper helper = MediaSessionLegacyHelper.getHelper(mApplicationContext);
+ MediaSessionLegacyHelper helper = MediaSessionLegacyHelper.getHelper(getContext());
helper.removeMediaButtonListener(pi);
}
@@ -2730,7 +2750,7 @@
if ((rcClient == null) || (rcClient.getRcMediaIntent() == null)) {
return;
}
- rcClient.registerWithSession(MediaSessionLegacyHelper.getHelper(mApplicationContext));
+ rcClient.registerWithSession(MediaSessionLegacyHelper.getHelper(getContext()));
}
/**
@@ -2745,7 +2765,7 @@
if ((rcClient == null) || (rcClient.getRcMediaIntent() == null)) {
return;
}
- rcClient.unregisterWithSession(MediaSessionLegacyHelper.getHelper(mApplicationContext));
+ rcClient.unregisterWithSession(MediaSessionLegacyHelper.getHelper(getContext()));
}
/**
@@ -3406,7 +3426,7 @@
*/
public void setRingerModeInternal(int ringerMode) {
try {
- getService().setRingerModeInternal(ringerMode, mApplicationContext.getOpPackageName());
+ getService().setRingerModeInternal(ringerMode, getContext().getOpPackageName());
} catch (RemoteException e) {
Log.w(TAG, "Error calling setRingerModeInternal", e);
}
diff --git a/media/java/android/media/MediaHTTPConnection.java b/media/java/android/media/MediaHTTPConnection.java
index b2886bb..541d871 100644
--- a/media/java/android/media/MediaHTTPConnection.java
+++ b/media/java/android/media/MediaHTTPConnection.java
@@ -32,6 +32,7 @@
import java.net.MalformedURLException;
import java.net.NoRouteToHostException;
import java.net.ProtocolException;
+import java.net.UnknownServiceException;
import java.util.HashMap;
import java.util.Map;
@@ -337,7 +338,10 @@
} catch (NoRouteToHostException e) {
Log.w(TAG, "readAt " + offset + " / " + size + " => " + e);
return MEDIA_ERROR_UNSUPPORTED;
- } catch (IOException e) {
+ } catch (UnknownServiceException e) {
+ Log.w(TAG, "readAt " + offset + " / " + size + " => " + e);
+ return MEDIA_ERROR_UNSUPPORTED;
+ }catch (IOException e) {
if (VERBOSE) {
Log.d(TAG, "readAt " + offset + " / " + size + " => -1");
}
diff --git a/media/java/android/media/MediaMetadataRetriever.java b/media/java/android/media/MediaMetadataRetriever.java
index 9a69c06..9a73dfc 100644
--- a/media/java/android/media/MediaMetadataRetriever.java
+++ b/media/java/android/media/MediaMetadataRetriever.java
@@ -64,9 +64,7 @@
throw new IllegalArgumentException();
}
- FileInputStream is = null;
- try {
- is = new FileInputStream(path);
+ try (FileInputStream is = new FileInputStream(path)) {
FileDescriptor fd = is.getFD();
setDataSource(fd, 0, 0x7ffffffffffffffL);
} catch (FileNotFoundException fileEx) {
@@ -74,12 +72,6 @@
} catch (IOException ioEx) {
throw new IllegalArgumentException();
}
-
- try {
- if (is != null) {
- is.close();
- }
- } catch (Exception e) {}
}
/**
diff --git a/media/java/android/media/MediaPlayer.java b/media/java/android/media/MediaPlayer.java
index 615dac2..ccfa7ed 100644
--- a/media/java/android/media/MediaPlayer.java
+++ b/media/java/android/media/MediaPlayer.java
@@ -777,7 +777,7 @@
* <li> {@link #VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING}
* </ul>
*
- * @param mode target video scaling mode. Most be one of the supported
+ * @param mode target video scaling mode. Must be one of the supported
* video scaling modes; otherwise, IllegalArgumentException will be thrown.
*
* @see MediaPlayer#VIDEO_SCALING_MODE_SCALE_TO_FIT
diff --git a/media/tests/MediaDump/src/com/android/mediadump/VideoDumpActivity.java b/media/tests/MediaDump/src/com/android/mediadump/VideoDumpActivity.java
index 46cb64e..b8f5704 100644
--- a/media/tests/MediaDump/src/com/android/mediadump/VideoDumpActivity.java
+++ b/media/tests/MediaDump/src/com/android/mediadump/VideoDumpActivity.java
@@ -19,7 +19,7 @@
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
-import android.content.DialogInterface;;
+import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaInserterTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaInserterTest.java
index eb1a589..05df014 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaInserterTest.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaInserterTest.java
@@ -27,12 +27,9 @@
import android.test.InstrumentationTestCase;
import android.test.suitebuilder.annotation.SmallTest;
-import dalvik.annotation.TestTargetClass;
-
import org.easymock.EasyMock;
import org.easymock.IArgumentMatcher;
-@TestTargetClass(MediaInserter.class)
public class MediaInserterTest extends InstrumentationTestCase {
private MediaInserter mMediaInserter;
diff --git a/native/graphics/jni/Android.mk b/native/graphics/jni/Android.mk
index 91c9ac6..b7f0fbd 100644
--- a/native/graphics/jni/Android.mk
+++ b/native/graphics/jni/Android.mk
@@ -31,7 +31,7 @@
LOCAL_CFLAGS += -Wall -Werror -Wunused -Wunreachable-code
# TODO: This is to work around b/19059885. Remove after root cause is fixed
-LOCAL_LDFLAGS_arm := -Wl,--hash-style=sysv
+LOCAL_LDFLAGS_arm := -Wl,--hash-style=both
include $(BUILD_SHARED_LIBRARY)
diff --git a/packages/InputDevices/Android.mk b/packages/InputDevices/Android.mk
index f537022..e7190dc 100644
--- a/packages/InputDevices/Android.mk
+++ b/packages/InputDevices/Android.mk
@@ -42,7 +42,7 @@
$(hide) mkdir -p $(dir $@) && touch $@
# Run validatekeymaps unconditionally for platform build.
-droidcore all_modules : $(LOCAL_BUILT_MODULE)
+droidcore : $(LOCAL_BUILT_MODULE)
# Reset temp vars.
validatekeymaps :=
diff --git a/packages/PrintSpooler/src/com/android/printspooler/model/PrintSpoolerService.java b/packages/PrintSpooler/src/com/android/printspooler/model/PrintSpoolerService.java
index 2cc5e04..54d2821 100644
--- a/packages/PrintSpooler/src/com/android/printspooler/model/PrintSpoolerService.java
+++ b/packages/PrintSpooler/src/com/android/printspooler/model/PrintSpoolerService.java
@@ -63,6 +63,7 @@
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
+import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
@@ -756,7 +757,7 @@
out = mStatePersistFile.startWrite();
XmlSerializer serializer = new FastXmlSerializer();
- serializer.setOutput(out, "utf-8");
+ serializer.setOutput(out, StandardCharsets.UTF_8.name());
serializer.startDocument(null, true);
serializer.startTag(null, TAG_SPOOLER);
@@ -947,7 +948,7 @@
}
try {
XmlPullParser parser = Xml.newPullParser();
- parser.setInput(in, null);
+ parser.setInput(in, StandardCharsets.UTF_8.name());
parseState(parser);
} catch (IllegalStateException ise) {
Slog.w(LOG_TAG, "Failed parsing ", ise);
diff --git a/packages/PrintSpooler/src/com/android/printspooler/ui/FusedPrintersProvider.java b/packages/PrintSpooler/src/com/android/printspooler/ui/FusedPrintersProvider.java
index 22a7f86..80c28e0 100644
--- a/packages/PrintSpooler/src/com/android/printspooler/ui/FusedPrintersProvider.java
+++ b/packages/PrintSpooler/src/com/android/printspooler/ui/FusedPrintersProvider.java
@@ -46,6 +46,7 @@
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
+import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedHashMap;
@@ -562,7 +563,7 @@
try {
List<PrinterInfo> printers = new ArrayList<>();
XmlPullParser parser = Xml.newPullParser();
- parser.setInput(in, null);
+ parser.setInput(in, StandardCharsets.UTF_8.name());
parseState(parser, printers);
// Take a note which version of the history was read.
mLastReadHistoryTimestamp = mStatePersistFile.getBaseFile().lastModified();
@@ -686,7 +687,7 @@
out = mStatePersistFile.startWrite();
XmlSerializer serializer = new FastXmlSerializer();
- serializer.setOutput(out, "utf-8");
+ serializer.setOutput(out, StandardCharsets.UTF_8.name());
serializer.startDocument(null, true);
serializer.startTag(null, TAG_PRINTERS);
diff --git a/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java b/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java
index 7c725b3..81f6d56 100644
--- a/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java
+++ b/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java
@@ -236,7 +236,9 @@
Log.d(TAG, "Visibility changed to visible=" + visible);
}
mVisible = visible;
- drawFrame();
+ if (visible) {
+ drawFrame();
+ }
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
index fae0643..5f4e4ca 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
@@ -33,6 +33,7 @@
import android.media.AudioManager;
import android.media.SoundPool;
import android.os.Bundle;
+import android.os.DeadObjectException;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
@@ -380,14 +381,17 @@
+ ",state=" + simState + ")");
}
- try {
- int size = mKeyguardStateCallbacks.size();
- boolean simPinSecure = mUpdateMonitor.isSimPinSecure();
- for (int i = 0; i < size; i++) {
+ int size = mKeyguardStateCallbacks.size();
+ boolean simPinSecure = mUpdateMonitor.isSimPinSecure();
+ for (int i = size - 1; i >= 0; i--) {
+ try {
mKeyguardStateCallbacks.get(i).onSimSecureStateChanged(simPinSecure);
+ } catch (RemoteException e) {
+ Slog.w(TAG, "Failed to call onSimSecureStateChanged", e);
+ if (e instanceof DeadObjectException) {
+ mKeyguardStateCallbacks.remove(i);
+ }
}
- } catch (RemoteException e) {
- Slog.w(TAG, "Failed to call onSimSecureStateChanged", e);
}
switch (simState) {
@@ -540,6 +544,7 @@
// Assume keyguard is showing (unless it's disabled) until we know for sure...
setShowingLocked(!shouldWaitForProvisioning() && !mLockPatternUtils.isLockScreenDisabled());
+ updateInputRestrictedLocked();
mTrustManager.reportKeyguardShowingChanged();
mStatusBarKeyguardViewManager = new StatusBarKeyguardViewManager(mContext,
@@ -929,13 +934,16 @@
boolean inputRestricted = isInputRestricted();
if (mInputRestricted != inputRestricted) {
mInputRestricted = inputRestricted;
- try {
- int size = mKeyguardStateCallbacks.size();
- for (int i = 0; i < size; i++) {
+ int size = mKeyguardStateCallbacks.size();
+ for (int i = size - 1; i >= 0; i--) {
+ try {
mKeyguardStateCallbacks.get(i).onInputRestrictedStateChanged(inputRestricted);
+ } catch (RemoteException e) {
+ Slog.w(TAG, "Failed to call onDeviceProvisioned", e);
+ if (e instanceof DeadObjectException) {
+ mKeyguardStateCallbacks.remove(i);
+ }
}
- } catch (RemoteException e) {
- Slog.w(TAG, "Failed to call onDeviceProvisioned", e);
}
}
}
@@ -1531,13 +1539,16 @@
private void setShowingLocked(boolean showing) {
if (showing != mShowing) {
mShowing = showing;
- try {
- int size = mKeyguardStateCallbacks.size();
- for (int i = 0; i < size; i++) {
+ int size = mKeyguardStateCallbacks.size();
+ for (int i = size - 1; i >= 0; i--) {
+ try {
mKeyguardStateCallbacks.get(i).onShowingStateChanged(showing);
+ } catch (RemoteException e) {
+ Slog.w(TAG, "Failed to call onShowingStateChanged", e);
+ if (e instanceof DeadObjectException) {
+ mKeyguardStateCallbacks.remove(i);
+ }
}
- } catch (RemoteException e) {
- Slog.w(TAG, "Failed to call onShowingStateChanged", e);
}
updateInputRestrictedLocked();
mTrustManager.reportKeyguardShowingChanged();
@@ -1550,8 +1561,9 @@
try {
callback.onSimSecureStateChanged(mUpdateMonitor.isSimPinSecure());
callback.onShowingStateChanged(mShowing);
+ callback.onInputRestrictedStateChanged(mInputRestricted);
} catch (RemoteException e) {
- Slog.w(TAG, "Failed to call onShowingStateChanged or onSimSecureStateChanged", e);
+ Slog.w(TAG, "Failed to call onShowingStateChanged or onSimSecureStateChanged or onInputRestrictedStateChanged", e);
}
}
}
diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
index 69a4ac0..1e047b9 100644
--- a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
+++ b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
@@ -472,6 +472,11 @@
/** The window that is currently dismissing the keyguard. Dismissing the keyguard must only
* be done once per window. */
private WindowState mWinDismissingKeyguard;
+ /** When window is currently dismissing the keyguard, dismissing the keyguard must handle
+ * the keygaurd secure state change instantly case, e.g. the use case of inserting a PIN
+ * lock SIM card. This variable is used to record the previous keyguard secure state for
+ * monitoring secure state change on window dismissing keyguard. */
+ private boolean mSecureDismissingKeyguard;
/** The window that is currently showing "over" the keyguard. If there is an app window
* belonging to another app on top of this the keyguard shows. If there is a fullscreen
@@ -1562,6 +1567,8 @@
if (mImmersiveModeConfirmation != null) {
mImmersiveModeConfirmation.loadSetting(mCurrentUserId);
}
+ }
+ synchronized (mWindowManagerFuncs.getWindowManagerLock()) {
PolicyControl.reloadFromSetting(mContext);
}
if (updateRotation) {
@@ -4094,9 +4101,11 @@
mDismissKeyguard == DISMISS_KEYGUARD_NONE) {
if (DEBUG_LAYOUT) Slog.v(TAG,
"Setting mDismissKeyguard true by win " + win);
- mDismissKeyguard = mWinDismissingKeyguard == win ?
+ mDismissKeyguard = mWinDismissingKeyguard == win
+ && mSecureDismissingKeyguard == mKeyguardSecure ?
DISMISS_KEYGUARD_CONTINUE : DISMISS_KEYGUARD_START;
mWinDismissingKeyguard = win;
+ mSecureDismissingKeyguard = mKeyguardSecure;
mForceStatusBarFromKeyguard = mShowingLockscreen && mKeyguardSecure;
} else if (mAppsToBeHidden.isEmpty() && showWhenLocked) {
if (DEBUG_LAYOUT) Slog.v(TAG,
@@ -4120,8 +4129,9 @@
/** {@inheritDoc} */
@Override
public int finishPostLayoutPolicyLw() {
- if (mWinShowWhenLocked != null &&
- mWinShowWhenLocked != mTopFullscreenOpaqueWindowState) {
+ if (mWinShowWhenLocked != null && mTopFullscreenOpaqueWindowState != null &&
+ mWinShowWhenLocked.getAppToken() != mTopFullscreenOpaqueWindowState.getAppToken()
+ && isKeyguardLocked()) {
// A dialog is dismissing the keyguard. Put the wallpaper behind it and hide the
// fullscreen window.
// TODO: Make sure FLAG_SHOW_WALLPAPER is restored when dialog is dismissed. Or not.
@@ -4249,6 +4259,7 @@
}
} else {
mWinDismissingKeyguard = null;
+ mSecureDismissingKeyguard = false;
mKeyguardHidden = false;
if (setKeyguardOccludedLw(false)) {
changes |= FINISH_LAYOUT_REDO_LAYOUT
diff --git a/preloaded-classes b/preloaded-classes
index 151766f..7a41bb2 100644
--- a/preloaded-classes
+++ b/preloaded-classes
@@ -828,6 +828,11 @@
android.hardware.usb.UsbDevice
android.hardware.usb.UsbDeviceConnection
android.hardware.usb.UsbRequest
+# Initializing android.icu.impl.ICUBinary loads the ICU data.
+# Opening the files in the Zygote avoids StrictMode violations.
+# It also ensures the ICU data files are mapped on boot and all
+# apps will be consistent (even if files are added to /data).
+android.icu.impl.ICUBinary
android.inputmethodservice.ExtractEditText
android.location.Location
android.location.Location$1
diff --git a/rs/java/android/renderscript/Allocation.java b/rs/java/android/renderscript/Allocation.java
index 28547cc..bd8b652 100644
--- a/rs/java/android/renderscript/Allocation.java
+++ b/rs/java/android/renderscript/Allocation.java
@@ -51,6 +51,7 @@
* <a href="{@docRoot}guide/topics/renderscript/index.html">RenderScript</a> developer guide.</p>
* </div>
**/
+
public class Allocation extends BaseObj {
Type mType;
Bitmap mBitmap;
@@ -276,7 +277,7 @@
* @hide
* Enable/Disable AutoPadding for Vec3 elements.
*
- * @param useAutoPadding True: enable AutoPadding; flase: disable AutoPadding
+ * @param useAutoPadding True: enable AutoPadding; False: disable AutoPadding
*
*/
public void setAutoPadding(boolean useAutoPadding) {
@@ -455,28 +456,31 @@
*
*/
public void syncAll(int srcLocation) {
- Trace.traceBegin(RenderScript.TRACE_TAG, "syncAll");
- switch (srcLocation) {
- case USAGE_GRAPHICS_TEXTURE:
- case USAGE_SCRIPT:
- if ((mUsage & USAGE_SHARED) != 0) {
- copyFrom(mBitmap);
+ try {
+ Trace.traceBegin(RenderScript.TRACE_TAG, "syncAll");
+ switch (srcLocation) {
+ case USAGE_GRAPHICS_TEXTURE:
+ case USAGE_SCRIPT:
+ if ((mUsage & USAGE_SHARED) != 0) {
+ copyFrom(mBitmap);
+ }
+ break;
+ case USAGE_GRAPHICS_CONSTANTS:
+ case USAGE_GRAPHICS_VERTEX:
+ break;
+ case USAGE_SHARED:
+ if ((mUsage & USAGE_SHARED) != 0) {
+ copyTo(mBitmap);
+ }
+ break;
+ default:
+ throw new RSIllegalArgumentException("Source must be exactly one usage type.");
}
- break;
- case USAGE_GRAPHICS_CONSTANTS:
- case USAGE_GRAPHICS_VERTEX:
- break;
- case USAGE_SHARED:
- if ((mUsage & USAGE_SHARED) != 0) {
- copyTo(mBitmap);
- }
- break;
- default:
- throw new RSIllegalArgumentException("Source must be exactly one usage type.");
+ mRS.validate();
+ mRS.nAllocationSyncAll(getIDSafe(), srcLocation);
+ } finally {
+ Trace.traceEnd(RenderScript.TRACE_TAG);
}
- mRS.validate();
- mRS.nAllocationSyncAll(getIDSafe(), srcLocation);
- Trace.traceEnd(RenderScript.TRACE_TAG);
}
/**
@@ -487,14 +491,17 @@
*
*/
public void ioSend() {
- Trace.traceBegin(RenderScript.TRACE_TAG, "ioSend");
- if ((mUsage & USAGE_IO_OUTPUT) == 0) {
- throw new RSIllegalArgumentException(
- "Can only send buffer if IO_OUTPUT usage specified.");
+ try {
+ Trace.traceBegin(RenderScript.TRACE_TAG, "ioSend");
+ if ((mUsage & USAGE_IO_OUTPUT) == 0) {
+ throw new RSIllegalArgumentException(
+ "Can only send buffer if IO_OUTPUT usage specified.");
+ }
+ mRS.validate();
+ mRS.nAllocationIoSend(getID(mRS));
+ } finally {
+ Trace.traceEnd(RenderScript.TRACE_TAG);
}
- mRS.validate();
- mRS.nAllocationIoSend(getID(mRS));
- Trace.traceEnd(RenderScript.TRACE_TAG);
}
/**
@@ -503,14 +510,17 @@
*
*/
public void ioReceive() {
- Trace.traceBegin(RenderScript.TRACE_TAG, "ioReceive");
- if ((mUsage & USAGE_IO_INPUT) == 0) {
- throw new RSIllegalArgumentException(
- "Can only receive if IO_INPUT usage specified.");
+ try {
+ Trace.traceBegin(RenderScript.TRACE_TAG, "ioReceive");
+ if ((mUsage & USAGE_IO_INPUT) == 0) {
+ throw new RSIllegalArgumentException(
+ "Can only receive if IO_INPUT usage specified.");
+ }
+ mRS.validate();
+ mRS.nAllocationIoReceive(getID(mRS));
+ } finally {
+ Trace.traceEnd(RenderScript.TRACE_TAG);
}
- mRS.validate();
- mRS.nAllocationIoReceive(getID(mRS));
- Trace.traceEnd(RenderScript.TRACE_TAG);
}
/**
@@ -519,28 +529,31 @@
* @param d Source array.
*/
public void copyFrom(BaseObj[] d) {
- Trace.traceBegin(RenderScript.TRACE_TAG, "copyFrom");
- mRS.validate();
- validateIsObject();
- if (d.length != mCurrentCount) {
- throw new RSIllegalArgumentException("Array size mismatch, allocation sizeX = " +
- mCurrentCount + ", array length = " + d.length);
- }
+ try {
+ Trace.traceBegin(RenderScript.TRACE_TAG, "copyFrom");
+ mRS.validate();
+ validateIsObject();
+ if (d.length != mCurrentCount) {
+ throw new RSIllegalArgumentException("Array size mismatch, allocation sizeX = " +
+ mCurrentCount + ", array length = " + d.length);
+ }
- if (RenderScript.sPointerSize == 8) {
- long i[] = new long[d.length * 4];
- for (int ct=0; ct < d.length; ct++) {
- i[ct * 4] = d[ct].getID(mRS);
+ if (RenderScript.sPointerSize == 8) {
+ long i[] = new long[d.length * 4];
+ for (int ct=0; ct < d.length; ct++) {
+ i[ct * 4] = d[ct].getID(mRS);
+ }
+ copy1DRangeFromUnchecked(0, mCurrentCount, i);
+ } else {
+ int i[] = new int[d.length];
+ for (int ct=0; ct < d.length; ct++) {
+ i[ct] = (int) d[ct].getID(mRS);
+ }
+ copy1DRangeFromUnchecked(0, mCurrentCount, i);
}
- copy1DRangeFromUnchecked(0, mCurrentCount, i);
- } else {
- int i[] = new int[d.length];
- for (int ct=0; ct < d.length; ct++) {
- i[ct] = (int)d[ct].getID(mRS);
- }
- copy1DRangeFromUnchecked(0, mCurrentCount, i);
+ } finally {
+ Trace.traceEnd(RenderScript.TRACE_TAG);
}
- Trace.traceEnd(RenderScript.TRACE_TAG);
}
private void validateBitmapFormat(Bitmap b) {
@@ -599,16 +612,19 @@
}
private void copyFromUnchecked(Object array, Element.DataType dt, int arrayLen) {
- Trace.traceBegin(RenderScript.TRACE_TAG, "copyFromUnchecked");
- mRS.validate();
- if (mCurrentDimZ > 0) {
- copy3DRangeFromUnchecked(0, 0, 0, mCurrentDimX, mCurrentDimY, mCurrentDimZ, array, dt, arrayLen);
- } else if (mCurrentDimY > 0) {
- copy2DRangeFromUnchecked(0, 0, mCurrentDimX, mCurrentDimY, array, dt, arrayLen);
- } else {
- copy1DRangeFromUnchecked(0, mCurrentCount, array, dt, arrayLen);
+ try {
+ Trace.traceBegin(RenderScript.TRACE_TAG, "copyFromUnchecked");
+ mRS.validate();
+ if (mCurrentDimZ > 0) {
+ copy3DRangeFromUnchecked(0, 0, 0, mCurrentDimX, mCurrentDimY, mCurrentDimZ, array, dt, arrayLen);
+ } else if (mCurrentDimY > 0) {
+ copy2DRangeFromUnchecked(0, 0, mCurrentDimX, mCurrentDimY, array, dt, arrayLen);
+ } else {
+ copy1DRangeFromUnchecked(0, mCurrentCount, array, dt, arrayLen);
+ }
+ } finally {
+ Trace.traceEnd(RenderScript.TRACE_TAG);
}
- Trace.traceEnd(RenderScript.TRACE_TAG);
}
/**
@@ -619,10 +635,13 @@
* @param array The source data array
*/
public void copyFromUnchecked(Object array) {
- Trace.traceBegin(RenderScript.TRACE_TAG, "copyFromUnchecked");
- copyFromUnchecked(array, validateObjectIsPrimitiveArray(array, false),
- java.lang.reflect.Array.getLength(array));
- Trace.traceEnd(RenderScript.TRACE_TAG);
+ try {
+ Trace.traceBegin(RenderScript.TRACE_TAG, "copyFromUnchecked");
+ copyFromUnchecked(array, validateObjectIsPrimitiveArray(array, false),
+ java.lang.reflect.Array.getLength(array));
+ } finally {
+ Trace.traceEnd(RenderScript.TRACE_TAG);
+ }
}
/**
@@ -679,10 +698,13 @@
* @param array The source data array
*/
public void copyFrom(Object array) {
- Trace.traceBegin(RenderScript.TRACE_TAG, "copyFrom");
- copyFromUnchecked(array, validateObjectIsPrimitiveArray(array, true),
- java.lang.reflect.Array.getLength(array));
- Trace.traceEnd(RenderScript.TRACE_TAG);
+ try {
+ Trace.traceBegin(RenderScript.TRACE_TAG, "copyFrom");
+ copyFromUnchecked(array, validateObjectIsPrimitiveArray(array, true),
+ java.lang.reflect.Array.getLength(array));
+ } finally {
+ Trace.traceEnd(RenderScript.TRACE_TAG);
+ }
}
/**
@@ -747,19 +769,22 @@
* @param b the source bitmap
*/
public void copyFrom(Bitmap b) {
- Trace.traceBegin(RenderScript.TRACE_TAG, "copyFrom");
- mRS.validate();
- if (b.getConfig() == null) {
- Bitmap newBitmap = Bitmap.createBitmap(b.getWidth(), b.getHeight(), Bitmap.Config.ARGB_8888);
- Canvas c = new Canvas(newBitmap);
- c.drawBitmap(b, 0, 0, null);
- copyFrom(newBitmap);
- return;
+ try {
+ Trace.traceBegin(RenderScript.TRACE_TAG, "copyFrom");
+ mRS.validate();
+ if (b.getConfig() == null) {
+ Bitmap newBitmap = Bitmap.createBitmap(b.getWidth(), b.getHeight(), Bitmap.Config.ARGB_8888);
+ Canvas c = new Canvas(newBitmap);
+ c.drawBitmap(b, 0, 0, null);
+ copyFrom(newBitmap);
+ return;
+ }
+ validateBitmapSize(b);
+ validateBitmapFormat(b);
+ mRS.nAllocationCopyFromBitmap(getID(mRS), b);
+ } finally {
+ Trace.traceEnd(RenderScript.TRACE_TAG);
}
- validateBitmapSize(b);
- validateBitmapFormat(b);
- mRS.nAllocationCopyFromBitmap(getID(mRS), b);
- Trace.traceEnd(RenderScript.TRACE_TAG);
}
/**
@@ -769,13 +794,16 @@
* @param a the source allocation
*/
public void copyFrom(Allocation a) {
- Trace.traceBegin(RenderScript.TRACE_TAG, "copyFrom");
- mRS.validate();
- if (!mType.equals(a.getType())) {
- throw new RSIllegalArgumentException("Types of allocations must match.");
+ try {
+ Trace.traceBegin(RenderScript.TRACE_TAG, "copyFrom");
+ mRS.validate();
+ if (!mType.equals(a.getType())) {
+ throw new RSIllegalArgumentException("Types of allocations must match.");
+ }
+ copy2DRangeFrom(0, 0, mCurrentDimX, mCurrentDimY, a, 0, 0);
+ } finally {
+ Trace.traceEnd(RenderScript.TRACE_TAG);
}
- copy2DRangeFrom(0, 0, mCurrentDimX, mCurrentDimY, a, 0, 0);
- Trace.traceEnd(RenderScript.TRACE_TAG);
}
/**
@@ -891,17 +919,20 @@
private void copy1DRangeFromUnchecked(int off, int count, Object array,
Element.DataType dt, int arrayLen) {
- Trace.traceBegin(RenderScript.TRACE_TAG, "copy1DRangeFromUnchecked");
- final int dataSize = mType.mElement.getBytesSize() * count;
- // AutoPadding for Vec3 Element
- boolean usePadding = false;
- if (mAutoPadding && (mType.getElement().getVectorSize() == 3)) {
- usePadding = true;
+ try {
+ Trace.traceBegin(RenderScript.TRACE_TAG, "copy1DRangeFromUnchecked");
+ final int dataSize = mType.mElement.getBytesSize() * count;
+ // AutoPadding for Vec3 Element
+ boolean usePadding = false;
+ if (mAutoPadding && (mType.getElement().getVectorSize() == 3)) {
+ usePadding = true;
+ }
+ data1DChecks(off, count, arrayLen * dt.mSize, dataSize, usePadding);
+ mRS.nAllocationData1D(getIDSafe(), off, mSelectedLOD, count, array, dataSize, dt,
+ mType.mElement.mType.mSize, usePadding);
+ } finally {
+ Trace.traceEnd(RenderScript.TRACE_TAG);
}
- data1DChecks(off, count, arrayLen * dt.mSize, dataSize, usePadding);
- mRS.nAllocationData1D(getIDSafe(), off, mSelectedLOD, count, array, dataSize, dt,
- mType.mElement.mType.mSize, usePadding);
- Trace.traceEnd(RenderScript.TRACE_TAG);
}
/**
@@ -1053,6 +1084,7 @@
mSelectedLOD, mSelectedFace.mID,
count, 1, data.getID(mRS), dataOff, 0,
data.mSelectedLOD, data.mSelectedFace.mID);
+ Trace.traceEnd(RenderScript.TRACE_TAG);
}
private void validate2DRange(int xoff, int yoff, int w, int h) {
@@ -1074,28 +1106,31 @@
void copy2DRangeFromUnchecked(int xoff, int yoff, int w, int h, Object array,
Element.DataType dt, int arrayLen) {
- Trace.traceBegin(RenderScript.TRACE_TAG, "copy2DRangeFromUnchecked");
- mRS.validate();
- validate2DRange(xoff, yoff, w, h);
- final int dataSize = mType.mElement.getBytesSize() * w * h;
- // AutoPadding for Vec3 Element
- boolean usePadding = false;
- int sizeBytes = arrayLen * dt.mSize;
- if (mAutoPadding && (mType.getElement().getVectorSize() == 3)) {
- if (dataSize / 4 * 3 > sizeBytes) {
- throw new RSIllegalArgumentException("Array too small for allocation type.");
+ try {
+ Trace.traceBegin(RenderScript.TRACE_TAG, "copy2DRangeFromUnchecked");
+ mRS.validate();
+ validate2DRange(xoff, yoff, w, h);
+ final int dataSize = mType.mElement.getBytesSize() * w * h;
+ // AutoPadding for Vec3 Element
+ boolean usePadding = false;
+ int sizeBytes = arrayLen * dt.mSize;
+ if (mAutoPadding && (mType.getElement().getVectorSize() == 3)) {
+ if (dataSize / 4 * 3 > sizeBytes) {
+ throw new RSIllegalArgumentException("Array too small for allocation type.");
+ }
+ usePadding = true;
+ sizeBytes = dataSize;
+ } else {
+ if (dataSize > sizeBytes) {
+ throw new RSIllegalArgumentException("Array too small for allocation type.");
+ }
}
- usePadding = true;
- sizeBytes = dataSize;
- } else {
- if (dataSize > sizeBytes) {
- throw new RSIllegalArgumentException("Array too small for allocation type.");
- }
+ mRS.nAllocationData2D(getIDSafe(), xoff, yoff, mSelectedLOD, mSelectedFace.mID, w, h,
+ array, sizeBytes, dt,
+ mType.mElement.mType.mSize, usePadding);
+ } finally {
+ Trace.traceEnd(RenderScript.TRACE_TAG);
}
- mRS.nAllocationData2D(getIDSafe(), xoff, yoff, mSelectedLOD, mSelectedFace.mID, w, h,
- array, sizeBytes, dt,
- mType.mElement.mType.mSize, usePadding);
- Trace.traceEnd(RenderScript.TRACE_TAG);
}
/**
@@ -1109,11 +1144,14 @@
* @param array Data to be placed into the Allocation
*/
public void copy2DRangeFrom(int xoff, int yoff, int w, int h, Object array) {
- Trace.traceBegin(RenderScript.TRACE_TAG, "copy2DRangeFrom");
- copy2DRangeFromUnchecked(xoff, yoff, w, h, array,
- validateObjectIsPrimitiveArray(array, true),
- java.lang.reflect.Array.getLength(array));
- Trace.traceEnd(RenderScript.TRACE_TAG);
+ try {
+ Trace.traceBegin(RenderScript.TRACE_TAG, "copy2DRangeFrom");
+ copy2DRangeFromUnchecked(xoff, yoff, w, h, array,
+ validateObjectIsPrimitiveArray(array, true),
+ java.lang.reflect.Array.getLength(array));
+ } finally {
+ Trace.traceEnd(RenderScript.TRACE_TAG);
+ }
}
/**
@@ -1194,14 +1232,17 @@
*/
public void copy2DRangeFrom(int xoff, int yoff, int w, int h,
Allocation data, int dataXoff, int dataYoff) {
- Trace.traceBegin(RenderScript.TRACE_TAG, "copy2DRangeFrom");
- mRS.validate();
- validate2DRange(xoff, yoff, w, h);
- mRS.nAllocationData2D(getIDSafe(), xoff, yoff,
- mSelectedLOD, mSelectedFace.mID,
- w, h, data.getID(mRS), dataXoff, dataYoff,
- data.mSelectedLOD, data.mSelectedFace.mID);
- Trace.traceEnd(RenderScript.TRACE_TAG);
+ try {
+ Trace.traceBegin(RenderScript.TRACE_TAG, "copy2DRangeFrom");
+ mRS.validate();
+ validate2DRange(xoff, yoff, w, h);
+ mRS.nAllocationData2D(getIDSafe(), xoff, yoff,
+ mSelectedLOD, mSelectedFace.mID,
+ w, h, data.getID(mRS), dataXoff, dataYoff,
+ data.mSelectedLOD, data.mSelectedFace.mID);
+ } finally {
+ Trace.traceEnd(RenderScript.TRACE_TAG);
+ }
}
/**
@@ -1214,19 +1255,22 @@
* @param data the Bitmap to be copied
*/
public void copy2DRangeFrom(int xoff, int yoff, Bitmap data) {
- Trace.traceBegin(RenderScript.TRACE_TAG, "copy2DRangeFrom");
- mRS.validate();
- if (data.getConfig() == null) {
- Bitmap newBitmap = Bitmap.createBitmap(data.getWidth(), data.getHeight(), Bitmap.Config.ARGB_8888);
- Canvas c = new Canvas(newBitmap);
- c.drawBitmap(data, 0, 0, null);
- copy2DRangeFrom(xoff, yoff, newBitmap);
- return;
+ try {
+ Trace.traceBegin(RenderScript.TRACE_TAG, "copy2DRangeFrom");
+ mRS.validate();
+ if (data.getConfig() == null) {
+ Bitmap newBitmap = Bitmap.createBitmap(data.getWidth(), data.getHeight(), Bitmap.Config.ARGB_8888);
+ Canvas c = new Canvas(newBitmap);
+ c.drawBitmap(data, 0, 0, null);
+ copy2DRangeFrom(xoff, yoff, newBitmap);
+ return;
+ }
+ validateBitmapFormat(data);
+ validate2DRange(xoff, yoff, data.getWidth(), data.getHeight());
+ mRS.nAllocationData2D(getIDSafe(), xoff, yoff, mSelectedLOD, mSelectedFace.mID, data);
+ } finally {
+ Trace.traceEnd(RenderScript.TRACE_TAG);
}
- validateBitmapFormat(data);
- validate2DRange(xoff, yoff, data.getWidth(), data.getHeight());
- mRS.nAllocationData2D(getIDSafe(), xoff, yoff, mSelectedLOD, mSelectedFace.mID, data);
- Trace.traceEnd(RenderScript.TRACE_TAG);
}
private void validate3DRange(int xoff, int yoff, int zoff, int w, int h, int d) {
@@ -1252,28 +1296,31 @@
*/
private void copy3DRangeFromUnchecked(int xoff, int yoff, int zoff, int w, int h, int d,
Object array, Element.DataType dt, int arrayLen) {
- Trace.traceBegin(RenderScript.TRACE_TAG, "copy3DRangeFromUnchecked");
- mRS.validate();
- validate3DRange(xoff, yoff, zoff, w, h, d);
- final int dataSize = mType.mElement.getBytesSize() * w * h * d;
- // AutoPadding for Vec3 Element
- boolean usePadding = false;
- int sizeBytes = arrayLen * dt.mSize;
- if (mAutoPadding && (mType.getElement().getVectorSize() == 3)) {
- if (dataSize / 4 * 3 > sizeBytes) {
- throw new RSIllegalArgumentException("Array too small for allocation type.");
+ try {
+ Trace.traceBegin(RenderScript.TRACE_TAG, "copy3DRangeFromUnchecked");
+ mRS.validate();
+ validate3DRange(xoff, yoff, zoff, w, h, d);
+ final int dataSize = mType.mElement.getBytesSize() * w * h * d;
+ // AutoPadding for Vec3 Element
+ boolean usePadding = false;
+ int sizeBytes = arrayLen * dt.mSize;
+ if (mAutoPadding && (mType.getElement().getVectorSize() == 3)) {
+ if (dataSize / 4 * 3 > sizeBytes) {
+ throw new RSIllegalArgumentException("Array too small for allocation type.");
+ }
+ usePadding = true;
+ sizeBytes = dataSize;
+ } else {
+ if (dataSize > sizeBytes) {
+ throw new RSIllegalArgumentException("Array too small for allocation type.");
+ }
}
- usePadding = true;
- sizeBytes = dataSize;
- } else {
- if (dataSize > sizeBytes) {
- throw new RSIllegalArgumentException("Array too small for allocation type.");
- }
+ mRS.nAllocationData3D(getIDSafe(), xoff, yoff, zoff, mSelectedLOD, w, h, d,
+ array, sizeBytes, dt,
+ mType.mElement.mType.mSize, usePadding);
+ } finally {
+ Trace.traceEnd(RenderScript.TRACE_TAG);
}
- mRS.nAllocationData3D(getIDSafe(), xoff, yoff, zoff, mSelectedLOD, w, h, d,
- array, sizeBytes, dt,
- mType.mElement.mType.mSize, usePadding);
- Trace.traceEnd(RenderScript.TRACE_TAG);
}
/**
@@ -1290,11 +1337,14 @@
* @param array to be placed into the allocation
*/
public void copy3DRangeFrom(int xoff, int yoff, int zoff, int w, int h, int d, Object array) {
- Trace.traceBegin(RenderScript.TRACE_TAG, "copy3DRangeFrom");
- copy3DRangeFromUnchecked(xoff, yoff, zoff, w, h, d, array,
- validateObjectIsPrimitiveArray(array, true),
- java.lang.reflect.Array.getLength(array));
- Trace.traceEnd(RenderScript.TRACE_TAG);
+ try {
+ Trace.traceBegin(RenderScript.TRACE_TAG, "copy3DRangeFrom");
+ copy3DRangeFromUnchecked(xoff, yoff, zoff, w, h, d, array,
+ validateObjectIsPrimitiveArray(array, true),
+ java.lang.reflect.Array.getLength(array));
+ } finally {
+ Trace.traceEnd(RenderScript.TRACE_TAG);
+ }
}
/**
@@ -1330,34 +1380,40 @@
* @param b The bitmap to be set from the Allocation.
*/
public void copyTo(Bitmap b) {
- Trace.traceBegin(RenderScript.TRACE_TAG, "copyTo");
- mRS.validate();
- validateBitmapFormat(b);
- validateBitmapSize(b);
- mRS.nAllocationCopyToBitmap(getID(mRS), b);
- Trace.traceEnd(RenderScript.TRACE_TAG);
+ try {
+ Trace.traceBegin(RenderScript.TRACE_TAG, "copyTo");
+ mRS.validate();
+ validateBitmapFormat(b);
+ validateBitmapSize(b);
+ mRS.nAllocationCopyToBitmap(getID(mRS), b);
+ } finally {
+ Trace.traceEnd(RenderScript.TRACE_TAG);
+ }
}
private void copyTo(Object array, Element.DataType dt, int arrayLen) {
- Trace.traceBegin(RenderScript.TRACE_TAG, "copyTo");
- mRS.validate();
- boolean usePadding = false;
- if (mAutoPadding && (mType.getElement().getVectorSize() == 3)) {
- usePadding = true;
- }
- if (usePadding) {
- if (dt.mSize * arrayLen < mSize / 4 * 3) {
- throw new RSIllegalArgumentException(
- "Size of output array cannot be smaller than size of allocation.");
+ try {
+ Trace.traceBegin(RenderScript.TRACE_TAG, "copyTo");
+ mRS.validate();
+ boolean usePadding = false;
+ if (mAutoPadding && (mType.getElement().getVectorSize() == 3)) {
+ usePadding = true;
}
- } else {
- if (dt.mSize * arrayLen < mSize) {
- throw new RSIllegalArgumentException(
- "Size of output array cannot be smaller than size of allocation.");
+ if (usePadding) {
+ if (dt.mSize * arrayLen < mSize / 4 * 3) {
+ throw new RSIllegalArgumentException(
+ "Size of output array cannot be smaller than size of allocation.");
+ }
+ } else {
+ if (dt.mSize * arrayLen < mSize) {
+ throw new RSIllegalArgumentException(
+ "Size of output array cannot be smaller than size of allocation.");
+ }
}
+ mRS.nAllocationRead(getID(mRS), array, dt, mType.mElement.mType.mSize, usePadding);
+ } finally {
+ Trace.traceEnd(RenderScript.TRACE_TAG);
}
- mRS.nAllocationRead(getID(mRS), array, dt, mType.mElement.mType.mSize, usePadding);
- Trace.traceEnd(RenderScript.TRACE_TAG);
}
/**
@@ -1448,7 +1504,7 @@
}
final byte[] data = fp.getData();
- int data_length = fp.getPos();
+ int data_length = data.length;
int eSize = mType.mElement.mElements[component_number].getBytesSize();
eSize *= mType.mElement.mArraySizes[component_number];
@@ -1494,17 +1550,20 @@
private void copy1DRangeToUnchecked(int off, int count, Object array,
Element.DataType dt, int arrayLen) {
- Trace.traceBegin(RenderScript.TRACE_TAG, "copy1DRangeToUnchecked");
- final int dataSize = mType.mElement.getBytesSize() * count;
- // AutoPadding for Vec3 Element
- boolean usePadding = false;
- if (mAutoPadding && (mType.getElement().getVectorSize() == 3)) {
- usePadding = true;
+ try {
+ Trace.traceBegin(RenderScript.TRACE_TAG, "copy1DRangeToUnchecked");
+ final int dataSize = mType.mElement.getBytesSize() * count;
+ // AutoPadding for Vec3 Element
+ boolean usePadding = false;
+ if (mAutoPadding && (mType.getElement().getVectorSize() == 3)) {
+ usePadding = true;
+ }
+ data1DChecks(off, count, arrayLen * dt.mSize, dataSize, usePadding);
+ mRS.nAllocationRead1D(getIDSafe(), off, mSelectedLOD, count, array, dataSize, dt,
+ mType.mElement.mType.mSize, usePadding);
+ } finally {
+ Trace.traceEnd(RenderScript.TRACE_TAG);
}
- data1DChecks(off, count, arrayLen * dt.mSize, dataSize, usePadding);
- mRS.nAllocationRead1D(getIDSafe(), off, mSelectedLOD, count, array, dataSize, dt,
- mType.mElement.mType.mSize, usePadding);
- Trace.traceEnd(RenderScript.TRACE_TAG);
}
/**
@@ -1654,27 +1713,30 @@
void copy2DRangeToUnchecked(int xoff, int yoff, int w, int h, Object array,
Element.DataType dt, int arrayLen) {
- Trace.traceBegin(RenderScript.TRACE_TAG, "copy2DRangeToUnchecked");
- mRS.validate();
- validate2DRange(xoff, yoff, w, h);
- final int dataSize = mType.mElement.getBytesSize() * w * h;
- // AutoPadding for Vec3 Element
- boolean usePadding = false;
- int sizeBytes = arrayLen * dt.mSize;
- if (mAutoPadding && (mType.getElement().getVectorSize() == 3)) {
- if (dataSize / 4 * 3 > sizeBytes) {
- throw new RSIllegalArgumentException("Array too small for allocation type.");
+ try {
+ Trace.traceBegin(RenderScript.TRACE_TAG, "copy2DRangeToUnchecked");
+ mRS.validate();
+ validate2DRange(xoff, yoff, w, h);
+ final int dataSize = mType.mElement.getBytesSize() * w * h;
+ // AutoPadding for Vec3 Element
+ boolean usePadding = false;
+ int sizeBytes = arrayLen * dt.mSize;
+ if (mAutoPadding && (mType.getElement().getVectorSize() == 3)) {
+ if (dataSize / 4 * 3 > sizeBytes) {
+ throw new RSIllegalArgumentException("Array too small for allocation type.");
+ }
+ usePadding = true;
+ sizeBytes = dataSize;
+ } else {
+ if (dataSize > sizeBytes) {
+ throw new RSIllegalArgumentException("Array too small for allocation type.");
+ }
}
- usePadding = true;
- sizeBytes = dataSize;
- } else {
- if (dataSize > sizeBytes) {
- throw new RSIllegalArgumentException("Array too small for allocation type.");
- }
+ mRS.nAllocationRead2D(getIDSafe(), xoff, yoff, mSelectedLOD, mSelectedFace.mID, w, h,
+ array, sizeBytes, dt, mType.mElement.mType.mSize, usePadding);
+ } finally {
+ Trace.traceEnd(RenderScript.TRACE_TAG);
}
- mRS.nAllocationRead2D(getIDSafe(), xoff, yoff, mSelectedLOD, mSelectedFace.mID, w, h,
- array, sizeBytes, dt, mType.mElement.mType.mSize, usePadding);
- Trace.traceEnd(RenderScript.TRACE_TAG);
}
/**
@@ -1764,27 +1826,30 @@
*/
private void copy3DRangeToUnchecked(int xoff, int yoff, int zoff, int w, int h, int d,
Object array, Element.DataType dt, int arrayLen) {
- Trace.traceBegin(RenderScript.TRACE_TAG, "copy3DRangeToUnchecked");
- mRS.validate();
- validate3DRange(xoff, yoff, zoff, w, h, d);
- final int dataSize = mType.mElement.getBytesSize() * w * h * d;
- // AutoPadding for Vec3 Element
- boolean usePadding = false;
- int sizeBytes = arrayLen * dt.mSize;
- if (mAutoPadding && (mType.getElement().getVectorSize() == 3)) {
- if (dataSize / 4 * 3 > sizeBytes) {
- throw new RSIllegalArgumentException("Array too small for allocation type.");
+ try {
+ Trace.traceBegin(RenderScript.TRACE_TAG, "copy3DRangeToUnchecked");
+ mRS.validate();
+ validate3DRange(xoff, yoff, zoff, w, h, d);
+ final int dataSize = mType.mElement.getBytesSize() * w * h * d;
+ // AutoPadding for Vec3 Element
+ boolean usePadding = false;
+ int sizeBytes = arrayLen * dt.mSize;
+ if (mAutoPadding && (mType.getElement().getVectorSize() == 3)) {
+ if (dataSize / 4 * 3 > sizeBytes) {
+ throw new RSIllegalArgumentException("Array too small for allocation type.");
+ }
+ usePadding = true;
+ sizeBytes = dataSize;
+ } else {
+ if (dataSize > sizeBytes) {
+ throw new RSIllegalArgumentException("Array too small for allocation type.");
+ }
}
- usePadding = true;
- sizeBytes = dataSize;
- } else {
- if (dataSize > sizeBytes) {
- throw new RSIllegalArgumentException("Array too small for allocation type.");
- }
+ mRS.nAllocationRead3D(getIDSafe(), xoff, yoff, zoff, mSelectedLOD, w, h, d,
+ array, sizeBytes, dt, mType.mElement.mType.mSize, usePadding);
+ } finally {
+ Trace.traceEnd(RenderScript.TRACE_TAG);
}
- mRS.nAllocationRead3D(getIDSafe(), xoff, yoff, zoff, mSelectedLOD, w, h, d,
- array, sizeBytes, dt, mType.mElement.mType.mSize, usePadding);
- Trace.traceEnd(RenderScript.TRACE_TAG);
}
/**
@@ -1823,17 +1888,20 @@
* utilized
*/
static public Allocation createTyped(RenderScript rs, Type type, MipmapControl mips, int usage) {
- Trace.traceBegin(RenderScript.TRACE_TAG, "createTyped");
- rs.validate();
- if (type.getID(rs) == 0) {
- throw new RSInvalidStateException("Bad Type");
+ try {
+ Trace.traceBegin(RenderScript.TRACE_TAG, "createTyped");
+ rs.validate();
+ if (type.getID(rs) == 0) {
+ throw new RSInvalidStateException("Bad Type");
+ }
+ long id = rs.nAllocationCreateTyped(type.getID(rs), mips.mID, usage, 0);
+ if (id == 0) {
+ throw new RSRuntimeException("Allocation creation failed.");
+ }
+ return new Allocation(id, rs, type, usage);
+ } finally {
+ Trace.traceEnd(RenderScript.TRACE_TAG);
}
- long id = rs.nAllocationCreateTyped(type.getID(rs), mips.mID, usage, 0);
- if (id == 0) {
- throw new RSRuntimeException("Allocation creation failed.");
- }
- Trace.traceEnd(RenderScript.TRACE_TAG);
- return new Allocation(id, rs, type, usage);
}
/**
@@ -1877,18 +1945,21 @@
*/
static public Allocation createSized(RenderScript rs, Element e,
int count, int usage) {
- Trace.traceBegin(RenderScript.TRACE_TAG, "createSized");
- rs.validate();
- Type.Builder b = new Type.Builder(rs, e);
- b.setX(count);
- Type t = b.create();
+ try {
+ Trace.traceBegin(RenderScript.TRACE_TAG, "createSized");
+ rs.validate();
+ Type.Builder b = new Type.Builder(rs, e);
+ b.setX(count);
+ Type t = b.create();
- long id = rs.nAllocationCreateTyped(t.getID(rs), MipmapControl.MIPMAP_NONE.mID, usage, 0);
- if (id == 0) {
- throw new RSRuntimeException("Allocation creation failed.");
+ long id = rs.nAllocationCreateTyped(t.getID(rs), MipmapControl.MIPMAP_NONE.mID, usage, 0);
+ if (id == 0) {
+ throw new RSRuntimeException("Allocation creation failed.");
+ }
+ return new Allocation(id, rs, t, usage);
+ } finally {
+ Trace.traceEnd(RenderScript.TRACE_TAG);
}
- Trace.traceEnd(RenderScript.TRACE_TAG);
- return new Allocation(id, rs, t, usage);
}
/**
@@ -1947,44 +2018,47 @@
static public Allocation createFromBitmap(RenderScript rs, Bitmap b,
MipmapControl mips,
int usage) {
- Trace.traceBegin(RenderScript.TRACE_TAG, "createFromBitmap");
- rs.validate();
+ try {
+ Trace.traceBegin(RenderScript.TRACE_TAG, "createFromBitmap");
+ rs.validate();
- // WAR undocumented color formats
- if (b.getConfig() == null) {
- if ((usage & USAGE_SHARED) != 0) {
- throw new RSIllegalArgumentException("USAGE_SHARED cannot be used with a Bitmap that has a null config.");
+ // WAR undocumented color formats
+ if (b.getConfig() == null) {
+ if ((usage & USAGE_SHARED) != 0) {
+ throw new RSIllegalArgumentException("USAGE_SHARED cannot be used with a Bitmap that has a null config.");
+ }
+ Bitmap newBitmap = Bitmap.createBitmap(b.getWidth(), b.getHeight(), Bitmap.Config.ARGB_8888);
+ Canvas c = new Canvas(newBitmap);
+ c.drawBitmap(b, 0, 0, null);
+ return createFromBitmap(rs, newBitmap, mips, usage);
}
- Bitmap newBitmap = Bitmap.createBitmap(b.getWidth(), b.getHeight(), Bitmap.Config.ARGB_8888);
- Canvas c = new Canvas(newBitmap);
- c.drawBitmap(b, 0, 0, null);
- return createFromBitmap(rs, newBitmap, mips, usage);
- }
- Type t = typeFromBitmap(rs, b, mips);
+ Type t = typeFromBitmap(rs, b, mips);
- // enable optimized bitmap path only with no mipmap and script-only usage
- if (mips == MipmapControl.MIPMAP_NONE &&
- t.getElement().isCompatible(Element.RGBA_8888(rs)) &&
- usage == (USAGE_SHARED | USAGE_SCRIPT | USAGE_GRAPHICS_TEXTURE)) {
- long id = rs.nAllocationCreateBitmapBackedAllocation(t.getID(rs), mips.mID, b, usage);
+ // enable optimized bitmap path only with no mipmap and script-only usage
+ if (mips == MipmapControl.MIPMAP_NONE &&
+ t.getElement().isCompatible(Element.RGBA_8888(rs)) &&
+ usage == (USAGE_SHARED | USAGE_SCRIPT | USAGE_GRAPHICS_TEXTURE)) {
+ long id = rs.nAllocationCreateBitmapBackedAllocation(t.getID(rs), mips.mID, b, usage);
+ if (id == 0) {
+ throw new RSRuntimeException("Load failed.");
+ }
+
+ // keep a reference to the Bitmap around to prevent GC
+ Allocation alloc = new Allocation(id, rs, t, usage);
+ alloc.setBitmap(b);
+ return alloc;
+ }
+
+
+ long id = rs.nAllocationCreateFromBitmap(t.getID(rs), mips.mID, b, usage);
if (id == 0) {
throw new RSRuntimeException("Load failed.");
}
-
- // keep a reference to the Bitmap around to prevent GC
- Allocation alloc = new Allocation(id, rs, t, usage);
- alloc.setBitmap(b);
- return alloc;
+ return new Allocation(id, rs, t, usage);
+ } finally {
+ Trace.traceEnd(RenderScript.TRACE_TAG);
}
-
-
- long id = rs.nAllocationCreateFromBitmap(t.getID(rs), mips.mID, b, usage);
- if (id == 0) {
- throw new RSRuntimeException("Load failed.");
- }
- Trace.traceEnd(RenderScript.TRACE_TAG);
- return new Allocation(id, rs, t, usage);
}
/**
diff --git a/rs/java/android/renderscript/Element.java b/rs/java/android/renderscript/Element.java
index 60ff996..669eb45 100644
--- a/rs/java/android/renderscript/Element.java
+++ b/rs/java/android/renderscript/Element.java
@@ -548,8 +548,8 @@
* @hide
*/
public static Element F16_3(RenderScript rs) {
- if(rs.mElement_FLOAT_3 == null) {
- rs.mElement_FLOAT_3 = createVector(rs, DataType.FLOAT_16, 3);
+ if(rs.mElement_HALF_3 == null) {
+ rs.mElement_HALF_3 = createVector(rs, DataType.FLOAT_16, 3);
}
return rs.mElement_HALF_3;
}
@@ -926,6 +926,7 @@
switch (dt) {
// Support only primitive integer/float/boolean types as vectors.
+ case FLOAT_16:
case FLOAT_32:
case FLOAT_64:
case SIGNED_8:
diff --git a/rs/java/android/renderscript/RenderScript.java b/rs/java/android/renderscript/RenderScript.java
index 126b8c7..326f273 100644
--- a/rs/java/android/renderscript/RenderScript.java
+++ b/rs/java/android/renderscript/RenderScript.java
@@ -31,6 +31,8 @@
import android.os.Trace;
import java.util.ArrayList;
+// TODO: Clean up the whitespace that separates methods in this class.
+
/**
* This class provides access to a RenderScript context, which controls RenderScript
* initialization, resource management, and teardown. An instance of the RenderScript
@@ -89,6 +91,21 @@
*/
public static final int CREATE_FLAG_LOW_POWER = 0x0004;
+ /**
+ * @hide
+ * Context creation flag which instructs the implementation to wait for
+ * a debugger to be attached before continuing execution.
+ */
+ public static final int CREATE_FLAG_WAIT_FOR_ATTACH = 0x0008;
+
+ /**
+ * @hide
+ * Context creation flag which specifies that optimization level 0 is
+ * passed to the device compiler upon execution of the RenderScript kernel.
+ * The default optimization level is 3.
+ */
+ public static final int CREATE_FLAG_OPT_LEVEL_0 = 0x0010;
+
/*
* Detect the bitness of the VM to allow FieldPacker to do the right thing.
*/
@@ -302,8 +319,12 @@
long[] fieldIDs, long[] values, int[] sizes, long[] depClosures,
long[] depFieldIDs) {
validate();
- return rsnClosureCreate(mContext, kernelID, returnValue, fieldIDs, values,
+ long c = rsnClosureCreate(mContext, kernelID, returnValue, fieldIDs, values,
sizes, depClosures, depFieldIDs);
+ if (c == 0) {
+ throw new RSRuntimeException("Failed creating closure.");
+ }
+ return c;
}
native long rsnInvokeClosureCreate(long con, long invokeID, byte[] params,
@@ -311,8 +332,12 @@
synchronized long nInvokeClosureCreate(long invokeID, byte[] params,
long[] fieldIDs, long[] values, int[] sizes) {
validate();
- return rsnInvokeClosureCreate(mContext, invokeID, params, fieldIDs,
+ long c = rsnInvokeClosureCreate(mContext, invokeID, params, fieldIDs,
values, sizes);
+ if (c == 0) {
+ throw new RSRuntimeException("Failed creating closure.");
+ }
+ return c;
}
native void rsnClosureSetArg(long con, long closureID, int index,
@@ -332,10 +357,16 @@
rsnClosureSetGlobal(mContext, closureID, fieldID, value, size);
}
- native long rsnScriptGroup2Create(long con, String cachePath, long[] closures);
- synchronized long nScriptGroup2Create(String cachePath, long[] closures) {
+ native long rsnScriptGroup2Create(long con, String name, String cachePath,
+ long[] closures);
+ synchronized long nScriptGroup2Create(String name, String cachePath,
+ long[] closures) {
validate();
- return rsnScriptGroup2Create(mContext, cachePath, closures);
+ long g = rsnScriptGroup2Create(mContext, name, cachePath, closures);
+ if (g == 0) {
+ throw new RSRuntimeException("Failed creating script group.");
+ }
+ return g;
}
native void rsnScriptGroup2Execute(long con, long groupID);
@@ -698,6 +729,14 @@
rsnScriptForEach(mContext, id, slot, ains, aout, params, limits);
}
+ native void rsnScriptReduce(long con, long id, int slot, long ain,
+ long aout, int[] limits);
+ synchronized void nScriptReduce(long id, int slot, long ain, long aout,
+ int[] limits) {
+ validate();
+ rsnScriptReduce(mContext, id, slot, ain, aout, limits);
+ }
+
native void rsnScriptInvokeV(long con, long id, int slot, byte[] params);
synchronized void nScriptInvokeV(long id, int slot, byte[] params) {
validate();
@@ -949,6 +988,17 @@
rsnScriptIntrinsicBLAS_Z(mContext, id, func, TransA, TransB, Side, Uplo, Diag, M, N, K, alphaX, alphaY, A, B, betaX, betaY, C, incX, incY, KL, KU);
}
+ native void rsnScriptIntrinsicBLAS_BNNM(long con, long id, int M, int N, int K,
+ long A, int a_offset, long B, int b_offset, long C, int c_offset,
+ int c_mult_int);
+ synchronized void nScriptIntrinsicBLAS_BNNM(long id, int M, int N, int K,
+ long A, int a_offset, long B, int b_offset, long C, int c_offset,
+ int c_mult_int) {
+ validate();
+ rsnScriptIntrinsicBLAS_BNNM(mContext, id, M, N, K, A, a_offset, B, b_offset, C, c_offset, c_mult_int);
+ }
+
+
long mDev;
long mContext;
@@ -1318,7 +1368,8 @@
return null;
}
- if ((flags & ~(CREATE_FLAG_LOW_LATENCY | CREATE_FLAG_LOW_POWER)) != 0) {
+ if ((flags & ~(CREATE_FLAG_LOW_LATENCY | CREATE_FLAG_LOW_POWER |
+ CREATE_FLAG_WAIT_FOR_ATTACH | CREATE_FLAG_OPT_LEVEL_0)) != 0) {
throw new RSIllegalArgumentException("Invalid flags passed.");
}
diff --git a/rs/java/android/renderscript/Script.java b/rs/java/android/renderscript/Script.java
index 65056ac..dfd0ea3 100644
--- a/rs/java/android/renderscript/Script.java
+++ b/rs/java/android/renderscript/Script.java
@@ -66,7 +66,6 @@
}
/**
- * @hide Pending API review
* InvokeID is an identifier for an invoke function. It is used
* as an identifier for ScriptGroup creation.
*
@@ -86,7 +85,6 @@
private final SparseArray<InvokeID> mIIDs = new SparseArray<InvokeID>();
/**
- * @hide Pending API review
* Only to be used by generated reflected classes.
*/
protected InvokeID createInvokeID(int slot) {
@@ -184,9 +182,9 @@
mRS.validateObject(ain);
mRS.validateObject(aout);
- if (ain == null && aout == null) {
+ if (ain == null && aout == null && sc == null) {
throw new RSIllegalArgumentException(
- "At least one of ain or aout is required to be non-null.");
+ "At least one of input allocation, output allocation, or LaunchOptions is required to be non-null.");
}
long[] in_ids = null;
@@ -286,6 +284,35 @@
mRS.nScriptForEach(getID(mRS), slot, in_ids, out_id, params, limits);
}
+ /**
+ * Only intended for use by generated reflected code.
+ *
+ * @hide
+ */
+ protected void reduce(int slot, Allocation ain, Allocation aout, LaunchOptions sc) {
+ mRS.validate();
+ mRS.validateObject(ain);
+ mRS.validateObject(aout);
+
+ if (ain == null || aout == null) {
+ throw new RSIllegalArgumentException(
+ "Both ain and aout are required to be non-null.");
+ }
+
+ long in_id = ain.getID(mRS);
+ long out_id = aout.getID(mRS);
+
+ int[] limits = null;
+ if (sc != null) {
+ limits = new int[2];
+
+ limits[0] = sc.xstart;
+ limits[1] = sc.xend;
+ }
+
+ mRS.nScriptReduce(getID(mRS), slot, in_id, out_id, limits);
+ }
+
long[] mInIdsBuffer;
Script(long id, RenderScript rs) {
@@ -294,7 +321,6 @@
mInIdsBuffer = new long[1];
}
-
/**
* Only intended for use by generated reflected code.
*
diff --git a/rs/java/android/renderscript/ScriptGroup.java b/rs/java/android/renderscript/ScriptGroup.java
index 51c838f..2878356 100644
--- a/rs/java/android/renderscript/ScriptGroup.java
+++ b/rs/java/android/renderscript/ScriptGroup.java
@@ -16,32 +16,30 @@
package android.renderscript;
+import android.util.Log;
+import android.util.Pair;
import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
/**
- * ScriptGroup creates a group of kernels that are executed
- * together with one execution call as if they were a single kernel.
- * The kernels may be connected internally or to an external allocation.
- * The intermediate results for internal connections are not observable
- * after the execution of the script.
+ * A group of kernels that are executed
+ * together with one execution call as if they were a single kernel
* <p>
- * External connections are grouped into inputs and outputs.
- * All outputs are produced by a script kernel and placed into a
- * user-supplied allocation. Inputs provide the input of a kernel.
- * Inputs bound to script globals are set directly upon the script.
+ * In addition to kernels, a script group may contain invocable functions as well.
+ * A script group may take inputs and generate outputs, which are consumed and
+ * produced by its member kernels.
+ * Inside a script group, outputs from one kernel can be passed to another kernel as inputs.
+ * The API disallows cyclic dependencies among kernels in a script group,
+ * effectively making it a directed acyclic graph (DAG) of kernels.
* <p>
- * A ScriptGroup must contain at least one kernel. A ScriptGroup
- * must contain only a single directed acyclic graph (DAG) of
- * script kernels and connections. Attempting to create a
- * ScriptGroup with multiple DAGs or attempting to create
- * a cycle within a ScriptGroup will throw an exception.
- * <p>
- * Currently, all kernels in a ScriptGroup must be from separate
- * Script objects. Attempting to use multiple kernels from the same
- * Script object will result in an {@link android.renderscript.RSInvalidStateException}.
- *
+ * Grouping kernels together allows for more efficient execution. For example,
+ * runtime and compiler optimization can be applied to reduce computation and
+ * communication overhead, and to make better use of the CPU and the GPU.
**/
public final class ScriptGroup extends BaseObj {
+ private static final String TAG = "ScriptGroup";
IO mOutputs[];
IO mInputs[];
@@ -88,15 +86,369 @@
}
+ /**
+ * An opaque class for closures
+ * <p>
+ * A closure represents a function call to a kernel or invocable function,
+ * combined with arguments and values for global variables. A closure is
+ * created using the {@link android.renderscript.ScriptGroup.Builder2#addKernel} or
+ * {@link android.renderscript.ScriptGroup.Builder2#addInvoke}
+ * method.
+ */
+
+ public static final class Closure extends BaseObj {
+ private Object[] mArgs;
+ private Allocation mReturnValue;
+ private Map<Script.FieldID, Object> mBindings;
+
+ private Future mReturnFuture;
+ private Map<Script.FieldID, Future> mGlobalFuture;
+
+ private FieldPacker mFP;
+
+ private static final String TAG = "Closure";
+
+ Closure(long id, RenderScript rs) {
+ super(id, rs);
+ }
+
+ Closure(RenderScript rs, Script.KernelID kernelID, Type returnType,
+ Object[] args, Map<Script.FieldID, Object> globals) {
+ super(0, rs);
+
+ mArgs = args;
+ mReturnValue = Allocation.createTyped(rs, returnType);
+ mBindings = globals;
+ mGlobalFuture = new HashMap<Script.FieldID, Future>();
+
+ int numValues = args.length + globals.size();
+
+ long[] fieldIDs = new long[numValues];
+ long[] values = new long[numValues];
+ int[] sizes = new int[numValues];
+ long[] depClosures = new long[numValues];
+ long[] depFieldIDs = new long[numValues];
+
+ int i;
+ for (i = 0; i < args.length; i++) {
+ fieldIDs[i] = 0;
+ retrieveValueAndDependenceInfo(rs, i, null, args[i],
+ values, sizes, depClosures, depFieldIDs);
+ }
+ for (Map.Entry<Script.FieldID, Object> entry : globals.entrySet()) {
+ Object obj = entry.getValue();
+ Script.FieldID fieldID = entry.getKey();
+ fieldIDs[i] = fieldID.getID(rs);
+ retrieveValueAndDependenceInfo(rs, i, fieldID, obj,
+ values, sizes, depClosures, depFieldIDs);
+ i++;
+ }
+
+ long id = rs.nClosureCreate(kernelID.getID(rs), mReturnValue.getID(rs),
+ fieldIDs, values, sizes, depClosures, depFieldIDs);
+
+ setID(id);
+ }
+
+ Closure(RenderScript rs, Script.InvokeID invokeID,
+ Object[] args, Map<Script.FieldID, Object> globals) {
+ super(0, rs);
+ mFP = FieldPacker.createFromArray(args);
+
+ mArgs = args;
+ mBindings = globals;
+ mGlobalFuture = new HashMap<Script.FieldID, Future>();
+
+ int numValues = globals.size();
+
+ long[] fieldIDs = new long[numValues];
+ long[] values = new long[numValues];
+ int[] sizes = new int[numValues];
+ long[] depClosures = new long[numValues];
+ long[] depFieldIDs = new long[numValues];
+
+ int i = 0;
+ for (Map.Entry<Script.FieldID, Object> entry : globals.entrySet()) {
+ Object obj = entry.getValue();
+ Script.FieldID fieldID = entry.getKey();
+ fieldIDs[i] = fieldID.getID(rs);
+ retrieveValueAndDependenceInfo(rs, i, fieldID, obj, values,
+ sizes, depClosures, depFieldIDs);
+ i++;
+ }
+
+ long id = rs.nInvokeClosureCreate(invokeID.getID(rs), mFP.getData(), fieldIDs,
+ values, sizes);
+
+ setID(id);
+ }
+
+ private void retrieveValueAndDependenceInfo(RenderScript rs,
+ int index, Script.FieldID fid, Object obj,
+ long[] values, int[] sizes,
+ long[] depClosures,
+ long[] depFieldIDs) {
+
+ if (obj instanceof Future) {
+ Future f = (Future)obj;
+ obj = f.getValue();
+ depClosures[index] = f.getClosure().getID(rs);
+ Script.FieldID fieldID = f.getFieldID();
+ depFieldIDs[index] = fieldID != null ? fieldID.getID(rs) : 0;
+ } else {
+ depClosures[index] = 0;
+ depFieldIDs[index] = 0;
+ }
+
+ if (obj instanceof Input) {
+ Input unbound = (Input)obj;
+ if (index < mArgs.length) {
+ unbound.addReference(this, index);
+ } else {
+ unbound.addReference(this, fid);
+ }
+ values[index] = 0;
+ sizes[index] = 0;
+ } else {
+ ValueAndSize vs = new ValueAndSize(rs, obj);
+ values[index] = vs.value;
+ sizes[index] = vs.size;
+ }
+ }
+
+ /**
+ * Returns the future for the return value
+ *
+ * @return a future
+ */
+
+ public Future getReturn() {
+ if (mReturnFuture == null) {
+ mReturnFuture = new Future(this, null, mReturnValue);
+ }
+
+ return mReturnFuture;
+ }
+
+ /**
+ * Returns the future for a global variable
+ *
+ * @param field the field ID for the global variable
+ * @return a future
+ */
+
+ public Future getGlobal(Script.FieldID field) {
+ Future f = mGlobalFuture.get(field);
+
+ if (f == null) {
+ // If the field is not bound to this closure, this will return a future
+ // without an associated value (reference). So this is not working for
+ // cross-module (cross-script) linking in this case where a field not
+ // explicitly bound.
+ Object obj = mBindings.get(field);
+ if (obj instanceof Future) {
+ obj = ((Future)obj).getValue();
+ }
+ f = new Future(this, field, obj);
+ mGlobalFuture.put(field, f);
+ }
+
+ return f;
+ }
+
+ void setArg(int index, Object obj) {
+ if (obj instanceof Future) {
+ obj = ((Future)obj).getValue();
+ }
+ mArgs[index] = obj;
+ ValueAndSize vs = new ValueAndSize(mRS, obj);
+ mRS.nClosureSetArg(getID(mRS), index, vs.value, vs.size);
+ }
+
+ void setGlobal(Script.FieldID fieldID, Object obj) {
+ if (obj instanceof Future) {
+ obj = ((Future)obj).getValue();
+ }
+ mBindings.put(fieldID, obj);
+ ValueAndSize vs = new ValueAndSize(mRS, obj);
+ mRS.nClosureSetGlobal(getID(mRS), fieldID.getID(mRS), vs.value, vs.size);
+ }
+
+ private static final class ValueAndSize {
+ public ValueAndSize(RenderScript rs, Object obj) {
+ if (obj instanceof Allocation) {
+ value = ((Allocation)obj).getID(rs);
+ size = -1;
+ } else if (obj instanceof Boolean) {
+ value = ((Boolean)obj).booleanValue() ? 1 : 0;
+ size = 4;
+ } else if (obj instanceof Integer) {
+ value = ((Integer)obj).longValue();
+ size = 4;
+ } else if (obj instanceof Long) {
+ value = ((Long)obj).longValue();
+ size = 8;
+ } else if (obj instanceof Float) {
+ value = ((Float)obj).longValue();
+ size = 4;
+ } else if (obj instanceof Double) {
+ value = ((Double)obj).longValue();
+ size = 8;
+ }
+ }
+ public long value;
+ public int size;
+ }
+ }
+
+ /**
+ * An opaque class for futures
+ * <p>
+ * A future represents an output of a closure, either the return value of
+ * the function, or the value of a global variable written by the function.
+ * A future is created by calling the {@link Closure#getReturn} or
+ * {@link Closure#getGlobal} method.
+ */
+
+ public static final class Future {
+ Closure mClosure;
+ Script.FieldID mFieldID;
+ Object mValue;
+
+ Future(Closure closure, Script.FieldID fieldID, Object value) {
+ mClosure = closure;
+ mFieldID = fieldID;
+ mValue = value;
+ }
+
+ Closure getClosure() { return mClosure; }
+ Script.FieldID getFieldID() { return mFieldID; }
+ Object getValue() { return mValue; }
+ }
+
+ /**
+ * An opaque class for script group inputs
+ * <p>
+ * Created by calling the {@link Builder2#addInput} method. The value
+ * is assigned in {@link ScriptGroup#execute(Object...)} method as
+ * one of its arguments. Arguments to the execute method should be in
+ * the same order as intputs are added using the addInput method.
+ */
+
+ public static final class Input {
+ // Either mFieldID or mArgIndex should be set but not both.
+ List<Pair<Closure, Script.FieldID>> mFieldID;
+ // -1 means unset. Legal values are 0 .. n-1, where n is the number of
+ // arguments for the referencing closure.
+ List<Pair<Closure, Integer>> mArgIndex;
+ Object mValue;
+
+ Input() {
+ mFieldID = new ArrayList<Pair<Closure, Script.FieldID>>();
+ mArgIndex = new ArrayList<Pair<Closure, Integer>>();
+ }
+
+ void addReference(Closure closure, int index) {
+ mArgIndex.add(Pair.create(closure, Integer.valueOf(index)));
+ }
+
+ void addReference(Closure closure, Script.FieldID fieldID) {
+ mFieldID.add(Pair.create(closure, fieldID));
+ }
+
+ void set(Object value) {
+ mValue = value;
+ for (Pair<Closure, Integer> p : mArgIndex) {
+ Closure closure = p.first;
+ int index = p.second.intValue();
+ closure.setArg(index, value);
+ }
+ for (Pair<Closure, Script.FieldID> p : mFieldID) {
+ Closure closure = p.first;
+ Script.FieldID fieldID = p.second;
+ closure.setGlobal(fieldID, value);
+ }
+ }
+
+ Object get() { return mValue; }
+ }
+
+ private String mName;
+ private List<Closure> mClosures;
+ private List<Input> mInputs2;
+ private Future[] mOutputs2;
+
ScriptGroup(long id, RenderScript rs) {
super(id, rs);
}
+ ScriptGroup(RenderScript rs, String name, List<Closure> closures,
+ List<Input> inputs, Future[] outputs) {
+ super(0, rs);
+ mName = name;
+ mClosures = closures;
+ mInputs2 = inputs;
+ mOutputs2 = outputs;
+
+ long[] closureIDs = new long[closures.size()];
+ for (int i = 0; i < closureIDs.length; i++) {
+ closureIDs[i] = closures.get(i).getID(rs);
+ }
+ long id = rs.nScriptGroup2Create(name, ScriptC.mCachePath, closureIDs);
+ setID(id);
+ }
+
+ /**
+ * Executes a script group
+ *
+ * @param inputs inputs to the script group
+ * @return outputs of the script group as an array of objects
+ */
+
+ public Object[] execute(Object... inputs) {
+ if (inputs.length < mInputs2.size()) {
+ Log.e(TAG, this.toString() + " receives " + inputs.length + " inputs, " +
+ "less than expected " + mInputs2.size());
+ return null;
+ }
+
+ if (inputs.length > mInputs2.size()) {
+ Log.i(TAG, this.toString() + " receives " + inputs.length + " inputs, " +
+ "more than expected " + mInputs2.size());
+ }
+
+ for (int i = 0; i < mInputs2.size(); i++) {
+ Object obj = inputs[i];
+ if (obj instanceof Future || obj instanceof Input) {
+ Log.e(TAG, this.toString() + ": input " + i +
+ " is a future or unbound value");
+ return null;
+ }
+ Input unbound = mInputs2.get(i);
+ unbound.set(obj);
+ }
+
+ mRS.nScriptGroup2Execute(getID(mRS));
+
+ Object[] outputObjs = new Object[mOutputs2.length];
+ int i = 0;
+ for (Future f : mOutputs2) {
+ Object output = f.getValue();
+ if (output instanceof Input) {
+ output = ((Input)output).get();
+ }
+ outputObjs[i++] = output;
+ }
+ return outputObjs;
+ }
+
/**
* Sets an input of the ScriptGroup. This specifies an
* Allocation to be used for kernels that require an input
* Allocation provided from outside of the ScriptGroup.
*
+ * @deprecated Set arguments to {@link #execute(Object...)} instead.
+ *
* @param s The ID of the kernel where the allocation should be
* connected.
* @param a The allocation to connect.
@@ -117,6 +469,8 @@
* Allocation to be used for the kernels that require an output
* Allocation visible after the ScriptGroup is executed.
*
+ * @deprecated Use return value of {@link #execute(Object...)} instead.
+ *
* @param s The ID of the kernel where the allocation should be
* connected.
* @param a The allocation to connect.
@@ -136,6 +490,9 @@
* Execute the ScriptGroup. This will run all the kernels in
* the ScriptGroup. No internal connection results will be visible
* after execution of the ScriptGroup.
+ *
+ * @deprecated Use {@link #execute} instead.
+ *
*/
public void execute() {
mRS.nScriptGroupExecute(getID(mRS));
@@ -164,6 +521,8 @@
* Once all connections are made, a call to {@link #create} will
* return the ScriptGroup object.
*
+ * @deprecated Use {@link Builder2} instead.
+ *
*/
public static final class Builder {
private RenderScript mRS;
@@ -236,7 +595,8 @@
Node n = mNodes.get(ct);
if (n.mInputs.size() == 0) {
if (n.mOutputs.size() == 0 && mNodes.size() > 1) {
- throw new RSInvalidStateException("Groups cannot contain unconnected scripts");
+ String msg = "Groups cannot contain unconnected scripts";
+ throw new RSInvalidStateException(msg);
}
validateDAGRecurse(n, ct+1);
}
@@ -464,7 +824,212 @@
}
+ /**
+ * Represents a binding of a value to a global variable in a
+ * kernel or invocable function. Used in closure creation.
+ */
+
+ public static final class Binding {
+ private final Script.FieldID mField;
+ private final Object mValue;
+
+ /**
+ * Returns a Binding object that binds value to field
+ *
+ * @param field the Script.FieldID of the global variable
+ * @param value the value
+ */
+
+ public Binding(Script.FieldID field, Object value) {
+ mField = field;
+ mValue = value;
+ }
+
+ /**
+ * Returns the field ID
+ */
+
+ public Script.FieldID getField() { return mField; }
+
+ /**
+ * Returns the value
+ */
+
+ public Object getValue() { return mValue; }
+ }
+
+ /**
+ * The builder class for creating script groups
+ * <p>
+ * A script group is created using closures (see class {@link Closure}).
+ * A closure is a function call to a kernel or
+ * invocable function. Each function argument or global variable accessed inside
+ * the function is bound to 1) a known value, 2) a script group input
+ * (see class {@link Input}), or 3) a
+ * future (see class {@link Future}).
+ * A future is the output of a closure, either the return value of the
+ * function or a global variable written by that function.
+ * <p>
+ * Closures are created using the {@link #addKernel} or {@link #addInvoke}
+ * methods.
+ * When a closure is created, futures from previously created closures
+ * can be used as its inputs.
+ * External script group inputs can be used as inputs to individual closures as well.
+ * An external script group input is created using the {@link #addInput} method.
+ * A script group is created by a call to the {@link #create} method, which
+ * accepts an array of futures as the outputs for the script group.
+ * <p>
+ * Closures in a script group can be evaluated in any order as long as the
+ * following conditions are met:
+ * 1) a closure must be evaluated before any other closures that take its
+ * futures as inputs;
+ * 2) all closures added before an invoke closure must be evaluated
+ * before it;
+ * and 3) all closures added after an invoke closure must be evaluated after
+ * it.
+ * As a special case, the order that the closures are added is a legal
+ * evaluation order. However, other evaluation orders are possible, including
+ * concurrently evaluating independent closures.
+ */
+
+ public static final class Builder2 {
+ RenderScript mRS;
+ List<Closure> mClosures;
+ List<Input> mInputs;
+ private static final String TAG = "ScriptGroup.Builder2";
+
+ /**
+ * Returns a Builder object
+ *
+ * @param rs the RenderScript context
+ */
+ public Builder2(RenderScript rs) {
+ mRS = rs;
+ mClosures = new ArrayList<Closure>();
+ mInputs = new ArrayList<Input>();
+ }
+
+ /**
+ * Adds a closure for a kernel
+ *
+ * @param k Kernel ID for the kernel function
+ * @param returnType Allocation type for the return value
+ * @param args arguments to the kernel function
+ * @param globalBindings bindings for global variables
+ * @return a closure
+ */
+
+ private Closure addKernelInternal(Script.KernelID k, Type returnType, Object[] args,
+ Map<Script.FieldID, Object> globalBindings) {
+ Closure c = new Closure(mRS, k, returnType, args, globalBindings);
+ mClosures.add(c);
+ return c;
+ }
+
+ /**
+ * Adds a closure for an invocable function
+ *
+ * @param invoke Invoke ID for the invocable function
+ * @param args arguments to the invocable function
+ * @param globalBindings bindings for global variables
+ * @return a closure
+ */
+
+ private Closure addInvokeInternal(Script.InvokeID invoke, Object[] args,
+ Map<Script.FieldID, Object> globalBindings) {
+ Closure c = new Closure(mRS, invoke, args, globalBindings);
+ mClosures.add(c);
+ return c;
+ }
+
+ /**
+ * Adds a script group input
+ *
+ * @return a script group input, which can be used as an argument or a value to
+ * a global variable for creating closures
+ */
+ public Input addInput() {
+ Input unbound = new Input();
+ mInputs.add(unbound);
+ return unbound;
+ }
+
+ /**
+ * Adds a closure for a kernel
+ *
+ * @param k Kernel ID for the kernel function
+ * @param argsAndBindings arguments followed by bindings for global variables
+ * @return a closure
+ */
+
+ public Closure addKernel(Script.KernelID k, Type returnType, Object... argsAndBindings) {
+ ArrayList<Object> args = new ArrayList<Object>();
+ Map<Script.FieldID, Object> bindingMap = new HashMap<Script.FieldID, Object>();
+ if (!seperateArgsAndBindings(argsAndBindings, args, bindingMap)) {
+ return null;
+ }
+ return addKernelInternal(k, returnType, args.toArray(), bindingMap);
+ }
+
+ /**
+ * Adds a closure for an invocable function
+ *
+ * @param invoke Invoke ID for the invocable function
+ * @param argsAndBindings arguments followed by bindings for global variables
+ * @return a closure
+ */
+
+ public Closure addInvoke(Script.InvokeID invoke, Object... argsAndBindings) {
+ ArrayList<Object> args = new ArrayList<Object>();
+ Map<Script.FieldID, Object> bindingMap = new HashMap<Script.FieldID, Object>();
+ if (!seperateArgsAndBindings(argsAndBindings, args, bindingMap)) {
+ return null;
+ }
+ return addInvokeInternal(invoke, args.toArray(), bindingMap);
+ }
+
+ /**
+ * Creates a script group
+ *
+ * @param name name for the script group. Legal names can only contain letters, digits,
+ * '-', or '_'. The name can be no longer than 100 characters.
+ * Try to use unique names, to avoid name conflicts and reduce
+ * the cost of group creation.
+ * @param outputs futures intended as outputs of the script group
+ * @return a script group
+ */
+
+ public ScriptGroup create(String name, Future... outputs) {
+ if (name == null || name.isEmpty() || name.length() > 100 ||
+ !name.equals(name.replaceAll("[^a-zA-Z0-9-]", "_"))) {
+ throw new RSIllegalArgumentException("invalid script group name");
+ }
+ ScriptGroup ret = new ScriptGroup(mRS, name, mClosures, mInputs, outputs);
+ return ret;
+ }
+
+ private boolean seperateArgsAndBindings(Object[] argsAndBindings,
+ ArrayList<Object> args,
+ Map<Script.FieldID, Object> bindingMap) {
+ int i;
+ for (i = 0; i < argsAndBindings.length; i++) {
+ if (argsAndBindings[i] instanceof Binding) {
+ break;
+ }
+ args.add(argsAndBindings[i]);
+ }
+
+ for (; i < argsAndBindings.length; i++) {
+ if (!(argsAndBindings[i] instanceof Binding)) {
+ return false;
+ }
+ Binding b = (Binding)argsAndBindings[i];
+ bindingMap.put(b.getField(), b.getValue());
+ }
+
+ return true;
+ }
+
+ }
}
-
-
diff --git a/rs/java/android/renderscript/ScriptGroup2.java b/rs/java/android/renderscript/ScriptGroup2.java
index 857e9fb..417bbee 100644
--- a/rs/java/android/renderscript/ScriptGroup2.java
+++ b/rs/java/android/renderscript/ScriptGroup2.java
@@ -289,6 +289,7 @@
}
}
+ String mName;
List<Closure> mClosures;
List<UnboundValue> mInputs;
Future[] mOutputs;
@@ -299,9 +300,10 @@
super(id, rs);
}
- ScriptGroup2(RenderScript rs, List<Closure> closures,
+ ScriptGroup2(RenderScript rs, String name, List<Closure> closures,
List<UnboundValue> inputs, Future[] outputs) {
super(0, rs);
+ mName = name;
mClosures = closures;
mInputs = inputs;
mOutputs = outputs;
@@ -310,7 +312,7 @@
for (int i = 0; i < closureIDs.length; i++) {
closureIDs[i] = closures.get(i).getID(rs);
}
- long id = rs.nScriptGroup2Create(ScriptC.mCachePath, closureIDs);
+ long id = rs.nScriptGroup2Create(name, ScriptC.mCachePath, closureIDs);
setID(id);
}
@@ -412,8 +414,12 @@
return addInvoke(invoke, args.toArray(), bindingMap);
}
- public ScriptGroup2 create(Future... outputs) {
- ScriptGroup2 ret = new ScriptGroup2(mRS, mClosures, mInputs, outputs);
+ public ScriptGroup2 create(String name, Future... outputs) {
+ if (name == null || name.isEmpty() || name.length() > 100 ||
+ !name.equals(name.replaceAll("[^a-zA-Z0-9-]", "_"))) {
+ throw new RSIllegalArgumentException("invalid script group name");
+ }
+ ScriptGroup2 ret = new ScriptGroup2(mRS, name, mClosures, mInputs, outputs);
return ret;
}
diff --git a/rs/java/android/renderscript/ScriptIntrinsicBLAS.java b/rs/java/android/renderscript/ScriptIntrinsicBLAS.java
index 90d2300..b837fbe 100644
--- a/rs/java/android/renderscript/ScriptIntrinsicBLAS.java
+++ b/rs/java/android/renderscript/ScriptIntrinsicBLAS.java
@@ -176,6 +176,9 @@
private static final int RsBlas_zherk = 141;
private static final int RsBlas_zher2k = 142;
+ // BLAS extensions start here
+ private static final int RsBlas_bnnm = 1000;
+
/**
*/
public static ScriptIntrinsicBLAS create(RenderScript rs) {
@@ -239,7 +242,7 @@
}
static void validateUplo(@Uplo int Uplo) {
- if (Uplo != LEFT && Uplo != RIGHT) {
+ if (Uplo != UPPER && Uplo != LOWER) {
throw new RSRuntimeException("Invalid uplo passed to BLAS");
}
}
@@ -274,36 +277,36 @@
expectedYDim = 1 + (N - 1) * incY;
}
if (X.getType().getX() != expectedXDim ||
- Y.getType().getY() != expectedXDim) {
+ Y.getType().getX() != expectedYDim) {
throw new RSRuntimeException("Incorrect vector dimensions for GEMV");
}
}
- void SGEMV(@Transpose int TransA, float alpha, Allocation A, Allocation X, int incX, float beta, Allocation Y, int incY) {
+ public void SGEMV(@Transpose int TransA, float alpha, Allocation A, Allocation X, int incX, float beta, Allocation Y, int incY) {
validateGEMV(Element.F32(mRS), TransA, A, X, incX, Y, incY);
int M = A.getType().getY();
int N = A.getType().getX();
mRS.nScriptIntrinsicBLAS_Single(getID(mRS), RsBlas_sgemv, TransA, 0, 0, 0, 0, M, N, 0, alpha, A.getID(mRS), X.getID(mRS), beta, Y.getID(mRS), incX, incY, 0, 0);
}
- void DGEMV(@Transpose int TransA, double alpha, Allocation A, Allocation X, int incX, double beta, Allocation Y, int incY) {
+ public void DGEMV(@Transpose int TransA, double alpha, Allocation A, Allocation X, int incX, double beta, Allocation Y, int incY) {
validateGEMV(Element.F64(mRS), TransA, A, X, incX, Y, incY);
int M = A.getType().getY();
int N = A.getType().getX();
mRS.nScriptIntrinsicBLAS_Double(getID(mRS), RsBlas_dgemv, TransA, 0, 0, 0, 0, M, N, 0, alpha, A.getID(mRS), X.getID(mRS), beta, Y.getID(mRS), incX, incY, 0, 0);
}
- void CGEMV(@Transpose int TransA, Float2 alpha, Allocation A, Allocation X, int incX, Float2 beta, Allocation Y, int incY) {
+ public void CGEMV(@Transpose int TransA, Float2 alpha, Allocation A, Allocation X, int incX, Float2 beta, Allocation Y, int incY) {
validateGEMV(Element.F32_2(mRS), TransA, A, X, incX, Y, incY);
int M = A.getType().getY();
int N = A.getType().getX();
mRS.nScriptIntrinsicBLAS_Complex(getID(mRS), RsBlas_cgemv, TransA, 0, 0, 0, 0, M, N, 0, alpha.x, alpha.y, A.getID(mRS), X.getID(mRS), beta.x, beta.y, Y.getID(mRS), incX, incY, 0, 0);
}
- void ZGEMV(@Transpose int TransA, Double2 alpha, Allocation A, Allocation X, int incX, Double2 beta, Allocation Y, int incY) {
+ public void ZGEMV(@Transpose int TransA, Double2 alpha, Allocation A, Allocation X, int incX, Double2 beta, Allocation Y, int incY) {
validateGEMV(Element.F64_2(mRS), TransA, A, X, incX, Y, incY);
int M = A.getType().getY();
int N = A.getType().getX();
mRS.nScriptIntrinsicBLAS_Z(getID(mRS), RsBlas_zgemv, TransA, 0, 0, 0, 0, M, N, 0, alpha.x, alpha.y, A.getID(mRS), X.getID(mRS), beta.x, beta.y, Y.getID(mRS), incX, incY, 0, 0);
}
- void SGBMV(@Transpose int TransA, int KL, int KU, float alpha, Allocation A, Allocation X, int incX, float beta, Allocation Y, int incY) {
+ public void SGBMV(@Transpose int TransA, int KL, int KU, float alpha, Allocation A, Allocation X, int incX, float beta, Allocation Y, int incY) {
// GBMV has the same validation requirements as GEMV + KL and KU >= 0
validateGEMV(Element.F32(mRS), TransA, A, X, incX, Y, incY);
if (KL < 0 || KU < 0) {
@@ -313,7 +316,7 @@
int N = A.getType().getX();
mRS.nScriptIntrinsicBLAS_Single(getID(mRS), RsBlas_sgbmv, TransA, 0, 0, 0, 0, M, N, 0, alpha, A.getID(mRS), X.getID(mRS), beta, Y.getID(mRS), incX, incY, KL, KU);
}
- void DGBMV(@Transpose int TransA, int KL, int KU, double alpha, Allocation A, Allocation X, int incX, double beta, Allocation Y, int incY) {
+ public void DGBMV(@Transpose int TransA, int KL, int KU, double alpha, Allocation A, Allocation X, int incX, double beta, Allocation Y, int incY) {
// GBMV has the same validation requirements as GEMV + KL and KU >= 0
validateGEMV(Element.F64(mRS), TransA, A, X, incX, Y, incY);
if (KL < 0 || KU < 0) {
@@ -323,7 +326,7 @@
int N = A.getType().getX();
mRS.nScriptIntrinsicBLAS_Double(getID(mRS), RsBlas_dgbmv, TransA, 0, 0, 0, 0, M, N, 0, alpha, A.getID(mRS), X.getID(mRS), beta, Y.getID(mRS), incX, incY, KL, KU);
}
- void CGBMV(@Transpose int TransA, int KL, int KU, Float2 alpha, Allocation A, Allocation X, int incX, Float2 beta, Allocation Y, int incY) {
+ public void CGBMV(@Transpose int TransA, int KL, int KU, Float2 alpha, Allocation A, Allocation X, int incX, Float2 beta, Allocation Y, int incY) {
// GBMV has the same validation requirements as GEMV + KL and KU >= 0
validateGEMV(Element.F32_2(mRS), TransA, A, X, incX, Y, incY);
if (KL < 0 || KU < 0) {
@@ -333,7 +336,7 @@
int N = A.getType().getX();
mRS.nScriptIntrinsicBLAS_Complex(getID(mRS), RsBlas_cgbmv, TransA, 0, 0, 0, 0, M, N, 0, alpha.x, alpha.y, A.getID(mRS), X.getID(mRS), beta.x, beta.y, Y.getID(mRS), incX, incY, KL, KU);
}
- void ZGBMV(@Transpose int TransA, int KL, int KU, Double2 alpha, Allocation A, Allocation X, int incX, Double2 beta, Allocation Y, int incY) {
+ public void ZGBMV(@Transpose int TransA, int KL, int KU, Double2 alpha, Allocation A, Allocation X, int incX, Double2 beta, Allocation Y, int incY) {
// GBMV has the same validation requirements as GEMV + KL and KU >= 0
validateGEMV(Element.F64_2(mRS), TransA, A, X, incX, Y, incY);
if (KL < 0 || KU < 0) {
@@ -344,8 +347,10 @@
mRS.nScriptIntrinsicBLAS_Z(getID(mRS), RsBlas_zgbmv, TransA, 0, 0, 0, 0, M, N, 0, alpha.x, alpha.y, A.getID(mRS), X.getID(mRS), beta.x, beta.y, Y.getID(mRS), incX, incY, KL, KU);
}
- static void validateTRMV(Element e, @Transpose int TransA, Allocation A, Allocation X, int incX) {
+ static void validateTRMV(Element e, @Uplo int Uplo, @Transpose int TransA, @Diag int Diag, Allocation A, Allocation X, int incX) {
validateTranspose(TransA);
+ validateUplo(Uplo);
+ validateDiag(Diag);
int N = A.getType().getY();
if (A.getType().getX() != N) {
throw new RSRuntimeException("A must be a square matrix for TRMV");
@@ -384,158 +389,174 @@
}
int N = (int)Math.sqrt((double)Ap.getType().getX() * 2);
+ //is it really doing anything?
if (Ap.getType().getX() != ((N * (N+1)) / 2)) {
throw new RSRuntimeException("Invalid dimension for Ap");
}
-
+ if (incX <= 0) {
+ throw new RSRuntimeException("Vector increments must be greater than 0");
+ }
int expectedXDim = 1 + (N - 1) * incX;
if (X.getType().getX() != expectedXDim) {
- throw new RSRuntimeException("Incorrect vector dimensions for SYMV");
+ throw new RSRuntimeException("Incorrect vector dimensions for TPMV");
}
return N;
}
- void STRMV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, Allocation A, Allocation X, int incX) {
- validateTRMV(Element.F32(mRS), TransA, A, X, incX);
+ public void STRMV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, Allocation A, Allocation X, int incX) {
+ validateTRMV(Element.F32(mRS), Uplo, TransA, Diag, A, X, incX);
int N = A.getType().getY();
mRS.nScriptIntrinsicBLAS_Single(getID(mRS), RsBlas_strmv, TransA, 0, 0, Uplo, Diag, 0, N, 0, 0, A.getID(mRS), X.getID(mRS), 0, 0, incX, 0, 0, 0);
}
- void DTRMV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, Allocation A, Allocation X, int incX) {
- validateTRMV(Element.F64(mRS), TransA, A, X, incX);
+ public void DTRMV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, Allocation A, Allocation X, int incX) {
+ validateTRMV(Element.F64(mRS), Uplo, TransA, Diag, A, X, incX);
int N = A.getType().getY();
mRS.nScriptIntrinsicBLAS_Double(getID(mRS), RsBlas_dtrmv, TransA, 0, 0, Uplo, Diag, 0, N, 0, 0, A.getID(mRS), X.getID(mRS), 0, 0, incX, 0, 0, 0);
}
- void CTRMV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, Allocation A, Allocation X, int incX) {
- validateTRMV(Element.F32_2(mRS), TransA, A, X, incX);
+ public void CTRMV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, Allocation A, Allocation X, int incX) {
+ validateTRMV(Element.F32_2(mRS), Uplo, TransA, Diag, A, X, incX);
int N = A.getType().getY();
mRS.nScriptIntrinsicBLAS_Complex(getID(mRS), RsBlas_ctrmv, TransA, 0, 0, Uplo, Diag, 0, N, 0, 0, 0, A.getID(mRS), X.getID(mRS), 0, 0, 0, incX, 0, 0, 0);
}
- void ZTRMV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, Allocation A, Allocation X, int incX) {
- validateTRMV(Element.F64_2(mRS), TransA, A, X, incX);
+ public void ZTRMV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, Allocation A, Allocation X, int incX) {
+ validateTRMV(Element.F64_2(mRS), Uplo, TransA, Diag, A, X, incX);
int N = A.getType().getY();
mRS.nScriptIntrinsicBLAS_Z(getID(mRS), RsBlas_ztrmv, TransA, 0, 0, Uplo, Diag, 0, N, 0, 0, 0, A.getID(mRS), X.getID(mRS), 0, 0, 0, incX, 0, 0, 0);
}
- void STBMV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, int K, Allocation A, Allocation X, int incX) {
- // TBMV has the same requirements as TRMV
- validateTRMV(Element.F32(mRS), TransA, A, X, incX);
+
+ public void STBMV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, int K, Allocation A, Allocation X, int incX) {
+ // TBMV has the same requirements as TRMV + K >= 0
+ if (K < 0) {
+ throw new RSRuntimeException("K must be greater than or equal to 0");
+ }
+ validateTRMV(Element.F32(mRS), Uplo, TransA, Diag, A, X, incX);
int N = A.getType().getY();
mRS.nScriptIntrinsicBLAS_Single(getID(mRS), RsBlas_stbmv, TransA, 0, 0, Uplo, Diag, 0, N, K, 0, A.getID(mRS), X.getID(mRS), 0, 0, incX, 0, 0, 0);
}
- void DTBMV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, int K, Allocation A, Allocation X, int incX) {
- // TBMV has the same requirements as TRMV
- validateTRMV(Element.F64(mRS), TransA, A, X, incX);
+ public void DTBMV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, int K, Allocation A, Allocation X, int incX) {
+ // TBMV has the same requirements as TRMV + K >= 0
+ if (K < 0) {
+ throw new RSRuntimeException("K must be greater than or equal to 0");
+ }
+ validateTRMV(Element.F64(mRS), Uplo, TransA, Diag, A, X, incX);
int N = A.getType().getY();
mRS.nScriptIntrinsicBLAS_Double(getID(mRS), RsBlas_dtbmv, TransA, 0, 0, Uplo, Diag, 0, N, K, 0, A.getID(mRS), X.getID(mRS), 0, 0, incX, 0, 0, 0);
}
- void CTBMV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, int K, Allocation A, Allocation X, int incX) {
- // TBMV has the same requirements as TRMV
- validateTRMV(Element.F32_2(mRS), TransA, A, X, incX);
+ public void CTBMV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, int K, Allocation A, Allocation X, int incX) {
+ // TBMV has the same requirements as TRMV + K >= 0
+ if (K < 0) {
+ throw new RSRuntimeException("K must be greater than or equal to 0");
+ }
+ validateTRMV(Element.F32_2(mRS), Uplo, TransA, Diag, A, X, incX);
int N = A.getType().getY();
mRS.nScriptIntrinsicBLAS_Complex(getID(mRS), RsBlas_ctbmv, TransA, 0, 0, Uplo, Diag, 0, N, K, 0, 0, A.getID(mRS), X.getID(mRS), 0, 0, 0, incX, 0, 0, 0);
}
- void ZTBMV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, int K, Allocation A, Allocation X, int incX) {
- // TBMV has the same requirements as TRMV
- validateTRMV(Element.F64_2(mRS), TransA, A, X, incX);
+ public void ZTBMV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, int K, Allocation A, Allocation X, int incX) {
+ // TBMV has the same requirements as TRMV + K >= 0
+ if (K < 0) {
+ throw new RSRuntimeException("K must be greater than or equal to 0");
+ }
+ validateTRMV(Element.F64_2(mRS), Uplo, TransA, Diag, A, X, incX);
int N = A.getType().getY();
mRS.nScriptIntrinsicBLAS_Z(getID(mRS), RsBlas_ztbmv, TransA, 0, 0, Uplo, Diag, 0, N, K, 0, 0, A.getID(mRS), X.getID(mRS), 0, 0, 0, incX, 0, 0, 0);
}
- void STPMV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, Allocation Ap, Allocation X, int incX) {
+ public void STPMV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, Allocation Ap, Allocation X, int incX) {
int N = validateTPMV(Element.F32(mRS), Uplo, TransA, Diag, Ap, X, incX);
mRS.nScriptIntrinsicBLAS_Single(getID(mRS), RsBlas_stpmv, TransA, 0, 0, Uplo, Diag, 0, N, 0, 0, Ap.getID(mRS), X.getID(mRS), 0, 0, incX, 0, 0, 0);
}
- void DTPMV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, Allocation Ap, Allocation X, int incX) {
+ public void DTPMV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, Allocation Ap, Allocation X, int incX) {
int N = validateTPMV(Element.F64(mRS), Uplo, TransA, Diag, Ap, X, incX);
mRS.nScriptIntrinsicBLAS_Double(getID(mRS), RsBlas_dtpmv, TransA, 0, 0, Uplo, Diag, 0, N, 0, 0, Ap.getID(mRS), X.getID(mRS), 0, 0, incX, 0, 0, 0);
}
- void CTPMV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, Allocation Ap, Allocation X, int incX) {
+ public void CTPMV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, Allocation Ap, Allocation X, int incX) {
int N = validateTPMV(Element.F32_2(mRS), Uplo, TransA, Diag, Ap, X, incX);
mRS.nScriptIntrinsicBLAS_Complex(getID(mRS), RsBlas_ctpmv, TransA, 0, 0, Uplo, Diag, 0, N, 0, 0, 0, Ap.getID(mRS), X.getID(mRS), 0, 0, 0, incX, 0, 0, 0);
}
- void ZTPMV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, Allocation Ap, Allocation X, int incX) {
+ public void ZTPMV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, Allocation Ap, Allocation X, int incX) {
int N = validateTPMV(Element.F64_2(mRS), Uplo, TransA, Diag, Ap, X, incX);
mRS.nScriptIntrinsicBLAS_Z(getID(mRS), RsBlas_ztpmv, TransA, 0, 0, Uplo, Diag, 0, N, 0, 0, 0, Ap.getID(mRS), X.getID(mRS), 0, 0, 0, incX, 0, 0, 0);
}
- void STRSV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, Allocation A, Allocation X, int incX) {
+ public void STRSV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, Allocation A, Allocation X, int incX) {
// TRSV is the same as TRMV
- validateTRMV(Element.F32(mRS), TransA, A, X, incX);
+ validateTRMV(Element.F32(mRS), Uplo, TransA, Diag, A, X, incX);
int N = A.getType().getY();
mRS.nScriptIntrinsicBLAS_Single(getID(mRS), RsBlas_strsv, TransA, 0, 0, Uplo, Diag, 0, N, 0, 0, A.getID(mRS), X.getID(mRS), 0, 0, incX, 0, 0, 0);
}
- void DTRSV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, Allocation A, Allocation X, int incX) {
+ public void DTRSV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, Allocation A, Allocation X, int incX) {
// TRSV is the same as TRMV
- validateTRMV(Element.F64(mRS), TransA, A, X, incX);
+ validateTRMV(Element.F64(mRS), Uplo, TransA, Diag, A, X, incX);
int N = A.getType().getY();
mRS.nScriptIntrinsicBLAS_Double(getID(mRS), RsBlas_dtrsv, TransA, 0, 0, Uplo, Diag, 0, N, 0, 0, A.getID(mRS), X.getID(mRS), 0, 0, incX, 0, 0, 0);
}
- void CTRSV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, Allocation A, Allocation X, int incX) {
+ public void CTRSV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, Allocation A, Allocation X, int incX) {
// TRSV is the same as TRMV
- validateTRMV(Element.F32_2(mRS), TransA, A, X, incX);
+ validateTRMV(Element.F32_2(mRS), Uplo, TransA, Diag, A, X, incX);
int N = A.getType().getY();
mRS.nScriptIntrinsicBLAS_Complex(getID(mRS), RsBlas_ctrsv, TransA, 0, 0, Uplo, Diag, 0, N, 0, 0, 0, A.getID(mRS), X.getID(mRS), 0, 0, 0, incX, 0, 0, 0);
}
- void ZTRSV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, Allocation A, Allocation X, int incX) {
+ public void ZTRSV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, Allocation A, Allocation X, int incX) {
// TRSV is the same as TRMV
- validateTRMV(Element.F64_2(mRS), TransA, A, X, incX);
+ validateTRMV(Element.F64_2(mRS), Uplo, TransA, Diag, A, X, incX);
int N = A.getType().getY();
mRS.nScriptIntrinsicBLAS_Z(getID(mRS), RsBlas_ztrsv, TransA, 0, 0, Uplo, Diag, 0, N, 0, 0, 0, A.getID(mRS), X.getID(mRS), 0, 0, 0, incX, 0, 0, 0);
}
- void STBSV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, int K, Allocation A, Allocation X, int incX) {
- // TBSV is the same as TRMV
- validateTRMV(Element.F32(mRS), TransA, A, X, incX);
+ public void STBSV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, int K, Allocation A, Allocation X, int incX) {
+ // TBSV is the same as TRMV + K >= 0
+ validateTRMV(Element.F32(mRS), Uplo, TransA, Diag, A, X, incX);
int N = A.getType().getY();
if (K < 0) {
throw new RSRuntimeException("Number of diagonals must be positive");
}
mRS.nScriptIntrinsicBLAS_Single(getID(mRS), RsBlas_stbsv, TransA, 0, 0, Uplo, Diag, 0, N, K, 0, A.getID(mRS), X.getID(mRS), 0, 0, incX, 0, 0, 0);
}
- void DTBSV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, int K, Allocation A, Allocation X, int incX) {
- // TBSV is the same as TRMV
- validateTRMV(Element.F64(mRS), TransA, A, X, incX);
+ public void DTBSV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, int K, Allocation A, Allocation X, int incX) {
+ // TBSV is the same as TRMV + K >= 0
+ validateTRMV(Element.F64(mRS), Uplo, TransA, Diag, A, X, incX);
int N = A.getType().getY();
if (K < 0) {
throw new RSRuntimeException("Number of diagonals must be positive");
}
mRS.nScriptIntrinsicBLAS_Double(getID(mRS), RsBlas_dtbsv, TransA, 0, 0, Uplo, Diag, 0, N, K, 0, A.getID(mRS), X.getID(mRS), 0, 0, incX, 0, 0, 0);
}
- void CTBSV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, int K, Allocation A, Allocation X, int incX) {
- // TBSV is the same as TRMV
- validateTRMV(Element.F32_2(mRS), TransA, A, X, incX);
+ public void CTBSV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, int K, Allocation A, Allocation X, int incX) {
+ // TBSV is the same as TRMV + K >= 0
+ validateTRMV(Element.F32_2(mRS), Uplo, TransA, Diag, A, X, incX);
int N = A.getType().getY();
if (K < 0) {
throw new RSRuntimeException("Number of diagonals must be positive");
}
mRS.nScriptIntrinsicBLAS_Complex(getID(mRS), RsBlas_ctbsv, TransA, 0, 0, Uplo, Diag, 0, N, K, 0, 0, A.getID(mRS), X.getID(mRS), 0, 0, 0, incX, 0, 0, 0);
}
- void ZTBSV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, int K, Allocation A, Allocation X, int incX) {
- // TBSV is the same as TRMV
- validateTRMV(Element.F64_2(mRS), TransA, A, X, incX);
+ public void ZTBSV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, int K, Allocation A, Allocation X, int incX) {
+ // TBSV is the same as TRMV + K >= 0
+ validateTRMV(Element.F64_2(mRS), Uplo, TransA, Diag, A, X, incX);
int N = A.getType().getY();
if (K < 0) {
throw new RSRuntimeException("Number of diagonals must be positive");
}
mRS.nScriptIntrinsicBLAS_Z(getID(mRS), RsBlas_ztbsv, TransA, 0, 0, Uplo, Diag, 0, N, K, 0, 0, A.getID(mRS), X.getID(mRS), 0, 0, 0, incX, 0, 0, 0);
}
- void STPSV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, Allocation Ap, Allocation X, int incX) {
+ public void STPSV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, Allocation Ap, Allocation X, int incX) {
// TPSV is same as TPMV
int N = validateTPMV(Element.F32(mRS), Uplo, TransA, Diag, Ap, X, incX);
mRS.nScriptIntrinsicBLAS_Single(getID(mRS), RsBlas_stpsv, TransA, 0, 0, Uplo, Diag, 0, N, 0, 0, Ap.getID(mRS), X.getID(mRS), 0, 0, incX, 0, 0, 0);
}
- void DTPSV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, Allocation Ap, Allocation X, int incX) {
+ public void DTPSV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, Allocation Ap, Allocation X, int incX) {
// TPSV is same as TPMV
int N = validateTPMV(Element.F64(mRS), Uplo, TransA, Diag, Ap, X, incX);
mRS.nScriptIntrinsicBLAS_Double(getID(mRS), RsBlas_dtpsv, TransA, 0, 0, Uplo, Diag, 0, N, 0, 0, Ap.getID(mRS), X.getID(mRS), 0, 0, incX, 0, 0, 0);
}
- void CTPSV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, Allocation Ap, Allocation X, int incX) {
+ public void CTPSV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, Allocation Ap, Allocation X, int incX) {
// TPSV is same as TPMV
int N = validateTPMV(Element.F32_2(mRS), Uplo, TransA, Diag, Ap, X, incX);
mRS.nScriptIntrinsicBLAS_Complex(getID(mRS), RsBlas_ctpsv, TransA, 0, 0, Uplo, Diag, 0, N, 0, 0, 0, Ap.getID(mRS), X.getID(mRS), 0, 0, 0, incX, 0, 0, 0);
}
- void ZTPSV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, Allocation Ap, Allocation X, int incX) {
+ public void ZTPSV(@Uplo int Uplo, @Transpose int TransA, @Diag int Diag, Allocation Ap, Allocation X, int incX) {
// TPSV is same as TPMV
int N = validateTPMV(Element.F64_2(mRS), Uplo, TransA, Diag, Ap, X, incX);
mRS.nScriptIntrinsicBLAS_Z(getID(mRS), RsBlas_ztpsv, TransA, 0, 0, Uplo, Diag, 0, N, 0, 0, 0, Ap.getID(mRS), X.getID(mRS), 0, 0, 0, incX, 0, 0, 0);
@@ -591,7 +612,9 @@
if (Ap.getType().getX() != ((N * (N+1)) / 2)) {
throw new RSRuntimeException("Invalid dimension for Ap");
}
-
+ if (incX <= 0 || incY <= 0) {
+ throw new RSRuntimeException("Vector increments must be greater than 0");
+ }
int expectedXDim = 1 + (N - 1) * incX;
if (X.getType().getX() != expectedXDim) {
throw new RSRuntimeException("Incorrect vector dimensions for SPMV");
@@ -620,8 +643,10 @@
if (N < 1 || M < 1) {
throw new RSRuntimeException("M and N must be 1 or greater for GER");
}
-
- int expectedXDim = 1 + (N - 1) * incX;
+ if (incX <= 0 || incY <= 0) {
+ throw new RSRuntimeException("Vector increments must be greater than 0");
+ }
+ int expectedXDim = 1 + (M - 1) * incX;
if (X.getType().getX() != expectedXDim) {
throw new RSRuntimeException("Incorrect vector dimensions for GER");
}
@@ -647,7 +672,9 @@
if (N != A.getType().getY()) {
throw new RSRuntimeException("A must be a symmetric matrix");
}
-
+ if (incX <= 0) {
+ throw new RSRuntimeException("Vector increments must be greater than 0");
+ }
int expectedXDim = 1 + (N - 1) * incX;
if (X.getType().getX() != expectedXDim) {
throw new RSRuntimeException("Incorrect vector dimensions for SYR");
@@ -672,10 +699,12 @@
if (Ap.getType().getX() != ((N * (N+1)) / 2)) {
throw new RSRuntimeException("Invalid dimension for Ap");
}
-
+ if (incX <= 0) {
+ throw new RSRuntimeException("Vector increments must be greater than 0");
+ }
int expectedXDim = 1 + (N - 1) * incX;
if (X.getType().getX() != expectedXDim) {
- throw new RSRuntimeException("Incorrect vector dimensions for SPMV");
+ throw new RSRuntimeException("Incorrect vector dimensions for SPR");
}
return N;
@@ -698,7 +727,9 @@
if (N != A.getType().getY()) {
throw new RSRuntimeException("A must be a symmetric matrix");
}
-
+ if (incX <= 0 || incY <= 0) {
+ throw new RSRuntimeException("Vector increments must be greater than 0");
+ }
int expectedXDim = 1 + (N - 1) * incX;
int expectedYDim = 1 + (N - 1) * incY;
if (X.getType().getX() != expectedXDim || Y.getType().getX() != expectedYDim) {
@@ -726,81 +757,91 @@
if (Ap.getType().getX() != ((N * (N+1)) / 2)) {
throw new RSRuntimeException("Invalid dimension for Ap");
}
-
+ if (incX <= 0 || incY <= 0) {
+ throw new RSRuntimeException("Vector increments must be greater than 0");
+ }
int expectedXDim = 1 + (N - 1) * incX;
int expectedYDim = 1 + (N - 1) * incY;
if (X.getType().getX() != expectedXDim || Y.getType().getX() != expectedYDim) {
- throw new RSRuntimeException("Incorrect vector dimensions for SPMV");
+ throw new RSRuntimeException("Incorrect vector dimensions for SPR2");
}
return N;
}
- void SSYMV(@Uplo int Uplo, float alpha, Allocation A, Allocation X, int incX, float beta, Allocation Y, int incY) {
+ public void SSYMV(@Uplo int Uplo, float alpha, Allocation A, Allocation X, int incX, float beta, Allocation Y, int incY) {
int N = validateSYMV(Element.F32(mRS), Uplo, A, X, Y, incX, incY);
mRS.nScriptIntrinsicBLAS_Single(getID(mRS), RsBlas_ssymv, 0, 0, 0, Uplo, 0, 0, N, 0, alpha, A.getID(mRS), X.getID(mRS), beta, Y.getID(mRS), incX, incY, 0, 0);
}
- void SSBMV(@Uplo int Uplo, int K, float alpha, Allocation A, Allocation X, int incX, float beta, Allocation Y, int incY) {
- // SBMV is the same as SYMV
+ public void SSBMV(@Uplo int Uplo, int K, float alpha, Allocation A, Allocation X, int incX, float beta, Allocation Y, int incY) {
+ // SBMV is the same as SYMV + K >= 0
+ if (K < 0) {
+ throw new RSRuntimeException("K must be greater than or equal to 0");
+ }
int N = validateSYMV(Element.F32(mRS), Uplo, A, X, Y, incX, incY);
mRS.nScriptIntrinsicBLAS_Single(getID(mRS), RsBlas_ssbmv, 0, 0, 0, Uplo, 0, 0, N, K, alpha, A.getID(mRS), X.getID(mRS), beta, Y.getID(mRS), incX, incY, 0, 0);
}
- void SSPMV(@Uplo int Uplo, float alpha, Allocation Ap, Allocation X, int incX, float beta, Allocation Y, int incY) {
+ public void SSPMV(@Uplo int Uplo, float alpha, Allocation Ap, Allocation X, int incX, float beta, Allocation Y, int incY) {
int N = validateSPMV(Element.F32(mRS), Uplo, Ap, X, incX, Y, incY);
mRS.nScriptIntrinsicBLAS_Single(getID(mRS), RsBlas_sspmv, 0, 0, 0, Uplo, 0, 0, N, 0, alpha, Ap.getID(mRS), X.getID(mRS), beta, Y.getID(mRS), incX, incY, 0, 0);
}
- void SGER(float alpha, Allocation X, int incX, Allocation Y, int incY, Allocation A) {
+ public void SGER(float alpha, Allocation X, int incX, Allocation Y, int incY, Allocation A) {
int M = A.getType().getY();
int N = A.getType().getX();
+ validateGER(Element.F32(mRS), X, incX, Y, incY, A);
mRS.nScriptIntrinsicBLAS_Single(getID(mRS), RsBlas_sger, 0, 0, 0, 0, 0, M, N, 0, alpha, X.getID(mRS), Y.getID(mRS), 0.f, A.getID(mRS), incX, incY, 0, 0);
}
- void SSYR(@Uplo int Uplo, float alpha, Allocation X, int incX, Allocation A) {
+ public void SSYR(@Uplo int Uplo, float alpha, Allocation X, int incX, Allocation A) {
int N = validateSYR(Element.F32(mRS), Uplo, X, incX, A);
mRS.nScriptIntrinsicBLAS_Single(getID(mRS), RsBlas_ssyr, 0, 0, 0, Uplo, 0, 0, N, 0, alpha, X.getID(mRS), A.getID(mRS), 0.f, 0, incX, 0, 0, 0);
}
- void SSPR(@Uplo int Uplo, float alpha, Allocation X, int incX, Allocation Ap) {
+ public void SSPR(@Uplo int Uplo, float alpha, Allocation X, int incX, Allocation Ap) {
int N = validateSPR(Element.F32(mRS), Uplo, X, incX, Ap);
mRS.nScriptIntrinsicBLAS_Single(getID(mRS), RsBlas_sspr, 0, 0, 0, Uplo, 0, 0, N, 0, alpha, X.getID(mRS), Ap.getID(mRS), 0.f, 0, incX, 0, 0, 0);
}
- void SSYR2(@Uplo int Uplo, float alpha, Allocation X, int incX, Allocation Y, int incY, Allocation A) {
+ public void SSYR2(@Uplo int Uplo, float alpha, Allocation X, int incX, Allocation Y, int incY, Allocation A) {
int N = validateSYR2(Element.F32(mRS), Uplo, X, incX, Y, incY, A);
mRS.nScriptIntrinsicBLAS_Single(getID(mRS), RsBlas_ssyr2, 0, 0, 0, Uplo, 0, 0, N, 0, alpha, X.getID(mRS), Y.getID(mRS), 0, A.getID(mRS), incX, incY, 0, 0);
}
- void SSPR2(@Uplo int Uplo, float alpha, Allocation X, int incX, Allocation Y, int incY, Allocation Ap) {
+ public void SSPR2(@Uplo int Uplo, float alpha, Allocation X, int incX, Allocation Y, int incY, Allocation Ap) {
int N = validateSPR2(Element.F32(mRS), Uplo, X, incX, Y, incY, Ap);
mRS.nScriptIntrinsicBLAS_Single(getID(mRS), RsBlas_sspr2, 0, 0, 0, Uplo, 0, 0, N, 0, alpha, X.getID(mRS), Y.getID(mRS), 0, Ap.getID(mRS), incX, incY, 0, 0);
}
- void DSYMV(@Uplo int Uplo, double alpha, Allocation A, Allocation X, int incX, double beta, Allocation Y, int incY) {
+ public void DSYMV(@Uplo int Uplo, double alpha, Allocation A, Allocation X, int incX, double beta, Allocation Y, int incY) {
int N = validateSYMV(Element.F64(mRS), Uplo, A, X, Y, incX, incY);
mRS.nScriptIntrinsicBLAS_Double(getID(mRS), RsBlas_dsymv, 0, 0, 0, Uplo, 0, 0, N, 0, alpha, A.getID(mRS), X.getID(mRS), beta, Y.getID(mRS), incX, incY, 0, 0);
}
- void DSBMV(@Uplo int Uplo, int K, double alpha, Allocation A, Allocation X, int incX, double beta, Allocation Y, int incY) {
- // SBMV is the same as SYMV
+ public void DSBMV(@Uplo int Uplo, int K, double alpha, Allocation A, Allocation X, int incX, double beta, Allocation Y, int incY) {
+ // SBMV is the same as SYMV + K >= 0
+ if (K < 0) {
+ throw new RSRuntimeException("K must be greater than or equal to 0");
+ }
int N = validateSYMV(Element.F64(mRS), Uplo, A, X, Y, incX, incY);
mRS.nScriptIntrinsicBLAS_Double(getID(mRS), RsBlas_dsbmv, 0, 0, 0, Uplo, 0, 0, N, K, alpha, A.getID(mRS), X.getID(mRS), beta, Y.getID(mRS), incX, incY, 0, 0);
}
- void DSPMV(@Uplo int Uplo, double alpha, Allocation Ap, Allocation X, int incX, double beta, Allocation Y, int incY) {
+ public void DSPMV(@Uplo int Uplo, double alpha, Allocation Ap, Allocation X, int incX, double beta, Allocation Y, int incY) {
int N = validateSPMV(Element.F64(mRS), Uplo, Ap, X, incX, Y, incY);
mRS.nScriptIntrinsicBLAS_Double(getID(mRS), RsBlas_dspmv, 0, 0, 0, Uplo, 0, 0, N, 0, alpha, Ap.getID(mRS), X.getID(mRS), beta, Y.getID(mRS), incX, incY, 0, 0);
}
- void DGER(double alpha, Allocation X, int incX, Allocation Y, int incY, Allocation A) {
+ public void DGER(double alpha, Allocation X, int incX, Allocation Y, int incY, Allocation A) {
int M = A.getType().getY();
int N = A.getType().getX();
+ validateGER(Element.F64(mRS), X, incX, Y, incY, A);
mRS.nScriptIntrinsicBLAS_Double(getID(mRS), RsBlas_dger, 0, 0, 0, 0, 0, M, N, 0, alpha, X.getID(mRS), Y.getID(mRS), 0.f, A.getID(mRS), incX, incY, 0, 0);
}
- void DSYR(@Uplo int Uplo, double alpha, Allocation X, int incX, Allocation A) {
+ public void DSYR(@Uplo int Uplo, double alpha, Allocation X, int incX, Allocation A) {
int N = validateSYR(Element.F64(mRS), Uplo, X, incX, A);
mRS.nScriptIntrinsicBLAS_Double(getID(mRS), RsBlas_dsyr, 0, 0, 0, Uplo, 0, 0, N, 0, alpha, X.getID(mRS), A.getID(mRS), 0.f, 0, incX, 0, 0, 0);
}
- void DSPR(@Uplo int Uplo, double alpha, Allocation X, int incX, Allocation Ap) {
+ public void DSPR(@Uplo int Uplo, double alpha, Allocation X, int incX, Allocation Ap) {
int N = validateSPR(Element.F64(mRS), Uplo, X, incX, Ap);
mRS.nScriptIntrinsicBLAS_Double(getID(mRS), RsBlas_dspr, 0, 0, 0, Uplo, 0, 0, N, 0, alpha, X.getID(mRS), Ap.getID(mRS), 0.f, 0, incX, 0, 0, 0);
}
- void DSYR2(@Uplo int Uplo, double alpha, Allocation X, int incX, Allocation Y, int incY, Allocation A) {
+ public void DSYR2(@Uplo int Uplo, double alpha, Allocation X, int incX, Allocation Y, int incY, Allocation A) {
int N = validateSYR2(Element.F64(mRS), Uplo, X, incX, Y, incY, A);
mRS.nScriptIntrinsicBLAS_Double(getID(mRS), RsBlas_dsyr2, 0, 0, 0, Uplo, 0, 0, N, 0, alpha, X.getID(mRS), Y.getID(mRS), 0, A.getID(mRS), incX, incY, 0, 0);
}
- void DSPR2(@Uplo int Uplo, double alpha, Allocation X, int incX, Allocation Y, int incY, Allocation Ap) {
+ public void DSPR2(@Uplo int Uplo, double alpha, Allocation X, int incX, Allocation Y, int incY, Allocation Ap) {
int N = validateSPR2(Element.F64(mRS), Uplo, X, incX, Y, incY, Ap);
mRS.nScriptIntrinsicBLAS_Double(getID(mRS), RsBlas_dspr2, 0, 0, 0, Uplo, 0, 0, N, 0, alpha, X.getID(mRS), Y.getID(mRS), 0, Ap.getID(mRS), incX, incY, 0, 0);
}
@@ -822,8 +863,10 @@
int M = A.getType().getY();
int N = A.getType().getX();
-
- int expectedXDim = 1 + (N - 1) * incX;
+ if (incX <= 0 || incY <= 0) {
+ throw new RSRuntimeException("Vector increments must be greater than 0");
+ }
+ int expectedXDim = 1 + (M - 1) * incX;
if (X.getType().getX() != expectedXDim) {
throw new RSRuntimeException("Incorrect vector dimensions for GERU");
}
@@ -834,12 +877,12 @@
}
- void CHEMV(@Uplo int Uplo, Float2 alpha, Allocation A, Allocation X, int incX, Float2 beta, Allocation Y, int incY) {
+ public void CHEMV(@Uplo int Uplo, Float2 alpha, Allocation A, Allocation X, int incX, Float2 beta, Allocation Y, int incY) {
// HEMV is the same as SYR2 validation-wise
int N = validateSYR2(Element.F32_2(mRS), Uplo, X, incX, Y, incY, A);
mRS.nScriptIntrinsicBLAS_Complex(getID(mRS), RsBlas_chemv, 0, 0, 0, Uplo, 0, 0, N, 0, alpha.x, alpha.y, A.getID(mRS), X.getID(mRS), beta.x, beta.y, Y.getID(mRS), incX, incY, 0, 0);
}
- void CHBMV(@Uplo int Uplo, int K, Float2 alpha, Allocation A, Allocation X, int incX, Float2 beta, Allocation Y, int incY) {
+ public void CHBMV(@Uplo int Uplo, int K, Float2 alpha, Allocation A, Allocation X, int incX, Float2 beta, Allocation Y, int incY) {
// HBMV is the same as SYR2 validation-wise
int N = validateSYR2(Element.F32_2(mRS), Uplo, X, incX, Y, incY, A);
if (K < 0) {
@@ -847,50 +890,50 @@
}
mRS.nScriptIntrinsicBLAS_Complex(getID(mRS), RsBlas_chbmv, 0, 0, 0, Uplo, 0, 0, N, K, alpha.x, alpha.y, A.getID(mRS), X.getID(mRS), beta.x, beta.y, Y.getID(mRS), incX, incY, 0, 0);
}
- void CHPMV(@Uplo int Uplo, Float2 alpha, Allocation Ap, Allocation X, int incX, Float2 beta, Allocation Y, int incY) {
+ public void CHPMV(@Uplo int Uplo, Float2 alpha, Allocation Ap, Allocation X, int incX, Float2 beta, Allocation Y, int incY) {
// HPMV is the same as SPR2
int N = validateSPR2(Element.F32_2(mRS), Uplo, X, incX, Y, incY, Ap);
mRS.nScriptIntrinsicBLAS_Complex(getID(mRS), RsBlas_chpmv, 0, 0, 0, Uplo, 0, 0, N, 0, alpha.x, alpha.y, Ap.getID(mRS), X.getID(mRS), beta.x, beta.y, Y.getID(mRS), incX, incY, 0, 0);
}
- void CGERU(Float2 alpha, Allocation X, int incX, Allocation Y, int incY, Allocation A) {
+ public void CGERU(Float2 alpha, Allocation X, int incX, Allocation Y, int incY, Allocation A) {
validateGERU(Element.F32_2(mRS), X, incX, Y, incY, A);
int M = A.getType().getY();
int N = A.getType().getX();
mRS.nScriptIntrinsicBLAS_Complex(getID(mRS), RsBlas_cgeru, 0, 0, 0, 0, 0, M, N, 0, alpha.x, alpha.y, X.getID(mRS), Y.getID(mRS), 0, 0, A.getID(mRS), incX, incY, 0, 0);
}
- void CGERC(Float2 alpha, Allocation X, int incX, Allocation Y, int incY, Allocation A) {
+ public void CGERC(Float2 alpha, Allocation X, int incX, Allocation Y, int incY, Allocation A) {
// same as GERU
validateGERU(Element.F32_2(mRS), X, incX, Y, incY, A);
int M = A.getType().getY();
int N = A.getType().getX();
mRS.nScriptIntrinsicBLAS_Complex(getID(mRS), RsBlas_cgerc, 0, 0, 0, 0, 0, M, N, 0, alpha.x, alpha.y, X.getID(mRS), Y.getID(mRS), 0, 0, A.getID(mRS), incX, incY, 0, 0);
}
- void CHER(@Uplo int Uplo, float alpha, Allocation X, int incX, Allocation A) {
+ public void CHER(@Uplo int Uplo, float alpha, Allocation X, int incX, Allocation A) {
// same as SYR
- int N = validateSYR(Element.F32(mRS), Uplo, X, incX, A);
+ int N = validateSYR(Element.F32_2(mRS), Uplo, X, incX, A);
mRS.nScriptIntrinsicBLAS_Complex(getID(mRS), RsBlas_cher, 0, 0, 0, Uplo, 0, 0, N, 0, alpha, 0, X.getID(mRS), 0, 0, 0, A.getID(mRS), incX, 0, 0, 0);
}
- void CHPR(@Uplo int Uplo, float alpha, Allocation X, int incX, Allocation Ap) {
+ public void CHPR(@Uplo int Uplo, float alpha, Allocation X, int incX, Allocation Ap) {
// equivalent to SPR for validation
int N = validateSPR(Element.F32_2(mRS), Uplo, X, incX, Ap);
mRS.nScriptIntrinsicBLAS_Complex(getID(mRS), RsBlas_chpr, 0, 0, 0, Uplo, 0, 0, N, 0, alpha, 0, X.getID(mRS), 0, 0, 0, Ap.getID(mRS), incX, 0, 0, 0);
}
- void CHER2(@Uplo int Uplo, Float2 alpha, Allocation X, int incX, Allocation Y, int incY, Allocation A) {
+ public void CHER2(@Uplo int Uplo, Float2 alpha, Allocation X, int incX, Allocation Y, int incY, Allocation A) {
// same as SYR2
int N = validateSYR2(Element.F32_2(mRS), Uplo, X, incX, Y, incY, A);
mRS.nScriptIntrinsicBLAS_Complex(getID(mRS), RsBlas_cher2, 0, 0, 0, Uplo, 0, 0, N, 0, alpha.x, alpha.y, X.getID(mRS), Y.getID(mRS), 0, 0, A.getID(mRS), incX, incY, 0, 0);
}
- void CHPR2(@Uplo int Uplo, Float2 alpha, Allocation X, int incX, Allocation Y, int incY, Allocation Ap) {
+ public void CHPR2(@Uplo int Uplo, Float2 alpha, Allocation X, int incX, Allocation Y, int incY, Allocation Ap) {
// same as SPR2
int N = validateSPR2(Element.F32_2(mRS), Uplo, X, incX, Y, incY, Ap);
mRS.nScriptIntrinsicBLAS_Complex(getID(mRS), RsBlas_chpr2, 0, 0, 0, Uplo, 0, 0, N, 0, alpha.x, alpha.y, X.getID(mRS), Y.getID(mRS), 0, 0, Ap.getID(mRS), incX, incY, 0, 0);
}
- void ZHEMV(@Uplo int Uplo, Double2 alpha, Allocation A, Allocation X, int incX, Double2 beta, Allocation Y, int incY) {
+ public void ZHEMV(@Uplo int Uplo, Double2 alpha, Allocation A, Allocation X, int incX, Double2 beta, Allocation Y, int incY) {
// HEMV is the same as SYR2 validation-wise
int N = validateSYR2(Element.F64_2(mRS), Uplo, X, incX, Y, incY, A);
mRS.nScriptIntrinsicBLAS_Z(getID(mRS), RsBlas_zhemv, 0, 0, 0, Uplo, 0, 0, N, 0, alpha.x, alpha.y, A.getID(mRS), X.getID(mRS), beta.x, beta.y, Y.getID(mRS), incX, incY, 0, 0);
}
- void ZHBMV(@Uplo int Uplo, int K, Double2 alpha, Allocation A, Allocation X, int incX, Double2 beta, Allocation Y, int incY) {
+ public void ZHBMV(@Uplo int Uplo, int K, Double2 alpha, Allocation A, Allocation X, int incX, Double2 beta, Allocation Y, int incY) {
// HBMV is the same as SYR2 validation-wise
int N = validateSYR2(Element.F64_2(mRS), Uplo, X, incX, Y, incY, A);
if (K < 0) {
@@ -898,40 +941,40 @@
}
mRS.nScriptIntrinsicBLAS_Z(getID(mRS), RsBlas_zhbmv, 0, 0, 0, Uplo, 0, 0, N, K, alpha.x, alpha.y, A.getID(mRS), X.getID(mRS), beta.x, beta.y, Y.getID(mRS), incX, incY, 0, 0);
}
- void ZHPMV(@Uplo int Uplo, Double2 alpha, Allocation Ap, Allocation X, int incX, Double2 beta, Allocation Y, int incY) {
+ public void ZHPMV(@Uplo int Uplo, Double2 alpha, Allocation Ap, Allocation X, int incX, Double2 beta, Allocation Y, int incY) {
// HPMV is the same as SPR2
int N = validateSPR2(Element.F64_2(mRS), Uplo, X, incX, Y, incY, Ap);
mRS.nScriptIntrinsicBLAS_Z(getID(mRS), RsBlas_zhpmv, 0, 0, 0, Uplo, 0, 0, N, 0, alpha.x, alpha.y, Ap.getID(mRS), X.getID(mRS), beta.x, beta.y, Y.getID(mRS), incX, incY, 0, 0);
}
- void ZGERU(Double2 alpha, Allocation X, int incX, Allocation Y, int incY, Allocation A) {
+ public void ZGERU(Double2 alpha, Allocation X, int incX, Allocation Y, int incY, Allocation A) {
validateGERU(Element.F64_2(mRS), X, incX, Y, incY, A);
int M = A.getType().getY();
int N = A.getType().getX();
mRS.nScriptIntrinsicBLAS_Z(getID(mRS), RsBlas_zgeru, 0, 0, 0, 0, 0, M, N, 0, alpha.x, alpha.y, X.getID(mRS), Y.getID(mRS), 0, 0, A.getID(mRS), incX, incY, 0, 0);
}
- void ZGERC(Double2 alpha, Allocation X, int incX, Allocation Y, int incY, Allocation A) {
+ public void ZGERC(Double2 alpha, Allocation X, int incX, Allocation Y, int incY, Allocation A) {
// same as GERU
validateGERU(Element.F64_2(mRS), X, incX, Y, incY, A);
int M = A.getType().getY();
int N = A.getType().getX();
mRS.nScriptIntrinsicBLAS_Z(getID(mRS), RsBlas_zgerc, 0, 0, 0, 0, 0, M, N, 0, alpha.x, alpha.y, X.getID(mRS), Y.getID(mRS), 0, 0, A.getID(mRS), incX, incY, 0, 0);
}
- void ZHER(@Uplo int Uplo, double alpha, Allocation X, int incX, Allocation A) {
+ public void ZHER(@Uplo int Uplo, double alpha, Allocation X, int incX, Allocation A) {
// same as SYR
- int N = validateSYR(Element.F64(mRS), Uplo, X, incX, A);
+ int N = validateSYR(Element.F64_2(mRS), Uplo, X, incX, A);
mRS.nScriptIntrinsicBLAS_Z(getID(mRS), RsBlas_zher, 0, 0, 0, Uplo, 0, 0, N, 0, alpha, 0, X.getID(mRS), 0, 0, 0, A.getID(mRS), incX, 0, 0, 0);
}
- void ZHPR(@Uplo int Uplo, double alpha, Allocation X, int incX, Allocation Ap) {
+ public void ZHPR(@Uplo int Uplo, double alpha, Allocation X, int incX, Allocation Ap) {
// equivalent to SPR for validation
int N = validateSPR(Element.F64_2(mRS), Uplo, X, incX, Ap);
mRS.nScriptIntrinsicBLAS_Z(getID(mRS), RsBlas_zhpr, 0, 0, 0, Uplo, 0, 0, N, 0, alpha, 0, X.getID(mRS), 0, 0, 0, Ap.getID(mRS), incX, 0, 0, 0);
}
- void ZHER2(@Uplo int Uplo, Double2 alpha, Allocation X, int incX, Allocation Y, int incY, Allocation A) {
+ public void ZHER2(@Uplo int Uplo, Double2 alpha, Allocation X, int incX, Allocation Y, int incY, Allocation A) {
// same as SYR2
int N = validateSYR2(Element.F64_2(mRS), Uplo, X, incX, Y, incY, A);
mRS.nScriptIntrinsicBLAS_Z(getID(mRS), RsBlas_zher2, 0, 0, 0, Uplo, 0, 0, N, 0, alpha.x, alpha.y, X.getID(mRS), Y.getID(mRS), 0, 0, A.getID(mRS), incX, incY, 0, 0);
}
- void ZHPR2(@Uplo int Uplo, Double2 alpha, Allocation X, int incX, Allocation Y, int incY, Allocation Ap) {
+ public void ZHPR2(@Uplo int Uplo, Double2 alpha, Allocation X, int incX, Allocation Y, int incY, Allocation Ap) {
// same as SPR2
int N = validateSPR2(Element.F64_2(mRS), Uplo, X, incX, Y, incY, Ap);
mRS.nScriptIntrinsicBLAS_Z(getID(mRS), RsBlas_zhpr2, 0, 0, 0, Uplo, 0, 0, N, 0, alpha.x, alpha.y, X.getID(mRS), Y.getID(mRS), 0, 0, Ap.getID(mRS), incX, incY, 0, 0);
@@ -943,56 +986,68 @@
*/
static void validateL3(Element e, int TransA, int TransB, int Side, Allocation A, Allocation B, Allocation C) {
- int aX = -1, aY = -1, bX = -1, bY = -1, cX = -1, cY = -1;
+ int aM = -1, aN = -1, bM = -1, bN = -1, cM = -1, cN = -1;
if ((A != null && !A.getType().getElement().isCompatible(e)) ||
(B != null && !B.getType().getElement().isCompatible(e)) ||
(C != null && !C.getType().getElement().isCompatible(e))) {
throw new RSRuntimeException("Called BLAS with wrong Element type");
}
- if (C != null) {
- cX = C.getType().getY();
- cY = C.getType().getX();
+ if (C == null) {
+ //since matrix C is used to store the result, it cannot be null.
+ throw new RSRuntimeException("Allocation C cannot be null");
}
+ cM = C.getType().getY();
+ cN = C.getType().getX();
+
if (Side == RIGHT) {
+ if ((A == null && B != null) || (A != null && B == null)) {
+ throw new RSRuntimeException("Provided Matrix A without Matrix B, or vice versa");
+ }
if (B != null) {
- bX = A.getType().getY();
- bY = A.getType().getX();
+ bM = A.getType().getY();
+ bN = A.getType().getX();
}
if (A != null) {
- aX = B.getType().getY();
- aY = B.getType().getX();
+ aM = B.getType().getY();
+ aN = B.getType().getX();
}
} else {
if (A != null) {
- if (TransA == TRANSPOSE) {
- aY = A.getType().getY();
- aX = A.getType().getX();
+ if (TransA == TRANSPOSE || TransA == CONJ_TRANSPOSE) {
+ aN = A.getType().getY();
+ aM = A.getType().getX();
} else {
- aX = A.getType().getY();
- aY = A.getType().getX();
+ aM = A.getType().getY();
+ aN = A.getType().getX();
}
}
if (B != null) {
- if (TransB == TRANSPOSE) {
- bY = B.getType().getY();
- bX = B.getType().getX();
+ if (TransB == TRANSPOSE || TransB == CONJ_TRANSPOSE) {
+ bN = B.getType().getY();
+ bM = B.getType().getX();
} else {
- bX = B.getType().getY();
- bY = B.getType().getX();
+ bM = B.getType().getY();
+ bN = B.getType().getX();
}
}
}
if (A != null && B != null && C != null) {
- if (aY != bX || aX != cX || bY != cY) {
+ if (aN != bM || aM != cM || bN != cN) {
throw new RSRuntimeException("Called BLAS with invalid dimensions");
}
} else if (A != null && C != null) {
- // A and C only
- if (aX != cY || aY != cX) {
+ // A and C only, for SYRK
+ if (cM != cN) {
+ throw new RSRuntimeException("Matrix C is not symmetric");
+ }
+ if (aM != cM) {
throw new RSRuntimeException("Called BLAS with invalid dimensions");
}
} else if (A != null && B != null) {
// A and B only
+ if (aN != bM) {
+ throw new RSRuntimeException("Called BLAS with invalid dimensions");
+ }
}
}
@@ -1004,14 +1059,14 @@
validateL3(Element.F32(mRS), TransA, TransB, 0, A, B, C);
int M = -1, N = -1, K = -1;
- if (TransA == TRANSPOSE) {
+ if (TransA != NO_TRANSPOSE) {
M = A.getType().getX();
K = A.getType().getY();
} else {
M = A.getType().getY();
K = A.getType().getX();
}
- if (TransB == TRANSPOSE) {
+ if (TransB != NO_TRANSPOSE) {
N = B.getType().getY();
} else {
N = B.getType().getX();
@@ -1025,14 +1080,14 @@
validateTranspose(TransB);
validateL3(Element.F64(mRS), TransA, TransB, 0, A, B, C);
int M = -1, N = -1, K = -1;
- if (TransA == TRANSPOSE) {
+ if (TransA != NO_TRANSPOSE) {
M = A.getType().getX();
K = A.getType().getY();
} else {
M = A.getType().getY();
K = A.getType().getX();
}
- if (TransB == TRANSPOSE) {
+ if (TransB != NO_TRANSPOSE) {
N = B.getType().getY();
} else {
N = B.getType().getX();
@@ -1046,14 +1101,14 @@
validateTranspose(TransB);
validateL3(Element.F32_2(mRS), TransA, TransB, 0, A, B, C);
int M = -1, N = -1, K = -1;
- if (TransA == TRANSPOSE) {
+ if (TransA != NO_TRANSPOSE) {
M = A.getType().getX();
K = A.getType().getY();
} else {
M = A.getType().getY();
K = A.getType().getX();
}
- if (TransB == TRANSPOSE) {
+ if (TransB != NO_TRANSPOSE) {
N = B.getType().getY();
} else {
N = B.getType().getX();
@@ -1068,14 +1123,14 @@
validateTranspose(TransB);
validateL3(Element.F64_2(mRS), TransA, TransB, 0, A, B, C);
int M = -1, N = -1, K = -1;
- if (TransA == TRANSPOSE) {
+ if (TransA != NO_TRANSPOSE) {
M = A.getType().getX();
K = A.getType().getY();
} else {
M = A.getType().getY();
K = A.getType().getX();
}
- if (TransB == TRANSPOSE) {
+ if (TransB != NO_TRANSPOSE) {
N = B.getType().getY();
} else {
N = B.getType().getX();
@@ -1088,6 +1143,10 @@
Allocation B, float beta, Allocation C) {
validateSide(Side);
validateUplo(Uplo);
+ //For SYMM, Matrix A should be symmetric
+ if (A.getType().getX() != A.getType().getY()) {
+ throw new RSRuntimeException("Matrix A is not symmetric");
+ }
validateL3(Element.F32(mRS), 0, 0, Side, A, B, C);
mRS.nScriptIntrinsicBLAS_Single(getID(mRS), RsBlas_ssymm, 0, 0, Side, Uplo, 0, C.getType().getY(), C.getType().getX(), 0, alpha, A.getID(mRS), B.getID(mRS),
beta, C.getID(mRS), 0, 0, 0, 0);
@@ -1096,6 +1155,9 @@
Allocation B, double beta, Allocation C) {
validateSide(Side);
validateUplo(Uplo);
+ if (A.getType().getX() != A.getType().getY()) {
+ throw new RSRuntimeException("Matrix A is not symmetric");
+ }
validateL3(Element.F64(mRS), 0, 0, Side, A, B, C);
mRS.nScriptIntrinsicBLAS_Double(getID(mRS), RsBlas_dsymm, 0, 0, Side, Uplo, 0, C.getType().getY(), C.getType().getX(), 0, alpha, A.getID(mRS), B.getID(mRS),
beta, C.getID(mRS), 0, 0, 0, 0);
@@ -1104,6 +1166,9 @@
Allocation B, Float2 beta, Allocation C) {
validateSide(Side);
validateUplo(Uplo);
+ if (A.getType().getX() != A.getType().getY()) {
+ throw new RSRuntimeException("Matrix A is not symmetric");
+ }
validateL3(Element.F32_2(mRS), 0, 0, Side, A, B, C);
mRS.nScriptIntrinsicBLAS_Complex(getID(mRS), RsBlas_csymm, 0, 0, Side, Uplo, 0, C.getType().getY(), C.getType().getX(), 0, alpha.x, alpha.y, A.getID(mRS), B.getID(mRS),
beta.x, beta.y, C.getID(mRS), 0, 0, 0, 0);
@@ -1112,6 +1177,9 @@
Allocation B, Double2 beta, Allocation C) {
validateSide(Side);
validateUplo(Uplo);
+ if (A.getType().getX() != A.getType().getY()) {
+ throw new RSRuntimeException("Matrix A is not symmetric");
+ }
validateL3(Element.F64_2(mRS), 0, 0, Side, A, B, C);
mRS.nScriptIntrinsicBLAS_Z(getID(mRS), RsBlas_zsymm, 0, 0, Side, Uplo, 0, C.getType().getY(), C.getType().getX(), 0, alpha.x, alpha.y, A.getID(mRS), B.getID(mRS),
beta.x, beta.y, C.getID(mRS), 0, 0, 0, 0);
@@ -1122,7 +1190,7 @@
validateUplo(Uplo);
validateL3(Element.F32(mRS), Trans, 0, 0, A, null, C);
int K = -1;
- if (Trans == TRANSPOSE) {
+ if (Trans != NO_TRANSPOSE) {
K = A.getType().getY();
} else {
K = A.getType().getX();
@@ -1136,37 +1204,37 @@
validateUplo(Uplo);
validateL3(Element.F64(mRS), Trans, 0, 0, A, null, C);
int K = -1;
- if (Trans == TRANSPOSE) {
+ if (Trans != NO_TRANSPOSE) {
K = A.getType().getY();
} else {
K = A.getType().getX();
}
mRS.nScriptIntrinsicBLAS_Double(getID(mRS), RsBlas_dsyrk, Trans, 0, 0, Uplo, 0, 0, C.getType().getX(), K, alpha, A.getID(mRS), 0, beta, C.getID(mRS), 0, 0, 0, 0);
}
- public void CSYRK(@Uplo int Uplo, @Transpose int Trans, float alphaX, float alphaY, Allocation A, float betaX, float betaY, Allocation C) {
+ public void CSYRK(@Uplo int Uplo, @Transpose int Trans, Float2 alpha, Allocation A, Float2 beta, Allocation C) {
validateTranspose(Trans);
validateUplo(Uplo);
validateL3(Element.F32_2(mRS), Trans, 0, 0, A, null, C);
int K = -1;
- if (Trans == TRANSPOSE) {
+ if (Trans != NO_TRANSPOSE) {
K = A.getType().getY();
} else {
K = A.getType().getX();
}
- mRS.nScriptIntrinsicBLAS_Complex(getID(mRS), RsBlas_csyrk, Trans, 0, 0, Uplo, 0, 0, C.getType().getX(), K, alphaX, alphaY, A.getID(mRS), 0, betaX, betaY,
+ mRS.nScriptIntrinsicBLAS_Complex(getID(mRS), RsBlas_csyrk, Trans, 0, 0, Uplo, 0, 0, C.getType().getX(), K, alpha.x, alpha.y, A.getID(mRS), 0, beta.x, beta.y,
C.getID(mRS), 0, 0, 0, 0);
}
- public void ZSYRK(@Uplo int Uplo, @Transpose int Trans, double alphaX, double alphaY, Allocation A, double betaX, double betaY, Allocation C) {
+ public void ZSYRK(@Uplo int Uplo, @Transpose int Trans, Double2 alpha, Allocation A, Double2 beta, Allocation C) {
validateTranspose(Trans);
validateUplo(Uplo);
validateL3(Element.F64_2(mRS), Trans, 0, 0, A, null, C);
int K = -1;
- if (Trans == TRANSPOSE) {
+ if (Trans != NO_TRANSPOSE) {
K = A.getType().getY();
} else {
K = A.getType().getX();
}
- mRS.nScriptIntrinsicBLAS_Z(getID(mRS), RsBlas_zsyrk, Trans, 0, 0, Uplo, 0, 0, C.getType().getX(), K, alphaX, alphaY, A.getID(mRS), 0, betaX, betaY,
+ mRS.nScriptIntrinsicBLAS_Z(getID(mRS), RsBlas_zsyrk, Trans, 0, 0, Uplo, 0, 0, C.getType().getX(), K, alpha.x, alpha.y, A.getID(mRS), 0, beta.x, beta.y,
C.getID(mRS), 0, 0, 0, 0);
}
@@ -1187,7 +1255,7 @@
// check rows versus C
Cdim = A.getType().getY();
}
- if (C.getType().getX() != Cdim && C.getType().getY() != Cdim) {
+ if (C.getType().getX() != Cdim || C.getType().getY() != Cdim) {
throw new RSRuntimeException("Invalid symmetric matrix in SYR2K");
}
// A dims == B dims
@@ -1199,7 +1267,7 @@
validateUplo(Uplo);
validateSYR2K(Element.F32(mRS), Trans, A, B, C);
int K = -1;
- if (Trans == TRANSPOSE) {
+ if (Trans != NO_TRANSPOSE) {
K = A.getType().getY();
} else {
K = A.getType().getX();
@@ -1210,59 +1278,59 @@
validateUplo(Uplo);
validateSYR2K(Element.F64(mRS), Trans, A, B, C);
int K = -1;
- if (Trans == TRANSPOSE) {
+ if (Trans != NO_TRANSPOSE) {
K = A.getType().getY();
} else {
K = A.getType().getX();
}
- mRS.nScriptIntrinsicBLAS_Double(getID(mRS), RsBlas_ssyr2k, Trans, 0, 0, Uplo, 0, 0, C.getType().getX(), K, alpha, A.getID(mRS), B.getID(mRS), beta, C.getID(mRS), 0, 0, 0, 0);
+ mRS.nScriptIntrinsicBLAS_Double(getID(mRS), RsBlas_dsyr2k, Trans, 0, 0, Uplo, 0, 0, C.getType().getX(), K, alpha, A.getID(mRS), B.getID(mRS), beta, C.getID(mRS), 0, 0, 0, 0);
}
public void CSYR2K(@Uplo int Uplo, @Transpose int Trans, Float2 alpha, Allocation A, Allocation B, Float2 beta, Allocation C) {
validateUplo(Uplo);
validateSYR2K(Element.F32_2(mRS), Trans, A, B, C);
int K = -1;
- if (Trans == TRANSPOSE) {
+ if (Trans != NO_TRANSPOSE) {
K = A.getType().getY();
} else {
K = A.getType().getX();
}
- mRS.nScriptIntrinsicBLAS_Complex(getID(mRS), RsBlas_ssyr2k, Trans, 0, 0, Uplo, 0, 0, C.getType().getX(), K, alpha.x, alpha.y, A.getID(mRS), B.getID(mRS), beta.x, beta.y, C.getID(mRS), 0, 0, 0, 0);
+ mRS.nScriptIntrinsicBLAS_Complex(getID(mRS), RsBlas_csyr2k, Trans, 0, 0, Uplo, 0, 0, C.getType().getX(), K, alpha.x, alpha.y, A.getID(mRS), B.getID(mRS), beta.x, beta.y, C.getID(mRS), 0, 0, 0, 0);
}
public void ZSYR2K(@Uplo int Uplo, @Transpose int Trans, Double2 alpha, Allocation A, Allocation B, Double2 beta, Allocation C) {
validateUplo(Uplo);
validateSYR2K(Element.F64_2(mRS), Trans, A, B, C);
int K = -1;
- if (Trans == TRANSPOSE) {
+ if (Trans != NO_TRANSPOSE) {
K = A.getType().getY();
} else {
K = A.getType().getX();
}
- mRS.nScriptIntrinsicBLAS_Z(getID(mRS), RsBlas_ssyr2k, Trans, 0, 0, Uplo, 0, 0, C.getType().getX(), K, alpha.x, alpha.y, A.getID(mRS), B.getID(mRS), beta.x, beta.y, C.getID(mRS), 0, 0, 0, 0);
+ mRS.nScriptIntrinsicBLAS_Z(getID(mRS), RsBlas_zsyr2k, Trans, 0, 0, Uplo, 0, 0, C.getType().getX(), K, alpha.x, alpha.y, A.getID(mRS), B.getID(mRS), beta.x, beta.y, C.getID(mRS), 0, 0, 0, 0);
}
static void validateTRMM(Element e, @Side int Side, @Transpose int TransA, Allocation A, Allocation B) {
validateSide(Side);
validateTranspose(TransA);
- int aX = -1, aY = -1, bX = -1, bY = -1;
+ int aM = -1, aN = -1, bM = -1, bN = -1;
if (!A.getType().getElement().isCompatible(e) ||
!B.getType().getElement().isCompatible(e)) {
throw new RSRuntimeException("Called BLAS with wrong Element type");
}
- if (TransA == TRANSPOSE) {
- aY = A.getType().getY();
- aX = A.getType().getX();
- } else {
- aY = A.getType().getX();
- aX = A.getType().getY();
+
+ aM = A.getType().getY();
+ aN = A.getType().getX();
+ if (aM != aN) {
+ throw new RSRuntimeException("Called TRMM with a non-symmetric matrix A");
}
- bX = B.getType().getY();
- bY = B.getType().getX();
+
+ bM = B.getType().getY();
+ bN = B.getType().getX();
if (Side == LEFT) {
- if (aX == 0 || aY != bX) {
+ if (aN != bM) {
throw new RSRuntimeException("Called TRMM with invalid matrices");
}
} else {
- if (bY != aX || aY == 0) {
+ if (bN != aM) {
throw new RSRuntimeException("Called TRMM with invalid matrices");
}
}
@@ -1278,26 +1346,26 @@
validateUplo(Uplo);
validateDiag(Diag);
validateTRMM(Element.F64(mRS), Side, TransA, A, B);
- mRS.nScriptIntrinsicBLAS_Double(getID(mRS), RsBlas_strmm, TransA, 0, Side, Uplo, Diag, B.getType().getY(), B.getType().getX(), 0,
- alpha, A.getID(mRS), B.getID(mRS), 0.f, 0, 0, 0, 0, 0);
+ mRS.nScriptIntrinsicBLAS_Double(getID(mRS), RsBlas_dtrmm, TransA, 0, Side, Uplo, Diag, B.getType().getY(), B.getType().getX(), 0,
+ alpha, A.getID(mRS), B.getID(mRS), 0, 0, 0, 0, 0, 0);
}
public void CTRMM(@Side int Side, @Uplo int Uplo, @Transpose int TransA, @Diag int Diag, Float2 alpha, Allocation A, Allocation B) {
validateUplo(Uplo);
validateDiag(Diag);
validateTRMM(Element.F32_2(mRS), Side, TransA, A, B);
- mRS.nScriptIntrinsicBLAS_Complex(getID(mRS), RsBlas_strmm, TransA, 0, Side, Uplo, Diag, B.getType().getY(), B.getType().getX(), 0,
+ mRS.nScriptIntrinsicBLAS_Complex(getID(mRS), RsBlas_ctrmm, TransA, 0, Side, Uplo, Diag, B.getType().getY(), B.getType().getX(), 0,
alpha.x, alpha.y, A.getID(mRS), B.getID(mRS), 0, 0, 0, 0, 0, 0, 0);
}
public void ZTRMM(@Side int Side, @Uplo int Uplo, @Transpose int TransA, @Diag int Diag, Double2 alpha, Allocation A, Allocation B) {
validateUplo(Uplo);
validateDiag(Diag);
validateTRMM(Element.F64_2(mRS), Side, TransA, A, B);
- mRS.nScriptIntrinsicBLAS_Z(getID(mRS), RsBlas_strmm, TransA, 0, Side, Uplo, Diag, B.getType().getY(), B.getType().getX(), 0,
+ mRS.nScriptIntrinsicBLAS_Z(getID(mRS), RsBlas_ztrmm, TransA, 0, Side, Uplo, Diag, B.getType().getY(), B.getType().getX(), 0,
alpha.x, alpha.y, A.getID(mRS), B.getID(mRS), 0, 0, 0, 0, 0, 0, 0);
}
static void validateTRSM(Element e, @Side int Side, @Transpose int TransA, Allocation A, Allocation B) {
- int adim = -1, bX = -1, bY = -1;
+ int adim = -1, bM = -1, bN = -1;
validateSide(Side);
validateTranspose(TransA);
if (!A.getType().getElement().isCompatible(e) ||
@@ -1311,16 +1379,16 @@
// for now we assume adapters are sufficient, will reevaluate in the future
throw new RSRuntimeException("Called TRSM with a non-symmetric matrix A");
}
- bX = B.getType().getY();
- bY = B.getType().getX();
+ bM = B.getType().getY();
+ bN = B.getType().getX();
if (Side == LEFT) {
// A is M*M
- if (adim != bY) {
+ if (adim != bM) {
throw new RSRuntimeException("Called TRSM with invalid matrix dimensions");
}
} else {
// A is N*N
- if (adim != bX) {
+ if (adim != bN) {
throw new RSRuntimeException("Called TRSM with invalid matrix dimensions");
}
}
@@ -1336,21 +1404,21 @@
validateUplo(Uplo);
validateDiag(Diag);
validateTRSM(Element.F64(mRS), Side, TransA, A, B);
- mRS.nScriptIntrinsicBLAS_Double(getID(mRS), RsBlas_strsm, TransA, 0, Side, Uplo, Diag, B.getType().getY(), B.getType().getX(), 0,
+ mRS.nScriptIntrinsicBLAS_Double(getID(mRS), RsBlas_dtrsm, TransA, 0, Side, Uplo, Diag, B.getType().getY(), B.getType().getX(), 0,
alpha, A.getID(mRS), B.getID(mRS), 0, 0, 0, 0, 0, 0);
}
public void CTRSM(@Side int Side, @Uplo int Uplo, @Transpose int TransA, @Diag int Diag, Float2 alpha, Allocation A, Allocation B) {
validateUplo(Uplo);
validateDiag(Diag);
validateTRSM(Element.F32_2(mRS), Side, TransA, A, B);
- mRS.nScriptIntrinsicBLAS_Complex(getID(mRS), RsBlas_strsm, TransA, 0, Side, Uplo, Diag, B.getType().getY(), B.getType().getX(), 0,
+ mRS.nScriptIntrinsicBLAS_Complex(getID(mRS), RsBlas_ctrsm, TransA, 0, Side, Uplo, Diag, B.getType().getY(), B.getType().getX(), 0,
alpha.x, alpha.y, A.getID(mRS), B.getID(mRS), 0, 0, 0, 0, 0, 0, 0);
}
public void ZTRSM(@Side int Side, @Uplo int Uplo, @Transpose int TransA, @Diag int Diag, Double2 alpha, Allocation A, Allocation B) {
validateUplo(Uplo);
validateDiag(Diag);
validateTRSM(Element.F64_2(mRS), Side, TransA, A, B);
- mRS.nScriptIntrinsicBLAS_Z(getID(mRS), RsBlas_strsm, TransA, 0, Side, Uplo, Diag, B.getType().getY(), B.getType().getX(), 0,
+ mRS.nScriptIntrinsicBLAS_Z(getID(mRS), RsBlas_ztrsm, TransA, 0, Side, Uplo, Diag, B.getType().getY(), B.getType().getX(), 0,
alpha.x, alpha.y, A.getID(mRS), B.getID(mRS), 0, 0, 0, 0, 0, 0, 0);
}
@@ -1377,17 +1445,17 @@
throw new RSRuntimeException("Called HEMM with mismatched B and C");
}
}
- public void CHEMM(@Side int Side, @Uplo int Uplo, float alpha, Allocation A, Allocation B, float beta, Allocation C) {
+ public void CHEMM(@Side int Side, @Uplo int Uplo, Float2 alpha, Allocation A, Allocation B, Float2 beta, Allocation C) {
validateUplo(Uplo);
validateHEMM(Element.F32_2(mRS), Side, A, B, C);
mRS.nScriptIntrinsicBLAS_Complex(getID(mRS), RsBlas_chemm, 0, 0, Side, Uplo, 0, C.getType().getY(), C.getType().getX(), 0,
- alpha, 0, A.getID(mRS), B.getID(mRS), beta, 0, C.getID(mRS), 0, 0, 0, 0);
+ alpha.x, alpha.y, A.getID(mRS), B.getID(mRS), beta.x, beta.y, C.getID(mRS), 0, 0, 0, 0);
}
- public void ZHEMM(@Side int Side, @Uplo int Uplo, double alpha, Allocation A, Allocation B, double beta, Allocation C) {
+ public void ZHEMM(@Side int Side, @Uplo int Uplo, Double2 alpha, Allocation A, Allocation B, Double2 beta, Allocation C) {
validateUplo(Uplo);
- validateHEMM(Element.F32_2(mRS), Side, A, B, C);
+ validateHEMM(Element.F64_2(mRS), Side, A, B, C);
mRS.nScriptIntrinsicBLAS_Z(getID(mRS), RsBlas_zhemm, 0, 0, Side, Uplo, 0, C.getType().getY(), C.getType().getX(), 0,
- alpha, 0, A.getID(mRS), B.getID(mRS), beta, 0, C.getID(mRS), 0, 0, 0, 0);
+ alpha.x, alpha.y, A.getID(mRS), B.getID(mRS), beta.x, beta.y, C.getID(mRS), 0, 0, 0, 0);
}
static void validateHERK(Element e, @Transpose int Trans, Allocation A, Allocation C) {
@@ -1401,11 +1469,11 @@
throw new RSRuntimeException("Called HERK with non-square C");
}
if (Trans == NO_TRANSPOSE) {
- if (cdim != A.getType().getX()) {
+ if (cdim != A.getType().getY()) {
throw new RSRuntimeException("Called HERK with invalid A");
}
} else {
- if (cdim != A.getType().getY()) {
+ if (cdim != A.getType().getX()) {
throw new RSRuntimeException("Called HERK with invalid A");
}
}
@@ -1414,7 +1482,7 @@
validateUplo(Uplo);
validateHERK(Element.F32_2(mRS), Trans, A, C);
int k = 0;
- if (Trans == TRANSPOSE) {
+ if (Trans == CONJ_TRANSPOSE) {
k = A.getType().getY();
} else {
k = A.getType().getX();
@@ -1426,7 +1494,7 @@
validateUplo(Uplo);
validateHERK(Element.F64_2(mRS), Trans, A, C);
int k = 0;
- if (Trans == TRANSPOSE) {
+ if (Trans == CONJ_TRANSPOSE) {
k = A.getType().getY();
} else {
k = A.getType().getX();
@@ -1485,5 +1553,38 @@
}
+ /**
+ * 8-bit GEMM-like operation for neural networks: C = A * Transpose(B)
+ * Calculations are done in 1.10.21 fixed-point format for the final output,
+ * just before there's a shift down to drop the fractional parts. The output
+ * values are gated to 0 to 255 to fit in a byte, but the 10-bit format
+ * gives some headroom to avoid wrapping around on small overflows.
+ *
+ * @param A The input allocation contains matrix A, supported elements type {@link Element#U8}.
+ * @param a_offset The offset for all values in matrix A, e.g A[i,j] = A[i,j] - a_offset. Value should be from 0 to 255.
+ * @param B The input allocation contains matrix B, supported elements type {@link Element#U8}.
+ * @param b_offset The offset for all values in matrix B, e.g B[i,j] = B[i,j] - b_offset. Value should be from 0 to 255.
+ * @param C The input allocation contains matrix C, supported elements type {@link Element#U8}.
+ * @param c_offset The offset for all values in matrix C.
+ * @param c_mult The multiplier for all values in matrix C, e.g C[i,j] = (C[i,j] + c_offset) * c_mult.
+ **/
+ public void BNNM(Allocation A, int a_offset, Allocation B, int b_offset, Allocation C, int c_offset, int c_mult) {
+ validateL3(Element.U8(mRS), NO_TRANSPOSE, TRANSPOSE, 0, A, B, C);
+
+ if (a_offset < 0 || a_offset > 255) {
+ throw new RSRuntimeException("Invalid a_offset passed to BNNM");
+ }
+ if (b_offset < 0 || b_offset > 255) {
+ throw new RSRuntimeException("Invalid b_offset passed to BNNM");
+ }
+ int M = -1, N = -1, K = -1;
+ M = A.getType().getY();
+ N = B.getType().getY();
+ K = A.getType().getX();
+
+
+ mRS.nScriptIntrinsicBLAS_BNNM(getID(mRS), M, N, K, A.getID(mRS), a_offset, B.getID(mRS), b_offset, C.getID(mRS), c_offset, c_mult);
+
+ }
}
diff --git a/rs/java/android/renderscript/ScriptIntrinsicBlend.java b/rs/java/android/renderscript/ScriptIntrinsicBlend.java
index 906e0f6..fdcd61b 100644
--- a/rs/java/android/renderscript/ScriptIntrinsicBlend.java
+++ b/rs/java/android/renderscript/ScriptIntrinsicBlend.java
@@ -360,6 +360,8 @@
/**
* dst = dst.rgb * src.a + (1.0 - dst.a) * src.rgb
* dst.a = src.a
+ * Note: Before API 23, the alpha channel was not correctly set.
+ * Please use with caution when targeting older APIs.
*
* @param ain The source buffer
* @param aout The destination buffer
@@ -371,6 +373,8 @@
/**
* dst = dst.rgb * src.a + (1.0 - dst.a) * src.rgb
* dst.a = src.a
+ * Note: Before API 23, the alpha channel was not correctly set.
+ * Please use with caution when targeting older APIs.
*
* @param ain The source buffer
* @param aout The destination buffer
@@ -402,6 +406,8 @@
/**
* Sets dst = {src.r ^ dst.r, src.g ^ dst.g, src.b ^ dst.b, src.a ^ dst.a}
*
+ * <b>Note:</b> this is NOT the Porter/Duff XOR mode; this is a bitwise xor.
+ *
* @param ain The source buffer
* @param aout The destination buffer
* @param opt LaunchOptions for clipping
diff --git a/rs/jni/android_renderscript_RenderScript.cpp b/rs/jni/android_renderscript_RenderScript.cpp
index 676d94f..d6854a2 100644
--- a/rs/jni/android_renderscript_RenderScript.cpp
+++ b/rs/jni/android_renderscript_RenderScript.cpp
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-#define LOG_TAG "libRS_jni"
+#define LOG_TAG "RenderScript_jni"
#include <stdlib.h>
#include <stdio.h>
@@ -333,79 +333,167 @@
jlong returnValue, jlongArray fieldIDArray,
jlongArray valueArray, jintArray sizeArray,
jlongArray depClosureArray, jlongArray depFieldIDArray) {
+ jlong ret = 0;
+
jlong* jFieldIDs = _env->GetLongArrayElements(fieldIDArray, nullptr);
jsize fieldIDs_length = _env->GetArrayLength(fieldIDArray);
- RsScriptFieldID* fieldIDs =
- (RsScriptFieldID*)alloca(sizeof(RsScriptFieldID) * fieldIDs_length);
- for (int i = 0; i< fieldIDs_length; i++) {
- fieldIDs[i] = (RsScriptFieldID)jFieldIDs[i];
- }
-
jlong* jValues = _env->GetLongArrayElements(valueArray, nullptr);
jsize values_length = _env->GetArrayLength(valueArray);
- uintptr_t* values = (uintptr_t*)alloca(sizeof(uintptr_t) * values_length);
- for (int i = 0; i < values_length; i++) {
- values[i] = (uintptr_t)jValues[i];
- }
-
- jint* sizes = _env->GetIntArrayElements(sizeArray, nullptr);
+ jint* jSizes = _env->GetIntArrayElements(sizeArray, nullptr);
jsize sizes_length = _env->GetArrayLength(sizeArray);
-
jlong* jDepClosures =
_env->GetLongArrayElements(depClosureArray, nullptr);
jsize depClosures_length = _env->GetArrayLength(depClosureArray);
- RsClosure* depClosures =
- (RsClosure*)alloca(sizeof(RsClosure) * depClosures_length);
- for (int i = 0; i < depClosures_length; i++) {
- depClosures[i] = (RsClosure)jDepClosures[i];
- }
-
jlong* jDepFieldIDs =
_env->GetLongArrayElements(depFieldIDArray, nullptr);
jsize depFieldIDs_length = _env->GetArrayLength(depFieldIDArray);
- RsScriptFieldID* depFieldIDs =
- (RsScriptFieldID*)alloca(sizeof(RsScriptFieldID) * depFieldIDs_length);
- for (int i = 0; i < depClosures_length; i++) {
+
+ size_t numValues, numDependencies;
+ RsScriptFieldID* fieldIDs;
+ uintptr_t* values;
+ RsClosure* depClosures;
+ RsScriptFieldID* depFieldIDs;
+
+ if (fieldIDs_length != values_length || values_length != sizes_length) {
+ ALOGE("Unmatched field IDs, values, and sizes in closure creation.");
+ goto exit;
+ }
+
+ numValues = (size_t)fieldIDs_length;
+
+ if (depClosures_length != depFieldIDs_length) {
+ ALOGE("Unmatched closures and field IDs for dependencies in closure creation.");
+ goto exit;
+ }
+
+ numDependencies = (size_t)depClosures_length;
+
+ if (numDependencies > numValues) {
+ ALOGE("Unexpected number of dependencies in closure creation");
+ goto exit;
+ }
+
+ if (numValues > RS_CLOSURE_MAX_NUMBER_ARGS_AND_BINDINGS) {
+ ALOGE("Too many arguments or globals in closure creation");
+ goto exit;
+ }
+
+ fieldIDs = (RsScriptFieldID*)alloca(sizeof(RsScriptFieldID) * numValues);
+ if (fieldIDs == nullptr) {
+ goto exit;
+ }
+
+ for (size_t i = 0; i < numValues; i++) {
+ fieldIDs[i] = (RsScriptFieldID)jFieldIDs[i];
+ }
+
+ values = (uintptr_t*)alloca(sizeof(uintptr_t) * numValues);
+ if (values == nullptr) {
+ goto exit;
+ }
+
+ for (size_t i = 0; i < numValues; i++) {
+ values[i] = (uintptr_t)jValues[i];
+ }
+
+ depClosures = (RsClosure*)alloca(sizeof(RsClosure) * numDependencies);
+ if (depClosures == nullptr) {
+ goto exit;
+ }
+
+ for (size_t i = 0; i < numDependencies; i++) {
+ depClosures[i] = (RsClosure)jDepClosures[i];
+ }
+
+ depFieldIDs = (RsScriptFieldID*)alloca(sizeof(RsScriptFieldID) * numDependencies);
+ if (depFieldIDs == nullptr) {
+ goto exit;
+ }
+
+ for (size_t i = 0; i < numDependencies; i++) {
depFieldIDs[i] = (RsClosure)jDepFieldIDs[i];
}
- return (jlong)(uintptr_t)rsClosureCreate(
+ ret = (jlong)(uintptr_t)rsClosureCreate(
(RsContext)con, (RsScriptKernelID)kernelID, (RsAllocation)returnValue,
- fieldIDs, (size_t)fieldIDs_length, values, (size_t)values_length,
- (int*)sizes, (size_t)sizes_length,
- depClosures, (size_t)depClosures_length,
- depFieldIDs, (size_t)depFieldIDs_length);
+ fieldIDs, numValues, values, numValues,
+ (int*)jSizes, numValues,
+ depClosures, numDependencies,
+ depFieldIDs, numDependencies);
+
+exit:
+
+ _env->ReleaseLongArrayElements(depFieldIDArray, jDepFieldIDs, JNI_ABORT);
+ _env->ReleaseLongArrayElements(depClosureArray, jDepClosures, JNI_ABORT);
+ _env->ReleaseIntArrayElements (sizeArray, jSizes, JNI_ABORT);
+ _env->ReleaseLongArrayElements(valueArray, jValues, JNI_ABORT);
+ _env->ReleaseLongArrayElements(fieldIDArray, jFieldIDs, JNI_ABORT);
+
+ return ret;
}
static jlong
nInvokeClosureCreate(JNIEnv *_env, jobject _this, jlong con, jlong invokeID,
jbyteArray paramArray, jlongArray fieldIDArray, jlongArray valueArray,
jintArray sizeArray) {
+ jlong ret = 0;
+
jbyte* jParams = _env->GetByteArrayElements(paramArray, nullptr);
jsize jParamLength = _env->GetArrayLength(paramArray);
-
jlong* jFieldIDs = _env->GetLongArrayElements(fieldIDArray, nullptr);
jsize fieldIDs_length = _env->GetArrayLength(fieldIDArray);
- RsScriptFieldID* fieldIDs =
- (RsScriptFieldID*)alloca(sizeof(RsScriptFieldID) * fieldIDs_length);
- for (int i = 0; i< fieldIDs_length; i++) {
+ jlong* jValues = _env->GetLongArrayElements(valueArray, nullptr);
+ jsize values_length = _env->GetArrayLength(valueArray);
+ jint* jSizes = _env->GetIntArrayElements(sizeArray, nullptr);
+ jsize sizes_length = _env->GetArrayLength(sizeArray);
+
+ size_t numValues;
+ RsScriptFieldID* fieldIDs;
+ uintptr_t* values;
+
+ if (fieldIDs_length != values_length || values_length != sizes_length) {
+ ALOGE("Unmatched field IDs, values, and sizes in closure creation.");
+ goto exit;
+ }
+
+ numValues = (size_t) fieldIDs_length;
+
+ if (numValues > RS_CLOSURE_MAX_NUMBER_ARGS_AND_BINDINGS) {
+ ALOGE("Too many arguments or globals in closure creation");
+ goto exit;
+ }
+
+ fieldIDs = (RsScriptFieldID*)alloca(sizeof(RsScriptFieldID) * numValues);
+ if (fieldIDs == nullptr) {
+ goto exit;
+ }
+
+ for (size_t i = 0; i< numValues; i++) {
fieldIDs[i] = (RsScriptFieldID)jFieldIDs[i];
}
- jlong* jValues = _env->GetLongArrayElements(valueArray, nullptr);
- jsize values_length = _env->GetArrayLength(valueArray);
- uintptr_t* values = (uintptr_t*)alloca(sizeof(uintptr_t) * values_length);
- for (int i = 0; i < values_length; i++) {
+ values = (uintptr_t*)alloca(sizeof(uintptr_t) * numValues);
+ if (values == nullptr) {
+ goto exit;
+ }
+
+ for (size_t i = 0; i < numValues; i++) {
values[i] = (uintptr_t)jValues[i];
}
- jint* sizes = _env->GetIntArrayElements(sizeArray, nullptr);
- jsize sizes_length = _env->GetArrayLength(sizeArray);
-
- return (jlong)(uintptr_t)rsInvokeClosureCreate(
+ ret = (jlong)(uintptr_t)rsInvokeClosureCreate(
(RsContext)con, (RsScriptInvokeID)invokeID, jParams, jParamLength,
- fieldIDs, (size_t)fieldIDs_length, values, (size_t)values_length,
- (int*)sizes, (size_t)sizes_length);
+ fieldIDs, numValues, values, numValues,
+ (int*)jSizes, numValues);
+
+exit:
+
+ _env->ReleaseIntArrayElements (sizeArray, jSizes, JNI_ABORT);
+ _env->ReleaseLongArrayElements(valueArray, jValues, JNI_ABORT);
+ _env->ReleaseLongArrayElements(fieldIDArray, jFieldIDs, JNI_ABORT);
+ _env->ReleaseByteArrayElements(paramArray, jParams, JNI_ABORT);
+
+ return ret;
}
static void
@@ -423,20 +511,42 @@
}
static long
-nScriptGroup2Create(JNIEnv *_env, jobject _this, jlong con,
+nScriptGroup2Create(JNIEnv *_env, jobject _this, jlong con, jstring name,
jstring cacheDir, jlongArray closureArray) {
+ jlong ret = 0;
+
+ AutoJavaStringToUTF8 nameUTF(_env, name);
AutoJavaStringToUTF8 cacheDirUTF(_env, cacheDir);
jlong* jClosures = _env->GetLongArrayElements(closureArray, nullptr);
jsize numClosures = _env->GetArrayLength(closureArray);
- RsClosure* closures = (RsClosure*)alloca(sizeof(RsClosure) * numClosures);
+
+ RsClosure* closures;
+
+ if (numClosures > (jsize) RS_SCRIPT_GROUP_MAX_NUMBER_CLOSURES) {
+ ALOGE("Too many closures in script group");
+ goto exit;
+ }
+
+ closures = (RsClosure*)alloca(sizeof(RsClosure) * numClosures);
+ if (closures == nullptr) {
+ goto exit;
+ }
+
for (int i = 0; i < numClosures; i++) {
closures[i] = (RsClosure)jClosures[i];
}
- return (jlong)(uintptr_t)rsScriptGroup2Create(
- (RsContext)con, cacheDirUTF.c_str(), cacheDirUTF.length(),
+ ret = (jlong)(uintptr_t)rsScriptGroup2Create(
+ (RsContext)con, nameUTF.c_str(), nameUTF.length(),
+ cacheDirUTF.c_str(), cacheDirUTF.length(),
closures, numClosures);
+
+exit:
+
+ _env->ReleaseLongArrayElements(closureArray, jClosures, JNI_ABORT);
+
+ return ret;
}
static void
@@ -529,7 +639,7 @@
call.alpha.c.r = alphaX;
call.alpha.c.i = alphaY;
call.beta.c.r = betaX;
- call.beta.c.r = betaY;
+ call.beta.c.i = betaY;
call.incX = incX;
call.incY = incY;
call.KL = KL;
@@ -564,7 +674,7 @@
call.alpha.z.r = alphaX;
call.alpha.z.i = alphaY;
call.beta.z.r = betaX;
- call.beta.z.r = betaY;
+ call.beta.z.i = betaY;
call.incX = incX;
call.incY = incY;
call.KL = KL;
@@ -582,6 +692,32 @@
static void
+nScriptIntrinsicBLAS_BNNM(JNIEnv *_env, jobject _this, jlong con, jlong id, jint M, jint N, jint K,
+ jlong A, jint a_offset, jlong B, jint b_offset, jlong C, jint c_offset,
+ jint c_mult_int) {
+ RsBlasCall call;
+ memset(&call, 0, sizeof(call));
+ call.func = RsBlas_bnnm;
+ call.M = M;
+ call.N = N;
+ call.K = K;
+ call.a_offset = a_offset & 0xFF;
+ call.b_offset = b_offset & 0xFF;
+ call.c_offset = c_offset;
+ call.c_mult_int = c_mult_int;
+
+ RsAllocation in_allocs[3];
+ in_allocs[0] = (RsAllocation)A;
+ in_allocs[1] = (RsAllocation)B;
+ in_allocs[2] = (RsAllocation)C;
+
+ rsScriptForEachMulti((RsContext)con, (RsScript)id, 0,
+ in_allocs, sizeof(in_allocs), nullptr,
+ &call, sizeof(call), nullptr, 0);
+}
+
+
+static void
nAssignName(JNIEnv *_env, jobject _this, jlong con, jlong obj, jbyteArray str)
{
if (kLogApi) {
@@ -1326,7 +1462,7 @@
rsAllocationElementRead((RsContext)con, (RsAllocation)alloc,
xoff, yoff, zoff,
lod, ptr, sizeBytes, compIdx);
- _env->ReleaseByteArrayElements(data, ptr, JNI_ABORT);
+ _env->ReleaseByteArrayElements(data, ptr, 0);
}
// Copies from the Allocation pointed to by _alloc into the Java object data.
@@ -1728,7 +1864,7 @@
jintArray limits)
{
if (kLogApi) {
- ALOGD("nScriptForEach, con(%p), s(%p), slot(%i)", (RsContext)con, (void *)script, slot);
+ ALOGD("nScriptForEach, con(%p), s(%p), slot(%i) ains(%p) aout(%" PRId64 ")", (RsContext)con, (void *)script, slot, ains, aout);
}
jint in_len = 0;
@@ -1738,8 +1874,14 @@
if (ains != nullptr) {
in_len = _env->GetArrayLength(ains);
- in_ptr = _env->GetLongArrayElements(ains, nullptr);
+ if (in_len > (jint)RS_KERNEL_MAX_ARGUMENTS) {
+ ALOGE("Too many arguments in kernel launch.");
+ // TODO (b/20758983): Report back to Java and throw an exception
+ return;
+ }
+ // TODO (b/20760800): Check in_ptr is not null
+ in_ptr = _env->GetLongArrayElements(ains, nullptr);
if (sizeof(RsAllocation) == sizeof(jlong)) {
in_allocs = (RsAllocation*)in_ptr;
@@ -1747,6 +1889,11 @@
// Convert from 64-bit jlong types to the native pointer type.
in_allocs = (RsAllocation*)alloca(in_len * sizeof(RsAllocation));
+ if (in_allocs == nullptr) {
+ ALOGE("Failed launching kernel for lack of memory.");
+ _env->ReleaseLongArrayElements(ains, in_ptr, JNI_ABORT);
+ return;
+ }
for (int index = in_len; --index >= 0;) {
in_allocs[index] = (RsAllocation)in_ptr[index];
@@ -1811,6 +1958,59 @@
}
}
+static void
+nScriptReduce(JNIEnv *_env, jobject _this, jlong con, jlong script, jint slot,
+ jlong ain, jlong aout, jintArray limits)
+{
+ if (kLogApi) {
+ ALOGD("nScriptReduce, con(%p), s(%p), slot(%i) ain(%" PRId64 ") aout(%" PRId64 ")", (RsContext)con, (void *)script, slot, ain, aout);
+ }
+
+ RsScriptCall sc, *sca = nullptr;
+ uint32_t sc_size = 0;
+
+ jint limit_len = 0;
+ jint *limit_ptr = nullptr;
+
+ // If the caller passed limits, reflect them in the RsScriptCall.
+ if (limits != nullptr) {
+ limit_len = _env->GetArrayLength(limits);
+ limit_ptr = _env->GetIntArrayElements(limits, nullptr);
+
+ // We expect to be passed an array [x1, x2] which specifies
+ // the sub-range for a 1-dimensional reduction.
+ assert(limit_len == 2);
+ UNUSED(limit_len); // As the assert might not be compiled.
+
+ sc.xStart = limit_ptr[0];
+ sc.xEnd = limit_ptr[1];
+ sc.yStart = 0;
+ sc.yEnd = 0;
+ sc.zStart = 0;
+ sc.zEnd = 0;
+ sc.strategy = RS_FOR_EACH_STRATEGY_DONT_CARE;
+ sc.arrayStart = 0;
+ sc.arrayEnd = 0;
+ sc.array2Start = 0;
+ sc.array2End = 0;
+ sc.array3Start = 0;
+ sc.array3End = 0;
+ sc.array4Start = 0;
+ sc.array4End = 0;
+
+ sca = ≻
+ sc_size = sizeof(sc);
+ }
+
+ rsScriptReduce((RsContext)con, (RsScript)script, slot,
+ (RsAllocation)ain, (RsAllocation)aout,
+ sca, sc_size);
+
+ if (limits != nullptr) {
+ _env->ReleaseIntArrayElements(limits, limit_ptr, JNI_ABORT);
+ }
+}
+
// -----------------------------------
static jlong
@@ -2394,6 +2594,7 @@
{"rsnScriptInvokeV", "(JJI[B)V", (void*)nScriptInvokeV },
{"rsnScriptForEach", "(JJI[JJ[B[I)V", (void*)nScriptForEach },
+{"rsnScriptReduce", "(JJIJJ[I)V", (void*)nScriptReduce },
{"rsnScriptSetVarI", "(JJII)V", (void*)nScriptSetVarI },
{"rsnScriptGetVarI", "(JJI)I", (void*)nScriptGetVarI },
@@ -2414,7 +2615,7 @@
{"rsnScriptInvokeIDCreate", "(JJI)J", (void*)nScriptInvokeIDCreate },
{"rsnScriptFieldIDCreate", "(JJI)J", (void*)nScriptFieldIDCreate },
{"rsnScriptGroupCreate", "(J[J[J[J[J[J)J", (void*)nScriptGroupCreate },
-{"rsnScriptGroup2Create", "(JLjava/lang/String;[J)J", (void*)nScriptGroup2Create },
+{"rsnScriptGroup2Create", "(JLjava/lang/String;Ljava/lang/String;[J)J", (void*)nScriptGroup2Create },
{"rsnScriptGroupSetInput", "(JJJJ)V", (void*)nScriptGroupSetInput },
{"rsnScriptGroupSetOutput", "(JJJJ)V", (void*)nScriptGroupSetOutput },
{"rsnScriptGroupExecute", "(JJ)V", (void*)nScriptGroupExecute },
@@ -2425,6 +2626,8 @@
{"rsnScriptIntrinsicBLAS_Complex", "(JJIIIIIIIIIFFJJFFJIIII)V", (void*)nScriptIntrinsicBLAS_Complex },
{"rsnScriptIntrinsicBLAS_Z", "(JJIIIIIIIIIDDJJDDJIIII)V", (void*)nScriptIntrinsicBLAS_Z },
+{"rsnScriptIntrinsicBLAS_BNNM", "(JJIIIJIJIJII)V", (void*)nScriptIntrinsicBLAS_BNNM },
+
{"rsnProgramStoreCreate", "(JZZZZZZIII)J", (void*)nProgramStoreCreate },
{"rsnProgramBindConstants", "(JJIJ)V", (void*)nProgramBindConstants },
diff --git a/services/accessibility/java/com/android/server/accessibility/DisplayAdjustmentUtils.java b/services/accessibility/java/com/android/server/accessibility/DisplayAdjustmentUtils.java
index 38827d0..d0b5898 100644
--- a/services/accessibility/java/com/android/server/accessibility/DisplayAdjustmentUtils.java
+++ b/services/accessibility/java/com/android/server/accessibility/DisplayAdjustmentUtils.java
@@ -41,12 +41,18 @@
0, 0, 0, 1
};
- /** Matrix and offset used for value-only display inversion. */
+ /**
+ * Matrix and offset used for luminance inversion. Represents a transform
+ * from RGB to YIQ color space, rotation around the Y axis by 180 degrees,
+ * transform back to RGB color space, and subtraction from 1. The last row
+ * represents a non-multiplied addition, see surfaceflinger's ProgramCache
+ * for full implementation details.
+ */
private static final float[] INVERSION_MATRIX_VALUE_ONLY = new float[] {
- 0, -.5f, -.5f, 0,
- -.5f, 0, -.5f, 0,
- -.5f, -.5f, 0, 0,
- 1, 1, 1, 1
+ 0.402f, -0.598f, -0.599f, 0,
+ -1.174f, -0.174f, -1.175f, 0,
+ -0.228f, -0.228f, 0.772f, 0,
+ 1, 1, 1, 1
};
/** Default inversion mode for display color correction. */
diff --git a/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java b/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java
index 7623514..ee2d5ff 100644
--- a/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java
+++ b/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java
@@ -94,6 +94,7 @@
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
+import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
@@ -2400,7 +2401,7 @@
try {
XmlSerializer out = new FastXmlSerializer();
- out.setOutput(stream, "utf-8");
+ out.setOutput(stream, StandardCharsets.UTF_8.name());
out.startDocument(null, true);
out.startTag(null, "gs");
out.attribute(null, "version", String.valueOf(CURRENT_VERSION));
@@ -2463,7 +2464,7 @@
int version = -1;
try {
XmlPullParser parser = Xml.newPullParser();
- parser.setInput(stream, null);
+ parser.setInput(stream, StandardCharsets.UTF_8.name());
int legacyProviderIndex = -1;
int legacyHostIndex = -1;
@@ -3525,7 +3526,7 @@
try {
XmlSerializer out = new FastXmlSerializer();
- out.setOutput(stream, "utf-8");
+ out.setOutput(stream, StandardCharsets.UTF_8.name());
out.startDocument(null, true);
out.startTag(null, "ws"); // widget state
out.attribute(null, "version", String.valueOf(WIDGET_STATE_VERSION));
@@ -3617,7 +3618,7 @@
ArrayList<Host> restoredHosts = new ArrayList<>();
XmlPullParser parser = Xml.newPullParser();
- parser.setInput(stream, null);
+ parser.setInput(stream, StandardCharsets.UTF_8.name());
synchronized (mLock) {
int type;
diff --git a/services/core/java/com/android/server/AlarmManagerService.java b/services/core/java/com/android/server/AlarmManagerService.java
index 7d156df..fa906f7 100644
--- a/services/core/java/com/android/server/AlarmManagerService.java
+++ b/services/core/java/com/android/server/AlarmManagerService.java
@@ -369,10 +369,10 @@
public int compare(Batch b1, Batch b2) {
long when1 = b1.start;
long when2 = b2.start;
- if (when1 - when2 > 0) {
+ if (when1 > when2) {
return 1;
}
- if (when1 - when2 < 0) {
+ if (when1 < when2) {
return -1;
}
return 0;
@@ -1480,12 +1480,12 @@
*/
public static class IncreasingTimeOrder implements Comparator<Alarm> {
public int compare(Alarm a1, Alarm a2) {
- long when1 = a1.when;
- long when2 = a2.when;
- if (when1 - when2 > 0) {
+ long when1 = a1.whenElapsed;
+ long when2 = a2.whenElapsed;
+ if (when1 > when2) {
return 1;
}
- if (when1 - when2 < 0) {
+ if (when1 < when2) {
return -1;
}
return 0;
diff --git a/services/core/java/com/android/server/AppOpsService.java b/services/core/java/com/android/server/AppOpsService.java
index 17b4939..9fa30a3 100644
--- a/services/core/java/com/android/server/AppOpsService.java
+++ b/services/core/java/com/android/server/AppOpsService.java
@@ -23,6 +23,7 @@
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
+import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
@@ -910,7 +911,7 @@
boolean success = false;
try {
XmlPullParser parser = Xml.newPullParser();
- parser.setInput(stream, null);
+ parser.setInput(stream, StandardCharsets.UTF_8.name());
int type;
while ((type = parser.next()) != XmlPullParser.START_TAG
&& type != XmlPullParser.END_DOCUMENT) {
@@ -1070,7 +1071,7 @@
try {
XmlSerializer out = new FastXmlSerializer();
- out.setOutput(stream, "utf-8");
+ out.setOutput(stream, StandardCharsets.UTF_8.name());
out.startDocument(null, true);
out.startTag(null, "app-ops");
diff --git a/services/core/java/com/android/server/BluetoothManagerService.java b/services/core/java/com/android/server/BluetoothManagerService.java
index 32a6a2f..7aa8e11 100644
--- a/services/core/java/com/android/server/BluetoothManagerService.java
+++ b/services/core/java/com/android/server/BluetoothManagerService.java
@@ -41,6 +41,7 @@
import android.os.IBinder;
import android.os.Looper;
import android.os.Message;
+import android.os.ParcelFileDescriptor;
import android.os.Process;
import android.os.RemoteCallbackList;
import android.os.RemoteException;
@@ -51,6 +52,7 @@
import android.util.Log;
import java.io.FileDescriptor;
+import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
@@ -1523,17 +1525,32 @@
public void dump(FileDescriptor fd, PrintWriter writer, String[] args) {
mContext.enforceCallingOrSelfPermission(android.Manifest.permission.DUMP, TAG);
- writer.println("enabled: " + mEnable);
- writer.println("state: " + mState);
- writer.println("address: " + mAddress);
- writer.println("name: " + mName);
+ writer.println("Bluetooth Status");
+ writer.println(" enabled: " + mEnable);
+ writer.println(" state: " + mState);
+ writer.println(" address: " + mAddress);
+ writer.println(" name: " + mName + "\n");
+ writer.flush();
+
if (mBluetooth == null) {
writer.println("Bluetooth Service not connected");
} else {
+ ParcelFileDescriptor pfd = null;
try {
- writer.println(mBluetooth.dump());
+ pfd = ParcelFileDescriptor.dup(fd);
+ mBluetooth.dump(pfd);
} catch (RemoteException re) {
writer.println("RemoteException while calling Bluetooth Service");
+ } catch (IOException ioe) {
+ writer.println("IOException attempting to dup() fd");
+ } finally {
+ if (pfd != null) {
+ try {
+ pfd.close();
+ } catch (IOException ioe) {
+ writer.println("IOException attempting to close() fd");
+ }
+ }
}
}
}
diff --git a/services/core/java/com/android/server/InputMethodManagerService.java b/services/core/java/com/android/server/InputMethodManagerService.java
index 4d0868a..c74983e 100644
--- a/services/core/java/com/android/server/InputMethodManagerService.java
+++ b/services/core/java/com/android/server/InputMethodManagerService.java
@@ -122,6 +122,7 @@
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
+import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
@@ -3398,7 +3399,7 @@
try {
fos = subtypesFile.startWrite();
final XmlSerializer out = new FastXmlSerializer();
- out.setOutput(fos, "utf-8");
+ out.setOutput(fos, StandardCharsets.UTF_8.name());
out.startDocument(null, true);
out.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true);
out.startTag(null, NODE_SUBTYPES);
@@ -3444,7 +3445,7 @@
try {
fis = subtypesFile.openRead();
final XmlPullParser parser = Xml.newPullParser();
- parser.setInput(fis, null);
+ parser.setInput(fis, StandardCharsets.UTF_8.name());
int type = parser.getEventType();
// Skip parsing until START_TAG
while ((type = parser.next()) != XmlPullParser.START_TAG
diff --git a/services/core/java/com/android/server/LockSettingsService.java b/services/core/java/com/android/server/LockSettingsService.java
index 77662cc..49c5ea2 100644
--- a/services/core/java/com/android/server/LockSettingsService.java
+++ b/services/core/java/com/android/server/LockSettingsService.java
@@ -100,20 +100,13 @@
@Override
public void onReceive(Context context, Intent intent) {
if (Intent.ACTION_USER_ADDED.equals(intent.getAction())) {
+ // Notify keystore that a new user was added.
final int userHandle = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, 0);
- final int userSysUid = UserHandle.getUid(userHandle, Process.SYSTEM_UID);
final KeyStore ks = KeyStore.getInstance();
-
- // Clear up keystore in case anything was left behind by previous users
- ks.resetUid(userSysUid);
-
- // If this user has a parent, sync with its keystore password
final UserManager um = (UserManager) mContext.getSystemService(USER_SERVICE);
final UserInfo parentInfo = um.getProfileParent(userHandle);
- if (parentInfo != null) {
- final int parentSysUid = UserHandle.getUid(parentInfo.id, Process.SYSTEM_UID);
- ks.syncUid(parentSysUid, userSysUid);
- }
+ final int parentHandle = parentInfo != null ? parentInfo.id : -1;
+ ks.onUserAdded(userHandle, parentHandle);
} else if (Intent.ACTION_USER_STARTING.equals(intent.getAction())) {
final int userHandle = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, 0);
mStorage.prefetchUser(userHandle);
@@ -265,28 +258,23 @@
return mStorage.hasPattern(userId);
}
- private void maybeUpdateKeystore(String password, int userHandle) {
+ private void setKeystorePassword(String password, int userHandle) {
final UserManager um = (UserManager) mContext.getSystemService(USER_SERVICE);
final KeyStore ks = KeyStore.getInstance();
final List<UserInfo> profiles = um.getProfiles(userHandle);
- boolean shouldReset = TextUtils.isEmpty(password);
-
- // For historical reasons, don't wipe a non-empty keystore if we have a single user with a
- // single profile.
- if (userHandle == UserHandle.USER_OWNER && profiles.size() == 1) {
- if (!ks.isEmpty()) {
- shouldReset = false;
- }
- }
-
for (UserInfo pi : profiles) {
- final int profileUid = UserHandle.getUid(pi.id, Process.SYSTEM_UID);
- if (shouldReset) {
- ks.resetUid(profileUid);
- } else {
- ks.passwordUid(password, profileUid);
- }
+ ks.onUserPasswordChanged(pi.id, password);
+ }
+ }
+
+ private void unlockKeystore(String password, int userHandle) {
+ final UserManager um = (UserManager) mContext.getSystemService(USER_SERVICE);
+ final KeyStore ks = KeyStore.getInstance();
+
+ final List<UserInfo> profiles = um.getProfiles(userHandle);
+ for (UserInfo pi : profiles) {
+ ks.unlock(pi.id, password);
}
}
@@ -294,7 +282,7 @@
public void setLockPattern(String pattern, int userId) throws RemoteException {
checkWritePermission(userId);
- maybeUpdateKeystore(pattern, userId);
+ setKeystorePassword(pattern, userId);
final byte[] hash = LockPatternUtils.patternToHash(
LockPatternUtils.stringToPattern(pattern));
@@ -305,7 +293,7 @@
public void setLockPassword(String password, int userId) throws RemoteException {
checkWritePermission(userId);
- maybeUpdateKeystore(password, userId);
+ setKeystorePassword(password, userId);
mStorage.writePasswordHash(mLockPatternUtils.passwordToHash(password, userId), userId);
}
@@ -322,7 +310,7 @@
boolean matched = Arrays.equals(hash, storedHash);
if (matched && !TextUtils.isEmpty(pattern)) {
- maybeUpdateKeystore(pattern, userId);
+ unlockKeystore(pattern, userId);
}
return matched;
}
@@ -340,7 +328,7 @@
boolean matched = Arrays.equals(hash, storedHash);
if (matched && !TextUtils.isEmpty(password)) {
- maybeUpdateKeystore(password, userId);
+ unlockKeystore(password, userId);
}
return matched;
}
@@ -397,8 +385,7 @@
mStorage.removeUser(userId);
final KeyStore ks = KeyStore.getInstance();
- final int userUid = UserHandle.getUid(userId, Process.SYSTEM_UID);
- ks.resetUid(userUid);
+ ks.onUserRemoved(userId);
}
private static final String[] VALID_SETTINGS = new String[] {
diff --git a/services/core/java/com/android/server/am/ActiveServices.java b/services/core/java/com/android/server/am/ActiveServices.java
index 4e7aa77..24ae766 100755
--- a/services/core/java/com/android/server/am/ActiveServices.java
+++ b/services/core/java/com/android/server/am/ActiveServices.java
@@ -509,7 +509,7 @@
// r.record is null if findServiceLocked() failed the caller permission check
if (r.record == null) {
throw new SecurityException(
- "Permission Denial: Accessing service " + r.record.name
+ "Permission Denial: Accessing service"
+ " from pid=" + Binder.getCallingPid()
+ ", uid=" + Binder.getCallingUid()
+ " requires " + r.permission);
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index 05a4d7e..cca4da7 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -222,6 +222,7 @@
import java.io.PrintWriter;
import java.io.StringWriter;
import java.lang.ref.WeakReference;
+import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
@@ -1121,6 +1122,7 @@
boolean mAutoStopProfiler = false;
int mProfileType = 0;
String mOpenGlTraceApp = null;
+ String mTrackAllocationApp = null;
final long[] mTmpLong = new long[1];
@@ -1287,10 +1289,11 @@
final ServiceThread mHandlerThread;
final MainHandler mHandler;
+ final UiHandler mUiHandler;
- final class MainHandler extends Handler {
- public MainHandler(Looper looper) {
- super(looper, null, true);
+ final class UiHandler extends Handler {
+ public UiHandler() {
+ super(com.android.server.UiThread.get().getLooper(), null, true);
}
@Override
@@ -1403,15 +1406,6 @@
d.show();
ensureBootCompleted();
} break;
- case UPDATE_CONFIGURATION_MSG: {
- final ContentResolver resolver = mContext.getContentResolver();
- Settings.System.putConfiguration(resolver, (Configuration)msg.obj);
- } break;
- case GC_BACKGROUND_PROCESSES_MSG: {
- synchronized (ActivityManagerService.this) {
- performAppGcsIfAppropriateLocked();
- }
- } break;
case WAIT_FOR_DEBUGGER_MSG: {
synchronized (ActivityManagerService.this) {
ProcessRecord app = (ProcessRecord)msg.obj;
@@ -1432,6 +1426,88 @@
}
}
} break;
+ case SHOW_UID_ERROR_MSG: {
+ if (mShowDialogs) {
+ AlertDialog d = new BaseErrorDialog(mContext);
+ d.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ERROR);
+ d.setCancelable(false);
+ d.setTitle(mContext.getText(R.string.android_system_label));
+ d.setMessage(mContext.getText(R.string.system_error_wipe_data));
+ d.setButton(DialogInterface.BUTTON_POSITIVE, mContext.getText(R.string.ok),
+ obtainMessage(DISMISS_DIALOG_MSG, d));
+ d.show();
+ }
+ } break;
+ case SHOW_FINGERPRINT_ERROR_MSG: {
+ if (mShowDialogs) {
+ AlertDialog d = new BaseErrorDialog(mContext);
+ d.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ERROR);
+ d.setCancelable(false);
+ d.setTitle(mContext.getText(R.string.android_system_label));
+ d.setMessage(mContext.getText(R.string.system_error_manufacturer));
+ d.setButton(DialogInterface.BUTTON_POSITIVE, mContext.getText(R.string.ok),
+ obtainMessage(DISMISS_DIALOG_MSG, d));
+ d.show();
+ }
+ } break;
+ case SHOW_COMPAT_MODE_DIALOG_MSG: {
+ synchronized (ActivityManagerService.this) {
+ ActivityRecord ar = (ActivityRecord) msg.obj;
+ if (mCompatModeDialog != null) {
+ if (mCompatModeDialog.mAppInfo.packageName.equals(
+ ar.info.applicationInfo.packageName)) {
+ return;
+ }
+ mCompatModeDialog.dismiss();
+ mCompatModeDialog = null;
+ }
+ if (ar != null && false) {
+ if (mCompatModePackages.getPackageAskCompatModeLocked(
+ ar.packageName)) {
+ int mode = mCompatModePackages.computeCompatModeLocked(
+ ar.info.applicationInfo);
+ if (mode == ActivityManager.COMPAT_MODE_DISABLED
+ || mode == ActivityManager.COMPAT_MODE_ENABLED) {
+ mCompatModeDialog = new CompatModeDialog(
+ ActivityManagerService.this, mContext,
+ ar.info.applicationInfo);
+ mCompatModeDialog.show();
+ }
+ }
+ }
+ }
+ break;
+ }
+ case START_USER_SWITCH_MSG: {
+ showUserSwitchDialog(msg.arg1, (String) msg.obj);
+ break;
+ }
+ case DISMISS_DIALOG_MSG: {
+ final Dialog d = (Dialog) msg.obj;
+ d.dismiss();
+ break;
+ }
+ }
+ }
+ }
+
+ final class MainHandler extends Handler {
+ public MainHandler(Looper looper) {
+ super(looper, null, true);
+ }
+
+ @Override
+ public void handleMessage(Message msg) {
+ switch (msg.what) {
+ case UPDATE_CONFIGURATION_MSG: {
+ final ContentResolver resolver = mContext.getContentResolver();
+ Settings.System.putConfiguration(resolver, (Configuration) msg.obj);
+ } break;
+ case GC_BACKGROUND_PROCESSES_MSG: {
+ synchronized (ActivityManagerService.this) {
+ performAppGcsIfAppropriateLocked();
+ }
+ } break;
case SERVICE_TIMEOUT_MSG: {
if (mDidDexOpt) {
mDidDexOpt = false;
@@ -1496,30 +1572,6 @@
}
}
} break;
- case SHOW_UID_ERROR_MSG: {
- if (mShowDialogs) {
- AlertDialog d = new BaseErrorDialog(mContext);
- d.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ERROR);
- d.setCancelable(false);
- d.setTitle(mContext.getText(R.string.android_system_label));
- d.setMessage(mContext.getText(R.string.system_error_wipe_data));
- d.setButton(DialogInterface.BUTTON_POSITIVE, mContext.getText(R.string.ok),
- mHandler.obtainMessage(DISMISS_DIALOG_MSG, d));
- d.show();
- }
- } break;
- case SHOW_FINGERPRINT_ERROR_MSG: {
- if (mShowDialogs) {
- AlertDialog d = new BaseErrorDialog(mContext);
- d.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ERROR);
- d.setCancelable(false);
- d.setTitle(mContext.getText(R.string.android_system_label));
- d.setMessage(mContext.getText(R.string.system_error_manufacturer));
- d.setButton(DialogInterface.BUTTON_POSITIVE, mContext.getText(R.string.ok),
- mHandler.obtainMessage(DISMISS_DIALOG_MSG, d));
- d.show();
- }
- } break;
case PROC_START_TIMEOUT_MSG: {
if (mDidDexOpt) {
mDidDexOpt = false;
@@ -1620,34 +1672,6 @@
sendMessageDelayed(nmsg, POWER_CHECK_DELAY);
}
} break;
- case SHOW_COMPAT_MODE_DIALOG_MSG: {
- synchronized (ActivityManagerService.this) {
- ActivityRecord ar = (ActivityRecord)msg.obj;
- if (mCompatModeDialog != null) {
- if (mCompatModeDialog.mAppInfo.packageName.equals(
- ar.info.applicationInfo.packageName)) {
- return;
- }
- mCompatModeDialog.dismiss();
- mCompatModeDialog = null;
- }
- if (ar != null && false) {
- if (mCompatModePackages.getPackageAskCompatModeLocked(
- ar.packageName)) {
- int mode = mCompatModePackages.computeCompatModeLocked(
- ar.info.applicationInfo);
- if (mode == ActivityManager.COMPAT_MODE_DISABLED
- || mode == ActivityManager.COMPAT_MODE_ENABLED) {
- mCompatModeDialog = new CompatModeDialog(
- ActivityManagerService.this, mContext,
- ar.info.applicationInfo);
- mCompatModeDialog.show();
- }
- }
- }
- }
- break;
- }
case DISPATCH_PROCESSES_CHANGED: {
dispatchProcessesChanged();
break;
@@ -1668,10 +1692,6 @@
thread.start();
break;
}
- case START_USER_SWITCH_MSG: {
- showUserSwitchDialog(msg.arg1, (String) msg.obj);
- break;
- }
case REPORT_USER_SWITCH_MSG: {
dispatchUserSwitch((UserStartedState) msg.obj, msg.arg1, msg.arg2);
break;
@@ -1779,11 +1799,6 @@
}
break;
}
- case DISMISS_DIALOG_MSG: {
- final Dialog d = (Dialog) msg.obj;
- d.dismiss();
- break;
- }
case NOTIFY_TASK_STACK_CHANGE_LISTENERS_MSG: {
synchronized (ActivityManagerService.this) {
int i = mTaskStackListeners.beginBroadcast();
@@ -2078,6 +2093,7 @@
android.os.Process.THREAD_PRIORITY_FOREGROUND, false /*allowIo*/);
mHandlerThread.start();
mHandler = new MainHandler(mHandlerThread.getLooper());
+ mUiHandler = new UiHandler();
mFgBroadcastQueue = new BroadcastQueue(this, mHandler,
"foreground", BROADCAST_FG_TIMEOUT, false);
@@ -2443,7 +2459,7 @@
Message msg = Message.obtain();
msg.what = SHOW_COMPAT_MODE_DIALOG_MSG;
msg.obj = r.task.askedCompatMode ? null : r;
- mHandler.sendMessage(msg);
+ mUiHandler.sendMessage(msg);
}
private int updateLruProcessInternalLocked(ProcessRecord app, long now, int index,
@@ -3002,6 +3018,10 @@
debugFlags |= Zygote.DEBUG_ENABLE_JIT;
}
}
+ String genDebugInfoProperty = SystemProperties.get("debug.generate-debug-info");
+ if ("true".equals(genDebugInfoProperty)) {
+ debugFlags |= Zygote.DEBUG_GENERATE_DEBUG_INFO;
+ }
if ("1".equals(SystemProperties.get("debug.jni.logging"))) {
debugFlags |= Zygote.DEBUG_ENABLE_JNI_LOGGING;
}
@@ -4769,15 +4789,6 @@
File tracesFile = new File(tracesPath);
try {
- File tracesDir = tracesFile.getParentFile();
- if (!tracesDir.exists()) {
- tracesDir.mkdirs();
- if (!SELinux.restorecon(tracesDir)) {
- return null;
- }
- }
- FileUtils.setPermissions(tracesDir.getPath(), 0775, -1, -1); // drwxrwxr-x
-
if (clearTraces && tracesFile.exists()) tracesFile.delete();
tracesFile.createNewFile();
FileUtils.setPermissions(tracesFile.getPath(), 0666, -1, -1); // -rw-rw-rw-
@@ -4880,14 +4891,6 @@
final File tracesDir = tracesFile.getParentFile();
final File tracesTmp = new File(tracesDir, "__tmp__");
try {
- if (!tracesDir.exists()) {
- tracesDir.mkdirs();
- if (!SELinux.restorecon(tracesDir.getPath())) {
- return;
- }
- }
- FileUtils.setPermissions(tracesDir.getPath(), 0775, -1, -1); // drwxrwxr-x
-
if (tracesFile.exists()) {
tracesTmp.delete();
tracesFile.renameTo(tracesTmp);
@@ -5100,20 +5103,20 @@
map.put("activity", activity);
}
- mHandler.sendMessage(msg);
+ mUiHandler.sendMessage(msg);
}
}
final void showLaunchWarningLocked(final ActivityRecord cur, final ActivityRecord next) {
if (!mLaunchWarningShown) {
mLaunchWarningShown = true;
- mHandler.post(new Runnable() {
+ mUiHandler.post(new Runnable() {
@Override
public void run() {
synchronized (ActivityManagerService.this) {
final Dialog d = new LaunchWarningWindow(mContext, cur, next);
d.show();
- mHandler.postDelayed(new Runnable() {
+ mUiHandler.postDelayed(new Runnable() {
@Override
public void run() {
synchronized (ActivityManagerService.this) {
@@ -5802,17 +5805,20 @@
if (app.isolated) {
mBatteryStatsService.removeIsolatedUid(app.uid, app.info.uid);
}
- app.kill(reason, true);
- handleAppDiedLocked(app, true, allowRestart);
- removeLruProcessLocked(app);
-
+ boolean willRestart = false;
if (app.persistent && !app.isolated) {
if (!callerWillRestart) {
- addAppLocked(app.info, false, null /* ABI override */);
+ willRestart = true;
} else {
needRestart = true;
}
}
+ app.kill(reason, true);
+ handleAppDiedLocked(app, willRestart, allowRestart);
+ if (willRestart) {
+ removeLruProcessLocked(app);
+ addAppLocked(app.info, false, null /* ABI override */);
+ }
} else {
mRemovedProcesses.add(app);
}
@@ -5978,6 +5984,11 @@
enableOpenGlTrace = true;
mOpenGlTraceApp = null;
}
+ boolean enableTrackAllocation = false;
+ if (mTrackAllocationApp != null && mTrackAllocationApp.equals(processName)) {
+ enableTrackAllocation = true;
+ mTrackAllocationApp = null;
+ }
// If the app is being launched for restore or full backup, set it up specially
boolean isRestrictedBackupMode = false;
@@ -6006,7 +6017,7 @@
thread.bindApplication(processName, appInfo, providers, app.instrumentationClass,
profilerInfo, app.instrumentationArguments, app.instrumentationWatcher,
app.instrumentationUiAutomationConnection, testMode, enableOpenGlTrace,
- isRestrictedBackupMode || !normalMode, app.persistent,
+ enableTrackAllocation, isRestrictedBackupMode || !normalMode, app.persistent,
new Configuration(mConfiguration), app.compat,
getCommonServicesLocked(app.isolated),
mCoreSettingsObserver.getCoreSettingsLocked());
@@ -7778,7 +7789,7 @@
fos = mGrantFile.startWrite();
XmlSerializer out = new FastXmlSerializer();
- out.setOutput(fos, "utf-8");
+ out.setOutput(fos, StandardCharsets.UTF_8.name());
out.startDocument(null, true);
out.startTag(null, TAG_URI_GRANTS);
for (UriPermission.Snapshot perm : persist) {
@@ -7813,7 +7824,7 @@
try {
fis = mGrantFile.openRead();
final XmlPullParser in = Xml.newPullParser();
- in.setInput(fis, null);
+ in.setInput(fis, StandardCharsets.UTF_8.name());
int type;
while ((type = in.next()) != END_DOCUMENT) {
@@ -8053,7 +8064,7 @@
msg.what = WAIT_FOR_DEBUGGER_MSG;
msg.obj = app;
msg.arg1 = waiting ? 1 : 0;
- mHandler.sendMessage(msg);
+ mUiHandler.sendMessage(msg);
}
}
@@ -10327,7 +10338,7 @@
synchronized (this) {
boolean isDebuggable = "1".equals(SystemProperties.get(SYSTEM_DEBUGGABLE, "0"));
if (!isDebuggable) {
- if ((app.flags&ApplicationInfo.FLAG_DEBUGGABLE) == 0) {
+ if ((app.flags & ApplicationInfo.FLAG_DEBUGGABLE) == 0) {
throw new SecurityException("Process not debuggable: " + app.packageName);
}
}
@@ -10336,11 +10347,24 @@
}
}
+ void setTrackAllocationApp(ApplicationInfo app, String processName) {
+ synchronized (this) {
+ boolean isDebuggable = "1".equals(SystemProperties.get(SYSTEM_DEBUGGABLE, "0"));
+ if (!isDebuggable) {
+ if ((app.flags & ApplicationInfo.FLAG_DEBUGGABLE) == 0) {
+ throw new SecurityException("Process not debuggable: " + app.packageName);
+ }
+ }
+
+ mTrackAllocationApp = processName;
+ }
+ }
+
void setProfileApp(ApplicationInfo app, String processName, ProfilerInfo profilerInfo) {
synchronized (this) {
boolean isDebuggable = "1".equals(SystemProperties.get(SYSTEM_DEBUGGABLE, "0"));
if (!isDebuggable) {
- if ((app.flags&ApplicationInfo.FLAG_DEBUGGABLE) == 0) {
+ if ((app.flags & ApplicationInfo.FLAG_DEBUGGABLE) == 0) {
throw new SecurityException("Process not debuggable: " + app.packageName);
}
}
@@ -11359,7 +11383,7 @@
Message msg = Message.obtain();
msg.what = SHOW_FACTORY_ERROR_MSG;
msg.getData().putCharSequence("msg", errorMsg);
- mHandler.sendMessage(msg);
+ mUiHandler.sendMessage(msg);
}
}
}
@@ -11409,14 +11433,14 @@
if (AppGlobals.getPackageManager().hasSystemUidErrors()) {
Slog.e(TAG, "UIDs on the system are inconsistent, you need to wipe your"
+ " data partition or your device will be unstable.");
- mHandler.obtainMessage(SHOW_UID_ERROR_MSG).sendToTarget();
+ mUiHandler.obtainMessage(SHOW_UID_ERROR_MSG).sendToTarget();
}
} catch (RemoteException e) {
}
if (!Build.isFingerprintConsistent()) {
Slog.e(TAG, "Build fingerprint is not consistent, warning user");
- mHandler.obtainMessage(SHOW_FINGERPRINT_ERROR_MSG).sendToTarget();
+ mUiHandler.obtainMessage(SHOW_FINGERPRINT_ERROR_MSG).sendToTarget();
}
long ident = Binder.clearCallingIdentity();
@@ -11702,7 +11726,7 @@
data.put("violationMask", violationMask);
data.put("info", info);
msg.obj = data;
- mHandler.sendMessage(msg);
+ mUiHandler.sendMessage(msg);
Binder.restoreCallingIdentity(origId);
}
@@ -12157,7 +12181,7 @@
data.put("result", result);
data.put("app", r);
msg.obj = data;
- mHandler.sendMessage(msg);
+ mUiHandler.sendMessage(msg);
Binder.restoreCallingIdentity(origId);
}
@@ -13151,6 +13175,15 @@
pw.println(" mOpenGlTraceApp=" + mOpenGlTraceApp);
}
}
+ if (mTrackAllocationApp != null) {
+ if (dumpPackage == null || dumpPackage.equals(mTrackAllocationApp)) {
+ if (needSep) {
+ pw.println();
+ needSep = false;
+ }
+ pw.println(" mTrackAllocationApp=" + mTrackAllocationApp);
+ }
+ }
if (mProfileApp != null || mProfileProc != null || mProfileFile != null
|| mProfileFd != null) {
if (dumpPackage == null || dumpPackage.equals(mProfileApp)) {
@@ -14891,7 +14924,7 @@
}
}
- for (int i=0; i<cpr.connections.size(); i++) {
+ for (int i = cpr.connections.size() - 1; i >= 0; i--) {
ContentProviderConnection conn = cpr.connections.get(i);
if (conn.waiting) {
// If this connection is waiting for the provider, then we don't
@@ -14983,10 +15016,11 @@
boolean restart = false;
// Remove published content providers.
- for (int i=app.pubProviders.size()-1; i>=0; i--) {
+ for (int i = app.pubProviders.size() - 1; i >= 0; i--) {
ContentProviderRecord cpr = app.pubProviders.valueAt(i);
final boolean always = app.bad || !allowRestart;
- if (removeDyingProviderLocked(app, cpr, always) || always) {
+ boolean inLaunching = removeDyingProviderLocked(app, cpr, always);
+ if ((inLaunching || always) && cpr.hasConnectionOrHandle()) {
// We left the provider in the launching list, need to
// restart it.
restart = true;
@@ -15004,7 +15038,7 @@
// Unregister from connected content providers.
if (!app.conProviders.isEmpty()) {
- for (int i=0; i<app.conProviders.size(); i++) {
+ for (int i = app.conProviders.size() - 1; i >= 0; i--) {
ContentProviderConnection conn = app.conProviders.get(i);
conn.provider.connections.remove(conn);
stopAssociationLocked(app.uid, app.processName, conn.provider.uid,
@@ -15019,9 +15053,8 @@
// XXX Commented out for now. Trying to figure out a way to reproduce
// the actual situation to identify what is actually going on.
if (false) {
- for (int i=0; i<mLaunchingProviders.size(); i++) {
- ContentProviderRecord cpr = (ContentProviderRecord)
- mLaunchingProviders.get(i);
+ for (int i = mLaunchingProviders.size() - 1; i >= 0; i--) {
+ ContentProviderRecord cpr = mLaunchingProviders.get(i);
if (cpr.connections.size() <= 0 && !cpr.hasExternalProcessHandles()) {
synchronized (cpr) {
cpr.launchingApp = null;
@@ -15034,7 +15067,7 @@
skipCurrentReceiverLocked(app);
// Unregister any receivers.
- for (int i=app.receivers.size()-1; i>=0; i--) {
+ for (int i = app.receivers.size() - 1; i >= 0; i--) {
removeReceiverLocked(app.receivers.valueAt(i));
}
app.receivers.clear();
@@ -15052,7 +15085,7 @@
}
}
- for (int i = mPendingProcessChanges.size()-1; i>=0; i--) {
+ for (int i = mPendingProcessChanges.size() - 1; i >= 0; i--) {
ProcessChangeItem item = mPendingProcessChanges.get(i);
if (item.pid == app.pid) {
mPendingProcessChanges.remove(i);
@@ -15127,18 +15160,14 @@
// and if any run in this process then either schedule a restart of
// the process or kill the client waiting for it if this process has
// gone bad.
- int NL = mLaunchingProviders.size();
boolean restart = false;
- for (int i=0; i<NL; i++) {
+ for (int i = mLaunchingProviders.size() - 1; i >= 0; i--) {
ContentProviderRecord cpr = mLaunchingProviders.get(i);
if (cpr.launchingApp == app) {
- if (!alwaysBad && !app.bad) {
+ if (!alwaysBad && !app.bad && cpr.hasConnectionOrHandle()) {
restart = true;
} else {
removeDyingProviderLocked(app, cpr, true);
- // cpr should have been removed from mLaunchingProviders
- NL = mLaunchingProviders.size();
- i--;
}
}
}
@@ -18922,8 +18951,8 @@
userName = userInfo.name;
mTargetUserId = userId;
}
- mHandler.removeMessages(START_USER_SWITCH_MSG);
- mHandler.sendMessage(mHandler.obtainMessage(START_USER_SWITCH_MSG, userId, 0, userName));
+ mUiHandler.removeMessages(START_USER_SWITCH_MSG);
+ mUiHandler.sendMessage(mUiHandler.obtainMessage(START_USER_SWITCH_MSG, userId, 0, userName));
return true;
}
diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java
index ada16e7..edd8b35 100644
--- a/services/core/java/com/android/server/am/ActivityStack.java
+++ b/services/core/java/com/android/server/am/ActivityStack.java
@@ -780,8 +780,14 @@
final boolean startPausingLocked(boolean userLeaving, boolean uiSleeping, boolean resuming,
boolean dontWait) {
if (mPausingActivity != null) {
- Slog.wtf(TAG, "Going to pause when pause is already pending for " + mPausingActivity);
- completePauseLocked(false);
+ Slog.wtf(TAG, "Going to pause when pause is already pending for " + mPausingActivity
+ + " state=" + mPausingActivity.state);
+ if (!mService.isSleeping()) {
+ // Avoid recursion among check for sleep and complete pause during sleeping.
+ // Because activity will be paused immediately after resume, just let pause
+ // be completed by the order of activity paused from clients.
+ completePauseLocked(false);
+ }
}
ActivityRecord prev = mResumedActivity;
if (prev == null) {
@@ -1252,6 +1258,10 @@
}
if (r != starting) {
mStackSupervisor.startSpecificActivityLocked(r, false, false);
+ if (activityNdx >= activities.size()) {
+ // Record may be removed if its process needs to restart.
+ activityNdx = activities.size() - 1;
+ }
}
} else if (r.visible) {
diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java
index 8ab2368..6ea1a55 100644
--- a/services/core/java/com/android/server/am/ActivityStackSupervisor.java
+++ b/services/core/java/com/android/server/am/ActivityStackSupervisor.java
@@ -811,20 +811,20 @@
aInfo.applicationInfo.packageName, aInfo.name));
// Don't debug things in the system process
- if ((startFlags&ActivityManager.START_FLAG_DEBUG) != 0) {
- if (!aInfo.processName.equals("system")) {
+ if (!aInfo.processName.equals("system")) {
+ if ((startFlags & ActivityManager.START_FLAG_DEBUG) != 0) {
mService.setDebugApp(aInfo.processName, true, false);
}
- }
- if ((startFlags&ActivityManager.START_FLAG_OPENGL_TRACES) != 0) {
- if (!aInfo.processName.equals("system")) {
+ if ((startFlags & ActivityManager.START_FLAG_OPENGL_TRACES) != 0) {
mService.setOpenGlTraceApp(aInfo.applicationInfo, aInfo.processName);
}
- }
- if (profilerInfo != null) {
- if (!aInfo.processName.equals("system")) {
+ if ((startFlags & ActivityManager.START_FLAG_TRACK_ALLOCATION) != 0) {
+ mService.setTrackAllocationApp(aInfo.applicationInfo, aInfo.processName);
+ }
+
+ if (profilerInfo != null) {
mService.setProfileApp(aInfo.applicationInfo, aInfo.processName, profilerInfo);
}
}
diff --git a/services/core/java/com/android/server/am/CompatModePackages.java b/services/core/java/com/android/server/am/CompatModePackages.java
index ec500c2..2ba2bbd 100644
--- a/services/core/java/com/android/server/am/CompatModePackages.java
+++ b/services/core/java/com/android/server/am/CompatModePackages.java
@@ -19,6 +19,7 @@
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
+import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
@@ -84,7 +85,7 @@
try {
fis = mFile.openRead();
XmlPullParser parser = Xml.newPullParser();
- parser.setInput(fis, null);
+ parser.setInput(fis, StandardCharsets.UTF_8.name());
int eventType = parser.getEventType();
while (eventType != XmlPullParser.START_TAG &&
eventType != XmlPullParser.END_DOCUMENT) {
@@ -360,7 +361,7 @@
try {
fos = mFile.startWrite();
XmlSerializer out = new FastXmlSerializer();
- out.setOutput(fos, "utf-8");
+ out.setOutput(fos, StandardCharsets.UTF_8.name());
out.startDocument(null, true);
out.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true);
out.startTag(null, "compat-packages");
diff --git a/services/core/java/com/android/server/am/ContentProviderRecord.java b/services/core/java/com/android/server/am/ContentProviderRecord.java
index a37249d..dceadf4 100644
--- a/services/core/java/com/android/server/am/ContentProviderRecord.java
+++ b/services/core/java/com/android/server/am/ContentProviderRecord.java
@@ -139,6 +139,10 @@
return (externalProcessTokenToHandle != null || externalProcessNoHandleCount > 0);
}
+ public boolean hasConnectionOrHandle() {
+ return !connections.isEmpty() || hasExternalProcessHandles();
+ }
+
void dump(PrintWriter pw, String prefix, boolean full) {
if (full) {
pw.print(prefix); pw.print("package=");
diff --git a/services/core/java/com/android/server/am/NativeCrashListener.java b/services/core/java/com/android/server/am/NativeCrashListener.java
index d42d415..d0973d5 100644
--- a/services/core/java/com/android/server/am/NativeCrashListener.java
+++ b/services/core/java/com/android/server/am/NativeCrashListener.java
@@ -21,6 +21,7 @@
import android.system.Os;
import android.system.StructTimeval;
import android.system.StructUcred;
+import android.system.UnixSocketAddress;
import android.util.Slog;
import static android.system.OsConstants.*;
@@ -30,7 +31,6 @@
import java.io.FileDescriptor;
import java.io.InterruptedIOException;
import java.net.InetSocketAddress;
-import java.net.InetUnixAddress;
/**
* Set up a Unix domain socket that debuggerd will connect() to in
@@ -117,16 +117,16 @@
try {
FileDescriptor serverFd = Os.socket(AF_UNIX, SOCK_STREAM, 0);
- final InetUnixAddress sockAddr = new InetUnixAddress(DEBUGGERD_SOCKET_PATH);
- Os.bind(serverFd, sockAddr, 0);
+ final UnixSocketAddress sockAddr = UnixSocketAddress.createFileSystem(
+ DEBUGGERD_SOCKET_PATH);
+ Os.bind(serverFd, sockAddr);
Os.listen(serverFd, 1);
while (true) {
- InetSocketAddress peer = new InetSocketAddress();
FileDescriptor peerFd = null;
try {
if (MORE_DEBUG) Slog.v(TAG, "Waiting for debuggerd connection");
- peerFd = Os.accept(serverFd, peer);
+ peerFd = Os.accept(serverFd, null /* peerAddress */);
if (MORE_DEBUG) Slog.v(TAG, "Got debuggerd socket " + peerFd);
if (peerFd != null) {
// Only the superuser is allowed to talk to us over this socket
diff --git a/services/core/java/com/android/server/am/ProviderMap.java b/services/core/java/com/android/server/am/ProviderMap.java
index 7da8c48..23c2dc8 100644
--- a/services/core/java/com/android/server/am/ProviderMap.java
+++ b/services/core/java/com/android/server/am/ProviderMap.java
@@ -205,8 +205,11 @@
boolean collectForceStopProviders(String name, int appId,
boolean doit, boolean evenPersistent, int userId,
ArrayList<ContentProviderRecord> result) {
- boolean didSomething = collectForceStopProvidersLocked(name, appId, doit,
- evenPersistent, userId, mSingletonByClass, result);
+ boolean didSomething = false;
+ if (userId == UserHandle.USER_ALL || userId == UserHandle.USER_OWNER) {
+ didSomething = collectForceStopProvidersLocked(name, appId, doit,
+ evenPersistent, userId, mSingletonByClass, result);
+ }
if (!doit && didSomething) {
return true;
}
diff --git a/services/core/java/com/android/server/content/SyncStorageEngine.java b/services/core/java/com/android/server/content/SyncStorageEngine.java
index 0d5f240..eeeb1fd 100644
--- a/services/core/java/com/android/server/content/SyncStorageEngine.java
+++ b/services/core/java/com/android/server/content/SyncStorageEngine.java
@@ -57,6 +57,7 @@
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
+import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
@@ -1811,7 +1812,7 @@
Log.v(TAG_FILE, "Reading " + mAccountInfoFile.getBaseFile());
}
XmlPullParser parser = Xml.newPullParser();
- parser.setInput(fis, null);
+ parser.setInput(fis, StandardCharsets.UTF_8.name());
int eventType = parser.getEventType();
while (eventType != XmlPullParser.START_TAG &&
eventType != XmlPullParser.END_DOCUMENT) {
@@ -2150,7 +2151,7 @@
try {
fos = mAccountInfoFile.startWrite();
XmlSerializer out = new FastXmlSerializer();
- out.setOutput(fos, "utf-8");
+ out.setOutput(fos, StandardCharsets.UTF_8.name());
out.startDocument(null, true);
out.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true);
@@ -2442,7 +2443,7 @@
}
XmlPullParser parser;
parser = Xml.newPullParser();
- parser.setInput(fis, null);
+ parser.setInput(fis, StandardCharsets.UTF_8.name());
int eventType = parser.getEventType();
while (eventType != XmlPullParser.START_TAG &&
@@ -2578,7 +2579,7 @@
}
fos = mPendingFile.startWrite();
XmlSerializer out = new FastXmlSerializer();
- out.setOutput(fos, "utf-8");
+ out.setOutput(fos, StandardCharsets.UTF_8.name());
for (int i = 0; i < N; i++) {
PendingOperation pop = mPendingOperations.get(i);
@@ -2631,7 +2632,7 @@
try {
XmlSerializer out = new FastXmlSerializer();
- out.setOutput(fos, "utf-8");
+ out.setOutput(fos, StandardCharsets.UTF_8.name());
writePendingOperationLocked(op, out);
out.endDocument();
mPendingFile.finishWrite(fos);
diff --git a/services/core/java/com/android/server/display/PersistentDataStore.java b/services/core/java/com/android/server/display/PersistentDataStore.java
index 67b3695..d676b35 100644
--- a/services/core/java/com/android/server/display/PersistentDataStore.java
+++ b/services/core/java/com/android/server/display/PersistentDataStore.java
@@ -35,6 +35,7 @@
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
+import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import libcore.io.IoUtils;
@@ -195,7 +196,7 @@
XmlPullParser parser;
try {
parser = Xml.newPullParser();
- parser.setInput(new BufferedInputStream(is), null);
+ parser.setInput(new BufferedInputStream(is), StandardCharsets.UTF_8.name());
loadFromXml(parser);
} catch (IOException ex) {
Slog.w(TAG, "Failed to load display manager persistent store data.", ex);
@@ -215,7 +216,7 @@
boolean success = false;
try {
XmlSerializer serializer = new FastXmlSerializer();
- serializer.setOutput(new BufferedOutputStream(os), "utf-8");
+ serializer.setOutput(new BufferedOutputStream(os), StandardCharsets.UTF_8.name());
saveToXml(serializer);
serializer.flush();
success = true;
@@ -284,4 +285,4 @@
serializer.endTag(null, "display-manager-state");
serializer.endDocument();
}
-}
\ No newline at end of file
+}
diff --git a/services/core/java/com/android/server/input/PersistentDataStore.java b/services/core/java/com/android/server/input/PersistentDataStore.java
index 92fa813..f6d7244 100644
--- a/services/core/java/com/android/server/input/PersistentDataStore.java
+++ b/services/core/java/com/android/server/input/PersistentDataStore.java
@@ -37,6 +37,7 @@
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
+import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
@@ -214,7 +215,7 @@
XmlPullParser parser;
try {
parser = Xml.newPullParser();
- parser.setInput(new BufferedInputStream(is), null);
+ parser.setInput(new BufferedInputStream(is), StandardCharsets.UTF_8.name());
loadFromXml(parser);
} catch (IOException ex) {
Slog.w(InputManagerService.TAG, "Failed to load input manager persistent store data.", ex);
@@ -234,7 +235,7 @@
boolean success = false;
try {
XmlSerializer serializer = new FastXmlSerializer();
- serializer.setOutput(new BufferedOutputStream(os), "utf-8");
+ serializer.setOutput(new BufferedOutputStream(os), StandardCharsets.UTF_8.name());
saveToXml(serializer);
serializer.flush();
success = true;
diff --git a/services/core/java/com/android/server/job/JobServiceContext.java b/services/core/java/com/android/server/job/JobServiceContext.java
index 63c8d92..d07fb13 100644
--- a/services/core/java/com/android/server/job/JobServiceContext.java
+++ b/services/core/java/com/android/server/job/JobServiceContext.java
@@ -73,7 +73,7 @@
private static final long OP_TIMEOUT_MILLIS = 8 * 1000;
private static final String[] VERB_STRINGS = {
- "VERB_BINDING", "VERB_STARTING", "VERB_EXECUTING", "VERB_STOPPING"
+ "VERB_BINDING", "VERB_STARTING", "VERB_EXECUTING", "VERB_STOPPING", "VERB_FINISHED"
};
// States that a job occupies while interacting with the client.
@@ -81,6 +81,7 @@
static final int VERB_STARTING = 1;
static final int VERB_EXECUTING = 2;
static final int VERB_STOPPING = 3;
+ static final int VERB_FINISHED = 4;
// Messages that result from interactions with the client service.
/** System timed out waiting for a response. */
@@ -170,6 +171,7 @@
mRunningJob = null;
mParams = null;
mExecutionStartTimeElapsed = 0L;
+ mVerb = VERB_FINISHED;
removeOpTimeOut();
return false;
}
@@ -305,8 +307,8 @@
break;
case MSG_CALLBACK:
if (DEBUG) {
- Slog.d(TAG, "MSG_CALLBACK of : " + mRunningJob + " v:" +
- (mVerb >= 0 ? VERB_STRINGS[mVerb] : "[invalid]"));
+ Slog.d(TAG, "MSG_CALLBACK of : " + mRunningJob
+ + " v:" + VERB_STRINGS[mVerb]);
}
removeOpTimeOut();
@@ -522,8 +524,12 @@
* we want to clean up internally.
*/
private void closeAndCleanupJobH(boolean reschedule) {
- final JobStatus completedJob = mRunningJob;
+ final JobStatus completedJob;
synchronized (mLock) {
+ if (mVerb == VERB_FINISHED) {
+ return;
+ }
+ completedJob = mRunningJob;
try {
mBatteryStats.noteJobFinish(mRunningJob.getName(), mRunningJob.getUid());
} catch (RemoteException e) {
@@ -536,7 +542,7 @@
mWakeLock = null;
mRunningJob = null;
mParams = null;
- mVerb = -1;
+ mVerb = VERB_FINISHED;
mCancelled.set(false);
service = null;
mAvailable = true;
diff --git a/services/core/java/com/android/server/job/JobStore.java b/services/core/java/com/android/server/job/JobStore.java
index b64c677..11e7605 100644
--- a/services/core/java/com/android/server/job/JobStore.java
+++ b/services/core/java/com/android/server/job/JobStore.java
@@ -41,6 +41,7 @@
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
+import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
@@ -292,7 +293,7 @@
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
XmlSerializer out = new FastXmlSerializer();
- out.setOutput(baos, "utf-8");
+ out.setOutput(baos, StandardCharsets.UTF_8.name());
out.startDocument(null, true);
out.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true);
@@ -450,13 +451,13 @@
private List<JobStatus> readJobMapImpl(FileInputStream fis)
throws XmlPullParserException, IOException {
XmlPullParser parser = Xml.newPullParser();
- parser.setInput(fis, null);
+ parser.setInput(fis, StandardCharsets.UTF_8.name());
int eventType = parser.getEventType();
while (eventType != XmlPullParser.START_TAG &&
eventType != XmlPullParser.END_DOCUMENT) {
eventType = parser.next();
- Slog.d(TAG, parser.getName());
+ Slog.d(TAG, "Start tag: " + parser.getName());
}
if (eventType == XmlPullParser.END_DOCUMENT) {
if (DEBUG) {
diff --git a/services/core/java/com/android/server/job/controllers/IdleController.java b/services/core/java/com/android/server/job/controllers/IdleController.java
index 7b71027..1b4006d 100644
--- a/services/core/java/com/android/server/job/controllers/IdleController.java
+++ b/services/core/java/com/android/server/job/controllers/IdleController.java
@@ -109,6 +109,7 @@
private AlarmManager mAlarm;
private PendingIntent mIdleTriggerIntent;
boolean mIdle;
+ boolean mScreenOn;
public IdlenessTracker() {
mAlarm = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
@@ -121,6 +122,7 @@
// At boot we presume that the user has just "interacted" with the
// device in some meaningful way.
mIdle = false;
+ mScreenOn = true;
}
public boolean isIdle() {
@@ -150,12 +152,14 @@
if (action.equals(Intent.ACTION_SCREEN_ON)
|| action.equals(Intent.ACTION_DREAMING_STOPPED)) {
- // possible transition to not-idle
+ if (DEBUG) {
+ Slog.v(TAG,"exiting idle : " + action);
+ }
+ mScreenOn = true;
+ //cancel the alarm
+ mAlarm.cancel(mIdleTriggerIntent);
if (mIdle) {
- if (DEBUG) {
- Slog.v(TAG, "exiting idle : " + action);
- }
- mAlarm.cancel(mIdleTriggerIntent);
+ // possible transition to not-idle
mIdle = false;
reportNewIdleState(mIdle);
}
@@ -170,11 +174,12 @@
Slog.v(TAG, "Scheduling idle : " + action + " now:" + nowElapsed + " when="
+ when);
}
+ mScreenOn = false;
mAlarm.setWindow(AlarmManager.ELAPSED_REALTIME_WAKEUP,
when, IDLE_WINDOW_SLOP, mIdleTriggerIntent);
} else if (action.equals(ACTION_TRIGGER_IDLE)) {
- // idle time starts now
- if (!mIdle) {
+ // idle time starts now. Do not set mIdle if screen is on.
+ if (!mIdle && !mScreenOn) {
if (DEBUG) {
Slog.v(TAG, "Idle trigger fired @ " + SystemClock.elapsedRealtime());
}
diff --git a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
index 2be591b..4d101d7 100644
--- a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
+++ b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
@@ -160,6 +160,7 @@
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
+import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -1242,7 +1243,7 @@
try {
fis = mPolicyFile.openRead();
final XmlPullParser in = Xml.newPullParser();
- in.setInput(fis, null);
+ in.setInput(fis, StandardCharsets.UTF_8.name());
int type;
int version = VERSION_INIT;
@@ -1377,7 +1378,7 @@
fos = mPolicyFile.startWrite();
XmlSerializer out = new FastXmlSerializer();
- out.setOutput(fos, "utf-8");
+ out.setOutput(fos, StandardCharsets.UTF_8.name());
out.startDocument(null, true);
out.startTag(null, TAG_POLICY_LIST);
diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java
index f49d77d..9b8bd3d 100644
--- a/services/core/java/com/android/server/notification/NotificationManagerService.java
+++ b/services/core/java/com/android/server/notification/NotificationManagerService.java
@@ -112,6 +112,7 @@
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
+import java.nio.charset.StandardCharsets;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.HashSet;
@@ -377,7 +378,7 @@
try {
infile = mPolicyFile.openRead();
final XmlPullParser parser = Xml.newPullParser();
- parser.setInput(infile, null);
+ parser.setInput(infile, StandardCharsets.UTF_8.name());
int type;
String tag;
@@ -435,7 +436,7 @@
try {
final XmlSerializer out = new FastXmlSerializer();
- out.setOutput(stream, "utf-8");
+ out.setOutput(stream, StandardCharsets.UTF_8.name());
out.startDocument(null, true);
out.startTag(null, TAG_BODY);
out.attribute(null, ATTR_VERSION, Integer.toString(DB_VERSION));
@@ -1771,6 +1772,9 @@
for (int i=0; i<N; i++) {
final NotificationRecord r = mNotificationList.get(i);
if (r.sbn.getPackageName().equals(pkg) && r.sbn.getUserId() == userId) {
+ if (r.sbn.getId() == id && TextUtils.equals(r.sbn.getTag(), tag)) {
+ break; // Allow updating existing notification
+ }
count++;
if (count >= MAX_PACKAGE_NOTIFICATIONS) {
Slog.e(TAG, "Package has already posted " + count
@@ -2788,19 +2792,8 @@
final int len = list.size();
for (int i=0; i<len; i++) {
NotificationRecord r = list.get(i);
- if (!notificationMatchesUserId(r, userId) || r.sbn.getId() != id) {
- continue;
- }
- if (tag == null) {
- if (r.sbn.getTag() != null) {
- continue;
- }
- } else {
- if (!tag.equals(r.sbn.getTag())) {
- continue;
- }
- }
- if (r.sbn.getPackageName().equals(pkg)) {
+ if (notificationMatchesUserId(r, userId) && r.sbn.getId() == id &&
+ TextUtils.equals(r.sbn.getTag(), tag) && r.sbn.getPackageName().equals(pkg)) {
return i;
}
}
diff --git a/services/core/java/com/android/server/pm/PackageDexOptimizer.java b/services/core/java/com/android/server/pm/PackageDexOptimizer.java
index 4c36fa6..955ea34 100644
--- a/services/core/java/com/android/server/pm/PackageDexOptimizer.java
+++ b/services/core/java/com/android/server/pm/PackageDexOptimizer.java
@@ -199,7 +199,8 @@
@Nullable
private String createOatDirIfSupported(PackageParser.Package pkg, String dexInstructionSet)
throws IOException {
- if (pkg.isSystemApp() && !pkg.isUpdatedSystemApp()) {
+ if ((pkg.isSystemApp() && !pkg.isUpdatedSystemApp()) || pkg.isForwardLocked()
+ || (!pkg.applicationInfo.isInternal())) {
return null;
}
File codePath = new File(pkg.codePath);
diff --git a/services/core/java/com/android/server/pm/PackageInstallerService.java b/services/core/java/com/android/server/pm/PackageInstallerService.java
index 95d7a52..90370cc 100644
--- a/services/core/java/com/android/server/pm/PackageInstallerService.java
+++ b/services/core/java/com/android/server/pm/PackageInstallerService.java
@@ -94,6 +94,7 @@
import java.io.FileOutputStream;
import java.io.FilenameFilter;
import java.io.IOException;
+import java.nio.charset.StandardCharsets;
import java.security.SecureRandom;
import java.util.ArrayList;
import java.util.List;
@@ -307,7 +308,7 @@
try {
fis = mSessionsFile.openRead();
final XmlPullParser in = Xml.newPullParser();
- in.setInput(fis, null);
+ in.setInput(fis, StandardCharsets.UTF_8.name());
int type;
while ((type = in.next()) != END_DOCUMENT) {
@@ -398,7 +399,7 @@
fos = mSessionsFile.startWrite();
XmlSerializer out = new FastXmlSerializer();
- out.setOutput(fos, "utf-8");
+ out.setOutput(fos, StandardCharsets.UTF_8.name());
out.startDocument(null, true);
out.startTag(null, TAG_SESSIONS);
final int size = mSessions.size();
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index 3f0e8b0..34ed88d 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -5494,7 +5494,6 @@
}
final String path = scanFile.getPath();
- final String codePath = pkg.applicationInfo.getCodePath();
final String cpuAbiOverride = deriveAbiOverride(pkg.cpuAbiOverride, pkgSetting);
if (isSystemApp(pkg) && !pkg.isUpdatedSystemApp()) {
setBundledAppAbisAndRoots(pkg, pkgSetting);
@@ -5520,128 +5519,21 @@
setNativeLibraryPaths(pkg);
} else {
- // TODO: We can probably be smarter about this stuff. For installed apps,
- // we can calculate this information at install time once and for all. For
- // system apps, we can probably assume that this information doesn't change
- // after the first boot scan. As things stand, we do lots of unnecessary work.
-
- // Give ourselves some initial paths; we'll come back for another
- // pass once we've determined ABI below.
- setNativeLibraryPaths(pkg);
-
- final boolean isAsec = pkg.isForwardLocked() || isExternal(pkg);
- final String nativeLibraryRootStr = pkg.applicationInfo.nativeLibraryRootDir;
- final boolean useIsaSpecificSubdirs = pkg.applicationInfo.nativeLibraryRootRequiresIsa;
-
- NativeLibraryHelper.Handle handle = null;
- try {
- handle = NativeLibraryHelper.Handle.create(scanFile);
- // TODO(multiArch): This can be null for apps that didn't go through the
- // usual installation process. We can calculate it again, like we
- // do during install time.
+ if ((scanFlags & SCAN_NEW_INSTALL) == 0) {
+ deriveNonSystemPackageAbi(pkg, scanFile, cpuAbiOverride, true /* extract libs */);
+ } else {
+ // TODO: We need this second call to derive in two cases :
//
- // TODO(multiArch): Why do we need to rescan ASEC apps again ? It seems totally
- // unnecessary.
- final File nativeLibraryRoot = new File(nativeLibraryRootStr);
-
- // Null out the abis so that they can be recalculated.
- pkg.applicationInfo.primaryCpuAbi = null;
- pkg.applicationInfo.secondaryCpuAbi = null;
- if (isMultiArch(pkg.applicationInfo)) {
- // Warn if we've set an abiOverride for multi-lib packages..
- // By definition, we need to copy both 32 and 64 bit libraries for
- // such packages.
- if (pkg.cpuAbiOverride != null
- && !NativeLibraryHelper.CLEAR_ABI_OVERRIDE.equals(pkg.cpuAbiOverride)) {
- Slog.w(TAG, "Ignoring abiOverride for multi arch application.");
- }
-
- int abi32 = PackageManager.NO_NATIVE_LIBRARIES;
- int abi64 = PackageManager.NO_NATIVE_LIBRARIES;
- if (Build.SUPPORTED_32_BIT_ABIS.length > 0) {
- if (isAsec) {
- abi32 = NativeLibraryHelper.findSupportedAbi(handle, Build.SUPPORTED_32_BIT_ABIS);
- } else {
- abi32 = NativeLibraryHelper.copyNativeBinariesForSupportedAbi(handle,
- nativeLibraryRoot, Build.SUPPORTED_32_BIT_ABIS,
- useIsaSpecificSubdirs);
- }
- }
-
- maybeThrowExceptionForMultiArchCopy(
- "Error unpackaging 32 bit native libs for multiarch app.", abi32);
-
- if (Build.SUPPORTED_64_BIT_ABIS.length > 0) {
- if (isAsec) {
- abi64 = NativeLibraryHelper.findSupportedAbi(handle, Build.SUPPORTED_64_BIT_ABIS);
- } else {
- abi64 = NativeLibraryHelper.copyNativeBinariesForSupportedAbi(handle,
- nativeLibraryRoot, Build.SUPPORTED_64_BIT_ABIS,
- useIsaSpecificSubdirs);
- }
- }
-
- maybeThrowExceptionForMultiArchCopy(
- "Error unpackaging 64 bit native libs for multiarch app.", abi64);
-
- if (abi64 >= 0) {
- pkg.applicationInfo.primaryCpuAbi = Build.SUPPORTED_64_BIT_ABIS[abi64];
- }
-
- if (abi32 >= 0) {
- final String abi = Build.SUPPORTED_32_BIT_ABIS[abi32];
- if (abi64 >= 0) {
- pkg.applicationInfo.secondaryCpuAbi = abi;
- } else {
- pkg.applicationInfo.primaryCpuAbi = abi;
- }
- }
- } else {
- String[] abiList = (cpuAbiOverride != null) ?
- new String[] { cpuAbiOverride } : Build.SUPPORTED_ABIS;
-
- // Enable gross and lame hacks for apps that are built with old
- // SDK tools. We must scan their APKs for renderscript bitcode and
- // not launch them if it's present. Don't bother checking on devices
- // that don't have 64 bit support.
- boolean needsRenderScriptOverride = false;
- if (Build.SUPPORTED_64_BIT_ABIS.length > 0 && cpuAbiOverride == null &&
- NativeLibraryHelper.hasRenderscriptBitcode(handle)) {
- abiList = Build.SUPPORTED_32_BIT_ABIS;
- needsRenderScriptOverride = true;
- }
-
- final int copyRet;
- if (isAsec) {
- copyRet = NativeLibraryHelper.findSupportedAbi(handle, abiList);
- } else {
- copyRet = NativeLibraryHelper.copyNativeBinariesForSupportedAbi(handle,
- nativeLibraryRoot, abiList, useIsaSpecificSubdirs);
- }
-
- if (copyRet < 0 && copyRet != PackageManager.NO_NATIVE_LIBRARIES) {
- throw new PackageManagerException(INSTALL_FAILED_INTERNAL_ERROR,
- "Error unpackaging native libs for app, errorCode=" + copyRet);
- }
-
- if (copyRet >= 0) {
- pkg.applicationInfo.primaryCpuAbi = abiList[copyRet];
- } else if (copyRet == PackageManager.NO_NATIVE_LIBRARIES && cpuAbiOverride != null) {
- pkg.applicationInfo.primaryCpuAbi = cpuAbiOverride;
- } else if (needsRenderScriptOverride) {
- pkg.applicationInfo.primaryCpuAbi = abiList[0];
- }
- }
- } catch (IOException ioe) {
- Slog.e(TAG, "Unable to get canonical file " + ioe.toString());
- } finally {
- IoUtils.closeQuietly(handle);
+ // - To update the native library paths based on the final install location.
+ // - We don't call dexopt when moving packages, and so we have to scan again.
+ //
+ // We can simplify this and avoid having to scan the package again by letting
+ // scanPackageLI know if the current install was a move (and deriving things only
+ // in that case) and by "reparenting" the native lib directory in the case of
+ // a normal (non-move) install.
+ deriveNonSystemPackageAbi(pkg, scanFile, cpuAbiOverride, false /* extract libs */);
}
- // Now that we've calculated the ABIs and determined if it's an internal app,
- // we will go ahead and populate the nativeLibraryPath.
- setNativeLibraryPaths(pkg);
-
if (DEBUG_INSTALL) Slog.i(TAG, "Linking native library dir for " + path);
final int[] userIds = sUserManager.getUserIds();
synchronized (mInstallLock) {
@@ -5670,9 +5562,21 @@
Build.SUPPORTED_64_BIT_ABIS[0] : Build.SUPPORTED_32_BIT_ABIS[0];
}
+ // If there's a mismatch between the abi-override in the package setting
+ // and the abiOverride specified for the install. Warn about this because we
+ // would've already compiled the app without taking the package setting into
+ // account.
+ if ((scanFlags & SCAN_NO_DEX) == 0 && (scanFlags & SCAN_NEW_INSTALL) != 0) {
+ if (cpuAbiOverride == null && pkgSetting.cpuAbiOverrideString != null) {
+ Slog.w(TAG, "Ignoring persisted ABI override " + cpuAbiOverride +
+ " for package: " + pkg.packageName);
+ }
+ }
+
pkgSetting.primaryCpuAbiString = pkg.applicationInfo.primaryCpuAbi;
pkgSetting.secondaryCpuAbiString = pkg.applicationInfo.secondaryCpuAbi;
pkgSetting.cpuAbiOverrideString = cpuAbiOverride;
+
// Copy the derived override back to the parsed package, so that we can
// update the package settings accordingly.
pkg.cpuAbiOverride = cpuAbiOverride;
@@ -6176,6 +6080,144 @@
}
/**
+ * Derive the ABI of a non-system package located at {@code scanFile}. This information
+ * is derived purely on the basis of the contents of {@code scanFile} and
+ * {@code cpuAbiOverride}.
+ *
+ * If {@code extractLibs} is true, native libraries are extracted from the app if required.
+ */
+ public void deriveNonSystemPackageAbi(PackageParser.Package pkg, File scanFile,
+ String cpuAbiOverride, boolean extractLibs)
+ throws PackageManagerException {
+ // TODO: We can probably be smarter about this stuff. For installed apps,
+ // we can calculate this information at install time once and for all. For
+ // system apps, we can probably assume that this information doesn't change
+ // after the first boot scan. As things stand, we do lots of unnecessary work.
+
+ // Give ourselves some initial paths; we'll come back for another
+ // pass once we've determined ABI below.
+ setNativeLibraryPaths(pkg);
+
+ // We would never need to extract libs for forward-locked and external packages,
+ // since the container service will do it for us.
+ if (pkg.isForwardLocked() || isExternal(pkg)) {
+ extractLibs = false;
+ }
+
+ final String nativeLibraryRootStr = pkg.applicationInfo.nativeLibraryRootDir;
+ final boolean useIsaSpecificSubdirs = pkg.applicationInfo.nativeLibraryRootRequiresIsa;
+
+ NativeLibraryHelper.Handle handle = null;
+ try {
+ handle = NativeLibraryHelper.Handle.create(scanFile);
+ // TODO(multiArch): This can be null for apps that didn't go through the
+ // usual installation process. We can calculate it again, like we
+ // do during install time.
+ //
+ // TODO(multiArch): Why do we need to rescan ASEC apps again ? It seems totally
+ // unnecessary.
+ final File nativeLibraryRoot = new File(nativeLibraryRootStr);
+
+ // Null out the abis so that they can be recalculated.
+ pkg.applicationInfo.primaryCpuAbi = null;
+ pkg.applicationInfo.secondaryCpuAbi = null;
+ if (isMultiArch(pkg.applicationInfo)) {
+ // Warn if we've set an abiOverride for multi-lib packages..
+ // By definition, we need to copy both 32 and 64 bit libraries for
+ // such packages.
+ if (pkg.cpuAbiOverride != null
+ && !NativeLibraryHelper.CLEAR_ABI_OVERRIDE.equals(pkg.cpuAbiOverride)) {
+ Slog.w(TAG, "Ignoring abiOverride for multi arch application.");
+ }
+
+ int abi32 = PackageManager.NO_NATIVE_LIBRARIES;
+ int abi64 = PackageManager.NO_NATIVE_LIBRARIES;
+ if (Build.SUPPORTED_32_BIT_ABIS.length > 0) {
+ if (extractLibs) {
+ abi32 = NativeLibraryHelper.copyNativeBinariesForSupportedAbi(handle,
+ nativeLibraryRoot, Build.SUPPORTED_32_BIT_ABIS,
+ useIsaSpecificSubdirs);
+ } else {
+ abi32 = NativeLibraryHelper.findSupportedAbi(handle, Build.SUPPORTED_32_BIT_ABIS);
+ }
+ }
+
+ maybeThrowExceptionForMultiArchCopy(
+ "Error unpackaging 32 bit native libs for multiarch app.", abi32);
+
+ if (Build.SUPPORTED_64_BIT_ABIS.length > 0) {
+ if (extractLibs) {
+ abi64 = NativeLibraryHelper.copyNativeBinariesForSupportedAbi(handle,
+ nativeLibraryRoot, Build.SUPPORTED_64_BIT_ABIS,
+ useIsaSpecificSubdirs);
+ } else {
+ abi64 = NativeLibraryHelper.findSupportedAbi(handle, Build.SUPPORTED_64_BIT_ABIS);
+ }
+ }
+
+ maybeThrowExceptionForMultiArchCopy(
+ "Error unpackaging 64 bit native libs for multiarch app.", abi64);
+
+ if (abi64 >= 0) {
+ pkg.applicationInfo.primaryCpuAbi = Build.SUPPORTED_64_BIT_ABIS[abi64];
+ }
+
+ if (abi32 >= 0) {
+ final String abi = Build.SUPPORTED_32_BIT_ABIS[abi32];
+ if (abi64 >= 0) {
+ pkg.applicationInfo.secondaryCpuAbi = abi;
+ } else {
+ pkg.applicationInfo.primaryCpuAbi = abi;
+ }
+ }
+ } else {
+ String[] abiList = (cpuAbiOverride != null) ?
+ new String[] { cpuAbiOverride } : Build.SUPPORTED_ABIS;
+
+ // Enable gross and lame hacks for apps that are built with old
+ // SDK tools. We must scan their APKs for renderscript bitcode and
+ // not launch them if it's present. Don't bother checking on devices
+ // that don't have 64 bit support.
+ boolean needsRenderScriptOverride = false;
+ if (Build.SUPPORTED_64_BIT_ABIS.length > 0 && cpuAbiOverride == null &&
+ NativeLibraryHelper.hasRenderscriptBitcode(handle)) {
+ abiList = Build.SUPPORTED_32_BIT_ABIS;
+ needsRenderScriptOverride = true;
+ }
+
+ final int copyRet;
+ if (extractLibs) {
+ copyRet = NativeLibraryHelper.copyNativeBinariesForSupportedAbi(handle,
+ nativeLibraryRoot, abiList, useIsaSpecificSubdirs);
+ } else {
+ copyRet = NativeLibraryHelper.findSupportedAbi(handle, abiList);
+ }
+
+ if (copyRet < 0 && copyRet != PackageManager.NO_NATIVE_LIBRARIES) {
+ throw new PackageManagerException(INSTALL_FAILED_INTERNAL_ERROR,
+ "Error unpackaging native libs for app, errorCode=" + copyRet);
+ }
+
+ if (copyRet >= 0) {
+ pkg.applicationInfo.primaryCpuAbi = abiList[copyRet];
+ } else if (copyRet == PackageManager.NO_NATIVE_LIBRARIES && cpuAbiOverride != null) {
+ pkg.applicationInfo.primaryCpuAbi = cpuAbiOverride;
+ } else if (needsRenderScriptOverride) {
+ pkg.applicationInfo.primaryCpuAbi = abiList[0];
+ }
+ }
+ } catch (IOException ioe) {
+ Slog.e(TAG, "Unable to get canonical file " + ioe.toString());
+ } finally {
+ IoUtils.closeQuietly(handle);
+ }
+
+ // Now that we've calculated the ABIs and determined if it's an internal app,
+ // we will go ahead and populate the nativeLibraryPath.
+ setNativeLibraryPaths(pkg);
+ }
+
+ /**
* Adjusts ABIs for a set of packages belonging to a shared user so that they all match.
* i.e, so that all packages can be run inside a single process if required.
*
@@ -10254,7 +10296,7 @@
boolean forwardLocked = ((installFlags & PackageManager.INSTALL_FORWARD_LOCK) != 0);
boolean onSd = ((installFlags & PackageManager.INSTALL_EXTERNAL) != 0);
boolean replace = false;
- final int scanFlags = SCAN_NEW_INSTALL | SCAN_FORCE_DEX | SCAN_UPDATE_SIGNATURE;
+ int scanFlags = SCAN_NEW_INSTALL | SCAN_FORCE_DEX | SCAN_UPDATE_SIGNATURE;
// Result object to be returned
res.returnCode = PackageManager.INSTALL_SUCCEEDED;
@@ -10421,13 +10463,27 @@
return;
}
- // Run dexopt before old package gets removed, to minimize time when app is not available
- int result = mPackageDexOptimizer
- .performDexOpt(pkg, null /* instruction sets */, true /* forceDex */,
- false /* defer */, false /* inclDependencies */);
- if (result == PackageDexOptimizer.DEX_OPT_FAILED) {
- res.setError(INSTALL_FAILED_DEXOPT, "Dexopt failed for " + pkg.codePath);
- return;
+ // If app directory is not writable, dexopt will be called after the rename
+ if (!forwardLocked && pkg.applicationInfo.isInternal()) {
+ // Enable SCAN_NO_DEX flag to skip dexopt at a later stage
+ scanFlags |= SCAN_NO_DEX;
+ try {
+ deriveNonSystemPackageAbi(pkg, new File(pkg.codePath), args.abiOverride,
+ true /* extract libs */);
+ } catch (PackageManagerException pme) {
+ Slog.e(TAG, "Error deriving application ABI", pme);
+ res.setError(INSTALL_FAILED_INTERNAL_ERROR, "Error deriving application ABI");
+ return;
+ }
+
+ // Run dexopt before old package gets removed, to minimize time when app is unavailable
+ int result = mPackageDexOptimizer
+ .performDexOpt(pkg, null /* instruction sets */, true /* forceDex */,
+ false /* defer */, false /* inclDependencies */);
+ if (result == PackageDexOptimizer.DEX_OPT_FAILED) {
+ res.setError(INSTALL_FAILED_DEXOPT, "Dexopt failed for " + pkg.codePath);
+ return;
+ }
}
if (!args.doRename(res.returnCode, pkg, oldCodePath)) {
@@ -10435,13 +10491,12 @@
return;
}
- // Call with SCAN_NO_DEX, since dexopt has already been made
if (replace) {
- replacePackageLI(pkg, parseFlags, scanFlags | SCAN_REPLACING | SCAN_NO_DEX, args.user,
+ replacePackageLI(pkg, parseFlags, scanFlags | SCAN_REPLACING, args.user,
installerPackageName, res);
} else {
- installNewPackageLI(pkg, parseFlags, scanFlags | SCAN_DELETE_DATA_ON_FAILURES
- | SCAN_NO_DEX, args.user, installerPackageName, res);
+ installNewPackageLI(pkg, parseFlags, scanFlags | SCAN_DELETE_DATA_ON_FAILURES,
+ args.user, installerPackageName, res);
}
synchronized (mPackages) {
final PackageSetting ps = mSettings.mPackages.get(pkgName);
@@ -12443,7 +12498,7 @@
BufferedOutputStream str = new BufferedOutputStream(fout);
XmlSerializer serializer = new FastXmlSerializer();
try {
- serializer.setOutput(str, "utf-8");
+ serializer.setOutput(str, StandardCharsets.UTF_8.name());
serializer.startDocument(null, true);
serializer.setFeature(
"http://xmlpull.org/v1/doc/features.html#indent-output", true);
diff --git a/services/core/java/com/android/server/pm/PackageSettingBase.java b/services/core/java/com/android/server/pm/PackageSettingBase.java
index 4b8ca42..e723385 100644
--- a/services/core/java/com/android/server/pm/PackageSettingBase.java
+++ b/services/core/java/com/android/server/pm/PackageSettingBase.java
@@ -219,6 +219,7 @@
}
installStatus = base.installStatus;
keySetData = base.keySetData;
+ installerPackageName = base.installerPackageName;
}
private PackageUserState modifyUserState(int userId) {
diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java
index b820d7e8..201d443 100644
--- a/services/core/java/com/android/server/pm/Settings.java
+++ b/services/core/java/com/android/server/pm/Settings.java
@@ -76,6 +76,7 @@
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
+import java.nio.charset.StandardCharsets;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
@@ -1083,7 +1084,7 @@
str = new FileInputStream(userPackagesStateFile);
}
final XmlPullParser parser = Xml.newPullParser();
- parser.setInput(str, null);
+ parser.setInput(str, StandardCharsets.UTF_8.name());
int type;
while ((type=parser.next()) != XmlPullParser.START_TAG
@@ -1297,7 +1298,7 @@
final BufferedOutputStream str = new BufferedOutputStream(fstr);
final XmlSerializer serializer = new FastXmlSerializer();
- serializer.setOutput(str, "utf-8");
+ serializer.setOutput(str, StandardCharsets.UTF_8.name());
serializer.startDocument(null, true);
serializer.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true);
@@ -1538,7 +1539,7 @@
//XmlSerializer serializer = XmlUtils.serializerInstance();
XmlSerializer serializer = new FastXmlSerializer();
- serializer.setOutput(str, "utf-8");
+ serializer.setOutput(str, StandardCharsets.UTF_8.name());
serializer.startDocument(null, true);
serializer.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true);
@@ -1987,7 +1988,7 @@
str = new FileInputStream(mSettingsFilename);
}
XmlPullParser parser = Xml.newPullParser();
- parser.setInput(str, null);
+ parser.setInput(str, StandardCharsets.UTF_8.name());
int type;
while ((type = parser.next()) != XmlPullParser.START_TAG
diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java
index f84cb30..123639e 100644
--- a/services/core/java/com/android/server/pm/UserManagerService.java
+++ b/services/core/java/com/android/server/pm/UserManagerService.java
@@ -70,6 +70,7 @@
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
+import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
@@ -537,6 +538,28 @@
* Check if we've hit the limit of how many users can be created.
*/
private boolean isUserLimitReachedLocked() {
+ return getAliveUsersExcludingGuestsCountLocked() >= UserManager.getMaxSupportedUsers();
+ }
+
+ @Override
+ public boolean canAddMoreManagedProfiles() {
+ checkManageUsersPermission("check if more managed profiles can be added.");
+ if (ActivityManager.isLowRamDeviceStatic()) {
+ return false;
+ }
+ synchronized(mPackagesLock) {
+ // Limit number of managed profiles that can be created
+ if (numberOfUsersOfTypeLocked(UserInfo.FLAG_MANAGED_PROFILE, true)
+ >= MAX_MANAGED_PROFILES) {
+ return false;
+ }
+ int usersCount = getAliveUsersExcludingGuestsCountLocked();
+ // We allow creating a managed profile in the special case where there is only one user.
+ return usersCount == 1 || usersCount < UserManager.getMaxSupportedUsers();
+ }
+ }
+
+ private int getAliveUsersExcludingGuestsCountLocked() {
int aliveUserCount = 0;
final int totalUserCount = mUsers.size();
// Skip over users being removed
@@ -547,7 +570,7 @@
aliveUserCount++;
}
}
- return aliveUserCount >= UserManager.getMaxSupportedUsers();
+ return aliveUserCount;
}
/**
@@ -618,7 +641,7 @@
try {
fis = userListFile.openRead();
XmlPullParser parser = Xml.newPullParser();
- parser.setInput(fis, null);
+ parser.setInput(fis, StandardCharsets.UTF_8.name());
int type;
while ((type = parser.next()) != XmlPullParser.START_TAG
&& type != XmlPullParser.END_DOCUMENT) {
@@ -764,7 +787,7 @@
// XmlSerializer serializer = XmlUtils.serializerInstance();
final XmlSerializer serializer = new FastXmlSerializer();
- serializer.setOutput(bos, "utf-8");
+ serializer.setOutput(bos, StandardCharsets.UTF_8.name());
serializer.startDocument(null, true);
serializer.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true);
@@ -838,7 +861,7 @@
// XmlSerializer serializer = XmlUtils.serializerInstance();
final XmlSerializer serializer = new FastXmlSerializer();
- serializer.setOutput(bos, "utf-8");
+ serializer.setOutput(bos, StandardCharsets.UTF_8.name());
serializer.startDocument(null, true);
serializer.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true);
@@ -922,7 +945,7 @@
new AtomicFile(new File(mUsersDir, Integer.toString(id) + XML_SUFFIX));
fis = userFile.openRead();
XmlPullParser parser = Xml.newPullParser();
- parser.setInput(fis, null);
+ parser.setInput(fis, StandardCharsets.UTF_8.name());
int type;
while ((type = parser.next()) != XmlPullParser.START_TAG
&& type != XmlPullParser.END_DOCUMENT) {
@@ -1152,7 +1175,11 @@
Log.w(LOG_TAG, "Cannot add user. DISALLOW_ADD_USER is enabled.");
return null;
}
+ if (ActivityManager.isLowRamDeviceStatic()) {
+ return null;
+ }
final boolean isGuest = (flags & UserInfo.FLAG_GUEST) != 0;
+ final boolean isManagedProfile = (flags & UserInfo.FLAG_MANAGED_PROFILE) != 0;
final long ident = Binder.clearCallingIdentity();
UserInfo userInfo = null;
try {
@@ -1163,21 +1190,18 @@
parent = getUserInfoLocked(parentId);
if (parent == null) return null;
}
- // If we're not adding a guest user and the limit has been reached,
- // cannot add a user.
- if (!isGuest && isUserLimitReachedLocked()) {
+ if (isManagedProfile && !canAddMoreManagedProfiles()) {
+ return null;
+ }
+ if (!isGuest && !isManagedProfile && isUserLimitReachedLocked()) {
+ // If we're not adding a guest user or a managed profile and the limit has
+ // been reached, cannot add a user.
return null;
}
// If we're adding a guest and there already exists one, bail.
if (isGuest && findCurrentGuestUserLocked() != null) {
return null;
}
- // Limit number of managed profiles that can be created
- if ((flags & UserInfo.FLAG_MANAGED_PROFILE) != 0
- && numberOfUsersOfTypeLocked(UserInfo.FLAG_MANAGED_PROFILE, true)
- >= MAX_MANAGED_PROFILES) {
- return null;
- }
int userId = getNextAvailableIdLocked();
userInfo = new UserInfo(userId, name, null, flags);
File userPath = new File(mBaseUserPath, Integer.toString(userId));
@@ -1664,7 +1688,7 @@
packageToRestrictionsFileName(packageName)));
fis = restrictionsFile.openRead();
XmlPullParser parser = Xml.newPullParser();
- parser.setInput(fis, null);
+ parser.setInput(fis, StandardCharsets.UTF_8.name());
int type;
while ((type = parser.next()) != XmlPullParser.START_TAG
&& type != XmlPullParser.END_DOCUMENT) {
@@ -1732,7 +1756,7 @@
// XmlSerializer serializer = XmlUtils.serializerInstance();
final XmlSerializer serializer = new FastXmlSerializer();
- serializer.setOutput(bos, "utf-8");
+ serializer.setOutput(bos, StandardCharsets.UTF_8.name());
serializer.startDocument(null, true);
serializer.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true);
diff --git a/services/core/java/com/android/server/power/PowerManagerService.java b/services/core/java/com/android/server/power/PowerManagerService.java
index 9786b42..01e36e1 100644
--- a/services/core/java/com/android/server/power/PowerManagerService.java
+++ b/services/core/java/com/android/server/power/PowerManagerService.java
@@ -2180,7 +2180,7 @@
public void run() {
synchronized (this) {
if (shutdown) {
- ShutdownThread.shutdown(mContext, confirm);
+ ShutdownThread.shutdown(mContext, reason, confirm);
} else {
ShutdownThread.reboot(mContext, reason, confirm);
}
@@ -2349,16 +2349,20 @@
/**
* Low-level function turn the device off immediately, without trying
* to be clean. Most people should use {@link ShutdownThread} for a clean shutdown.
+ *
+ * @param reason code to pass to android_reboot() (e.g. "userrequested"), or null.
*/
- public static void lowLevelShutdown() {
- SystemProperties.set("sys.powerctl", "shutdown");
+ public static void lowLevelShutdown(String reason) {
+ if (reason == null) {
+ reason = "";
+ }
+ SystemProperties.set("sys.powerctl", "shutdown," + reason);
}
/**
* Low-level function to reboot the device. On success, this
* function doesn't return. If more than 20 seconds passes from
- * the time a reboot is requested (120 seconds for reboot to
- * recovery), this method returns.
+ * the time a reboot is requested, this method returns.
*
* @param reason code to pass to the kernel (e.g. "recovery"), or null.
*/
@@ -2366,27 +2370,21 @@
if (reason == null) {
reason = "";
}
- long duration;
if (reason.equals(PowerManager.REBOOT_RECOVERY)) {
// If we are rebooting to go into recovery, instead of
// setting sys.powerctl directly we'll start the
// pre-recovery service which will do some preparation for
// recovery and then reboot for us.
- //
- // This preparation can take more than 20 seconds if
- // there's a very large update package, so lengthen the
- // timeout. We have seen 750MB packages take 3-4 minutes
SystemProperties.set("ctl.start", "pre-recovery");
- duration = 300 * 1000L;
} else {
SystemProperties.set("sys.powerctl", "reboot," + reason);
- duration = 20 * 1000L;
}
try {
- Thread.sleep(duration);
+ Thread.sleep(20 * 1000L);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
+ Slog.wtf(TAG, "Unexpected return from lowLevelReboot!");
}
@Override // Watchdog.Monitor implementation
@@ -3063,12 +3061,12 @@
* @param wait If true, this call waits for the shutdown to complete and does not return.
*/
@Override // Binder call
- public void shutdown(boolean confirm, boolean wait) {
+ public void shutdown(boolean confirm, String reason, boolean wait) {
mContext.enforceCallingOrSelfPermission(android.Manifest.permission.REBOOT, null);
final long ident = Binder.clearCallingIdentity();
try {
- shutdownOrRebootInternal(true, confirm, null, wait);
+ shutdownOrRebootInternal(true, confirm, reason, wait);
} finally {
Binder.restoreCallingIdentity(ident);
}
diff --git a/services/core/java/com/android/server/power/ShutdownThread.java b/services/core/java/com/android/server/power/ShutdownThread.java
index da11387..8f041a5 100644
--- a/services/core/java/com/android/server/power/ShutdownThread.java
+++ b/services/core/java/com/android/server/power/ShutdownThread.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-
+
package com.android.server.power;
import android.app.ActivityManagerNative;
@@ -43,6 +43,8 @@
import android.os.SystemVibrator;
import android.os.storage.IMountService;
import android.os.storage.IMountShutdownObserver;
+import android.system.ErrnoException;
+import android.system.Os;
import com.android.internal.telephony.ITelephony;
import com.android.server.pm.PackageManagerService;
@@ -50,6 +52,11 @@
import android.util.Log;
import android.view.WindowManager;
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+
public final class ShutdownThread extends Thread {
// constants
private static final String TAG = "ShutdownThread";
@@ -58,17 +65,29 @@
private static final int MAX_BROADCAST_TIME = 10*1000;
private static final int MAX_SHUTDOWN_WAIT_TIME = 20*1000;
private static final int MAX_RADIO_WAIT_TIME = 12*1000;
+ private static final int MAX_UNCRYPT_WAIT_TIME = 15*60*1000;
+ // constants for progress bar. the values are roughly estimated based on timeout.
+ private static final int BROADCAST_STOP_PERCENT = 2;
+ private static final int ACTIVITY_MANAGER_STOP_PERCENT = 4;
+ private static final int PACKAGE_MANAGER_STOP_PERCENT = 6;
+ private static final int RADIO_STOP_PERCENT = 18;
+ private static final int MOUNT_SERVICE_STOP_PERCENT = 20;
// length of vibration before shutting down
private static final int SHUTDOWN_VIBRATE_MS = 500;
-
+
// state tracking
private static Object sIsStartedGuard = new Object();
private static boolean sIsStarted = false;
-
+
+ // uncrypt status files
+ private static final String UNCRYPT_STATUS_FILE = "/cache/recovery/uncrypt_status";
+ private static final String UNCRYPT_PACKAGE_FILE = "/cache/recovery/uncrypt_file";
+
private static boolean mReboot;
private static boolean mRebootSafeMode;
- private static String mRebootReason;
+ private static boolean mRebootUpdate;
+ private static String mReason;
// Provides shutdown assurance in case the system_server is killed
public static final String SHUTDOWN_ACTION_PROPERTY = "sys.shutdown.requested";
@@ -93,21 +112,24 @@
private Handler mHandler;
private static AlertDialog sConfirmDialog;
-
+ private ProgressDialog mProgressDialog;
+
private ShutdownThread() {
}
-
+
/**
* Request a clean shutdown, waiting for subsystems to clean up their
* state etc. Must be called from a Looper thread in which its UI
* is shown.
*
* @param context Context used to display the shutdown progress dialog.
+ * @param reason code to pass to android_reboot() (e.g. "userrequested"), or null.
* @param confirm true if user confirmation is needed before shutting down.
*/
- public static void shutdown(final Context context, boolean confirm) {
+ public static void shutdown(final Context context, String reason, boolean confirm) {
mReboot = false;
mRebootSafeMode = false;
+ mReason = reason;
shutdownInner(context, confirm);
}
@@ -190,7 +212,8 @@
public static void reboot(final Context context, String reason, boolean confirm) {
mReboot = true;
mRebootSafeMode = false;
- mRebootReason = reason;
+ mRebootUpdate = false;
+ mReason = reason;
shutdownInner(context, confirm);
}
@@ -204,7 +227,8 @@
public static void rebootSafeMode(final Context context, boolean confirm) {
mReboot = true;
mRebootSafeMode = true;
- mRebootReason = null;
+ mRebootUpdate = false;
+ mReason = null;
shutdownInner(context, confirm);
}
@@ -217,17 +241,50 @@
sIsStarted = true;
}
- // throw up an indeterminate system dialog to indicate radio is
- // shutting down.
+ // Throw up a system dialog to indicate the device is rebooting / shutting down.
ProgressDialog pd = new ProgressDialog(context);
- pd.setTitle(context.getText(com.android.internal.R.string.power_off));
- pd.setMessage(context.getText(com.android.internal.R.string.shutdown_progress));
- pd.setIndeterminate(true);
+
+ // Path 1: Reboot to recovery and install the update
+ // Condition: mReason == REBOOT_RECOVERY and mRebootUpdate == True
+ // (mRebootUpdate is set by checking if /cache/recovery/uncrypt_file exists.)
+ // UI: progress bar
+ //
+ // Path 2: Reboot to recovery for factory reset
+ // Condition: mReason == REBOOT_RECOVERY
+ // UI: spinning circle only (no progress bar)
+ //
+ // Path 3: Regular reboot / shutdown
+ // Condition: Otherwise
+ // UI: spinning circle only (no progress bar)
+ if (PowerManager.REBOOT_RECOVERY.equals(mReason)) {
+ mRebootUpdate = new File(UNCRYPT_PACKAGE_FILE).exists();
+ if (mRebootUpdate) {
+ pd.setTitle(context.getText(com.android.internal.R.string.reboot_to_update_title));
+ pd.setMessage(context.getText(
+ com.android.internal.R.string.reboot_to_update_prepare));
+ pd.setMax(100);
+ pd.setProgressNumberFormat(null);
+ pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
+ pd.setProgress(0);
+ pd.setIndeterminate(false);
+ } else {
+ // Factory reset path. Set the dialog message accordingly.
+ pd.setTitle(context.getText(com.android.internal.R.string.reboot_to_reset_title));
+ pd.setMessage(context.getText(
+ com.android.internal.R.string.reboot_to_reset_message));
+ pd.setIndeterminate(true);
+ }
+ } else {
+ pd.setTitle(context.getText(com.android.internal.R.string.power_off));
+ pd.setMessage(context.getText(com.android.internal.R.string.shutdown_progress));
+ pd.setIndeterminate(true);
+ }
pd.setCancelable(false);
pd.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);
pd.show();
+ sInstance.mProgressDialog = pd;
sInstance.mContext = context;
sInstance.mPowerManager = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
@@ -288,7 +345,7 @@
* the beginning of the SystemServer startup.
*/
{
- String reason = (mReboot ? "1" : "0") + (mRebootReason != null ? mRebootReason : "");
+ String reason = (mReboot ? "1" : "0") + (mReason != null ? mReason : "");
SystemProperties.set(SHUTDOWN_ACTION_PROPERTY, reason);
}
@@ -301,14 +358,14 @@
}
Log.i(TAG, "Sending shutdown broadcast...");
-
+
// First send the high-level shut down broadcast.
mActionDone = false;
Intent intent = new Intent(Intent.ACTION_SHUTDOWN);
intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
mContext.sendOrderedBroadcastAsUser(intent,
UserHandle.ALL, null, br, mHandler, 0, null, null);
-
+
final long endTime = SystemClock.elapsedRealtime() + MAX_BROADCAST_TIME;
synchronized (mActionDoneSync) {
while (!mActionDone) {
@@ -316,16 +373,23 @@
if (delay <= 0) {
Log.w(TAG, "Shutdown broadcast timed out");
break;
+ } else if (mRebootUpdate) {
+ int status = (int)((MAX_BROADCAST_TIME - delay) * 1.0 *
+ BROADCAST_STOP_PERCENT / MAX_BROADCAST_TIME);
+ sInstance.setRebootProgress(status, null);
}
try {
- mActionDoneSync.wait(delay);
+ mActionDoneSync.wait(Math.min(delay, PHONE_STATE_POLL_SLEEP_MSEC));
} catch (InterruptedException e) {
}
}
}
-
+ if (mRebootUpdate) {
+ sInstance.setRebootProgress(BROADCAST_STOP_PERCENT, null);
+ }
+
Log.i(TAG, "Shutting down activity manager...");
-
+
final IActivityManager am =
ActivityManagerNative.asInterface(ServiceManager.checkService("activity"));
if (am != null) {
@@ -334,6 +398,9 @@
} catch (RemoteException e) {
}
}
+ if (mRebootUpdate) {
+ sInstance.setRebootProgress(ACTIVITY_MANAGER_STOP_PERCENT, null);
+ }
Log.i(TAG, "Shutting down package manager...");
@@ -342,9 +409,15 @@
if (pm != null) {
pm.shutdown();
}
+ if (mRebootUpdate) {
+ sInstance.setRebootProgress(PACKAGE_MANAGER_STOP_PERCENT, null);
+ }
// Shutdown radios.
shutdownRadios(MAX_RADIO_WAIT_TIME);
+ if (mRebootUpdate) {
+ sInstance.setRebootProgress(RADIO_STOP_PERCENT, null);
+ }
// Shutdown MountService to ensure media is in a safe state
IMountShutdownObserver observer = new IMountShutdownObserver.Stub() {
@@ -376,18 +449,44 @@
if (delay <= 0) {
Log.w(TAG, "Shutdown wait timed out");
break;
+ } else if (mRebootUpdate) {
+ int status = (int)((MAX_SHUTDOWN_WAIT_TIME - delay) * 1.0 *
+ (MOUNT_SERVICE_STOP_PERCENT - RADIO_STOP_PERCENT) /
+ MAX_SHUTDOWN_WAIT_TIME);
+ status += RADIO_STOP_PERCENT;
+ sInstance.setRebootProgress(status, null);
}
try {
- mActionDoneSync.wait(delay);
+ mActionDoneSync.wait(Math.min(delay, PHONE_STATE_POLL_SLEEP_MSEC));
} catch (InterruptedException e) {
}
}
}
+ if (mRebootUpdate) {
+ sInstance.setRebootProgress(MOUNT_SERVICE_STOP_PERCENT, null);
- rebootOrShutdown(mReboot, mRebootReason);
+ // If it's to reboot to install update, invoke uncrypt via init service.
+ uncrypt();
+ }
+
+ rebootOrShutdown(mContext, mReboot, mReason);
}
- private void shutdownRadios(int timeout) {
+ private void setRebootProgress(final int progress, final CharSequence message) {
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ if (mProgressDialog != null) {
+ mProgressDialog.setProgress(progress);
+ if (message != null) {
+ mProgressDialog.setMessage(message);
+ }
+ }
+ }
+ });
+ }
+
+ private void shutdownRadios(final int timeout) {
// If a radio is wedged, disabling it may hang so we do this work in another thread,
// just in case.
final long endTime = SystemClock.elapsedRealtime() + timeout;
@@ -442,7 +541,15 @@
Log.i(TAG, "Waiting for NFC, Bluetooth and Radio...");
- while (SystemClock.elapsedRealtime() < endTime) {
+ long delay = endTime - SystemClock.elapsedRealtime();
+ while (delay > 0) {
+ if (mRebootUpdate) {
+ int status = (int)((timeout - delay) * 1.0 *
+ (RADIO_STOP_PERCENT - PACKAGE_MANAGER_STOP_PERCENT) / timeout);
+ status += PACKAGE_MANAGER_STOP_PERCENT;
+ sInstance.setRebootProgress(status, null);
+ }
+
if (!bluetoothOff) {
try {
bluetoothOff = !bluetooth.isEnabled();
@@ -483,6 +590,8 @@
break;
}
SystemClock.sleep(PHONE_STATE_POLL_SLEEP_MSEC);
+
+ delay = endTime - SystemClock.elapsedRealtime();
}
}
};
@@ -501,17 +610,19 @@
* Do not call this directly. Use {@link #reboot(Context, String, boolean)}
* or {@link #shutdown(Context, boolean)} instead.
*
+ * @param context Context used to vibrate or null without vibration
* @param reboot true to reboot or false to shutdown
- * @param reason reason for reboot
+ * @param reason reason for reboot/shutdown
*/
- public static void rebootOrShutdown(boolean reboot, String reason) {
+ public static void rebootOrShutdown(final Context context, boolean reboot, String reason) {
if (reboot) {
Log.i(TAG, "Rebooting, reason: " + reason);
PowerManagerService.lowLevelReboot(reason);
Log.e(TAG, "Reboot failed, will attempt shutdown instead");
- } else if (SHUTDOWN_VIBRATE_MS > 0) {
+ reason = null;
+ } else if (SHUTDOWN_VIBRATE_MS > 0 && context != null) {
// vibrate before shutting down
- Vibrator vibrator = new SystemVibrator();
+ Vibrator vibrator = new SystemVibrator(context);
try {
vibrator.vibrate(SHUTDOWN_VIBRATE_MS, VIBRATION_ATTRIBUTES);
} catch (Exception e) {
@@ -528,6 +639,84 @@
// Shutdown power
Log.i(TAG, "Performing low-level shutdown...");
- PowerManagerService.lowLevelShutdown();
+ PowerManagerService.lowLevelShutdown(reason);
+ }
+
+ private void uncrypt() {
+ Log.i(TAG, "Calling uncrypt and monitoring the progress...");
+
+ final boolean[] done = new boolean[1];
+ done[0] = false;
+ Thread t = new Thread() {
+ @Override
+ public void run() {
+ // Create the status pipe file to communicate with /system/bin/uncrypt.
+ new File(UNCRYPT_STATUS_FILE).delete();
+ try {
+ Os.mkfifo(UNCRYPT_STATUS_FILE, 0600);
+ } catch (ErrnoException e) {
+ Log.w(TAG, "ErrnoException when creating named pipe \"" + UNCRYPT_STATUS_FILE +
+ "\": " + e.getMessage());
+ }
+
+ SystemProperties.set("ctl.start", "uncrypt");
+
+ // Read the status from the pipe.
+ try (BufferedReader reader = new BufferedReader(
+ new FileReader(UNCRYPT_STATUS_FILE))) {
+
+ int lastStatus = Integer.MIN_VALUE;
+ while (true) {
+ String str = reader.readLine();
+ try {
+ int status = Integer.parseInt(str);
+
+ // Avoid flooding the log with the same message.
+ if (status == lastStatus && lastStatus != Integer.MIN_VALUE) {
+ continue;
+ }
+ lastStatus = status;
+
+ if (status >= 0 && status < 100) {
+ // Update status
+ Log.d(TAG, "uncrypt read status: " + status);
+ // Scale down to [MOUNT_SERVICE_STOP_PERCENT, 100).
+ status = (int)(status * (100.0 - MOUNT_SERVICE_STOP_PERCENT) / 100);
+ status += MOUNT_SERVICE_STOP_PERCENT;
+ CharSequence msg = mContext.getText(
+ com.android.internal.R.string.reboot_to_update_package);
+ sInstance.setRebootProgress(status, msg);
+ } else if (status == 100) {
+ Log.d(TAG, "uncrypt successfully finished.");
+ CharSequence msg = mContext.getText(
+ com.android.internal.R.string.reboot_to_update_reboot);
+ sInstance.setRebootProgress(status, msg);
+ break;
+ } else {
+ // Error in /system/bin/uncrypt. Or it's rebooting to recovery
+ // to perform other operations (e.g. factory reset).
+ Log.d(TAG, "uncrypt failed with status: " + status);
+ break;
+ }
+ } catch (NumberFormatException unused) {
+ Log.d(TAG, "uncrypt invalid status received: " + str);
+ break;
+ }
+ }
+ } catch (IOException unused) {
+ Log.w(TAG, "IOException when reading \"" + UNCRYPT_STATUS_FILE + "\".");
+ }
+ done[0] = true;
+ }
+ };
+ t.start();
+
+ try {
+ t.join(MAX_UNCRYPT_WAIT_TIME);
+ } catch (InterruptedException unused) {
+ }
+ if (!done[0]) {
+ Log.w(TAG, "Timed out waiting for uncrypt.");
+ }
}
}
diff --git a/services/core/java/com/android/server/tv/PersistentDataStore.java b/services/core/java/com/android/server/tv/PersistentDataStore.java
index fcfaaea..f9b5b9a 100644
--- a/services/core/java/com/android/server/tv/PersistentDataStore.java
+++ b/services/core/java/com/android/server/tv/PersistentDataStore.java
@@ -44,6 +44,7 @@
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
+import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@@ -167,7 +168,7 @@
XmlPullParser parser;
try {
parser = Xml.newPullParser();
- parser.setInput(new BufferedInputStream(is), null);
+ parser.setInput(new BufferedInputStream(is), StandardCharsets.UTF_8.name());
loadFromXml(parser);
} catch (IOException | XmlPullParserException ex) {
Slog.w(TAG, "Failed to load tv input manager persistent store data.", ex);
@@ -200,7 +201,7 @@
boolean success = false;
try {
XmlSerializer serializer = new FastXmlSerializer();
- serializer.setOutput(new BufferedOutputStream(os), "utf-8");
+ serializer.setOutput(new BufferedOutputStream(os), StandardCharsets.UTF_8.name());
saveToXml(serializer);
serializer.flush();
success = true;
diff --git a/services/core/java/com/android/server/updates/SELinuxPolicyInstallReceiver.java b/services/core/java/com/android/server/updates/SELinuxPolicyInstallReceiver.java
index 04774d4..1ac2622 100644
--- a/services/core/java/com/android/server/updates/SELinuxPolicyInstallReceiver.java
+++ b/services/core/java/com/android/server/updates/SELinuxPolicyInstallReceiver.java
@@ -37,7 +37,7 @@
private static final String TAG = "SELinuxPolicyInstallReceiver";
private static final String sepolicyPath = "sepolicy";
- private static final String fileContextsPath = "file_contexts";
+ private static final String fileContextsPath = "file_contexts.bin";
private static final String propertyContextsPath = "property_contexts";
private static final String seappContextsPath = "seapp_contexts";
private static final String versionPath = "selinux_version";
diff --git a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java
index bd2e923..9410bef 100644
--- a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java
+++ b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java
@@ -78,6 +78,7 @@
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.PrintWriter;
+import java.nio.charset.StandardCharsets;
import java.util.List;
import org.xmlpull.v1.XmlPullParser;
@@ -1108,7 +1109,7 @@
try {
stream = new FileOutputStream(journal.chooseForWrite(), false);
XmlSerializer out = new FastXmlSerializer();
- out.setOutput(stream, "utf-8");
+ out.setOutput(stream, StandardCharsets.UTF_8.name());
out.startDocument(null, true);
out.startTag(null, "wp");
@@ -1189,7 +1190,7 @@
try {
stream = new FileInputStream(file);
XmlPullParser parser = Xml.newPullParser();
- parser.setInput(stream, null);
+ parser.setInput(stream, StandardCharsets.UTF_8.name());
int type;
do {
diff --git a/services/core/java/com/android/server/wm/DisplaySettings.java b/services/core/java/com/android/server/wm/DisplaySettings.java
index ba995f2..01f878c 100644
--- a/services/core/java/com/android/server/wm/DisplaySettings.java
+++ b/services/core/java/com/android/server/wm/DisplaySettings.java
@@ -32,6 +32,7 @@
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
+import java.nio.charset.StandardCharsets;
import java.util.HashMap;
/**
@@ -108,7 +109,7 @@
boolean success = false;
try {
XmlPullParser parser = Xml.newPullParser();
- parser.setInput(stream, null);
+ parser.setInput(stream, StandardCharsets.UTF_8.name());
int type;
while ((type = parser.next()) != XmlPullParser.START_TAG
&& type != XmlPullParser.END_DOCUMENT) {
@@ -193,7 +194,7 @@
try {
XmlSerializer out = new FastXmlSerializer();
- out.setOutput(stream, "utf-8");
+ out.setOutput(stream, StandardCharsets.UTF_8.name());
out.startDocument(null, true);
out.startTag(null, "display-settings");
diff --git a/services/core/java/com/android/server/wm/InputMonitor.java b/services/core/java/com/android/server/wm/InputMonitor.java
index 27ac32a..ad50e05a 100644
--- a/services/core/java/com/android/server/wm/InputMonitor.java
+++ b/services/core/java/com/android/server/wm/InputMonitor.java
@@ -148,7 +148,7 @@
if (timeout >= 0) {
// The activity manager declined to abort dispatching.
// Wait a bit longer and timeout again later.
- return timeout;
+ return timeout * 1000000L; // nanoseconds
}
} catch (RemoteException ex) {
}
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index 8998d39..85b2a41 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -2206,6 +2206,16 @@
} else if (changingTarget.mWallpaperDisplayOffsetY != Integer.MIN_VALUE) {
mLastWallpaperDisplayOffsetY = changingTarget.mWallpaperDisplayOffsetY;
}
+ if (target.mWallpaperXStep >= 0) {
+ mLastWallpaperXStep = target.mWallpaperXStep;
+ } else if (changingTarget.mWallpaperXStep >= 0) {
+ mLastWallpaperXStep = changingTarget.mWallpaperXStep;
+ }
+ if (target.mWallpaperYStep >= 0) {
+ mLastWallpaperYStep = target.mWallpaperYStep;
+ } else if (changingTarget.mWallpaperYStep >= 0) {
+ mLastWallpaperYStep = changingTarget.mWallpaperYStep;
+ }
}
int curTokenIndex = mWallpaperTokens.size();
@@ -5669,7 +5679,7 @@
// Called by window manager policy. Not exposed externally.
@Override
public void shutdown(boolean confirm) {
- ShutdownThread.shutdown(mContext, confirm);
+ ShutdownThread.shutdown(mContext, PowerManager.SHUTDOWN_USER_REQUESTED, confirm);
}
// Called by window manager policy. Not exposed externally.
@@ -9907,6 +9917,7 @@
winAnimator.setAnimation(a);
winAnimator.mAnimDw = w.mLastFrame.left - w.mFrame.left;
winAnimator.mAnimDh = w.mLastFrame.top - w.mFrame.top;
+ winAnimator.mAnimateMove = true;
//TODO (multidisplay): Accessibility supported only for the default display.
if (mAccessibilityController != null
diff --git a/services/core/java/com/android/server/wm/WindowStateAnimator.java b/services/core/java/com/android/server/wm/WindowStateAnimator.java
index 4cdfc41..91e422f 100644
--- a/services/core/java/com/android/server/wm/WindowStateAnimator.java
+++ b/services/core/java/com/android/server/wm/WindowStateAnimator.java
@@ -131,6 +131,7 @@
// used.
int mAnimDw;
int mAnimDh;
+ boolean mAnimateMove = false;
float mDsDx=1, mDtDx=0, mDsDy=0, mDtDy=1;
float mLastDsDx=1, mLastDtDx=0, mLastDsDy=0, mLastDtDy=1;
@@ -304,9 +305,15 @@
" wh=" + mWin.mFrame.height() +
" dw=" + mAnimDw + " dh=" + mAnimDh +
" scale=" + mService.getWindowAnimationScaleLocked());
- mAnimation.initialize(mWin.mFrame.width(), mWin.mFrame.height(),
- mAnimDw, mAnimDh);
final DisplayInfo displayInfo = displayContent.getDisplayInfo();
+ if (mAnimateMove) {
+ mAnimateMove = false;
+ mAnimation.initialize(mWin.mFrame.width(), mWin.mFrame.height(),
+ mAnimDw, mAnimDh);
+ } else {
+ mAnimation.initialize(mWin.mFrame.width(), mWin.mFrame.height(),
+ displayInfo.appWidth, displayInfo.appHeight);
+ }
mAnimDw = displayInfo.appWidth;
mAnimDh = displayInfo.appHeight;
mAnimation.setStartTime(mAnimationStartTime != -1
@@ -1245,6 +1252,10 @@
mDtDx = 0;
mDsDy = 0;
mDtDy = mWin.mGlobalScale;
+ if (appTransformation == null) {
+ mHasClipRect = false;
+ mClipRect.setEmpty();
+ }
}
}
@@ -1336,7 +1347,10 @@
clipRect.bottom += attrs.surfaceInsets.bottom;
// If we have an animated clip rect, intersect it with the clip rect.
- if (mHasClipRect) {
+ // However, the clip rect animation effect should be applied on app windows that inset
+ // decor only. If applying on non-inset decor one, the top region of this window will
+ // be clipped on the end of animation, e.g. dialog activities.
+ if (mHasClipRect && (w.mAttrs.flags & LayoutParams.FLAG_LAYOUT_INSET_DECOR) != 0) {
// NOTE: We are adding a temporary workaround due to the status bar
// not always reporting the correct system decor rect. In such
// cases, we take into account the specified content insets as well.
@@ -1403,10 +1417,21 @@
// Adjust for surface insets.
final LayoutParams attrs = w.getAttrs();
- width += attrs.surfaceInsets.left + attrs.surfaceInsets.right;
- height += attrs.surfaceInsets.top + attrs.surfaceInsets.bottom;
- left -= attrs.surfaceInsets.left;
- top -= attrs.surfaceInsets.top;
+ final int displayId = w.getDisplayId();
+ float scale = 1.0f;
+ // Magnification is supported only for the default display.
+ if (mService.mAccessibilityController != null && displayId == Display.DEFAULT_DISPLAY) {
+ MagnificationSpec spec =
+ mService.mAccessibilityController.getMagnificationSpecForWindowLocked(w);
+ if (spec != null && !spec.isNop()) {
+ scale = spec.scale;
+ }
+ }
+
+ width += scale * (attrs.surfaceInsets.left + attrs.surfaceInsets.right);
+ height += scale * (attrs.surfaceInsets.top + attrs.surfaceInsets.bottom);
+ left -= scale * attrs.surfaceInsets.left;
+ top -= scale * attrs.surfaceInsets.top;
final boolean surfaceMoved = mSurfaceX != left || mSurfaceY != top;
if (surfaceMoved) {
diff --git a/services/core/jni/com_android_server_PersistentDataBlockService.cpp b/services/core/jni/com_android_server_PersistentDataBlockService.cpp
index e842eeb..4ccfa56 100644
--- a/services/core/jni/com_android_server_PersistentDataBlockService.cpp
+++ b/services/core/jni/com_android_server_PersistentDataBlockService.cpp
@@ -17,6 +17,7 @@
#include <android_runtime/AndroidRuntime.h>
#include <JNIHelp.h>
#include <jni.h>
+#include <ScopedUtfChars.h>
#include <utils/misc.h>
#include <sys/ioctl.h>
@@ -77,8 +78,8 @@
static jlong com_android_server_PersistentDataBlockService_getBlockDeviceSize(JNIEnv *env, jclass, jstring jpath)
{
- const char *path = env->GetStringUTFChars(jpath, 0);
- int fd = open(path, O_RDONLY);
+ ScopedUtfChars path(env, jpath);
+ int fd = open(path.c_str(), O_RDONLY);
if (fd < 0)
return 0;
@@ -87,8 +88,8 @@
}
static int com_android_server_PersistentDataBlockService_wipe(JNIEnv *env, jclass, jstring jpath) {
- const char *path = env->GetStringUTFChars(jpath, 0);
- int fd = open(path, O_WRONLY);
+ ScopedUtfChars path(env, jpath);
+ int fd = open(path.c_str(), O_WRONLY);
if (fd < 0)
return 0;
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DeviceOwner.java b/services/devicepolicy/java/com/android/server/devicepolicy/DeviceOwner.java
index 9fd0e09..58065e4 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/DeviceOwner.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/DeviceOwner.java
@@ -39,6 +39,7 @@
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
+import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Set;
@@ -211,7 +212,7 @@
try {
InputStream input = openRead();
XmlPullParser parser = Xml.newPullParser();
- parser.setInput(input, null);
+ parser.setInput(input, StandardCharsets.UTF_8.name());
int type;
while ((type=parser.next()) != XmlPullParser.END_DOCUMENT) {
if (type!=XmlPullParser.START_TAG) {
@@ -269,7 +270,7 @@
try {
OutputStream outputStream = startWrite();
XmlSerializer out = new FastXmlSerializer();
- out.setOutput(outputStream, "utf-8");
+ out.setOutput(outputStream, StandardCharsets.UTF_8.name());
out.startDocument(null, true);
// Write device owner tag
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
index 40e2056..b1d1788 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
@@ -121,6 +121,7 @@
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
+import java.nio.charset.StandardCharsets;
import java.security.cert.CertificateException;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
@@ -1305,7 +1306,7 @@
try {
stream = new FileOutputStream(journal.chooseForWrite(), false);
XmlSerializer out = new FastXmlSerializer();
- out.setOutput(stream, "utf-8");
+ out.setOutput(stream, StandardCharsets.UTF_8.name());
out.startDocument(null, true);
out.startTag(null, "policies");
@@ -1403,7 +1404,7 @@
try {
stream = new FileInputStream(file);
XmlPullParser parser = Xml.newPullParser();
- parser.setInput(stream, null);
+ parser.setInput(stream, StandardCharsets.UTF_8.name());
int type;
while ((type=parser.next()) != XmlPullParser.END_DOCUMENT
diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java
index 7871147..afc2389 100644
--- a/services/java/com/android/server/SystemServer.java
+++ b/services/java/com/android/server/SystemServer.java
@@ -288,7 +288,7 @@
reason = null;
}
- ShutdownThread.rebootOrShutdown(reboot, reason);
+ ShutdownThread.rebootOrShutdown(null, reboot, reason);
}
}
@@ -496,7 +496,7 @@
// TODO: Use a more reliable check to see if this product should
// support Bluetooth - see bug 988521
if (isEmulator) {
- Slog.i(TAG, "No Bluetooh Service (emulator)");
+ Slog.i(TAG, "No Bluetooth Service (emulator)");
} else if (mFactoryTestMode == FactoryTest.FACTORY_TEST_LOW_LEVEL) {
Slog.i(TAG, "No Bluetooth Service (factory test)");
} else if (!context.getPackageManager().hasSystemFeature
diff --git a/services/usb/java/com/android/server/usb/UsbHostManager.java b/services/usb/java/com/android/server/usb/UsbHostManager.java
index e769bda..4451d7d 100644
--- a/services/usb/java/com/android/server/usb/UsbHostManager.java
+++ b/services/usb/java/com/android/server/usb/UsbHostManager.java
@@ -230,6 +230,8 @@
mNewConfigurations = null;
mNewInterfaces = null;
mNewEndpoints = null;
+ mNewConfiguration = null;
+ mNewInterface = null;
}
}
diff --git a/services/usb/java/com/android/server/usb/UsbSettingsManager.java b/services/usb/java/com/android/server/usb/UsbSettingsManager.java
index 37b5c51..0c67d96 100644
--- a/services/usb/java/com/android/server/usb/UsbSettingsManager.java
+++ b/services/usb/java/com/android/server/usb/UsbSettingsManager.java
@@ -58,6 +58,7 @@
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
+import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -559,7 +560,7 @@
try {
fis = new FileInputStream(sSingleUserSettingsFile);
XmlPullParser parser = Xml.newPullParser();
- parser.setInput(fis, null);
+ parser.setInput(fis, StandardCharsets.UTF_8.name());
XmlUtils.nextElement(parser);
while (parser.getEventType() != XmlPullParser.END_DOCUMENT) {
@@ -595,7 +596,7 @@
try {
stream = mSettingsFile.openRead();
XmlPullParser parser = Xml.newPullParser();
- parser.setInput(stream, null);
+ parser.setInput(stream, StandardCharsets.UTF_8.name());
XmlUtils.nextElement(parser);
while (parser.getEventType() != XmlPullParser.END_DOCUMENT) {
@@ -624,7 +625,7 @@
fos = mSettingsFile.startWrite();
FastXmlSerializer serializer = new FastXmlSerializer();
- serializer.setOutput(fos, "utf-8");
+ serializer.setOutput(fos, StandardCharsets.UTF_8.name());
serializer.startDocument(null, true);
serializer.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true);
serializer.startTag(null, "settings");
diff --git a/test-runner/src/android/test/InstrumentationCoreTestRunner.java b/test-runner/src/android/test/InstrumentationCoreTestRunner.java
index 036a2275..655a65c 100644
--- a/test-runner/src/android/test/InstrumentationCoreTestRunner.java
+++ b/test-runner/src/android/test/InstrumentationCoreTestRunner.java
@@ -21,12 +21,6 @@
import java.lang.reflect.Modifier;
import java.util.List;
-import com.android.internal.util.Predicate;
-import com.android.internal.util.Predicates;
-
-import dalvik.annotation.BrokenTest;
-import dalvik.annotation.SideEffect;
-
import junit.framework.AssertionFailedError;
import junit.framework.Test;
import junit.framework.TestCase;
@@ -192,19 +186,4 @@
return runner;
}
-
- @Override
- List<Predicate<TestMethod>> getBuilderRequirements() {
- List<Predicate<TestMethod>> builderRequirements =
- super.getBuilderRequirements();
- Predicate<TestMethod> brokenTestPredicate =
- Predicates.not(new HasAnnotation(BrokenTest.class));
- builderRequirements.add(brokenTestPredicate);
- if (!singleTest) {
- Predicate<TestMethod> sideEffectPredicate =
- Predicates.not(new HasAnnotation(SideEffect.class));
- builderRequirements.add(sideEffectPredicate);
- }
- return builderRequirements;
- }
}
diff --git a/tests/CoreTests/run_core_test.sh b/tests/CoreTests/run_core_test.sh
deleted file mode 100755
index ffa31ed..0000000
--- a/tests/CoreTests/run_core_test.sh
+++ /dev/null
@@ -1,6 +0,0 @@
-framework=/system/framework
-bpath=$framework/core.jar:$framework/ext.jar:$framework/framework.jar:$framework/android.test.runner.jar
-adb shell exec dalvikvm -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=3001 \
- -Xbootclasspath:$bpath -cp /data/app/android.core.apk \
- -Djava.io.tmpdir=/sdcard/tmp \
- com.android.internal.util.WithFramework junit.textui.TestRunner $*
diff --git a/tests/CoreTests/run_junit.sh b/tests/CoreTests/run_junit.sh
deleted file mode 100755
index b77794d..0000000
--- a/tests/CoreTests/run_junit.sh
+++ /dev/null
@@ -1,9 +0,0 @@
-# runs unit tests over adb shell using dalvikvm. The value added is setting the classpath for you
-# and pointing to the junit textui test runner.
-#
-# the normal usage might be:
-# (make MoreJavaTests)
-# $ adb sync
-# $ java/tests/run_junit.sh android.util.MyTest
-
-adb shell exec dalvikvm -cp system/app/MoreTests.apk junit.textui.TestRunner $*
diff --git a/tests/RenderScriptTests/FBOTest/src/com/android/fbotest/fbosync.rs b/tests/RenderScriptTests/FBOTest/src/com/android/fbotest/fbosync.rs
index 42b1cf1..0c177ef 100644
--- a/tests/RenderScriptTests/FBOTest/src/com/android/fbotest/fbosync.rs
+++ b/tests/RenderScriptTests/FBOTest/src/com/android/fbotest/fbosync.rs
@@ -116,7 +116,6 @@
rs_allocation allMeshes = rsGetAllocation(gMeshes);
int size = rsAllocationGetDimX(allMeshes);
gLookAt = 0.0f;
- float minX, minY, minZ, maxX, maxY, maxZ;
for (int i = 0; i < size; i++) {
MeshInfo_t *info = (MeshInfo_t*)rsGetElementAt(allMeshes, i);
rsgDrawMesh(info->mMesh);
@@ -124,7 +123,6 @@
}
static void drawDescription() {
- uint width = rsgGetWidth();
uint height = rsgGetHeight();
int left = 0, right = 0, top = 0, bottom = 0;
@@ -196,7 +194,6 @@
uint32_t w = rsAllocationGetDimX(gOffscreen);
uint32_t h = rsAllocationGetDimY(gOffscreen);
- uint32_t numElements = w*h;
rsgAllocationSyncAll(gOffscreen, RS_ALLOCATION_USAGE_GRAPHICS_RENDER_TARGET);
diff --git a/tests/RenderScriptTests/FBOTest/src/com/android/fbotest/fbotest.rs b/tests/RenderScriptTests/FBOTest/src/com/android/fbotest/fbotest.rs
index 05ef3ac..13a3c85 100644
--- a/tests/RenderScriptTests/FBOTest/src/com/android/fbotest/fbotest.rs
+++ b/tests/RenderScriptTests/FBOTest/src/com/android/fbotest/fbotest.rs
@@ -115,7 +115,6 @@
rs_allocation allMeshes = rsGetAllocation(gMeshes);
int size = rsAllocationGetDimX(allMeshes);
gLookAt = 0.0f;
- float minX, minY, minZ, maxX, maxY, maxZ;
for (int i = 0; i < size; i++) {
MeshInfo_t *info = (MeshInfo_t*)rsGetElementAt(allMeshes, i);
rsgDrawMesh(info->mMesh);
@@ -123,7 +122,6 @@
}
static void drawDescription() {
- uint width = rsgGetWidth();
uint height = rsgGetHeight();
int left = 0, right = 0, top = 0, bottom = 0;
diff --git a/tests/RenderScriptTests/ModelViewer/src/com/android/modelviewer/simplemodel.rs b/tests/RenderScriptTests/ModelViewer/src/com/android/modelviewer/simplemodel.rs
index de2a0a7..d3dd5b9 100644
--- a/tests/RenderScriptTests/ModelViewer/src/com/android/modelviewer/simplemodel.rs
+++ b/tests/RenderScriptTests/ModelViewer/src/com/android/modelviewer/simplemodel.rs
@@ -123,7 +123,6 @@
rs_allocation allMeshes = rsGetAllocation(gMeshes);
int size = rsAllocationGetDimX(allMeshes);
gLookAt = 0.0f;
- float minX, minY, minZ, maxX, maxY, maxZ;
for (int i = 0; i < size; i++) {
MeshInfo_t *info = (MeshInfo_t*)rsGetElementAt(allMeshes, i);
rsgDrawMesh(info->mMesh);
@@ -131,7 +130,6 @@
}
void drawDescription() {
- uint width = rsgGetWidth();
uint height = rsgGetHeight();
int left = 0, right = 0, top = 0, bottom = 0;
@@ -163,7 +161,7 @@
rsMatrixMultiply(&matrix, &gPostureMatrix);
rsMatrixRotate(&matrix, gRotateX, 1.0f, 0.0f, 0.0f);
rsMatrixRotate(&matrix, gRotateY, 0.0f, 1.0f, 0.0f);
-
+
rsgProgramVertexLoadModelMatrix(&matrix);
renderAllMeshes();
diff --git a/tests/RenderScriptTests/PerfTest/src/com/android/perftest/rsbench.rs b/tests/RenderScriptTests/PerfTest/src/com/android/perftest/rsbench.rs
index 27e5b11..43cf4e0 100644
--- a/tests/RenderScriptTests/PerfTest/src/com/android/perftest/rsbench.rs
+++ b/tests/RenderScriptTests/PerfTest/src/com/android/perftest/rsbench.rs
@@ -85,7 +85,7 @@
TestData testData;
fillSurfaceParams(&testData);
- rs_allocation null_alloc;
+ rs_allocation null_alloc = {0};
rsForEach(gTestScripts[index].testScript,
gTestScripts[index].testData,
null_alloc,
@@ -125,7 +125,6 @@
static int benchMode = 0;
static bool benchmarkSingleTest = false;
-static int benchSubMode = 0;
static int runningLoops = 0;
static bool sendMsgFlag = false;
@@ -209,7 +208,6 @@
drawOffscreenResult(0, 0, quadW, quadH);
int left = 0, right = 0, top = 0, bottom = 0;
- uint width = rsgGetWidth();
uint height = rsgGetHeight();
rsgFontColor(0.9f, 0.9f, 0.95f, 1.0f);
rsgBindFont(gFontSerif);
diff --git a/tests/RenderScriptTests/PerfTest/src/com/android/perftest/text_test.rs b/tests/RenderScriptTests/PerfTest/src/com/android/perftest/text_test.rs
index 7f10019..0f50828 100644
--- a/tests/RenderScriptTests/PerfTest/src/com/android/perftest/text_test.rs
+++ b/tests/RenderScriptTests/PerfTest/src/com/android/perftest/text_test.rs
@@ -52,7 +52,6 @@
fonts[3] = gFontSerif;
fonts[4] = gFontSans;
- uint width = gRenderSurfaceW;
uint height = gRenderSurfaceH;
int left = 0, right = 0, top = 0, bottom = 0;
rsgMeasureText(sampleText, &left, &right, &top, &bottom);
diff --git a/tests/RenderScriptTests/PerfTest/src/com/android/perftest/ui_test.rs b/tests/RenderScriptTests/PerfTest/src/com/android/perftest/ui_test.rs
index 5089092..e87db39 100644
--- a/tests/RenderScriptTests/PerfTest/src/com/android/perftest/ui_test.rs
+++ b/tests/RenderScriptTests/PerfTest/src/com/android/perftest/ui_test.rs
@@ -143,7 +143,6 @@
float d = fabs(randomGauss()) * gGalaxyRadius * 0.5f + rsRand(64.0f);
float id = d / gGalaxyRadius;
float z = randomGauss() * 0.4f * (1.0f - id);
- float p = -d * ELLIPSE_TWIST;
if (d < gGalaxyRadius * 0.33f) {
part->color.x = (uchar) (220 + id * 35);
@@ -305,7 +304,6 @@
int left = 0, right = 0, top = 0, bottom = 0;
rsgMeasureText(gSampleTextList100[0].item, &left, &right, &top, &bottom);
float textHeight = (float)(top - bottom);
- float textWidth = (float)(right - left);
rs_matrix4x4 matrix;
rsMatrixLoadScale(&matrix, size, size, 1.0);
diff --git a/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/params.rsh b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/params.rsh
index 575794b..00793c0 100644
--- a/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/params.rsh
+++ b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/params.rsh
@@ -19,7 +19,7 @@
#include "scenegraph_objects.rsh"
//#define DEBUG_PARAMS
-static void debugParam(SgShaderParam *p, SgShaderParamData *pData) {
+static inline void debugParam(SgShaderParam *p, SgShaderParamData *pData) {
rsDebug("____________ Param ____________", p);
printName(pData->paramName);
rsDebug("bufferOffset", p->bufferOffset);
@@ -44,8 +44,7 @@
}
}
-
-static void writeFloatData(float *ptr, const float4 *input, uint32_t vecSize) {
+static inline void writeFloatData(float *ptr, const float4 *input, uint32_t vecSize) {
#ifdef DEBUG_PARAMS
rsDebug("Writing value ", *input);
rsDebug("Writing vec size ", vecSize);
@@ -67,7 +66,7 @@
}
}
-static bool processParam(SgShaderParam *p, SgShaderParamData *pData,
+static inline bool processParam(SgShaderParam *p, SgShaderParamData *pData,
uint8_t *constantBuffer,
const SgCamera *currentCam,
SgFragmentShader *shader) {
@@ -155,7 +154,7 @@
return true;
}
-static void processAllParams(rs_allocation shaderConst,
+static inline void processAllParams(rs_allocation shaderConst,
rs_allocation allParams,
const SgCamera *camera) {
if (rsIsObject(shaderConst)) {
@@ -177,7 +176,7 @@
}
}
-static void processTextureParams(SgFragmentShader *shader) {
+static inline void processTextureParams(SgFragmentShader *shader) {
int numParams = 0;
if (rsIsObject(shader->shaderTextureParams)) {
numParams = rsAllocationGetDimX(shader->shaderTextureParams);
diff --git a/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/render.rs b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/render.rs
index 8a73dbd..205b2cb 100644
--- a/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/render.rs
+++ b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/render.rs
@@ -78,7 +78,7 @@
if (rsIsObject(renderState->pr)) {
rsgBindProgramRaster(renderState->pr);
} else {
- rs_program_raster pr;
+ rs_program_raster pr = {0};
rsgBindProgramRaster(pr);
}
diff --git a/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/scenegraph_objects.rsh b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/scenegraph_objects.rsh
index bdca3ab..90ae212 100644
--- a/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/scenegraph_objects.rsh
+++ b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/scenegraph_objects.rsh
@@ -208,7 +208,7 @@
rs_allocation texture;
} SgTexture;
-static void printName(rs_allocation name) {
+static inline void printName(rs_allocation name) {
if (!rsIsObject(name)) {
rsDebug("no name", 0);
return;
@@ -217,7 +217,7 @@
rsDebug((const char*)rsGetElementAt(name, 0), 0);
}
-static void printCameraInfo(const SgCamera *cam) {
+static inline void printCameraInfo(const SgCamera *cam) {
rsDebug("***** Camera information. ptr:", cam);
printName(cam->name);
const SgTransform *camTransform = (const SgTransform *)rsGetElementAt(cam->transformMatrix, 0);
@@ -233,7 +233,7 @@
rsDebug("View: ", &cam->view);
}
-static void printLightInfo(const SgLight *light) {
+static inline void printLightInfo(const SgLight *light) {
rsDebug("***** Light information. ptr:", light);
printName(light->name);
const SgTransform *lTransform = (const SgTransform *)rsGetElementAt(light->transformMatrix, 0);
@@ -246,7 +246,7 @@
rsDebug("Type: ", light->type);
}
-static void getCameraRay(const SgCamera *cam, int screenX, int screenY, float3 *pnt, float3 *vec) {
+static inline void getCameraRay(const SgCamera *cam, int screenX, int screenY, float3 *pnt, float3 *vec) {
rsDebug("=================================", screenX);
rsDebug("Point X", screenX);
rsDebug("Point Y", screenY);
@@ -290,7 +290,7 @@
*pnt = cam->position.xyz;
}
-static bool intersect(const SgRenderable *obj, float3 pnt, float3 vec) {
+static inline bool intersect(const SgRenderable *obj, float3 pnt, float3 vec) {
// Solving for t^2 + Bt + C = 0
float3 originMinusCenter = pnt - obj->worldBoundingSphere.xyz;
float B = dot(originMinusCenter, vec) * 2.0f;
diff --git a/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/transform.rs b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/transform.rs
index 941b5a8..1d0b5be 100644
--- a/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/transform.rs
+++ b/tests/RenderScriptTests/SceneGraph/src/com/android/scenegraph/transform.rs
@@ -26,6 +26,7 @@
} ParentData;
//#define DEBUG_TRANSFORMS
+/* Unused function:
static void debugTransform(SgTransform *data, const ParentData *parent) {
rsDebug("****** <Transform> ******", (int)data);
printName(data->name);
@@ -53,6 +54,7 @@
rsDebug("timestamp", data->timestamp);
rsDebug("****** </Transform> ******", (int)data);
}
+*/
static void appendTransformation(int type, float4 data, rs_matrix4x4 *mat) {
rs_matrix4x4 temp;
@@ -119,7 +121,7 @@
}
if (rsIsObject(data->children)) {
- rs_allocation nullAlloc;
+ rs_allocation nullAlloc = {0};
rsForEach(gTransformScript, data->children, nullAlloc, &toChild, sizeof(toChild));
}
diff --git a/tests/RenderScriptTests/SceneGraph/src/com/android/testapp/test_app.rs b/tests/RenderScriptTests/SceneGraph/src/com/android/testapp/test_app.rs
index 997a1a7..d94da52 100644
--- a/tests/RenderScriptTests/SceneGraph/src/com/android/testapp/test_app.rs
+++ b/tests/RenderScriptTests/SceneGraph/src/com/android/testapp/test_app.rs
@@ -41,9 +41,7 @@
gRotate = 0.0f;
}
-static int pos = 50;
static float gRotateY = 120.0f;
-static float3 gLookAt = 0;
static float gZoom = 50.0f;
static void displayLoading() {
if (rsIsObject(gRobotTex) && rsIsObject(gRobotMesh)) {
diff --git a/tests/RenderScriptTests/ShadersTest/src/com/android/shaderstest/shaderstest.rs b/tests/RenderScriptTests/ShadersTest/src/com/android/shaderstest/shaderstest.rs
index ae32e3a..735f6b9 100644
--- a/tests/RenderScriptTests/ShadersTest/src/com/android/shaderstest/shaderstest.rs
+++ b/tests/RenderScriptTests/ShadersTest/src/com/android/shaderstest/shaderstest.rs
@@ -131,7 +131,6 @@
rs_allocation allMeshes = rsGetAllocation(gMeshes);
int size = rsAllocationGetDimX(allMeshes);
gLookAt = 0.0f;
- float minX, minY, minZ, maxX, maxY, maxZ;
for (int i = 0; i < size; i++) {
MeshInfo_t *info = (MeshInfo_t*)rsGetElementAt(allMeshes, i);
rsgDrawMesh(info->mMesh);
diff --git a/tools/aapt/Android.mk b/tools/aapt/Android.mk
index 9956bd7..94a74c4 100644
--- a/tools/aapt/Android.mk
+++ b/tools/aapt/Android.mk
@@ -50,12 +50,9 @@
aaptTests := \
tests/AaptConfig_test.cpp \
tests/AaptGroupEntry_test.cpp \
+ tests/Pseudolocales_test.cpp \
tests/ResourceFilter_test.cpp
-aaptCIncludes := \
- external/libpng \
- external/zlib
-
aaptHostLdLibs :=
aaptHostStaticLibs := \
libandroidfw \
@@ -64,9 +61,10 @@
libutils \
libcutils \
libexpat \
- libziparchive-host
+ libziparchive-host \
+ libbase
-aaptCFlags := -DAAPT_VERSION=\"$(BUILD_NUMBER)\"
+aaptCFlags := -DAAPT_VERSION=\"$(BUILD_NUMBER_FROM_FILE)\"
aaptCFlags += -Wall -Werror
ifeq ($(HOST_OS),linux)
@@ -93,12 +91,11 @@
ifeq (darwin,$(HOST_OS))
LOCAL_CFLAGS += -D_DARWIN_UNLIMITED_STREAMS
endif
-LOCAL_C_INCLUDES += $(aaptCIncludes)
LOCAL_SRC_FILES := $(aaptSources)
+LOCAL_STATIC_LIBRARIES += $(aaptHostStaticLibs)
include $(BUILD_HOST_STATIC_LIBRARY)
-
# ==========================================================
# Build the host executable: aapt
# ==========================================================
@@ -131,28 +128,4 @@
include $(BUILD_HOST_NATIVE_TEST)
-# ==========================================================
-# Build the device executable: aapt
-# ==========================================================
-ifneq ($(SDK_ONLY),true)
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := aapt
-LOCAL_CFLAGS += $(aaptCFlags)
-LOCAL_SRC_FILES := $(aaptSources) $(aaptMain)
-LOCAL_C_INCLUDES += $(aaptCIncludes)
-LOCAL_SHARED_LIBRARIES := \
- libandroidfw \
- libutils \
- libcutils \
- libpng \
- liblog \
- libz
-LOCAL_STATIC_LIBRARIES := \
- libexpat_static
-
-include $(BUILD_EXECUTABLE)
-
-endif # Not SDK_ONLY
-
endif # No TARGET_BUILD_APPS or TARGET_BUILD_PDK
diff --git a/tools/aapt/Command.cpp b/tools/aapt/Command.cpp
index 8a0a39c..d12ab3b 100644
--- a/tools/aapt/Command.cpp
+++ b/tools/aapt/Command.cpp
@@ -215,7 +215,7 @@
goto bail;
}
-#ifdef HAVE_ANDROID_OS
+#ifdef __ANDROID__
static const bool kHaveAndroidOs = true;
#else
static const bool kHaveAndroidOs = false;
@@ -633,7 +633,7 @@
Asset* asset = NULL;
if (strcmp("resources", option) == 0) {
-#ifndef HAVE_ANDROID_OS
+#ifndef __ANDROID__
res.print(bundle->getValues());
#endif
diff --git a/tools/aapt/CrunchCache.cpp b/tools/aapt/CrunchCache.cpp
index 6c39d1d..0d574cf 100644
--- a/tools/aapt/CrunchCache.cpp
+++ b/tools/aapt/CrunchCache.cpp
@@ -5,6 +5,7 @@
// This file defines functions laid out and documented in
// CrunchCache.h
+#include <utils/Compat.h>
#include <utils/Vector.h>
#include <utils/String8.h>
diff --git a/tools/aapt/Main.cpp b/tools/aapt/Main.cpp
index 8b416aa..eeee2fa 100644
--- a/tools/aapt/Main.cpp
+++ b/tools/aapt/Main.cpp
@@ -6,6 +6,7 @@
#include "Main.h"
#include "Bundle.h"
+#include <utils/Compat.h>
#include <utils/Log.h>
#include <utils/threads.h>
#include <utils/List.h>
diff --git a/tools/aapt/StringPool.h b/tools/aapt/StringPool.h
index dbe8c85..4b0d920 100644
--- a/tools/aapt/StringPool.h
+++ b/tools/aapt/StringPool.h
@@ -20,8 +20,6 @@
#include <ctype.h>
#include <errno.h>
-#include <libexpat/expat.h>
-
using namespace android;
#define PRINT_STRING_METRICS 0
diff --git a/tools/aapt/XMLNode.cpp b/tools/aapt/XMLNode.cpp
index 9033cf7..bf31bc1 100644
--- a/tools/aapt/XMLNode.cpp
+++ b/tools/aapt/XMLNode.cpp
@@ -213,16 +213,14 @@
Vector<StringPool::entry_style_span> spanStack;
String16 curString;
String16 rawString;
+ Pseudolocalizer pseudo(pseudolocalize);
const char* errorMsg;
int xliffDepth = 0;
bool firstTime = true;
size_t len;
ResXMLTree::event_code_t code;
- // Bracketing if pseudolocalization accented method specified.
- if (pseudolocalize == PSEUDO_ACCENTED) {
- curString.append(String16(String8("[")));
- }
+ curString.append(pseudo.start());
while ((code=inXml->next()) != ResXMLTree::END_DOCUMENT && code != ResXMLTree::BAD_DOCUMENT) {
if (code == ResXMLTree::TEXT) {
String16 text(inXml->getText(&len));
@@ -231,18 +229,12 @@
if (text.string()[0] == '@') {
// If this is a resource reference, don't do the pseudoloc.
pseudolocalize = NO_PSEUDOLOCALIZATION;
+ pseudo.setMethod(pseudolocalize);
+ curString = String16();
}
}
if (xliffDepth == 0 && pseudolocalize > 0) {
- String16 pseudo;
- if (pseudolocalize == PSEUDO_ACCENTED) {
- pseudo = pseudolocalize_string(text);
- } else if (pseudolocalize == PSEUDO_BIDI) {
- pseudo = pseudobidi_string(text);
- } else {
- pseudo = text;
- }
- curString.append(pseudo);
+ curString.append(pseudo.text(text));
} else {
if (isFormatted && hasSubstitutionErrors(fileName, inXml, text) != NO_ERROR) {
return UNKNOWN_ERROR;
@@ -382,24 +374,7 @@
}
}
- // Bracketing if pseudolocalization accented method specified.
- if (pseudolocalize == PSEUDO_ACCENTED) {
- const char16_t* str = outString->string();
- const char16_t* p = str;
- const char16_t* e = p + outString->size();
- int words_cnt = 0;
- while (p < e) {
- if (isspace(*p)) {
- words_cnt++;
- }
- p++;
- }
- unsigned int length = words_cnt > 3 ? outString->size() :
- outString->size() / 2;
- curString.append(String16(String8(" ")));
- curString.append(pseudo_generate_expansion(length));
- curString.append(String16(String8("]")));
- }
+ curString.append(pseudo.end());
if (code == ResXMLTree::BAD_DOCUMENT) {
SourcePos(String8(fileName), inXml->getLineNumber()).error(
diff --git a/tools/aapt/XMLNode.h b/tools/aapt/XMLNode.h
index 3161f65..b9e5cd5 100644
--- a/tools/aapt/XMLNode.h
+++ b/tools/aapt/XMLNode.h
@@ -10,6 +10,8 @@
#include "StringPool.h"
#include "ResourceTable.h"
+#include <expat.h>
+
class XMLNode;
extern const char* const RESOURCES_ROOT_NAMESPACE;
diff --git a/tools/aapt/pseudolocalize.cpp b/tools/aapt/pseudolocalize.cpp
index 60aa2b2..c7fee2c 100644
--- a/tools/aapt/pseudolocalize.cpp
+++ b/tools/aapt/pseudolocalize.cpp
@@ -16,6 +16,80 @@
static const String16 k_placeholder_open = String16("\xc2\xbb");
static const String16 k_placeholder_close = String16("\xc2\xab");
+static const char16_t k_arg_start = '{';
+static const char16_t k_arg_end = '}';
+
+Pseudolocalizer::Pseudolocalizer(PseudolocalizationMethod m)
+ : mImpl(nullptr), mLastDepth(0) {
+ setMethod(m);
+}
+
+void Pseudolocalizer::setMethod(PseudolocalizationMethod m) {
+ if (mImpl) {
+ delete mImpl;
+ }
+ if (m == PSEUDO_ACCENTED) {
+ mImpl = new PseudoMethodAccent();
+ } else if (m == PSEUDO_BIDI) {
+ mImpl = new PseudoMethodBidi();
+ } else {
+ mImpl = new PseudoMethodNone();
+ }
+}
+
+String16 Pseudolocalizer::text(const String16& text) {
+ String16 out;
+ size_t depth = mLastDepth;
+ size_t lastpos, pos;
+ const size_t length= text.size();
+ const char16_t* str = text.string();
+ bool escaped = false;
+ for (lastpos = pos = 0; pos < length; pos++) {
+ char16_t c = str[pos];
+ if (escaped) {
+ escaped = false;
+ continue;
+ }
+ if (c == '\'') {
+ escaped = true;
+ continue;
+ }
+
+ if (c == k_arg_start) {
+ depth++;
+ } else if (c == k_arg_end && depth) {
+ depth--;
+ }
+
+ if (mLastDepth != depth || pos == length - 1) {
+ bool pseudo = ((mLastDepth % 2) == 0);
+ size_t nextpos = pos;
+ if (!pseudo || depth == mLastDepth) {
+ nextpos++;
+ }
+ size_t size = nextpos - lastpos;
+ if (size) {
+ String16 chunk = String16(text, size, lastpos);
+ if (pseudo) {
+ chunk = mImpl->text(chunk);
+ } else if (str[lastpos] == k_arg_start &&
+ str[nextpos - 1] == k_arg_end) {
+ chunk = mImpl->placeholder(chunk);
+ }
+ out.append(chunk);
+ }
+ if (pseudo && depth < mLastDepth) { // End of message
+ out.append(mImpl->end());
+ } else if (!pseudo && depth > mLastDepth) { // Start of message
+ out.append(mImpl->start());
+ }
+ lastpos = nextpos;
+ mLastDepth = depth;
+ }
+ }
+ return out;
+}
+
static const char*
pseudolocalize_char(const char16_t c)
{
@@ -78,8 +152,7 @@
}
}
-static bool
-is_possible_normal_placeholder_end(const char16_t c) {
+static bool is_possible_normal_placeholder_end(const char16_t c) {
switch (c) {
case 's': return true;
case 'S': return true;
@@ -106,8 +179,7 @@
}
}
-String16
-pseudo_generate_expansion(const unsigned int length) {
+static String16 pseudo_generate_expansion(const unsigned int length) {
String16 result = k_expansion_string;
const char16_t* s = result.string();
if (result.size() < length) {
@@ -127,18 +199,47 @@
return result;
}
+static bool is_space(const char16_t c) {
+ return (c == ' ' || c == '\t' || c == '\n');
+}
+
+String16 PseudoMethodAccent::start() {
+ String16 result;
+ if (mDepth == 0) {
+ result = String16(String8("["));
+ }
+ mWordCount = mLength = 0;
+ mDepth++;
+ return result;
+}
+
+String16 PseudoMethodAccent::end() {
+ String16 result;
+ if (mLength) {
+ result.append(String16(String8(" ")));
+ result.append(pseudo_generate_expansion(
+ mWordCount > 3 ? mLength : mLength / 2));
+ }
+ mWordCount = mLength = 0;
+ mDepth--;
+ if (mDepth == 0) {
+ result.append(String16(String8("]")));
+ }
+ return result;
+}
+
/**
* Converts characters so they look like they've been localized.
*
* Note: This leaves escape sequences untouched so they can later be
* processed by ResTable::collectString in the normal way.
*/
-String16
-pseudolocalize_string(const String16& source)
+String16 PseudoMethodAccent::text(const String16& source)
{
const char16_t* s = source.string();
String16 result;
const size_t I = source.size();
+ bool lastspace = true;
for (size_t i=0; i<I; i++) {
char16_t c = s[i];
if (c == '\\') {
@@ -170,23 +271,24 @@
}
} else if (c == '%') {
// Placeholder syntax, no need to pseudolocalize
- result += k_placeholder_open;
+ String16 chunk;
bool end = false;
- result.append(&c, 1);
+ chunk.append(&c, 1);
while (!end && i < I) {
++i;
c = s[i];
- result.append(&c, 1);
+ chunk.append(&c, 1);
if (is_possible_normal_placeholder_end(c)) {
end = true;
} else if (c == 't') {
++i;
c = s[i];
- result.append(&c, 1);
+ chunk.append(&c, 1);
end = true;
}
}
- result += k_placeholder_close;
+ // Treat chunk as a placeholder unless it ends with %.
+ result += ((c == '%') ? chunk : placeholder(chunk));
} else if (c == '<' || c == '&') {
// html syntax, no need to pseudolocalize
bool tag_closed = false;
@@ -234,35 +336,52 @@
if (p != NULL) {
result += String16(p);
} else {
+ bool space = is_space(c);
+ if (lastspace && !space) {
+ mWordCount++;
+ }
+ lastspace = space;
result.append(&c, 1);
}
+ // Count only pseudolocalizable chars and delimiters
+ mLength++;
}
}
return result;
}
+String16 PseudoMethodAccent::placeholder(const String16& source) {
+ // Surround a placeholder with brackets
+ return k_placeholder_open + source + k_placeholder_close;
+}
-String16
-pseudobidi_string(const String16& source)
+String16 PseudoMethodBidi::text(const String16& source)
{
const char16_t* s = source.string();
String16 result;
- result += k_rlm;
- result += k_rlo;
+ bool lastspace = true;
+ bool space = true;
for (size_t i=0; i<source.size(); i++) {
char16_t c = s[i];
- switch(c) {
- case ' ': result += k_pdf;
- result += k_rlm;
- result.append(&c, 1);
- result += k_rlm;
- result += k_rlo;
- break;
- default: result.append(&c, 1);
- break;
+ space = is_space(c);
+ if (lastspace && !space) {
+ // Word start
+ result += k_rlm + k_rlo;
+ } else if (!lastspace && space) {
+ // Word end
+ result += k_pdf + k_rlm;
}
+ lastspace = space;
+ result.append(&c, 1);
}
- result += k_pdf;
- result += k_rlm;
+ if (!lastspace) {
+ // End of last word
+ result += k_pdf + k_rlm;
+ }
return result;
}
+String16 PseudoMethodBidi::placeholder(const String16& source) {
+ // Surround a placeholder with directionality change sequence
+ return k_rlm + k_rlo + source + k_pdf + k_rlm;
+}
+
diff --git a/tools/aapt/pseudolocalize.h b/tools/aapt/pseudolocalize.h
index e6ab18e..71b974b 100644
--- a/tools/aapt/pseudolocalize.h
+++ b/tools/aapt/pseudolocalize.h
@@ -1,18 +1,58 @@
#ifndef HOST_PSEUDOLOCALIZE_H
#define HOST_PSEUDOLOCALIZE_H
+#include <base/macros.h>
#include "StringPool.h"
-#include <string>
+class PseudoMethodImpl {
+ public:
+ virtual ~PseudoMethodImpl() {}
+ virtual String16 start() { return String16(); }
+ virtual String16 end() { return String16(); }
+ virtual String16 text(const String16& text) = 0;
+ virtual String16 placeholder(const String16& text) = 0;
+};
-String16 pseudolocalize_string(const String16& source);
-// Surrounds every word in the sentance with specific characters that makes
-// the word directionality RTL.
-String16 pseudobidi_string(const String16& source);
-// Generates expansion string based on the specified lenght.
-// Generated string could not be shorter that length, but it could be slightly
-// longer.
-String16 pseudo_generate_expansion(const unsigned int length);
+class PseudoMethodNone : public PseudoMethodImpl {
+ public:
+ PseudoMethodNone() {}
+ String16 text(const String16& text) { return text; }
+ String16 placeholder(const String16& text) { return text; }
+ private:
+ DISALLOW_COPY_AND_ASSIGN(PseudoMethodNone);
+};
+
+class PseudoMethodBidi : public PseudoMethodImpl {
+ public:
+ String16 text(const String16& text);
+ String16 placeholder(const String16& text);
+};
+
+class PseudoMethodAccent : public PseudoMethodImpl {
+ public:
+ PseudoMethodAccent() : mDepth(0), mWordCount(0), mLength(0) {}
+ String16 start();
+ String16 end();
+ String16 text(const String16& text);
+ String16 placeholder(const String16& text);
+ private:
+ size_t mDepth;
+ size_t mWordCount;
+ size_t mLength;
+};
+
+class Pseudolocalizer {
+ public:
+ Pseudolocalizer(PseudolocalizationMethod m);
+ ~Pseudolocalizer() { if (mImpl) delete mImpl; }
+ void setMethod(PseudolocalizationMethod m);
+ String16 start() { return mImpl->start(); }
+ String16 end() { return mImpl->end(); }
+ String16 text(const String16& text);
+ private:
+ PseudoMethodImpl *mImpl;
+ size_t mLastDepth;
+};
#endif // HOST_PSEUDOLOCALIZE_H
diff --git a/tools/aapt/tests/Pseudolocales_test.cpp b/tools/aapt/tests/Pseudolocales_test.cpp
new file mode 100644
index 0000000..4670e9f
--- /dev/null
+++ b/tools/aapt/tests/Pseudolocales_test.cpp
@@ -0,0 +1,217 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <androidfw/ResourceTypes.h>
+#include <utils/String8.h>
+#include <gtest/gtest.h>
+
+#include "Bundle.h"
+#include "pseudolocalize.h"
+
+using android::String8;
+
+// In this context, 'Axis' represents a particular field in the configuration,
+// such as language or density.
+
+static void simple_helper(const char* input, const char* expected, PseudolocalizationMethod method) {
+ Pseudolocalizer pseudo(method);
+ String16 result = pseudo.start() + pseudo.text(String16(String8(input))) + pseudo.end();
+ //std::cout << String8(result).string() << std::endl;
+ ASSERT_EQ(String8(expected), String8(result));
+}
+
+static void compound_helper(const char* in1, const char* in2, const char *in3,
+ const char* expected, PseudolocalizationMethod method) {
+ Pseudolocalizer pseudo(method);
+ String16 result = pseudo.start() + \
+ pseudo.text(String16(String8(in1))) + \
+ pseudo.text(String16(String8(in2))) + \
+ pseudo.text(String16(String8(in3))) + \
+ pseudo.end();
+ ASSERT_EQ(String8(expected), String8(result));
+}
+
+TEST(Pseudolocales, NoPseudolocalization) {
+ simple_helper("", "", NO_PSEUDOLOCALIZATION);
+ simple_helper("Hello, world", "Hello, world", NO_PSEUDOLOCALIZATION);
+
+ compound_helper("Hello,", " world", "",
+ "Hello, world", NO_PSEUDOLOCALIZATION);
+}
+
+TEST(Pseudolocales, PlaintextAccent) {
+ simple_helper("", "[]", PSEUDO_ACCENTED);
+ simple_helper("Hello, world",
+ "[Ĥéļļö, ŵöŕļð one two]", PSEUDO_ACCENTED);
+
+ simple_helper("Hello, %1d",
+ "[Ĥéļļö, »%1d« one two]", PSEUDO_ACCENTED);
+
+ simple_helper("Battery %1d%%",
+ "[βåţţéŕý »%1d«%% one two]", PSEUDO_ACCENTED);
+
+ compound_helper("", "", "", "[]", PSEUDO_ACCENTED);
+ compound_helper("Hello,", " world", "",
+ "[Ĥéļļö, ŵöŕļð one two]", PSEUDO_ACCENTED);
+}
+
+TEST(Pseudolocales, PlaintextBidi) {
+ simple_helper("", "", PSEUDO_BIDI);
+ simple_helper("word",
+ "\xe2\x80\x8f\xE2\x80\xaeword\xE2\x80\xac\xe2\x80\x8f",
+ PSEUDO_BIDI);
+ simple_helper(" word ",
+ " \xe2\x80\x8f\xE2\x80\xaeword\xE2\x80\xac\xe2\x80\x8f ",
+ PSEUDO_BIDI);
+ simple_helper(" word ",
+ " \xe2\x80\x8f\xE2\x80\xaeword\xE2\x80\xac\xe2\x80\x8f ",
+ PSEUDO_BIDI);
+ simple_helper("hello\n world\n",
+ "\xe2\x80\x8f\xE2\x80\xaehello\xE2\x80\xac\xe2\x80\x8f\n" \
+ " \xe2\x80\x8f\xE2\x80\xaeworld\xE2\x80\xac\xe2\x80\x8f\n",
+ PSEUDO_BIDI);
+ compound_helper("hello", "\n ", " world\n",
+ "\xe2\x80\x8f\xE2\x80\xaehello\xE2\x80\xac\xe2\x80\x8f\n" \
+ " \xe2\x80\x8f\xE2\x80\xaeworld\xE2\x80\xac\xe2\x80\x8f\n",
+ PSEUDO_BIDI);
+}
+
+TEST(Pseudolocales, SimpleICU) {
+ // Single-fragment messages
+ simple_helper("{placeholder}", "[»{placeholder}«]", PSEUDO_ACCENTED);
+ simple_helper("{USER} is offline",
+ "[»{USER}« îš öƒƒļîñé one two]", PSEUDO_ACCENTED);
+ simple_helper("Copy from {path1} to {path2}",
+ "[Çöþý ƒŕöḿ »{path1}« ţö »{path2}« one two three]", PSEUDO_ACCENTED);
+ simple_helper("Today is {1,date} {1,time}",
+ "[Ţöðåý îš »{1,date}« »{1,time}« one two]", PSEUDO_ACCENTED);
+
+ // Multi-fragment messages
+ compound_helper("{USER}", " ", "is offline",
+ "[»{USER}« îš öƒƒļîñé one two]",
+ PSEUDO_ACCENTED);
+ compound_helper("Copy from ", "{path1}", " to {path2}",
+ "[Çöþý ƒŕöḿ »{path1}« ţö »{path2}« one two three]",
+ PSEUDO_ACCENTED);
+}
+
+TEST(Pseudolocales, ICUBidi) {
+ // Single-fragment messages
+ simple_helper("{placeholder}",
+ "\xe2\x80\x8f\xE2\x80\xae{placeholder}\xE2\x80\xac\xe2\x80\x8f",
+ PSEUDO_BIDI);
+ simple_helper(
+ "{COUNT, plural, one {one} other {other}}",
+ "{COUNT, plural, " \
+ "one {\xe2\x80\x8f\xE2\x80\xaeone\xE2\x80\xac\xe2\x80\x8f} " \
+ "other {\xe2\x80\x8f\xE2\x80\xaeother\xE2\x80\xac\xe2\x80\x8f}}",
+ PSEUDO_BIDI
+ );
+}
+
+TEST(Pseudolocales, Escaping) {
+ // Single-fragment messages
+ simple_helper("'{USER'} is offline",
+ "['{ÛŠÉŔ'} îš öƒƒļîñé one two three]", PSEUDO_ACCENTED);
+
+ // Multi-fragment messages
+ compound_helper("'{USER}", " ", "''is offline",
+ "['{ÛŠÉŔ} ''îš öƒƒļîñé one two three]", PSEUDO_ACCENTED);
+}
+
+TEST(Pseudolocales, PluralsAndSelects) {
+ simple_helper(
+ "{COUNT, plural, one {Delete a file} other {Delete {COUNT} files}}",
+ "[{COUNT, plural, one {Ðéļéţé å ƒîļé one two} " \
+ "other {Ðéļéţé »{COUNT}« ƒîļéš one two}}]",
+ PSEUDO_ACCENTED
+ );
+ simple_helper(
+ "Distance is {COUNT, plural, one {# mile} other {# miles}}",
+ "[Ðîšţåñçé îš {COUNT, plural, one {# ḿîļé one two} " \
+ "other {# ḿîļéš one two}}]",
+ PSEUDO_ACCENTED
+ );
+ simple_helper(
+ "{1, select, female {{1} added you} " \
+ "male {{1} added you} other {{1} added you}}",
+ "[{1, select, female {»{1}« åððéð ýöû one two} " \
+ "male {»{1}« åððéð ýöû one two} other {»{1}« åððéð ýöû one two}}]",
+ PSEUDO_ACCENTED
+ );
+
+ compound_helper(
+ "{COUNT, plural, one {Delete a file} " \
+ "other {Delete ", "{COUNT}", " files}}",
+ "[{COUNT, plural, one {Ðéļéţé å ƒîļé one two} " \
+ "other {Ðéļéţé »{COUNT}« ƒîļéš one two}}]",
+ PSEUDO_ACCENTED
+ );
+}
+
+TEST(Pseudolocales, NestedICU) {
+ simple_helper(
+ "{person, select, " \
+ "female {" \
+ "{num_circles, plural," \
+ "=0{{person} didn't add you to any of her circles.}" \
+ "=1{{person} added you to one of her circles.}" \
+ "other{{person} added you to her # circles.}}}" \
+ "male {" \
+ "{num_circles, plural," \
+ "=0{{person} didn't add you to any of his circles.}" \
+ "=1{{person} added you to one of his circles.}" \
+ "other{{person} added you to his # circles.}}}" \
+ "other {" \
+ "{num_circles, plural," \
+ "=0{{person} didn't add you to any of their circles.}" \
+ "=1{{person} added you to one of their circles.}" \
+ "other{{person} added you to their # circles.}}}}",
+ "[{person, select, " \
+ "female {" \
+ "{num_circles, plural," \
+ "=0{»{person}« ðîðñ'ţ åðð ýöû ţö åñý öƒ ĥéŕ çîŕçļéš." \
+ " one two three four five}" \
+ "=1{»{person}« åððéð ýöû ţö öñé öƒ ĥéŕ çîŕçļéš." \
+ " one two three four}" \
+ "other{»{person}« åððéð ýöû ţö ĥéŕ # çîŕçļéš." \
+ " one two three four}}}" \
+ "male {" \
+ "{num_circles, plural," \
+ "=0{»{person}« ðîðñ'ţ åðð ýöû ţö åñý öƒ ĥîš çîŕçļéš." \
+ " one two three four five}" \
+ "=1{»{person}« åððéð ýöû ţö öñé öƒ ĥîš çîŕçļéš." \
+ " one two three four}" \
+ "other{»{person}« åððéð ýöû ţö ĥîš # çîŕçļéš." \
+ " one two three four}}}" \
+ "other {{num_circles, plural," \
+ "=0{»{person}« ðîðñ'ţ åðð ýöû ţö åñý öƒ ţĥéîŕ çîŕçļéš." \
+ " one two three four five}" \
+ "=1{»{person}« åððéð ýöû ţö öñé öƒ ţĥéîŕ çîŕçļéš." \
+ " one two three four}" \
+ "other{»{person}« åððéð ýöû ţö ţĥéîŕ # çîŕçļéš." \
+ " one two three four}}}}]",
+ PSEUDO_ACCENTED
+ );
+}
+
+TEST(Pseudolocales, RedefineMethod) {
+ Pseudolocalizer pseudo(PSEUDO_ACCENTED);
+ String16 result = pseudo.text(String16(String8("Hello, ")));
+ pseudo.setMethod(NO_PSEUDOLOCALIZATION);
+ result.append(pseudo.text(String16(String8("world!"))));
+ ASSERT_EQ(String8("Ĥéļļö, world!"), String8(result));
+}
diff --git a/tools/aidl/aidl.cpp b/tools/aidl/aidl.cpp
index 14c9f95..368e73d 100644
--- a/tools/aidl/aidl.cpp
+++ b/tools/aidl/aidl.cpp
@@ -1,6 +1,7 @@
#include "aidl_language.h"
#include "options.h"
+#include "os.h"
#include "search_path.h"
#include "Type.h"
#include "generate_java.h"
@@ -177,7 +178,7 @@
char cwd[MAXPATHLEN];
bool valid = false;
-#ifdef HAVE_WINDOWS_PATHS
+#ifdef _WIN32
if (isalpha(filename[0]) && filename[1] == ':'
&& filename[2] == OS_PATH_SEPARATOR) {
#else
@@ -217,7 +218,7 @@
if (valid) {
p = fn.c_str() + (len - expected.length());
-#ifdef HAVE_WINDOWS_PATHS
+#ifdef _WIN32
if (OS_PATH_SEPARATOR != '/') {
// Input filename under cygwin most likely has / separators
// whereas the expected string uses \\ separators. Adjust
@@ -675,6 +676,10 @@
fprintf(to, "\n");
+ // Output "<input_aidl_file>: " so make won't fail if the input .aidl file
+ // has been deleted, moved or renamed in incremental build.
+ fprintf(to, "%s :\n", options.inputFileName.c_str());
+
// Output "<imported_file>: " so make won't fail if the imported file has
// been deleted, moved or renamed in incremental build.
import = g_imports;
diff --git a/tools/aidl/os.h b/tools/aidl/os.h
new file mode 100644
index 0000000..79d2c35
--- /dev/null
+++ b/tools/aidl/os.h
@@ -0,0 +1,26 @@
+/*
+ * Copyright 2015, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _FRAMEWORKS_BASE_TOOLS_AIDL_OS_SEP_H_
+#define _FRAMEWORKS_BASE_TOOLS_AIDL_OS_SEP_H_
+
+#if defined(_WIN32)
+#define OS_PATH_SEPARATOR '\\'
+#else
+#define OS_PATH_SEPARATOR '/'
+#endif
+
+#endif
diff --git a/tools/aidl/search_path.cpp b/tools/aidl/search_path.cpp
index ffb6cb2..29dbe26 100644
--- a/tools/aidl/search_path.cpp
+++ b/tools/aidl/search_path.cpp
@@ -1,6 +1,7 @@
#include <unistd.h>
#include "search_path.h"
#include "options.h"
+#include "os.h"
#include <string.h>
#ifdef HAVE_MS_C_RUNTIME
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgePowerManager.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgePowerManager.java
index 39ebdfc..46aa117 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgePowerManager.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgePowerManager.java
@@ -86,7 +86,7 @@
}
@Override
- public void shutdown(boolean confirm, boolean wait) {
+ public void shutdown(boolean confirm, String reason, boolean wait) {
// pass for now.
}
diff --git a/tools/obbtool/pbkdf2gen.cpp b/tools/obbtool/pbkdf2gen.cpp
index 98d67c0..f1d8d04 100644
--- a/tools/obbtool/pbkdf2gen.cpp
+++ b/tools/obbtool/pbkdf2gen.cpp
@@ -20,6 +20,7 @@
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
+#include <stdlib.h>
#include <string.h>
#include <unistd.h>
diff --git a/tools/split-select/Android.mk b/tools/split-select/Android.mk
index 013e570..d9ddf08 100644
--- a/tools/split-select/Android.mk
+++ b/tools/split-select/Android.mk
@@ -52,7 +52,8 @@
libutils \
libcutils \
libexpat \
- libziparchive-host
+ libziparchive-host \
+ libbase
cFlags := -Wall -Werror