127f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich/*
227f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich**
327f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich** Copyright 2009, The Android Open Source Project
427f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich**
524ce5fb2cc09d0a14406e7b935f8648c5720d27eElliott Hughes** Licensed under the Apache License, Version 2.0 (the "License");
624ce5fb2cc09d0a14406e7b935f8648c5720d27eElliott Hughes** you may not use this file except in compliance with the License.
724ce5fb2cc09d0a14406e7b935f8648c5720d27eElliott Hughes** You may obtain a copy of the License at
827f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich**
924ce5fb2cc09d0a14406e7b935f8648c5720d27eElliott Hughes**     http://www.apache.org/licenses/LICENSE-2.0
1027f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich**
1124ce5fb2cc09d0a14406e7b935f8648c5720d27eElliott Hughes** Unless required by applicable law or agreed to in writing, software
1224ce5fb2cc09d0a14406e7b935f8648c5720d27eElliott Hughes** distributed under the License is distributed on an "AS IS" BASIS,
1324ce5fb2cc09d0a14406e7b935f8648c5720d27eElliott Hughes** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1424ce5fb2cc09d0a14406e7b935f8648c5720d27eElliott Hughes** See the License for the specific language governing permissions and
1527f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich** limitations under the License.
1627f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich*/
1727f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich
1827f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich// This source file is automatically generated
1927f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich
2024ce5fb2cc09d0a14406e7b935f8648c5720d27eElliott Hughes#include "jni.h"
2124ce5fb2cc09d0a14406e7b935f8648c5720d27eElliott Hughes#include "JNIHelp.h"
2227f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich#include <android_runtime/AndroidRuntime.h>
2327f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich#include <utils/misc.h>
2427f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich
2527f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich#include <assert.h>
2627f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich#include <GLES/gl.h>
27be509c9c7de5929d014dfe6d45e71cc8454ede0fJack Palevich#include <GLES/glext.h>
2827f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich
2927f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevichstatic int initialized = 0;
3027f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich
3127f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevichstatic jclass nioAccessClass;
3227f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevichstatic jclass bufferClass;
3327f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevichstatic jmethodID getBasePointerID;
3427f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevichstatic jmethodID getBaseArrayID;
3527f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevichstatic jmethodID getBaseArrayOffsetID;
3627f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevichstatic jfieldID positionID;
3727f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevichstatic jfieldID limitID;
3827f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevichstatic jfieldID elementSizeShiftID;
3927f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich
4027f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich/* Cache method IDs each time the class is loaded. */
4127f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich
4227f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevichstatic void
4324ce5fb2cc09d0a14406e7b935f8648c5720d27eElliott HughesnativeClassInit(JNIEnv *_env, jclass glImplClass)
4427f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich{
4527f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    jclass nioAccessClassLocal = _env->FindClass("java/nio/NIOAccess");
4627f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    nioAccessClass = (jclass) _env->NewGlobalRef(nioAccessClassLocal);
4727f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich
4827f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    jclass bufferClassLocal = _env->FindClass("java/nio/Buffer");
4927f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    bufferClass = (jclass) _env->NewGlobalRef(bufferClassLocal);
5027f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich
5127f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    getBasePointerID = _env->GetStaticMethodID(nioAccessClass,
5227f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich            "getBasePointer", "(Ljava/nio/Buffer;)J");
5327f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    getBaseArrayID = _env->GetStaticMethodID(nioAccessClass,
5427f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich            "getBaseArray", "(Ljava/nio/Buffer;)Ljava/lang/Object;");
5527f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    getBaseArrayOffsetID = _env->GetStaticMethodID(nioAccessClass,
5627f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich            "getBaseArrayOffset", "(Ljava/nio/Buffer;)I");
5727f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich
5827f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    positionID = _env->GetFieldID(bufferClass, "position", "I");
5927f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    limitID = _env->GetFieldID(bufferClass, "limit", "I");
6027f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    elementSizeShiftID =
6127f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich        _env->GetFieldID(bufferClass, "_elementSizeShift", "I");
6227f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich}
6327f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich
6427f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich
6527f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevichstatic void *
6627f8002e591b5c579f75b2580183b5d1c4219cd4Jack PalevichgetPointer(JNIEnv *_env, jobject buffer, jarray *array, jint *remaining)
6727f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich{
6827f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    jint position;
6927f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    jint limit;
7027f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    jint elementSizeShift;
7127f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    jlong pointer;
7227f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    jint offset;
7327f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    void *data;
7427f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich
7527f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    position = _env->GetIntField(buffer, positionID);
7627f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    limit = _env->GetIntField(buffer, limitID);
7727f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    elementSizeShift = _env->GetIntField(buffer, elementSizeShiftID);
7827f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    *remaining = (limit - position) << elementSizeShift;
7927f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    pointer = _env->CallStaticLongMethod(nioAccessClass,
8027f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich            getBasePointerID, buffer);
8127f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    if (pointer != 0L) {
8227f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich        *array = NULL;
8327f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich        return (void *) (jint) pointer;
8427f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    }
8524ce5fb2cc09d0a14406e7b935f8648c5720d27eElliott Hughes
8627f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    *array = (jarray) _env->CallStaticObjectMethod(nioAccessClass,
8727f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich            getBaseArrayID, buffer);
8827f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    offset = _env->CallStaticIntMethod(nioAccessClass,
8927f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich            getBaseArrayOffsetID, buffer);
9027f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    data = _env->GetPrimitiveArrayCritical(*array, (jboolean *) 0);
9124ce5fb2cc09d0a14406e7b935f8648c5720d27eElliott Hughes
9227f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    return (void *) ((char *) data + offset);
9327f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich}
9427f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich
9527f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich
9627f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevichstatic void
9727f8002e591b5c579f75b2580183b5d1c4219cd4Jack PalevichreleasePointer(JNIEnv *_env, jarray array, void *data, jboolean commit)
9827f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich{
9927f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    _env->ReleasePrimitiveArrayCritical(array, data,
10027f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich					   commit ? 0 : JNI_ABORT);
10127f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich}
10227f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich
10327f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich// --------------------------------------------------------------------------
10427f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich/* GLbitfield glQueryMatrixxOES ( GLfixed *mantissa, GLint *exponent ) */
10527f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevichstatic jint
10627f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevichandroid_glQueryMatrixxOES___3II_3II
10727f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich  (JNIEnv *_env, jobject _this, jintArray mantissa_ref, jint mantissaOffset, jintArray exponent_ref, jint exponentOffset) {
10827f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    jint _exception = 0;
10927f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    GLbitfield _returnValue = -1;
11027f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    GLfixed *mantissa_base = (GLfixed *) 0;
11127f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    jint _mantissaRemaining;
11227f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    GLfixed *mantissa = (GLfixed *) 0;
11327f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    GLint *exponent_base = (GLint *) 0;
11427f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    jint _exponentRemaining;
11527f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    GLint *exponent = (GLint *) 0;
11627f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich
11727f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    if (!mantissa_ref) {
11827f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich        _exception = 1;
11924ce5fb2cc09d0a14406e7b935f8648c5720d27eElliott Hughes        jniThrowException(_env, "java/lang/IllegalArgumentException", "mantissa == null");
12027f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich        goto exit;
12127f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    }
12227f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    if (mantissaOffset < 0) {
12327f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich        _exception = 1;
12424ce5fb2cc09d0a14406e7b935f8648c5720d27eElliott Hughes        jniThrowException(_env, "java/lang/IllegalArgumentException", "mantissaOffset < 0");
12527f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich        goto exit;
12627f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    }
12727f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    _mantissaRemaining = _env->GetArrayLength(mantissa_ref) - mantissaOffset;
12827f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    if (_mantissaRemaining < 16) {
12927f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich        _exception = 1;
13024ce5fb2cc09d0a14406e7b935f8648c5720d27eElliott Hughes        jniThrowException(_env, "java/lang/IllegalArgumentException", "length - mantissaOffset < 16");
13127f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich        goto exit;
13227f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    }
13327f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    mantissa_base = (GLfixed *)
13427f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich        _env->GetPrimitiveArrayCritical(mantissa_ref, (jboolean *)0);
13527f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    mantissa = mantissa_base + mantissaOffset;
13627f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich
13727f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    if (!exponent_ref) {
13827f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich        _exception = 1;
13924ce5fb2cc09d0a14406e7b935f8648c5720d27eElliott Hughes        jniThrowException(_env, "java/lang/IllegalArgumentException", "exponent == null");
14027f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich        goto exit;
14127f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    }
14227f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    if (exponentOffset < 0) {
14327f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich        _exception = 1;
14424ce5fb2cc09d0a14406e7b935f8648c5720d27eElliott Hughes        jniThrowException(_env, "java/lang/IllegalArgumentException", "exponentOffset < 0");
14527f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich        goto exit;
14627f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    }
14727f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    _exponentRemaining = _env->GetArrayLength(exponent_ref) - exponentOffset;
14827f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    if (_exponentRemaining < 16) {
14927f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich        _exception = 1;
15024ce5fb2cc09d0a14406e7b935f8648c5720d27eElliott Hughes        jniThrowException(_env, "java/lang/IllegalArgumentException", "length - exponentOffset < 16");
15127f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich        goto exit;
15227f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    }
15327f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    exponent_base = (GLint *)
15427f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich        _env->GetPrimitiveArrayCritical(exponent_ref, (jboolean *)0);
15527f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    exponent = exponent_base + exponentOffset;
15627f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich
15727f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    _returnValue = glQueryMatrixxOES(
15827f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich        (GLfixed *)mantissa,
15927f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich        (GLint *)exponent
16027f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    );
16127f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich
16227f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevichexit:
16327f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    if (exponent_base) {
16427f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich        _env->ReleasePrimitiveArrayCritical(exponent_ref, exponent_base,
16527f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich            _exception ? JNI_ABORT: 0);
16627f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    }
16727f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    if (mantissa_base) {
16827f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich        _env->ReleasePrimitiveArrayCritical(mantissa_ref, mantissa_base,
16927f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich            _exception ? JNI_ABORT: 0);
17027f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    }
17127f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    return _returnValue;
17227f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich}
17327f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich
17427f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich/* GLbitfield glQueryMatrixxOES ( GLfixed *mantissa, GLint *exponent ) */
17527f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevichstatic jint
17627f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevichandroid_glQueryMatrixxOES__Ljava_nio_IntBuffer_2Ljava_nio_IntBuffer_2
17727f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich  (JNIEnv *_env, jobject _this, jobject mantissa_buf, jobject exponent_buf) {
17827f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    jint _exception = 0;
17927f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    jarray _mantissaArray = (jarray) 0;
18027f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    jarray _exponentArray = (jarray) 0;
18127f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    GLbitfield _returnValue = -1;
18227f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    jint _mantissaRemaining;
18327f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    GLfixed *mantissa = (GLfixed *) 0;
18427f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    jint _exponentRemaining;
18527f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    GLint *exponent = (GLint *) 0;
18627f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich
18727f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    mantissa = (GLfixed *)getPointer(_env, mantissa_buf, &_mantissaArray, &_mantissaRemaining);
18827f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    if (_mantissaRemaining < 16) {
18927f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich        _exception = 1;
19024ce5fb2cc09d0a14406e7b935f8648c5720d27eElliott Hughes        jniThrowException(_env, "java/lang/IllegalArgumentException", "remaining() < 16");
19127f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich        goto exit;
19227f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    }
19327f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    exponent = (GLint *)getPointer(_env, exponent_buf, &_exponentArray, &_exponentRemaining);
19427f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    if (_exponentRemaining < 16) {
19527f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich        _exception = 1;
19624ce5fb2cc09d0a14406e7b935f8648c5720d27eElliott Hughes        jniThrowException(_env, "java/lang/IllegalArgumentException", "remaining() < 16");
19727f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich        goto exit;
19827f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    }
19927f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    _returnValue = glQueryMatrixxOES(
20027f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich        (GLfixed *)mantissa,
20127f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich        (GLint *)exponent
20227f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    );
20327f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich
20427f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevichexit:
20527f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    if (_mantissaArray) {
20627f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich        releasePointer(_env, _mantissaArray, exponent, _exception ? JNI_FALSE : JNI_TRUE);
20727f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    }
20827f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    if (_exponentArray) {
20927f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich        releasePointer(_env, _exponentArray, mantissa, _exception ? JNI_FALSE : JNI_TRUE);
21027f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    }
21127f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    return _returnValue;
21227f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich}
21327f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich
21427f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevichstatic const char *classPathName = "android/opengl/GLES10Ext";
21527f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich
21627f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevichstatic JNINativeMethod methods[] = {
21727f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich{"_nativeClassInit", "()V", (void*)nativeClassInit },
21827f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich{"glQueryMatrixxOES", "([II[II)I", (void *) android_glQueryMatrixxOES___3II_3II },
21927f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich{"glQueryMatrixxOES", "(Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;)I", (void *) android_glQueryMatrixxOES__Ljava_nio_IntBuffer_2Ljava_nio_IntBuffer_2 },
22027f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich};
22127f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich
22227f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevichint register_android_opengl_jni_GLES10Ext(JNIEnv *_env)
22327f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich{
22427f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    int err;
22527f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    err = android::AndroidRuntime::registerNativeMethods(_env, classPathName, methods, NELEM(methods));
22627f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich    return err;
22727f8002e591b5c579f75b2580183b5d1c4219cd4Jack Palevich}
228