138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos/*
238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos * Copyright 2015 The Android Open Source Project
338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos *
438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos * Licensed under the Apache License, Version 2.0 (the "License");
538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos * you may not use this file except in compliance with the License.
638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos * You may obtain a copy of the License at
738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos *
838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos *      http://www.apache.org/licenses/LICENSE-2.0
938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos *
1038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos * Unless required by applicable law or agreed to in writing, software
1138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos * distributed under the License is distributed on an "AS IS" BASIS,
1238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos * See the License for the specific language governing permissions and
1438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos * limitations under the License.
1538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos */
1638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
1738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos// This source file is automatically generated
1838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
1938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos#pragma GCC diagnostic ignored "-Wunused-variable"
2038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos#pragma GCC diagnostic ignored "-Wunused-but-set-variable"
2138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos#pragma GCC diagnostic ignored "-Wunused-function"
2238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
2338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos#include <stdint.h>
2438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos#include <GLES3/gl32.h>
2538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos#include <jni.h>
2638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos#include <JNIHelp.h>
2738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos#include <android_runtime/AndroidRuntime.h>
2838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos#include <utils/misc.h>
2938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos#include <assert.h>
3038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
3138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic int initialized = 0;
3238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
3338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic jclass nioAccessClass;
3438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic jclass bufferClass;
3538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic jmethodID getBasePointerID;
3638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic jmethodID getBaseArrayID;
3738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic jmethodID getBaseArrayOffsetID;
3838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic jfieldID positionID;
3938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic jfieldID limitID;
4038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic jfieldID elementSizeShiftID;
4138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
4238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
4338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos/* special calls implemented in Android's GLES wrapper used to more
4438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos * efficiently bound-check passed arrays */
4538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosextern "C" {
4638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos#ifdef GL_VERSION_ES_CM_1_1
4738c1a7e732660212687cf375f5e5ed354b91e431Pablo CeballosGL_API void GL_APIENTRY glColorPointerBounds(GLint size, GLenum type, GLsizei stride,
4838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        const GLvoid *ptr, GLsizei count);
4938c1a7e732660212687cf375f5e5ed354b91e431Pablo CeballosGL_API void GL_APIENTRY glNormalPointerBounds(GLenum type, GLsizei stride,
5038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        const GLvoid *pointer, GLsizei count);
5138c1a7e732660212687cf375f5e5ed354b91e431Pablo CeballosGL_API void GL_APIENTRY glTexCoordPointerBounds(GLint size, GLenum type,
5238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        GLsizei stride, const GLvoid *pointer, GLsizei count);
5338c1a7e732660212687cf375f5e5ed354b91e431Pablo CeballosGL_API void GL_APIENTRY glVertexPointerBounds(GLint size, GLenum type,
5438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        GLsizei stride, const GLvoid *pointer, GLsizei count);
5538c1a7e732660212687cf375f5e5ed354b91e431Pablo CeballosGL_API void GL_APIENTRY glPointSizePointerOESBounds(GLenum type,
5638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        GLsizei stride, const GLvoid *pointer, GLsizei count);
5738c1a7e732660212687cf375f5e5ed354b91e431Pablo CeballosGL_API void GL_APIENTRY glMatrixIndexPointerOESBounds(GLint size, GLenum type,
5838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        GLsizei stride, const GLvoid *pointer, GLsizei count);
5938c1a7e732660212687cf375f5e5ed354b91e431Pablo CeballosGL_API void GL_APIENTRY glWeightPointerOESBounds(GLint size, GLenum type,
6038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        GLsizei stride, const GLvoid *pointer, GLsizei count);
6138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos#endif
6238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos#ifdef GL_ES_VERSION_2_0
6338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic void glVertexAttribPointerBounds(GLuint indx, GLint size, GLenum type,
6438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        GLboolean normalized, GLsizei stride, const GLvoid *pointer, GLsizei count) {
6538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    glVertexAttribPointer(indx, size, type, normalized, stride, pointer);
6638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
6738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos#endif
6838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos#ifdef GL_ES_VERSION_3_0
6938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic void glVertexAttribIPointerBounds(GLuint indx, GLint size, GLenum type,
7038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        GLsizei stride, const GLvoid *pointer, GLsizei count) {
7138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    glVertexAttribIPointer(indx, size, type, stride, pointer);
7238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
7338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos#endif
7438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
7538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
7638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos/* Cache method IDs each time the class is loaded. */
7738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
7838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic void
7938c1a7e732660212687cf375f5e5ed354b91e431Pablo CeballosnativeClassInit(JNIEnv *_env, jclass glImplClass)
8038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos{
8138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jclass nioAccessClassLocal = _env->FindClass("java/nio/NIOAccess");
8238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    nioAccessClass = (jclass) _env->NewGlobalRef(nioAccessClassLocal);
8338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
8438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jclass bufferClassLocal = _env->FindClass("java/nio/Buffer");
8538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    bufferClass = (jclass) _env->NewGlobalRef(bufferClassLocal);
8638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
8738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    getBasePointerID = _env->GetStaticMethodID(nioAccessClass,
8838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos            "getBasePointer", "(Ljava/nio/Buffer;)J");
8938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    getBaseArrayID = _env->GetStaticMethodID(nioAccessClass,
9038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos            "getBaseArray", "(Ljava/nio/Buffer;)Ljava/lang/Object;");
9138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    getBaseArrayOffsetID = _env->GetStaticMethodID(nioAccessClass,
9238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos            "getBaseArrayOffset", "(Ljava/nio/Buffer;)I");
9338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
9438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    positionID = _env->GetFieldID(bufferClass, "position", "I");
9538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    limitID = _env->GetFieldID(bufferClass, "limit", "I");
9638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    elementSizeShiftID =
9738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _env->GetFieldID(bufferClass, "_elementSizeShift", "I");
9838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
9938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
10038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic void *
10138c1a7e732660212687cf375f5e5ed354b91e431Pablo CeballosgetPointer(JNIEnv *_env, jobject buffer, jarray *array, jint *remaining, jint *offset)
10238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos{
10338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint position;
10438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint limit;
10538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint elementSizeShift;
10638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jlong pointer;
10738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
10838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    position = _env->GetIntField(buffer, positionID);
10938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    limit = _env->GetIntField(buffer, limitID);
11038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    elementSizeShift = _env->GetIntField(buffer, elementSizeShiftID);
11138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    *remaining = (limit - position) << elementSizeShift;
11238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    pointer = _env->CallStaticLongMethod(nioAccessClass,
11338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos            getBasePointerID, buffer);
11438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (pointer != 0L) {
11538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        *array = NULL;
11638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        return reinterpret_cast<void*>(pointer);
11738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
11838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
11938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    *array = (jarray) _env->CallStaticObjectMethod(nioAccessClass,
12038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos            getBaseArrayID, buffer);
12138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    *offset = _env->CallStaticIntMethod(nioAccessClass,
12238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos            getBaseArrayOffsetID, buffer);
12338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
12438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    return NULL;
12538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
12638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
12738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosclass ByteArrayGetter {
12838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballospublic:
12938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    static void* Get(JNIEnv* _env, jbyteArray array, jboolean* is_copy) {
13038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        return _env->GetByteArrayElements(array, is_copy);
13138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
13238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos};
13338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosclass BooleanArrayGetter {
13438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballospublic:
13538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    static void* Get(JNIEnv* _env, jbooleanArray array, jboolean* is_copy) {
13638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        return _env->GetBooleanArrayElements(array, is_copy);
13738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
13838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos};
13938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosclass CharArrayGetter {
14038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballospublic:
14138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    static void* Get(JNIEnv* _env, jcharArray array, jboolean* is_copy) {
14238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        return _env->GetCharArrayElements(array, is_copy);
14338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
14438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos};
14538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosclass ShortArrayGetter {
14638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballospublic:
14738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    static void* Get(JNIEnv* _env, jshortArray array, jboolean* is_copy) {
14838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        return _env->GetShortArrayElements(array, is_copy);
14938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
15038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos};
15138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosclass IntArrayGetter {
15238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballospublic:
15338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    static void* Get(JNIEnv* _env, jintArray array, jboolean* is_copy) {
15438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        return _env->GetIntArrayElements(array, is_copy);
15538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
15638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos};
15738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosclass LongArrayGetter {
15838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballospublic:
15938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    static void* Get(JNIEnv* _env, jlongArray array, jboolean* is_copy) {
16038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        return _env->GetLongArrayElements(array, is_copy);
16138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
16238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos};
16338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosclass FloatArrayGetter {
16438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballospublic:
16538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    static void* Get(JNIEnv* _env, jfloatArray array, jboolean* is_copy) {
16638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        return _env->GetFloatArrayElements(array, is_copy);
16738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
16838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos};
16938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosclass DoubleArrayGetter {
17038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballospublic:
17138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    static void* Get(JNIEnv* _env, jdoubleArray array, jboolean* is_copy) {
17238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        return _env->GetDoubleArrayElements(array, is_copy);
17338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
17438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos};
17538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
17638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballostemplate<typename JTYPEARRAY, typename ARRAYGETTER>
17738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic void*
17838c1a7e732660212687cf375f5e5ed354b91e431Pablo CeballosgetArrayPointer(JNIEnv *_env, JTYPEARRAY array, jboolean* is_copy) {
17938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    return ARRAYGETTER::Get(_env, array, is_copy);
18038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
18138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
18238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosclass ByteArrayReleaser {
18338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballospublic:
18438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    static void Release(JNIEnv* _env, jbyteArray array, jbyte* data, jboolean commit) {
18538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _env->ReleaseByteArrayElements(array, data, commit ? 0 : JNI_ABORT);
18638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
18738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos};
18838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosclass BooleanArrayReleaser {
18938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballospublic:
19038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    static void Release(JNIEnv* _env, jbooleanArray array, jboolean* data, jboolean commit) {
19138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _env->ReleaseBooleanArrayElements(array, data, commit ? 0 : JNI_ABORT);
19238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
19338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos};
19438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosclass CharArrayReleaser {
19538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballospublic:
19638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    static void Release(JNIEnv* _env, jcharArray array, jchar* data, jboolean commit) {
19738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _env->ReleaseCharArrayElements(array, data, commit ? 0 : JNI_ABORT);
19838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
19938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos};
20038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosclass ShortArrayReleaser {
20138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballospublic:
20238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    static void Release(JNIEnv* _env, jshortArray array, jshort* data, jboolean commit) {
20338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _env->ReleaseShortArrayElements(array, data, commit ? 0 : JNI_ABORT);
20438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
20538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos};
20638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosclass IntArrayReleaser {
20738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballospublic:
20838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    static void Release(JNIEnv* _env, jintArray array, jint* data, jboolean commit) {
20938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _env->ReleaseIntArrayElements(array, data, commit ? 0 : JNI_ABORT);
21038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
21138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos};
21238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosclass LongArrayReleaser {
21338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballospublic:
21438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    static void Release(JNIEnv* _env, jlongArray array, jlong* data, jboolean commit) {
21538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _env->ReleaseLongArrayElements(array, data, commit ? 0 : JNI_ABORT);
21638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
21738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos};
21838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosclass FloatArrayReleaser {
21938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballospublic:
22038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    static void Release(JNIEnv* _env, jfloatArray array, jfloat* data, jboolean commit) {
22138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _env->ReleaseFloatArrayElements(array, data, commit ? 0 : JNI_ABORT);
22238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
22338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos};
22438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosclass DoubleArrayReleaser {
22538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballospublic:
22638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    static void Release(JNIEnv* _env, jdoubleArray array, jdouble* data, jboolean commit) {
22738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _env->ReleaseDoubleArrayElements(array, data, commit ? 0 : JNI_ABORT);
22838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
22938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos};
23038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
23138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballostemplate<typename JTYPEARRAY, typename NTYPEARRAY, typename ARRAYRELEASER>
23238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic void
23338c1a7e732660212687cf375f5e5ed354b91e431Pablo CeballosreleaseArrayPointer(JNIEnv *_env, JTYPEARRAY array, NTYPEARRAY data, jboolean commit) {
23438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    ARRAYRELEASER::Release(_env, array, data, commit);
23538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
23638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
23738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic void
23838c1a7e732660212687cf375f5e5ed354b91e431Pablo CeballosreleasePointer(JNIEnv *_env, jarray array, void *data, jboolean commit)
23938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos{
24038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    _env->ReleasePrimitiveArrayCritical(array, data,
24138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos                       commit ? 0 : JNI_ABORT);
24238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
24338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
24438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic void *
24538c1a7e732660212687cf375f5e5ed354b91e431Pablo CeballosgetDirectBufferPointer(JNIEnv *_env, jobject buffer) {
24638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    char* buf = (char*) _env->GetDirectBufferAddress(buffer);
24738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (buf) {
24838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        jint position = _env->GetIntField(buffer, positionID);
24938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        jint elementSizeShift = _env->GetIntField(buffer, elementSizeShiftID);
25038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        buf += position << elementSizeShift;
25138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    } else {
25238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        jniThrowException(_env, "java/lang/IllegalArgumentException",
25338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos                          "Must use a native order direct Buffer");
25438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
25538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    return (void*) buf;
25638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
25738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
25838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos// --------------------------------------------------------------------------
25938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
26038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos/*
26138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos * returns the number of values glGet returns for a given pname.
26238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos *
26338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos * The code below is written such that pnames requiring only one values
26438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos * are the default (and are not explicitely tested for). This makes the
26538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos * checking code much shorter/readable/efficient.
26638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos *
26738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos * This means that unknown pnames (e.g.: extensions) will default to 1. If
26838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos * that unknown pname needs more than 1 value, then the validation check
26938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos * is incomplete and the app may crash if it passed the wrong number params.
27038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos */
27138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic int getNeededCount(GLint pname) {
27238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    int needed = 1;
27338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos#ifdef GL_ES_VERSION_2_0
27438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    // GLES 2.x pnames
27538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    switch (pname) {
27638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        case GL_ALIASED_LINE_WIDTH_RANGE:
27738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        case GL_ALIASED_POINT_SIZE_RANGE:
27838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos            needed = 2;
27938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos            break;
28038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
28138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        case GL_BLEND_COLOR:
28238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        case GL_COLOR_CLEAR_VALUE:
28338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        case GL_COLOR_WRITEMASK:
28438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        case GL_SCISSOR_BOX:
28538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        case GL_VIEWPORT:
28638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos            needed = 4;
28738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos            break;
28838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
28938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        case GL_COMPRESSED_TEXTURE_FORMATS:
29038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos            glGetIntegerv(GL_NUM_COMPRESSED_TEXTURE_FORMATS, &needed);
29138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos            break;
29238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
29338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        case GL_SHADER_BINARY_FORMATS:
29438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos            glGetIntegerv(GL_NUM_SHADER_BINARY_FORMATS, &needed);
29538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos            break;
29638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
29738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos#endif
29838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
29938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos#ifdef GL_VERSION_ES_CM_1_1
30038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    // GLES 1.x pnames
30138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    switch (pname) {
30238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        case GL_ALIASED_LINE_WIDTH_RANGE:
30338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        case GL_ALIASED_POINT_SIZE_RANGE:
30438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        case GL_DEPTH_RANGE:
30538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        case GL_SMOOTH_LINE_WIDTH_RANGE:
30638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        case GL_SMOOTH_POINT_SIZE_RANGE:
30738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos            needed = 2;
30838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos            break;
30938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
31038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        case GL_CURRENT_NORMAL:
31138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        case GL_POINT_DISTANCE_ATTENUATION:
31238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos            needed = 3;
31338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos            break;
31438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
31538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        case GL_COLOR_CLEAR_VALUE:
31638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        case GL_COLOR_WRITEMASK:
31738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        case GL_CURRENT_COLOR:
31838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        case GL_CURRENT_TEXTURE_COORDS:
31938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        case GL_FOG_COLOR:
32038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        case GL_LIGHT_MODEL_AMBIENT:
32138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        case GL_SCISSOR_BOX:
32238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        case GL_VIEWPORT:
32338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos            needed = 4;
32438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos            break;
32538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
32638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        case GL_MODELVIEW_MATRIX:
32738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        case GL_PROJECTION_MATRIX:
32838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        case GL_TEXTURE_MATRIX:
32938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos            needed = 16;
33038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos            break;
33138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
33238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        case GL_COMPRESSED_TEXTURE_FORMATS:
33338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos            glGetIntegerv(GL_NUM_COMPRESSED_TEXTURE_FORMATS, &needed);
33438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos            break;
33538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
33638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos#endif
33738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    return needed;
33838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
33938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
34038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballostemplate <typename JTYPEARRAY, typename ARRAYGETTER, typename NTYPEARRAY,
34138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos          typename ARRAYRELEASER, typename CTYPE, void GET(GLenum, CTYPE*)>
34238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic void
34338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosget
34438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos  (JNIEnv *_env, jobject _this, jint pname, JTYPEARRAY params_ref, jint offset) {
34538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _exception = 0;
34638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    const char * _exceptionType;
34738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    const char * _exceptionMessage;
34838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    CTYPE *params_base = (CTYPE *) 0;
34938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _remaining;
35038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    CTYPE *params = (CTYPE *) 0;
35138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    int _needed = 0;
35238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
35338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (!params_ref) {
35438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exception = 1;
35538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionType = "java/lang/IllegalArgumentException";
35638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionMessage = "params == null";
35738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        goto exit;
35838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
35938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (offset < 0) {
36038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exception = 1;
36138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionType = "java/lang/IllegalArgumentException";
36238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionMessage = "offset < 0";
36338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        goto exit;
36438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
36538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    _remaining = _env->GetArrayLength(params_ref) - offset;
36638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    _needed = getNeededCount(pname);
36738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    // if we didn't find this pname, we just assume the user passed
36838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    // an array of the right size -- this might happen with extensions
36938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    // or if we forget an enum here.
37038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (_remaining < _needed) {
37138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exception = 1;
37238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionType = "java/lang/IllegalArgumentException";
37338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionMessage = "length - offset < needed";
37438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        goto exit;
37538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
37638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    params_base = (CTYPE *) getArrayPointer<JTYPEARRAY, ARRAYGETTER>(
37738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _env, params_ref, (jboolean *)0);
37838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    params = params_base + offset;
37938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
38038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    GET(
38138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)pname,
38238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (CTYPE *)params
38338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    );
38438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
38538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosexit:
38638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (params_base) {
38738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        releaseArrayPointer<JTYPEARRAY, NTYPEARRAY, ARRAYRELEASER>(
38838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos            _env, params_ref, params_base, !_exception);
38938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
39038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (_exception) {
39138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        jniThrowException(_env, _exceptionType, _exceptionMessage);
39238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
39338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
39438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
39538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
39638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballostemplate <typename CTYPE, typename JTYPEARRAY, typename ARRAYGETTER, typename NTYPEARRAY,
39738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos          typename ARRAYRELEASER, void GET(GLenum, CTYPE*)>
39838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic void
39938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosgetarray
40038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos  (JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
40138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _exception = 0;
40238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    const char * _exceptionType;
40338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    const char * _exceptionMessage;
40438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    JTYPEARRAY _array = (JTYPEARRAY) 0;
40538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _bufferOffset = (jint) 0;
40638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _remaining;
40738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    CTYPE *params = (CTYPE *) 0;
40838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    int _needed = 0;
40938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
41038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    params = (CTYPE *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
41138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    _remaining /= sizeof(CTYPE);    // convert from bytes to item count
41238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    _needed = getNeededCount(pname);
41338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    // if we didn't find this pname, we just assume the user passed
41438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    // an array of the right size -- this might happen with extensions
41538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    // or if we forget an enum here.
41638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (_needed>0 && _remaining < _needed) {
41738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exception = 1;
41838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionType = "java/lang/IllegalArgumentException";
41938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionMessage = "remaining() < needed";
42038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        goto exit;
42138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
42238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (params == NULL) {
42338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        char * _paramsBase = (char *) getArrayPointer<JTYPEARRAY, ARRAYGETTER>(
42438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos            _env, _array, (jboolean *) 0);
42538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        params = (CTYPE *) (_paramsBase + _bufferOffset);
42638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
42738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    GET(
42838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)pname,
42938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (CTYPE *)params
43038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    );
43138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
43238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosexit:
43338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (_array) {
43438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        releaseArrayPointer<JTYPEARRAY, NTYPEARRAY, ARRAYRELEASER>(
43538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos            _env, _array, (NTYPEARRAY)params, _exception ? JNI_FALSE : JNI_TRUE);
43638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
43738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (_exception) {
43838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        jniThrowException(_env, _exceptionType, _exceptionMessage);
43938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
44038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
44138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
44238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos// --------------------------------------------------------------------------
44338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos/* void glBlendBarrier ( void ) */
44438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic void
44538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosandroid_glBlendBarrier__
44638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos  (JNIEnv *_env, jobject _this) {
44738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    glBlendBarrier();
44838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
44938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
45038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos/* void glCopyImageSubData ( GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth ) */
45138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic void
45238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosandroid_glCopyImageSubData__IIIIIIIIIIIIIII
45338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos  (JNIEnv *_env, jobject _this, jint srcName, jint srcTarget, jint srcLevel, jint srcX, jint srcY, jint srcZ, jint dstName, jint dstTarget, jint dstLevel, jint dstX, jint dstY, jint dstZ, jint srcWidth, jint srcHeight, jint srcDepth) {
45438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    glCopyImageSubData(
45538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLuint)srcName,
45638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)srcTarget,
45738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLint)srcLevel,
45838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLint)srcX,
45938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLint)srcY,
46038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLint)srcZ,
46138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLuint)dstName,
46238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)dstTarget,
46338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLint)dstLevel,
46438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLint)dstX,
46538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLint)dstY,
46638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLint)dstZ,
46738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLsizei)srcWidth,
46838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLsizei)srcHeight,
46938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLsizei)srcDepth
47038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    );
47138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
47238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
47338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos/* void glDebugMessageControl ( GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled ) */
47438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic void
47538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosandroid_glDebugMessageControl__IIII_3IIZ
47638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos  (JNIEnv *_env, jobject _this, jint source, jint type, jint severity, jint count, jintArray ids_ref, jint offset, jboolean enabled) {
47738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _exception = 0;
47838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    const char * _exceptionType = NULL;
47938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    const char * _exceptionMessage = NULL;
48038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    GLuint *ids_base = (GLuint *) 0;
48138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _remaining;
48238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    GLuint *ids = (GLuint *) 0;
48338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
48438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (!ids_ref) {
48538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exception = 1;
48638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionType = "java/lang/IllegalArgumentException";
48738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionMessage = "ids == null";
48838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        goto exit;
48938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
49038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (offset < 0) {
49138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exception = 1;
49238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionType = "java/lang/IllegalArgumentException";
49338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionMessage = "offset < 0";
49438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        goto exit;
49538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
49638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    _remaining = _env->GetArrayLength(ids_ref) - offset;
49738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (_remaining < count) {
49838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exception = 1;
49938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionType = "java/lang/IllegalArgumentException";
50038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionMessage = "length - offset < count < needed";
50138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        goto exit;
50238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
50338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    ids_base = (GLuint *)
50438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _env->GetIntArrayElements(ids_ref, (jboolean *)0);
50538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    ids = ids_base + offset;
50638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
50738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    glDebugMessageControl(
50838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)source,
50938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)type,
51038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)severity,
51138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLsizei)count,
51238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLuint *)ids,
51338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLboolean)enabled
51438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    );
51538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
51638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosexit:
51738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (ids_base) {
51838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _env->ReleaseIntArrayElements(ids_ref, (jint*)ids_base,
51938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos            JNI_ABORT);
52038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
52138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (_exception) {
52238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        jniThrowException(_env, _exceptionType, _exceptionMessage);
52338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
52438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
52538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
52638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos/* void glDebugMessageControl ( GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled ) */
52738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic void
52838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosandroid_glDebugMessageControl__IIIILjava_nio_IntBuffer_2Z
52938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos  (JNIEnv *_env, jobject _this, jint source, jint type, jint severity, jint count, jobject ids_buf, jboolean enabled) {
53038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _exception = 0;
53138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    const char * _exceptionType = NULL;
53238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    const char * _exceptionMessage = NULL;
53338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jintArray _array = (jintArray) 0;
53438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _bufferOffset = (jint) 0;
53538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _remaining;
53638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    GLuint *ids = (GLuint *) 0;
53738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
53838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    ids = (GLuint *)getPointer(_env, ids_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
53938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (_remaining < count) {
54038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exception = 1;
54138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionType = "java/lang/IllegalArgumentException";
54238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionMessage = "remaining() < count < needed";
54338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        goto exit;
54438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
54538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (ids == NULL) {
54638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        char * _idsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
54738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        ids = (GLuint *) (_idsBase + _bufferOffset);
54838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
54938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    glDebugMessageControl(
55038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)source,
55138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)type,
55238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)severity,
55338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLsizei)count,
55438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLuint *)ids,
55538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLboolean)enabled
55638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    );
55738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
55838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosexit:
55938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (_array) {
56038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _env->ReleaseIntArrayElements(_array, (jint*)ids, JNI_ABORT);
56138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
56238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (_exception) {
56338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        jniThrowException(_env, _exceptionType, _exceptionMessage);
56438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
56538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
56638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
56738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos/* void glDebugMessageInsert ( GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf ) */
56838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic void
56938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosandroid_glDebugMessageInsert__IIIIILjava_lang_String_2
57038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos  (JNIEnv *_env, jobject _this, jint source, jint type, jint id, jint severity, jint length, jstring buf) {
57138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _exception = 0;
57238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    const char * _exceptionType = NULL;
57338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    const char * _exceptionMessage = NULL;
57438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    const char* _nativebuf = 0;
57538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
57638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (!buf) {
57738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exception = 1;
57838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionType = "java/lang/IllegalArgumentException";
57938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionMessage = "buf == null";
58038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        goto exit;
58138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
58238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    _nativebuf = _env->GetStringUTFChars(buf, 0);
58338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
58438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    glDebugMessageInsert(
58538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)source,
58638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)type,
58738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLuint)id,
58838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)severity,
58938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLsizei)length,
59038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLchar *)_nativebuf
59138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    );
59238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
59338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosexit:
59438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (_nativebuf) {
59538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _env->ReleaseStringUTFChars(buf, _nativebuf);
59638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
59738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
59838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (_exception) {
59938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        jniThrowException(_env, _exceptionType, _exceptionMessage);
60038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
60138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
60238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
60338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos/* void glDebugMessageCallback ( GLDEBUGPROC callback, const void *userParam ) */
60438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic void
60538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosandroid_glDebugMessageCallback(JNIEnv *_env, jobject _this, jobject callback) {
60638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jniThrowException(_env, "java/lang/UnsupportedOperationException", "not yet implemented");
60738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
60838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos/* GLuint glGetDebugMessageLog ( GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog ) */
60938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic jint
61038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosandroid_glGetDebugMessageLog__II_3II_3II_3II_3II_3II_3BI
61138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos  (JNIEnv *_env, jobject _this, jint count, jint bufSize, jintArray sources_ref, jint sourcesOffset, jintArray types_ref, jint typesOffset, jintArray ids_ref, jint idsOffset, jintArray severities_ref, jint severitiesOffset, jintArray lengths_ref, jint lengthsOffset, jbyteArray messageLog_ref, jint messageLogOffset) {
61238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jniThrowException(_env, "java/lang/UnsupportedOperationException", "not yet implemented");
61338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    return 0;
61438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
61538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
61638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos/* GLuint glGetDebugMessageLog ( GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog ) */
61738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic uint
61838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosandroid_glGetDebugMessageLog__ILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_ByteBuffer_2
61938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos  (JNIEnv *_env, jobject _this, jint count, jobject sources_ref, jobject types_ref, jobject ids_ref, jobject severities_ref, jobject lengths_ref, jobject messageLog_ref) {
62038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jniThrowException(_env, "java/lang/UnsupportedOperationException", "not yet implemented");
62138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    return 0;
62238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
62338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
62438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos/* GLuint glGetDebugMessageLog ( GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog ) */
62538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic jobjectArray
62638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosandroid_glGetDebugMessageLog__I_3II_3II_3II_3II
62738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos  (JNIEnv *_env, jobject _this, jint count, jintArray sources_ref, jint sourcesOffset, jintArray types_ref, jint typesOffset, jintArray ids_ref, jint idsOffset, jintArray severities_ref, jint severitiesOffset) {
62838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jniThrowException(_env, "java/lang/UnsupportedOperationException", "not yet implemented");
62938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    return 0;
63038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
63138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
63238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos/* GLuint glGetDebugMessageLog ( GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog ) */
63338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic jobjectArray
63438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosandroid_glGetDebugMessageLog__ILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_IntBuffer_2
63538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos  (JNIEnv *_env, jobject _this, jint count, jobject sources_ref, jobject types_ref, jobject ids_ref, jobject severities_ref) {
63638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jniThrowException(_env, "java/lang/UnsupportedOperationException", "not yet implemented");
63738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    return 0;
63838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
63938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos/* void glPushDebugGroup ( GLenum source, GLuint id, GLsizei length, const GLchar *message ) */
64038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic void
64138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosandroid_glPushDebugGroup__IIILjava_lang_String_2
64238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos  (JNIEnv *_env, jobject _this, jint source, jint id, jint length, jstring message) {
64338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _exception = 0;
64438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    const char * _exceptionType = NULL;
64538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    const char * _exceptionMessage = NULL;
64638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    const char* _nativemessage = 0;
64738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jsize _stringlen = 0;
64838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
64938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (!message) {
65038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exception = 1;
65138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionType = "java/lang/IllegalArgumentException";
65238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionMessage = "message == null";
65338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        goto exit;
65438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
65538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    _nativemessage = _env->GetStringUTFChars(message, 0);
65638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    _stringlen = _env->GetStringUTFLength(message);
65738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (length > _stringlen) {
65838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exception = 1;
65938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionType = "java/lang/ArrayIndexOutOfBoundsException";
66038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionMessage = "length of message is shorter than length argument";
66138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        goto exit;
66238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
66338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
66438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    glPushDebugGroup(
66538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)source,
66638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLuint)id,
66738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLsizei)length,
66838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLchar *)_nativemessage
66938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    );
67038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
67138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosexit:
67238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (_nativemessage) {
67338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _env->ReleaseStringUTFChars(message, _nativemessage);
67438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
67538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
67638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (_exception) {
67738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        jniThrowException(_env, _exceptionType, _exceptionMessage);
67838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
67938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
68038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
68138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos/* void glPopDebugGroup ( void ) */
68238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic void
68338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosandroid_glPopDebugGroup__
68438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos  (JNIEnv *_env, jobject _this) {
68538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    glPopDebugGroup();
68638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
68738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
68838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos/* void glObjectLabel ( GLenum identifier, GLuint name, GLsizei length, const GLchar *label ) */
68938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic void
69038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosandroid_glObjectLabel__IIILjava_lang_String_2
69138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos  (JNIEnv *_env, jobject _this, jint identifier, jint name, jint length, jstring label) {
69238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _exception = 0;
69338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    const char * _exceptionType = NULL;
69438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    const char * _exceptionMessage = NULL;
69538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    const char* _nativelabel = 0;
69638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jsize _stringlen = 0;
69738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
69838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (label) {
69938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _nativelabel = _env->GetStringUTFChars(label, 0);
70038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _stringlen = _env->GetStringUTFLength(label);
70138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        if (length > _stringlen) {
70238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos            _exception = 1;
70338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos            _exceptionType = "java/lang/ArrayIndexOutOfBoundsException";
70438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos            _exceptionMessage = "length of label is shorter than length argument";
70538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos            goto exit;
70638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        }
70738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
70838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
70938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    glObjectLabel(
71038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)identifier,
71138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLuint)name,
71238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLsizei)length,
71338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLchar *)_nativelabel
71438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    );
71538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
71638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosexit:
71738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (_nativelabel) {
71838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _env->ReleaseStringUTFChars(label, _nativelabel);
71938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
72038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
72138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (_exception) {
72238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        jniThrowException(_env, _exceptionType, _exceptionMessage);
72338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
72438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
72538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
72638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos/* void glGetObjectLabel ( GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label ) */
72738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic jstring
72838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosandroid_glGetObjectLabel(JNIEnv *_env, jobject _this, jint identifier, jint name) {
72938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jniThrowException(_env, "java/lang/UnsupportedOperationException", "not yet implemented");
73038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    return NULL;
73138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
73238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
73338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos/* void glObjectPtrLabel ( const void *ptr, GLsizei length, const GLchar *label ) */
73438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic void
73538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosandroid_glObjectPtrLabel(JNIEnv *_env, jobject _this, jlong ptr, jstring label) {
73638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jniThrowException(_env, "java/lang/UnsupportedOperationException", "not yet implemented");
73738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
73838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
73938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos/* void glGetObjectPtrLabel ( const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label ) */
74038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic jstring
74138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosandroid_glGetObjectPtrLabel(JNIEnv *_env, jobject _this, jlong ptr) {
74238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jniThrowException(_env, "java/lang/UnsupportedOperationException", "not yet implemented");
74338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    return NULL;
74438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
74538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
74638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos/* void glGetPointerv ( GLenum pname, void **params ) */
74738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic jlong
74838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosandroid_glGetPointerv(JNIEnv *_env, jobject _this, jint pname) {
74938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jniThrowException(_env, "java/lang/UnsupportedOperationException", "not yet implemented");
75038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    return NULL;
75138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
75238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
75338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos/* void glEnablei ( GLenum target, GLuint index ) */
75438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic void
75538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosandroid_glEnablei__II
75638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos  (JNIEnv *_env, jobject _this, jint target, jint index) {
75738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    glEnablei(
75838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)target,
75938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLuint)index
76038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    );
76138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
76238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
76338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos/* void glDisablei ( GLenum target, GLuint index ) */
76438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic void
76538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosandroid_glDisablei__II
76638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos  (JNIEnv *_env, jobject _this, jint target, jint index) {
76738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    glDisablei(
76838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)target,
76938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLuint)index
77038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    );
77138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
77238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
77338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos/* void glBlendEquationi ( GLuint buf, GLenum mode ) */
77438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic void
77538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosandroid_glBlendEquationi__II
77638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos  (JNIEnv *_env, jobject _this, jint buf, jint mode) {
77738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    glBlendEquationi(
77838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLuint)buf,
77938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)mode
78038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    );
78138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
78238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
78338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos/* void glBlendEquationSeparatei ( GLuint buf, GLenum modeRGB, GLenum modeAlpha ) */
78438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic void
78538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosandroid_glBlendEquationSeparatei__III
78638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos  (JNIEnv *_env, jobject _this, jint buf, jint modeRGB, jint modeAlpha) {
78738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    glBlendEquationSeparatei(
78838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLuint)buf,
78938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)modeRGB,
79038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)modeAlpha
79138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    );
79238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
79338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
79438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos/* void glBlendFunci ( GLuint buf, GLenum src, GLenum dst ) */
79538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic void
79638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosandroid_glBlendFunci__III
79738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos  (JNIEnv *_env, jobject _this, jint buf, jint src, jint dst) {
79838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    glBlendFunci(
79938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLuint)buf,
80038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)src,
80138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)dst
80238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    );
80338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
80438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
80538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos/* void glBlendFuncSeparatei ( GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha ) */
80638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic void
80738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosandroid_glBlendFuncSeparatei__IIIII
80838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos  (JNIEnv *_env, jobject _this, jint buf, jint srcRGB, jint dstRGB, jint srcAlpha, jint dstAlpha) {
80938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    glBlendFuncSeparatei(
81038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLuint)buf,
81138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)srcRGB,
81238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)dstRGB,
81338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)srcAlpha,
81438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)dstAlpha
81538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    );
81638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
81738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
81838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos/* void glColorMaski ( GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a ) */
81938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic void
82038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosandroid_glColorMaski__IZZZZ
82138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos  (JNIEnv *_env, jobject _this, jint index, jboolean r, jboolean g, jboolean b, jboolean a) {
82238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    glColorMaski(
82338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLuint)index,
82438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLboolean)r,
82538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLboolean)g,
82638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLboolean)b,
82738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLboolean)a
82838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    );
82938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
83038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
83138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos/* GLboolean glIsEnabledi ( GLenum target, GLuint index ) */
83238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic jboolean
83338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosandroid_glIsEnabledi__II
83438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos  (JNIEnv *_env, jobject _this, jint target, jint index) {
83538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    GLboolean _returnValue;
83638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    _returnValue = glIsEnabledi(
83738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)target,
83838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLuint)index
83938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    );
84038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    return (jboolean)_returnValue;
84138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
84238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
84338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos/* void glDrawElementsBaseVertex ( GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex ) */
84438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic void
84538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosandroid_glDrawElementsBaseVertex__IIILjava_nio_Buffer_2I
84638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos  (JNIEnv *_env, jobject _this, jint mode, jint count, jint type, jobject indices_buf, jint basevertex) {
84738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _exception = 0;
84838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    const char * _exceptionType = NULL;
84938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    const char * _exceptionMessage = NULL;
85038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jarray _array = (jarray) 0;
85138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _bufferOffset = (jint) 0;
85238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _remaining;
85338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    void *indices = (void *) 0;
85438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
85538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    indices = (void *)getPointer(_env, indices_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
85638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (_remaining < count-basevertex) {
85738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exception = 1;
85838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionType = "java/lang/ArrayIndexOutOfBoundsException";
85938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionMessage = "remaining() < count-basevertex < needed";
86038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        goto exit;
86138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
86238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (indices == NULL) {
86338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        char * _indicesBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
86438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        indices = (void *) (_indicesBase + _bufferOffset);
86538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
86638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    glDrawElementsBaseVertex(
86738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)mode,
86838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLsizei)count,
86938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)type,
87038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (void *)indices,
87138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLint)basevertex
87238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    );
87338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
87438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosexit:
87538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (_array) {
87638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        releasePointer(_env, _array, indices, JNI_FALSE);
87738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
87838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (_exception) {
87938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        jniThrowException(_env, _exceptionType, _exceptionMessage);
88038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
88138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
88238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
88338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos/* void glDrawRangeElementsBaseVertex ( GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex ) */
88438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic void
88538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosandroid_glDrawRangeElementsBaseVertex__IIIIILjava_nio_Buffer_2I
88638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos  (JNIEnv *_env, jobject _this, jint mode, jint start, jint end, jint count, jint type, jobject indices_buf, jint basevertex) {
88738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _exception = 0;
88838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    const char * _exceptionType = NULL;
88938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    const char * _exceptionMessage = NULL;
89038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jarray _array = (jarray) 0;
89138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _bufferOffset = (jint) 0;
89238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _remaining;
89338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    void *indices = (void *) 0;
89438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
89538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    indices = (void *)getPointer(_env, indices_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
89638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (_remaining < count-basevertex) {
89738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exception = 1;
89838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionType = "java/lang/ArrayIndexOutOfBoundsException";
89938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionMessage = "remaining() < count-basevertex < needed";
90038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        goto exit;
90138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
90238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (indices == NULL) {
90338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        char * _indicesBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
90438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        indices = (void *) (_indicesBase + _bufferOffset);
90538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
90638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    glDrawRangeElementsBaseVertex(
90738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)mode,
90838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLuint)start,
90938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLuint)end,
91038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLsizei)count,
91138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)type,
91238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (void *)indices,
91338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLint)basevertex
91438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    );
91538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
91638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosexit:
91738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (_array) {
91838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        releasePointer(_env, _array, indices, JNI_FALSE);
91938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
92038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (_exception) {
92138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        jniThrowException(_env, _exceptionType, _exceptionMessage);
92238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
92338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
92438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
92538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos/* void glDrawElementsInstancedBaseVertex ( GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instanceCount, GLint basevertex ) */
92638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic void
92738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosandroid_glDrawElementsInstancedBaseVertex__IIILjava_nio_Buffer_2II
92838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos  (JNIEnv *_env, jobject _this, jint mode, jint count, jint type, jobject indices_buf, jint instanceCount, jint basevertex) {
92938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _exception = 0;
93038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    const char * _exceptionType = NULL;
93138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    const char * _exceptionMessage = NULL;
93238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jarray _array = (jarray) 0;
93338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _bufferOffset = (jint) 0;
93438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _remaining;
93538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    void *indices = (void *) 0;
93638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
93738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    indices = (void *)getPointer(_env, indices_buf, &_array, &_remaining, &_bufferOffset);
93838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (_remaining < count-basevertex) {
93938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exception = 1;
94038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionType = "java/lang/ArrayIndexOutOfBoundsException";
94138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionMessage = "remaining() < count-basevertex < needed";
94238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        goto exit;
94338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
94438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (indices == NULL) {
94538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        char * _indicesBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
94638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        indices = (void *) (_indicesBase + _bufferOffset);
94738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
94838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    glDrawElementsInstancedBaseVertex(
94938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)mode,
95038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLsizei)count,
95138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)type,
95238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (void *)indices,
95338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLsizei)instanceCount,
95438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLint) basevertex
95538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    );
95638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
95738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosexit:
95838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (_array) {
95938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        releasePointer(_env, _array, indices, JNI_FALSE);
96038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
96138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
96238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
96338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos/* void glDrawElementsInstancedBaseVertex ( GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instanceCount, GLint basevertex ) */
96438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic void
96538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosandroid_glDrawElementsInstancedBaseVertex__IIIIII
96638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos  (JNIEnv *_env, jobject _this, jint mode, jint count, jint type, jint indicesOffset, jint instanceCount, jint basevertex) {
96738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    glDrawElementsInstancedBaseVertex(
96838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)mode,
96938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLsizei)count,
97038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)type,
97138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (void *)static_cast<uintptr_t>(indicesOffset),
97238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLsizei)instanceCount,
97338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLint)basevertex
97438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    );
97538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
97638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos/* void glFramebufferTexture ( GLenum target, GLenum attachment, GLuint texture, GLint level ) */
97738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic void
97838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosandroid_glFramebufferTexture__IIII
97938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos  (JNIEnv *_env, jobject _this, jint target, jint attachment, jint texture, jint level) {
98038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    glFramebufferTexture(
98138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)target,
98238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)attachment,
98338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLuint)texture,
98438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLint)level
98538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    );
98638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
98738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
98838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos/* void glPrimitiveBoundingBox ( GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW ) */
98938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic void
99038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosandroid_glPrimitiveBoundingBox__FFFFFFFF
99138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos  (JNIEnv *_env, jobject _this, jfloat minX, jfloat minY, jfloat minZ, jfloat minW, jfloat maxX, jfloat maxY, jfloat maxZ, jfloat maxW) {
99238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    glPrimitiveBoundingBox(
99338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLfloat)minX,
99438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLfloat)minY,
99538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLfloat)minZ,
99638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLfloat)minW,
99738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLfloat)maxX,
99838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLfloat)maxY,
99938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLfloat)maxZ,
100038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLfloat)maxW
100138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    );
100238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
100338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
100438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos/* GLenum glGetGraphicsResetStatus ( void ) */
100538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic jint
100638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosandroid_glGetGraphicsResetStatus__
100738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos  (JNIEnv *_env, jobject _this) {
100838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    GLenum _returnValue;
100938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    _returnValue = glGetGraphicsResetStatus();
101038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    return (jint)_returnValue;
101138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
101238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
101338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos/* void glReadnPixels ( GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data ) */
101438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic void
101538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosandroid_glReadnPixels__IIIIIIILjava_nio_Buffer_2
101638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos  (JNIEnv *_env, jobject _this, jint x, jint y, jint width, jint height, jint format, jint type, jint bufSize, jobject data_buf) {
101738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _exception = 0;
101838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    const char * _exceptionType = NULL;
101938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    const char * _exceptionMessage = NULL;
102038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jarray _array = (jarray) 0;
102138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _bufferOffset = (jint) 0;
102238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _remaining;
102338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    void *data = (void *) 0;
102438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
102538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    data = (void *)getPointer(_env, data_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
102638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (_remaining < bufSize) {
102738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exception = 1;
102838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionType = "java/lang/IllegalArgumentException";
102938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionMessage = "remaining() < bufSize < needed";
103038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        goto exit;
103138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
103238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (data == NULL) {
103338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        char * _dataBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
103438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        data = (void *) (_dataBase + _bufferOffset);
103538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
103638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    glReadnPixels(
103738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLint)x,
103838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLint)y,
103938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLsizei)width,
104038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLsizei)height,
104138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)format,
104238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)type,
104338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLsizei)bufSize,
104438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (void *)data
104538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    );
104638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
104738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosexit:
104838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (_array) {
104938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        releasePointer(_env, _array, data, _exception ? JNI_FALSE : JNI_TRUE);
105038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
105138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (_exception) {
105238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        jniThrowException(_env, _exceptionType, _exceptionMessage);
105338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
105438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
105538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
105638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos/* void glGetnUniformfv ( GLuint program, GLint location, GLsizei bufSize, GLfloat *params ) */
105738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic void
105838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosandroid_glGetnUniformfv__III_3FI
105938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos  (JNIEnv *_env, jobject _this, jint program, jint location, jint bufSize, jfloatArray params_ref, jint offset) {
106038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _exception = 0;
106138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    const char * _exceptionType = NULL;
106238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    const char * _exceptionMessage = NULL;
106338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    GLfloat *params_base = (GLfloat *) 0;
106438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _remaining;
106538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    GLfloat *params = (GLfloat *) 0;
106638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
106738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (!params_ref) {
106838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exception = 1;
106938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionType = "java/lang/IllegalArgumentException";
107038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionMessage = "params == null";
107138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        goto exit;
107238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
107338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (offset < 0) {
107438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exception = 1;
107538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionType = "java/lang/IllegalArgumentException";
107638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionMessage = "offset < 0";
107738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        goto exit;
107838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
107938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    _remaining = _env->GetArrayLength(params_ref) - offset;
108038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (_remaining < bufSize) {
108138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exception = 1;
108238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionType = "java/lang/IllegalArgumentException";
108338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionMessage = "length - offset < bufSize < needed";
108438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        goto exit;
108538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
108638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    params_base = (GLfloat *)
108738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _env->GetFloatArrayElements(params_ref, (jboolean *)0);
108838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    params = params_base + offset;
108938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
109038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    glGetnUniformfv(
109138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLuint)program,
109238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLint)location,
109338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLsizei)bufSize,
109438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLfloat *)params
109538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    );
109638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
109738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosexit:
109838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (params_base) {
109938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _env->ReleaseFloatArrayElements(params_ref, (jfloat*)params_base,
110038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos            _exception ? JNI_ABORT: 0);
110138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
110238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (_exception) {
110338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        jniThrowException(_env, _exceptionType, _exceptionMessage);
110438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
110538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
110638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
110738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos/* void glGetnUniformfv ( GLuint program, GLint location, GLsizei bufSize, GLfloat *params ) */
110838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic void
110938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosandroid_glGetnUniformfv__IIILjava_nio_FloatBuffer_2
111038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos  (JNIEnv *_env, jobject _this, jint program, jint location, jint bufSize, jobject params_buf) {
111138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _exception = 0;
111238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    const char * _exceptionType = NULL;
111338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    const char * _exceptionMessage = NULL;
111438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jfloatArray _array = (jfloatArray) 0;
111538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _bufferOffset = (jint) 0;
111638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _remaining;
111738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    GLfloat *params = (GLfloat *) 0;
111838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
111938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    params = (GLfloat *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
112038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (_remaining < bufSize) {
112138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exception = 1;
112238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionType = "java/lang/IllegalArgumentException";
112338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionMessage = "remaining() < bufSize < needed";
112438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        goto exit;
112538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
112638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (params == NULL) {
112738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        char * _paramsBase = (char *)_env->GetFloatArrayElements(_array, (jboolean *) 0);
112838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        params = (GLfloat *) (_paramsBase + _bufferOffset);
112938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
113038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    glGetnUniformfv(
113138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLuint)program,
113238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLint)location,
113338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLsizei)bufSize,
113438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLfloat *)params
113538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    );
113638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
113738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosexit:
113838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (_array) {
113938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _env->ReleaseFloatArrayElements(_array, (jfloat*)params, _exception ? JNI_ABORT : 0);
114038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
114138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (_exception) {
114238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        jniThrowException(_env, _exceptionType, _exceptionMessage);
114338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
114438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
114538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
114638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos/* void glGetnUniformiv ( GLuint program, GLint location, GLsizei bufSize, GLint *params ) */
114738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic void
114838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosandroid_glGetnUniformiv__III_3II
114938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos  (JNIEnv *_env, jobject _this, jint program, jint location, jint bufSize, jintArray params_ref, jint offset) {
115038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _exception = 0;
115138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    const char * _exceptionType = NULL;
115238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    const char * _exceptionMessage = NULL;
115338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    GLint *params_base = (GLint *) 0;
115438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _remaining;
115538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    GLint *params = (GLint *) 0;
115638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
115738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (!params_ref) {
115838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exception = 1;
115938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionType = "java/lang/IllegalArgumentException";
116038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionMessage = "params == null";
116138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        goto exit;
116238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
116338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (offset < 0) {
116438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exception = 1;
116538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionType = "java/lang/IllegalArgumentException";
116638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionMessage = "offset < 0";
116738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        goto exit;
116838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
116938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    _remaining = _env->GetArrayLength(params_ref) - offset;
117038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (_remaining < bufSize) {
117138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exception = 1;
117238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionType = "java/lang/IllegalArgumentException";
117338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionMessage = "length - offset < bufSize < needed";
117438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        goto exit;
117538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
117638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    params_base = (GLint *)
117738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _env->GetIntArrayElements(params_ref, (jboolean *)0);
117838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    params = params_base + offset;
117938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
118038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    glGetnUniformiv(
118138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLuint)program,
118238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLint)location,
118338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLsizei)bufSize,
118438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLint *)params
118538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    );
118638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
118738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosexit:
118838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (params_base) {
118938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
119038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos            _exception ? JNI_ABORT: 0);
119138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
119238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (_exception) {
119338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        jniThrowException(_env, _exceptionType, _exceptionMessage);
119438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
119538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
119638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
119738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos/* void glGetnUniformiv ( GLuint program, GLint location, GLsizei bufSize, GLint *params ) */
119838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic void
119938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosandroid_glGetnUniformiv__IIILjava_nio_IntBuffer_2
120038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos  (JNIEnv *_env, jobject _this, jint program, jint location, jint bufSize, jobject params_buf) {
120138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _exception = 0;
120238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    const char * _exceptionType = NULL;
120338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    const char * _exceptionMessage = NULL;
120438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jintArray _array = (jintArray) 0;
120538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _bufferOffset = (jint) 0;
120638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _remaining;
120738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    GLint *params = (GLint *) 0;
120838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
120938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
121038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (_remaining < bufSize) {
121138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exception = 1;
121238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionType = "java/lang/IllegalArgumentException";
121338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionMessage = "remaining() < bufSize < needed";
121438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        goto exit;
121538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
121638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (params == NULL) {
121738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
121838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        params = (GLint *) (_paramsBase + _bufferOffset);
121938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
122038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    glGetnUniformiv(
122138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLuint)program,
122238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLint)location,
122338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLsizei)bufSize,
122438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLint *)params
122538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    );
122638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
122738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosexit:
122838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (_array) {
122938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _env->ReleaseIntArrayElements(_array, (jint*)params, _exception ? JNI_ABORT : 0);
123038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
123138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (_exception) {
123238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        jniThrowException(_env, _exceptionType, _exceptionMessage);
123338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
123438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
123538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
123638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos/* void glGetnUniformuiv ( GLuint program, GLint location, GLsizei bufSize, GLuint *params ) */
123738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic void
123838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosandroid_glGetnUniformuiv__III_3II
123938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos  (JNIEnv *_env, jobject _this, jint program, jint location, jint bufSize, jintArray params_ref, jint offset) {
124038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _exception = 0;
124138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    const char * _exceptionType = NULL;
124238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    const char * _exceptionMessage = NULL;
124338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    GLuint *params_base = (GLuint *) 0;
124438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _remaining;
124538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    GLuint *params = (GLuint *) 0;
124638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
124738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (!params_ref) {
124838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exception = 1;
124938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionType = "java/lang/IllegalArgumentException";
125038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionMessage = "params == null";
125138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        goto exit;
125238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
125338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (offset < 0) {
125438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exception = 1;
125538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionType = "java/lang/IllegalArgumentException";
125638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionMessage = "offset < 0";
125738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        goto exit;
125838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
125938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    _remaining = _env->GetArrayLength(params_ref) - offset;
126038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (_remaining < bufSize) {
126138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exception = 1;
126238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionType = "java/lang/IllegalArgumentException";
126338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionMessage = "length - offset < bufSize < needed";
126438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        goto exit;
126538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
126638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    params_base = (GLuint *)
126738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _env->GetIntArrayElements(params_ref, (jboolean *)0);
126838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    params = params_base + offset;
126938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
127038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    glGetnUniformuiv(
127138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLuint)program,
127238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLint)location,
127338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLsizei)bufSize,
127438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLuint *)params
127538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    );
127638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
127738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosexit:
127838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (params_base) {
127938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
128038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos            _exception ? JNI_ABORT: 0);
128138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
128238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (_exception) {
128338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        jniThrowException(_env, _exceptionType, _exceptionMessage);
128438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
128538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
128638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
128738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos/* void glGetnUniformuiv ( GLuint program, GLint location, GLsizei bufSize, GLuint *params ) */
128838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic void
128938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosandroid_glGetnUniformuiv__IIILjava_nio_IntBuffer_2
129038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos  (JNIEnv *_env, jobject _this, jint program, jint location, jint bufSize, jobject params_buf) {
129138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _exception = 0;
129238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    const char * _exceptionType = NULL;
129338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    const char * _exceptionMessage = NULL;
129438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jintArray _array = (jintArray) 0;
129538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _bufferOffset = (jint) 0;
129638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _remaining;
129738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    GLuint *params = (GLuint *) 0;
129838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
129938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    params = (GLuint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
130038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (_remaining < bufSize) {
130138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exception = 1;
130238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionType = "java/lang/IllegalArgumentException";
130338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionMessage = "remaining() < bufSize < needed";
130438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        goto exit;
130538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
130638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (params == NULL) {
130738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
130838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        params = (GLuint *) (_paramsBase + _bufferOffset);
130938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
131038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    glGetnUniformuiv(
131138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLuint)program,
131238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLint)location,
131338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLsizei)bufSize,
131438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLuint *)params
131538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    );
131638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
131738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosexit:
131838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (_array) {
131938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _env->ReleaseIntArrayElements(_array, (jint*)params, _exception ? JNI_ABORT : 0);
132038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
132138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (_exception) {
132238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        jniThrowException(_env, _exceptionType, _exceptionMessage);
132338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
132438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
132538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
132638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos/* void glMinSampleShading ( GLfloat value ) */
132738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic void
132838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosandroid_glMinSampleShading__F
132938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos  (JNIEnv *_env, jobject _this, jfloat value) {
133038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    glMinSampleShading(
133138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLfloat)value
133238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    );
133338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
133438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
133538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos/* void glPatchParameteri ( GLenum pname, GLint value ) */
133638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic void
133738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosandroid_glPatchParameteri__II
133838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos  (JNIEnv *_env, jobject _this, jint pname, jint value) {
133938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    glPatchParameteri(
134038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)pname,
134138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLint)value
134238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    );
134338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
134438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
134538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos/* void glTexParameterIiv ( GLenum target, GLenum pname, const GLint *params ) */
134638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic void
134738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosandroid_glTexParameterIiv__II_3II
134838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos  (JNIEnv *_env, jobject _this, jint target, jint pname, jintArray params_ref, jint offset) {
134938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _exception = 0;
135038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    const char * _exceptionType = NULL;
135138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    const char * _exceptionMessage = NULL;
135238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    GLint *params_base = (GLint *) 0;
135338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _remaining;
135438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    GLint *params = (GLint *) 0;
135538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
135638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (!params_ref) {
135738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exception = 1;
135838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionType = "java/lang/IllegalArgumentException";
135938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionMessage = "params == null";
136038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        goto exit;
136138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
136238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (offset < 0) {
136338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exception = 1;
136438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionType = "java/lang/IllegalArgumentException";
136538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionMessage = "offset < 0";
136638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        goto exit;
136738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
136838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    _remaining = _env->GetArrayLength(params_ref) - offset;
136938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    params_base = (GLint *)
137038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _env->GetIntArrayElements(params_ref, (jboolean *)0);
137138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    params = params_base + offset;
137238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
137338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    glTexParameterIiv(
137438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)target,
137538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)pname,
137638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLint *)params
137738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    );
137838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
137938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosexit:
138038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (params_base) {
138138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
138238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos            JNI_ABORT);
138338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
138438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (_exception) {
138538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        jniThrowException(_env, _exceptionType, _exceptionMessage);
138638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
138738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
138838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
138938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos/* void glTexParameterIiv ( GLenum target, GLenum pname, const GLint *params ) */
139038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic void
139138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosandroid_glTexParameterIiv__IILjava_nio_IntBuffer_2
139238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos  (JNIEnv *_env, jobject _this, jint target, jint pname, jobject params_buf) {
139338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jintArray _array = (jintArray) 0;
139438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _bufferOffset = (jint) 0;
139538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _remaining;
139638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    GLint *params = (GLint *) 0;
139738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
139838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
139938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (params == NULL) {
140038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
140138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        params = (GLint *) (_paramsBase + _bufferOffset);
140238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
140338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    glTexParameterIiv(
140438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)target,
140538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)pname,
140638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLint *)params
140738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    );
140838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (_array) {
140938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _env->ReleaseIntArrayElements(_array, (jint*)params, JNI_ABORT);
141038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
141138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
141238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
141338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos/* void glTexParameterIuiv ( GLenum target, GLenum pname, const GLuint *params ) */
141438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic void
141538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosandroid_glTexParameterIuiv__II_3II
141638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos  (JNIEnv *_env, jobject _this, jint target, jint pname, jintArray params_ref, jint offset) {
141738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _exception = 0;
141838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    const char * _exceptionType = NULL;
141938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    const char * _exceptionMessage = NULL;
142038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    GLuint *params_base = (GLuint *) 0;
142138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _remaining;
142238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    GLuint *params = (GLuint *) 0;
142338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
142438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (!params_ref) {
142538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exception = 1;
142638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionType = "java/lang/IllegalArgumentException";
142738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionMessage = "params == null";
142838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        goto exit;
142938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
143038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (offset < 0) {
143138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exception = 1;
143238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionType = "java/lang/IllegalArgumentException";
143338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionMessage = "offset < 0";
143438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        goto exit;
143538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
143638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    _remaining = _env->GetArrayLength(params_ref) - offset;
143738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    params_base = (GLuint *)
143838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _env->GetIntArrayElements(params_ref, (jboolean *)0);
143938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    params = params_base + offset;
144038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
144138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    glTexParameterIuiv(
144238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)target,
144338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)pname,
144438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLuint *)params
144538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    );
144638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
144738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosexit:
144838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (params_base) {
144938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
145038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos            JNI_ABORT);
145138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
145238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (_exception) {
145338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        jniThrowException(_env, _exceptionType, _exceptionMessage);
145438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
145538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
145638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
145738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos/* void glTexParameterIuiv ( GLenum target, GLenum pname, const GLuint *params ) */
145838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic void
145938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosandroid_glTexParameterIuiv__IILjava_nio_IntBuffer_2
146038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos  (JNIEnv *_env, jobject _this, jint target, jint pname, jobject params_buf) {
146138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jintArray _array = (jintArray) 0;
146238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _bufferOffset = (jint) 0;
146338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _remaining;
146438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    GLuint *params = (GLuint *) 0;
146538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
146638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    params = (GLuint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
146738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (params == NULL) {
146838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
146938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        params = (GLuint *) (_paramsBase + _bufferOffset);
147038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
147138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    glTexParameterIuiv(
147238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)target,
147338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)pname,
147438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLuint *)params
147538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    );
147638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (_array) {
147738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _env->ReleaseIntArrayElements(_array, (jint*)params, JNI_ABORT);
147838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
147938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
148038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
148138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos/* void glGetTexParameterIiv ( GLenum target, GLenum pname, GLint *params ) */
148238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic void
148338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosandroid_glGetTexParameterIiv__II_3II
148438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos  (JNIEnv *_env, jobject _this, jint target, jint pname, jintArray params_ref, jint offset) {
148538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _exception = 0;
148638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    const char * _exceptionType = NULL;
148738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    const char * _exceptionMessage = NULL;
148838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    GLint *params_base = (GLint *) 0;
148938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _remaining;
149038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    GLint *params = (GLint *) 0;
149138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
149238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (!params_ref) {
149338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exception = 1;
149438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionType = "java/lang/IllegalArgumentException";
149538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionMessage = "params == null";
149638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        goto exit;
149738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
149838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (offset < 0) {
149938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exception = 1;
150038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionType = "java/lang/IllegalArgumentException";
150138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionMessage = "offset < 0";
150238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        goto exit;
150338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
150438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    _remaining = _env->GetArrayLength(params_ref) - offset;
150538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    params_base = (GLint *)
150638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _env->GetIntArrayElements(params_ref, (jboolean *)0);
150738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    params = params_base + offset;
150838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
150938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    glGetTexParameterIiv(
151038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)target,
151138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)pname,
151238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLint *)params
151338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    );
151438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
151538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosexit:
151638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (params_base) {
151738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
151838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos            _exception ? JNI_ABORT: 0);
151938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
152038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (_exception) {
152138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        jniThrowException(_env, _exceptionType, _exceptionMessage);
152238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
152338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
152438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
152538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos/* void glGetTexParameterIiv ( GLenum target, GLenum pname, GLint *params ) */
152638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic void
152738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosandroid_glGetTexParameterIiv__IILjava_nio_IntBuffer_2
152838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos  (JNIEnv *_env, jobject _this, jint target, jint pname, jobject params_buf) {
152938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jintArray _array = (jintArray) 0;
153038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _bufferOffset = (jint) 0;
153138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _remaining;
153238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    GLint *params = (GLint *) 0;
153338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
153438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
153538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (params == NULL) {
153638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
153738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        params = (GLint *) (_paramsBase + _bufferOffset);
153838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
153938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    glGetTexParameterIiv(
154038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)target,
154138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)pname,
154238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLint *)params
154338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    );
154438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (_array) {
154538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _env->ReleaseIntArrayElements(_array, (jint*)params, 0);
154638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
154738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
154838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
154938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos/* void glGetTexParameterIuiv ( GLenum target, GLenum pname, GLuint *params ) */
155038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic void
155138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosandroid_glGetTexParameterIuiv__II_3II
155238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos  (JNIEnv *_env, jobject _this, jint target, jint pname, jintArray params_ref, jint offset) {
155338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _exception = 0;
155438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    const char * _exceptionType = NULL;
155538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    const char * _exceptionMessage = NULL;
155638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    GLuint *params_base = (GLuint *) 0;
155738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _remaining;
155838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    GLuint *params = (GLuint *) 0;
155938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
156038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (!params_ref) {
156138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exception = 1;
156238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionType = "java/lang/IllegalArgumentException";
156338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionMessage = "params == null";
156438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        goto exit;
156538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
156638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (offset < 0) {
156738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exception = 1;
156838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionType = "java/lang/IllegalArgumentException";
156938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionMessage = "offset < 0";
157038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        goto exit;
157138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
157238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    _remaining = _env->GetArrayLength(params_ref) - offset;
157338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    params_base = (GLuint *)
157438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _env->GetIntArrayElements(params_ref, (jboolean *)0);
157538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    params = params_base + offset;
157638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
157738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    glGetTexParameterIuiv(
157838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)target,
157938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)pname,
158038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLuint *)params
158138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    );
158238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
158338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosexit:
158438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (params_base) {
158538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
158638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos            _exception ? JNI_ABORT: 0);
158738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
158838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (_exception) {
158938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        jniThrowException(_env, _exceptionType, _exceptionMessage);
159038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
159138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
159238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
159338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos/* void glGetTexParameterIuiv ( GLenum target, GLenum pname, GLuint *params ) */
159438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic void
159538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosandroid_glGetTexParameterIuiv__IILjava_nio_IntBuffer_2
159638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos  (JNIEnv *_env, jobject _this, jint target, jint pname, jobject params_buf) {
159738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jintArray _array = (jintArray) 0;
159838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _bufferOffset = (jint) 0;
159938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _remaining;
160038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    GLuint *params = (GLuint *) 0;
160138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
160238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    params = (GLuint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
160338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (params == NULL) {
160438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
160538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        params = (GLuint *) (_paramsBase + _bufferOffset);
160638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
160738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    glGetTexParameterIuiv(
160838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)target,
160938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)pname,
161038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLuint *)params
161138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    );
161238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (_array) {
161338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _env->ReleaseIntArrayElements(_array, (jint*)params, 0);
161438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
161538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
161638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
161738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos/* void glSamplerParameterIiv ( GLuint sampler, GLenum pname, const GLint *param ) */
161838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic void
161938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosandroid_glSamplerParameterIiv__II_3II
162038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos  (JNIEnv *_env, jobject _this, jint sampler, jint pname, jintArray param_ref, jint offset) {
162138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _exception = 0;
162238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    const char * _exceptionType = NULL;
162338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    const char * _exceptionMessage = NULL;
162438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    GLint *param_base = (GLint *) 0;
162538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _remaining;
162638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    GLint *param = (GLint *) 0;
162738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
162838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (!param_ref) {
162938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exception = 1;
163038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionType = "java/lang/IllegalArgumentException";
163138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionMessage = "param == null";
163238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        goto exit;
163338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
163438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (offset < 0) {
163538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exception = 1;
163638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionType = "java/lang/IllegalArgumentException";
163738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionMessage = "offset < 0";
163838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        goto exit;
163938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
164038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    _remaining = _env->GetArrayLength(param_ref) - offset;
164138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    param_base = (GLint *)
164238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _env->GetIntArrayElements(param_ref, (jboolean *)0);
164338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    param = param_base + offset;
164438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
164538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    glSamplerParameterIiv(
164638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLuint)sampler,
164738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)pname,
164838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLint *)param
164938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    );
165038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
165138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosexit:
165238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (param_base) {
165338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _env->ReleaseIntArrayElements(param_ref, (jint*)param_base,
165438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos            JNI_ABORT);
165538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
165638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (_exception) {
165738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        jniThrowException(_env, _exceptionType, _exceptionMessage);
165838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
165938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
166038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
166138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos/* void glSamplerParameterIiv ( GLuint sampler, GLenum pname, const GLint *param ) */
166238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic void
166338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosandroid_glSamplerParameterIiv__IILjava_nio_IntBuffer_2
166438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos  (JNIEnv *_env, jobject _this, jint sampler, jint pname, jobject param_buf) {
166538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jintArray _array = (jintArray) 0;
166638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _bufferOffset = (jint) 0;
166738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _remaining;
166838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    GLint *param = (GLint *) 0;
166938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
167038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    param = (GLint *)getPointer(_env, param_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
167138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (param == NULL) {
167238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        char * _paramBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
167338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        param = (GLint *) (_paramBase + _bufferOffset);
167438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
167538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    glSamplerParameterIiv(
167638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLuint)sampler,
167738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)pname,
167838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLint *)param
167938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    );
168038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (_array) {
168138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _env->ReleaseIntArrayElements(_array, (jint*)param, JNI_ABORT);
168238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
168338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
168438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
168538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos/* void glSamplerParameterIuiv ( GLuint sampler, GLenum pname, const GLuint *param ) */
168638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic void
168738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosandroid_glSamplerParameterIuiv__II_3II
168838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos  (JNIEnv *_env, jobject _this, jint sampler, jint pname, jintArray param_ref, jint offset) {
168938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _exception = 0;
169038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    const char * _exceptionType = NULL;
169138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    const char * _exceptionMessage = NULL;
169238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    GLuint *param_base = (GLuint *) 0;
169338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _remaining;
169438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    GLuint *param = (GLuint *) 0;
169538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
169638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (!param_ref) {
169738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exception = 1;
169838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionType = "java/lang/IllegalArgumentException";
169938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionMessage = "param == null";
170038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        goto exit;
170138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
170238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (offset < 0) {
170338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exception = 1;
170438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionType = "java/lang/IllegalArgumentException";
170538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionMessage = "offset < 0";
170638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        goto exit;
170738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
170838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    _remaining = _env->GetArrayLength(param_ref) - offset;
170938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    param_base = (GLuint *)
171038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _env->GetIntArrayElements(param_ref, (jboolean *)0);
171138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    param = param_base + offset;
171238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
171338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    glSamplerParameterIuiv(
171438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLuint)sampler,
171538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)pname,
171638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLuint *)param
171738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    );
171838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
171938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosexit:
172038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (param_base) {
172138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _env->ReleaseIntArrayElements(param_ref, (jint*)param_base,
172238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos            JNI_ABORT);
172338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
172438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (_exception) {
172538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        jniThrowException(_env, _exceptionType, _exceptionMessage);
172638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
172738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
172838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
172938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos/* void glSamplerParameterIuiv ( GLuint sampler, GLenum pname, const GLuint *param ) */
173038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic void
173138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosandroid_glSamplerParameterIuiv__IILjava_nio_IntBuffer_2
173238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos  (JNIEnv *_env, jobject _this, jint sampler, jint pname, jobject param_buf) {
173338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jintArray _array = (jintArray) 0;
173438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _bufferOffset = (jint) 0;
173538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _remaining;
173638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    GLuint *param = (GLuint *) 0;
173738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
173838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    param = (GLuint *)getPointer(_env, param_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
173938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (param == NULL) {
174038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        char * _paramBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
174138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        param = (GLuint *) (_paramBase + _bufferOffset);
174238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
174338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    glSamplerParameterIuiv(
174438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLuint)sampler,
174538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)pname,
174638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLuint *)param
174738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    );
174838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (_array) {
174938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _env->ReleaseIntArrayElements(_array, (jint*)param, JNI_ABORT);
175038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
175138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
175238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
175338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos/* void glGetSamplerParameterIiv ( GLuint sampler, GLenum pname, GLint *params ) */
175438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic void
175538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosandroid_glGetSamplerParameterIiv__II_3II
175638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos  (JNIEnv *_env, jobject _this, jint sampler, jint pname, jintArray params_ref, jint offset) {
175738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _exception = 0;
175838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    const char * _exceptionType = NULL;
175938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    const char * _exceptionMessage = NULL;
176038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    GLint *params_base = (GLint *) 0;
176138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _remaining;
176238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    GLint *params = (GLint *) 0;
176338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
176438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (!params_ref) {
176538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exception = 1;
176638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionType = "java/lang/IllegalArgumentException";
176738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionMessage = "params == null";
176838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        goto exit;
176938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
177038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (offset < 0) {
177138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exception = 1;
177238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionType = "java/lang/IllegalArgumentException";
177338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionMessage = "offset < 0";
177438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        goto exit;
177538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
177638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    _remaining = _env->GetArrayLength(params_ref) - offset;
177738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    params_base = (GLint *)
177838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _env->GetIntArrayElements(params_ref, (jboolean *)0);
177938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    params = params_base + offset;
178038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
178138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    glGetSamplerParameterIiv(
178238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLuint)sampler,
178338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)pname,
178438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLint *)params
178538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    );
178638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
178738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosexit:
178838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (params_base) {
178938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
179038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos            _exception ? JNI_ABORT: 0);
179138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
179238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (_exception) {
179338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        jniThrowException(_env, _exceptionType, _exceptionMessage);
179438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
179538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
179638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
179738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos/* void glGetSamplerParameterIiv ( GLuint sampler, GLenum pname, GLint *params ) */
179838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic void
179938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosandroid_glGetSamplerParameterIiv__IILjava_nio_IntBuffer_2
180038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos  (JNIEnv *_env, jobject _this, jint sampler, jint pname, jobject params_buf) {
180138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jintArray _array = (jintArray) 0;
180238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _bufferOffset = (jint) 0;
180338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _remaining;
180438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    GLint *params = (GLint *) 0;
180538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
180638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    params = (GLint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
180738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (params == NULL) {
180838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
180938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        params = (GLint *) (_paramsBase + _bufferOffset);
181038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
181138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    glGetSamplerParameterIiv(
181238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLuint)sampler,
181338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)pname,
181438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLint *)params
181538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    );
181638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (_array) {
181738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _env->ReleaseIntArrayElements(_array, (jint*)params, 0);
181838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
181938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
182038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
182138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos/* void glGetSamplerParameterIuiv ( GLuint sampler, GLenum pname, GLuint *params ) */
182238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic void
182338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosandroid_glGetSamplerParameterIuiv__II_3II
182438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos  (JNIEnv *_env, jobject _this, jint sampler, jint pname, jintArray params_ref, jint offset) {
182538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _exception = 0;
182638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    const char * _exceptionType = NULL;
182738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    const char * _exceptionMessage = NULL;
182838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    GLuint *params_base = (GLuint *) 0;
182938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _remaining;
183038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    GLuint *params = (GLuint *) 0;
183138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
183238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (!params_ref) {
183338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exception = 1;
183438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionType = "java/lang/IllegalArgumentException";
183538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionMessage = "params == null";
183638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        goto exit;
183738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
183838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (offset < 0) {
183938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exception = 1;
184038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionType = "java/lang/IllegalArgumentException";
184138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _exceptionMessage = "offset < 0";
184238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        goto exit;
184338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
184438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    _remaining = _env->GetArrayLength(params_ref) - offset;
184538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    params_base = (GLuint *)
184638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _env->GetIntArrayElements(params_ref, (jboolean *)0);
184738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    params = params_base + offset;
184838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
184938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    glGetSamplerParameterIuiv(
185038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLuint)sampler,
185138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)pname,
185238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLuint *)params
185338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    );
185438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
185538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosexit:
185638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (params_base) {
185738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _env->ReleaseIntArrayElements(params_ref, (jint*)params_base,
185838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos            _exception ? JNI_ABORT: 0);
185938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
186038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (_exception) {
186138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        jniThrowException(_env, _exceptionType, _exceptionMessage);
186238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
186338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
186438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
186538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos/* void glGetSamplerParameterIuiv ( GLuint sampler, GLenum pname, GLuint *params ) */
186638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic void
186738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosandroid_glGetSamplerParameterIuiv__IILjava_nio_IntBuffer_2
186838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos  (JNIEnv *_env, jobject _this, jint sampler, jint pname, jobject params_buf) {
186938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jintArray _array = (jintArray) 0;
187038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _bufferOffset = (jint) 0;
187138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    jint _remaining;
187238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    GLuint *params = (GLuint *) 0;
187338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
187438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    params = (GLuint *)getPointer(_env, params_buf, (jarray*)&_array, &_remaining, &_bufferOffset);
187538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (params == NULL) {
187638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        char * _paramsBase = (char *)_env->GetIntArrayElements(_array, (jboolean *) 0);
187738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        params = (GLuint *) (_paramsBase + _bufferOffset);
187838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
187938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    glGetSamplerParameterIuiv(
188038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLuint)sampler,
188138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)pname,
188238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLuint *)params
188338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    );
188438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    if (_array) {
188538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        _env->ReleaseIntArrayElements(_array, (jint*)params, 0);
188638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    }
188738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
188838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
188938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos/* void glTexBuffer ( GLenum target, GLenum internalformat, GLuint buffer ) */
189038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic void
189138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosandroid_glTexBuffer__III
189238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos  (JNIEnv *_env, jobject _this, jint target, jint internalformat, jint buffer) {
189338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    glTexBuffer(
189438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)target,
189538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)internalformat,
189638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLuint)buffer
189738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    );
189838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
189938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
190038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos/* void glTexBufferRange ( GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size ) */
190138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic void
190238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosandroid_glTexBufferRange__IIIII
190338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos  (JNIEnv *_env, jobject _this, jint target, jint internalformat, jint buffer, jint offset, jint size) {
190438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    glTexBufferRange(
190538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)target,
190638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)internalformat,
190738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLuint)buffer,
190838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLintptr)offset,
190938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLsizeiptr)size
191038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    );
191138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
191238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
191338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos/* void glTexStorage3DMultisample ( GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations ) */
191438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic void
191538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosandroid_glTexStorage3DMultisample__IIIIIIZ
191638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos  (JNIEnv *_env, jobject _this, jint target, jint samples, jint internalformat, jint width, jint height, jint depth, jboolean fixedsamplelocations) {
191738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    glTexStorage3DMultisample(
191838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)target,
191938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLsizei)samples,
192038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLenum)internalformat,
192138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLsizei)width,
192238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLsizei)height,
192338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLsizei)depth,
192438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos        (GLboolean)fixedsamplelocations
192538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    );
192638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
192738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
192838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic const char *classPathName = "android/opengl/GLES32";
192938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
193038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosstatic const JNINativeMethod methods[] = {
193138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos{"_nativeClassInit", "()V", (void*)nativeClassInit },
193238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos{"glBlendBarrier", "()V", (void *) android_glBlendBarrier__ },
193338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos{"glCopyImageSubData", "(IIIIIIIIIIIIIII)V", (void *) android_glCopyImageSubData__IIIIIIIIIIIIIII },
193438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos{"glDebugMessageControl", "(IIII[IIZ)V", (void *) android_glDebugMessageControl__IIII_3IIZ },
193538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos{"glDebugMessageControl", "(IIIILjava/nio/IntBuffer;Z)V", (void *) android_glDebugMessageControl__IIIILjava_nio_IntBuffer_2Z },
193638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos{"glDebugMessageInsert", "(IIIIILjava/lang/String;)V", (void *) android_glDebugMessageInsert__IIIIILjava_lang_String_2 },
193738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos{"glDebugMessageCallback", "(Landroid/opengl/GLES32$DebugProc;)V", (void *) android_glDebugMessageCallback },
193838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos{"glGetDebugMessageLog", "(II[II[II[II[II[II[BI)I", (void *) android_glGetDebugMessageLog__II_3II_3II_3II_3II_3II_3BI },
193938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos{"glGetDebugMessageLog", "(ILjava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/ByteBuffer;)I", (void *) android_glGetDebugMessageLog__ILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_ByteBuffer_2 },
194038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos{"glGetDebugMessageLog", "(I[II[II[II[II)[Ljava/lang/String;", (void *) android_glGetDebugMessageLog__I_3II_3II_3II_3II },
194138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos{"glGetDebugMessageLog", "(ILjava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;)[Ljava/lang/String;", (void *) android_glGetDebugMessageLog__ILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_IntBuffer_2 },
194238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos{"glPushDebugGroup", "(IIILjava/lang/String;)V", (void *) android_glPushDebugGroup__IIILjava_lang_String_2 },
194338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos{"glPopDebugGroup", "()V", (void *) android_glPopDebugGroup__ },
194438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos{"glObjectLabel", "(IIILjava/lang/String;)V", (void *) android_glObjectLabel__IIILjava_lang_String_2 },
194538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos{"glGetObjectLabel", "(II)Ljava/lang/String;", (void *) android_glGetObjectLabel },
194638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos{"glObjectPtrLabel", "(JLjava/lang/String;)V", (void *) android_glObjectPtrLabel },
194738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos{"glGetObjectPtrLabel", "(J)Ljava/lang/String;", (void *) android_glGetObjectPtrLabel },
194838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos{"glGetPointerv", "(I)J", (void *) android_glGetPointerv },
194938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos{"glEnablei", "(II)V", (void *) android_glEnablei__II },
195038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos{"glDisablei", "(II)V", (void *) android_glDisablei__II },
195138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos{"glBlendEquationi", "(II)V", (void *) android_glBlendEquationi__II },
195238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos{"glBlendEquationSeparatei", "(III)V", (void *) android_glBlendEquationSeparatei__III },
195338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos{"glBlendFunci", "(III)V", (void *) android_glBlendFunci__III },
195438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos{"glBlendFuncSeparatei", "(IIIII)V", (void *) android_glBlendFuncSeparatei__IIIII },
195538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos{"glColorMaski", "(IZZZZ)V", (void *) android_glColorMaski__IZZZZ },
195638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos{"glIsEnabledi", "(II)Z", (void *) android_glIsEnabledi__II },
195738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos{"glDrawElementsBaseVertex", "(IIILjava/nio/Buffer;I)V", (void *) android_glDrawElementsBaseVertex__IIILjava_nio_Buffer_2I },
195838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos{"glDrawRangeElementsBaseVertex", "(IIIIILjava/nio/Buffer;I)V", (void *) android_glDrawRangeElementsBaseVertex__IIIIILjava_nio_Buffer_2I },
195938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos{"glDrawElementsInstancedBaseVertex", "(IIILjava/nio/Buffer;II)V", (void *) android_glDrawElementsInstancedBaseVertex__IIILjava_nio_Buffer_2II },
196038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos{"glDrawElementsInstancedBaseVertex", "(IIIIII)V", (void *) android_glDrawElementsInstancedBaseVertex__IIIIII },
196138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos{"glFramebufferTexture", "(IIII)V", (void *) android_glFramebufferTexture__IIII },
196238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos{"glPrimitiveBoundingBox", "(FFFFFFFF)V", (void *) android_glPrimitiveBoundingBox__FFFFFFFF },
196338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos{"glGetGraphicsResetStatus", "()I", (void *) android_glGetGraphicsResetStatus__ },
196438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos{"glReadnPixels", "(IIIIIIILjava/nio/Buffer;)V", (void *) android_glReadnPixels__IIIIIIILjava_nio_Buffer_2 },
196538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos{"glGetnUniformfv", "(III[FI)V", (void *) android_glGetnUniformfv__III_3FI },
196638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos{"glGetnUniformfv", "(IIILjava/nio/FloatBuffer;)V", (void *) android_glGetnUniformfv__IIILjava_nio_FloatBuffer_2 },
196738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos{"glGetnUniformiv", "(III[II)V", (void *) android_glGetnUniformiv__III_3II },
196838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos{"glGetnUniformiv", "(IIILjava/nio/IntBuffer;)V", (void *) android_glGetnUniformiv__IIILjava_nio_IntBuffer_2 },
196938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos{"glGetnUniformuiv", "(III[II)V", (void *) android_glGetnUniformuiv__III_3II },
197038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos{"glGetnUniformuiv", "(IIILjava/nio/IntBuffer;)V", (void *) android_glGetnUniformuiv__IIILjava_nio_IntBuffer_2 },
197138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos{"glMinSampleShading", "(F)V", (void *) android_glMinSampleShading__F },
197238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos{"glPatchParameteri", "(II)V", (void *) android_glPatchParameteri__II },
197338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos{"glTexParameterIiv", "(II[II)V", (void *) android_glTexParameterIiv__II_3II },
197438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos{"glTexParameterIiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glTexParameterIiv__IILjava_nio_IntBuffer_2 },
197538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos{"glTexParameterIuiv", "(II[II)V", (void *) android_glTexParameterIuiv__II_3II },
197638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos{"glTexParameterIuiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glTexParameterIuiv__IILjava_nio_IntBuffer_2 },
197738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos{"glGetTexParameterIiv", "(II[II)V", (void *) android_glGetTexParameterIiv__II_3II },
197838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos{"glGetTexParameterIiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetTexParameterIiv__IILjava_nio_IntBuffer_2 },
197938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos{"glGetTexParameterIuiv", "(II[II)V", (void *) android_glGetTexParameterIuiv__II_3II },
198038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos{"glGetTexParameterIuiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetTexParameterIuiv__IILjava_nio_IntBuffer_2 },
198138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos{"glSamplerParameterIiv", "(II[II)V", (void *) android_glSamplerParameterIiv__II_3II },
198238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos{"glSamplerParameterIiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glSamplerParameterIiv__IILjava_nio_IntBuffer_2 },
198338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos{"glSamplerParameterIuiv", "(II[II)V", (void *) android_glSamplerParameterIuiv__II_3II },
198438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos{"glSamplerParameterIuiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glSamplerParameterIuiv__IILjava_nio_IntBuffer_2 },
198538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos{"glGetSamplerParameterIiv", "(II[II)V", (void *) android_glGetSamplerParameterIiv__II_3II },
198638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos{"glGetSamplerParameterIiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetSamplerParameterIiv__IILjava_nio_IntBuffer_2 },
198738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos{"glGetSamplerParameterIuiv", "(II[II)V", (void *) android_glGetSamplerParameterIuiv__II_3II },
198838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos{"glGetSamplerParameterIuiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetSamplerParameterIuiv__IILjava_nio_IntBuffer_2 },
198938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos{"glTexBuffer", "(III)V", (void *) android_glTexBuffer__III },
199038c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos{"glTexBufferRange", "(IIIII)V", (void *) android_glTexBufferRange__IIIII },
199138c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos{"glTexStorage3DMultisample", "(IIIIIIZ)V", (void *) android_glTexStorage3DMultisample__IIIIIIZ },
199238c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos};
199338c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos
199438c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballosint register_android_opengl_jni_GLES32(JNIEnv *_env)
199538c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos{
199638c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    int err;
199738c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    err = android::AndroidRuntime::registerNativeMethods(_env, classPathName, methods, NELEM(methods));
199838c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos    return err;
199938c1a7e732660212687cf375f5e5ed354b91e431Pablo Ceballos}
2000