155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer/* void glGetActiveAttrib ( GLuint program, GLuint index, GLsizei bufsize, GLsizei *length, GLint *size, GLenum *type, char *name ) */
255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshoferstatic void
355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshoferandroid_glGetActiveAttrib__III_3II_3II_3II_3BI
455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer  (JNIEnv *_env, jobject _this, jint program, jint index, jint bufsize, jintArray length_ref, jint lengthOffset, jintArray size_ref, jint sizeOffset, jintArray type_ref, jint typeOffset, jbyteArray name_ref, jint nameOffset) {
555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    jint _exception = 0;
655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    const char * _exceptionType;
755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    const char * _exceptionMessage;
855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    GLsizei *length_base = (GLsizei *) 0;
955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    jint _lengthRemaining;
1055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    GLsizei *length = (GLsizei *) 0;
1155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    GLint *size_base = (GLint *) 0;
1255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    jint _sizeRemaining;
1355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    GLint *size = (GLint *) 0;
1455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    GLenum *type_base = (GLenum *) 0;
1555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    jint _typeRemaining;
1655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    GLenum *type = (GLenum *) 0;
1755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    char *name_base = (char *) 0;
1855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    jint _nameRemaining;
1955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    char *name = (char *) 0;
2055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer
2155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (!length_ref) {
2255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _exception = 1;
2355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _exceptionType = "java/lang/IllegalArgumentException";
2455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _exceptionMessage = "length == null";
2555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        goto exit;
2655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
2755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (lengthOffset < 0) {
2855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _exception = 1;
2955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _exceptionType = "java/lang/IllegalArgumentException";
3055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _exceptionMessage = "lengthOffset < 0";
3155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        goto exit;
3255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
3355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    _lengthRemaining = _env->GetArrayLength(length_ref) - lengthOffset;
3455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    length_base = (GLsizei *)
3555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _env->GetPrimitiveArrayCritical(length_ref, (jboolean *)0);
3655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    length = length_base + lengthOffset;
3755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer
3855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (!size_ref) {
3955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _exception = 1;
4055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _exceptionType = "java/lang/IllegalArgumentException";
4155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _exceptionMessage = "size == null";
4255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        goto exit;
4355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
4455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (sizeOffset < 0) {
4555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _exception = 1;
4655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _exceptionType = "java/lang/IllegalArgumentException";
4755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _exceptionMessage = "sizeOffset < 0";
4855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        goto exit;
4955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
5055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    _sizeRemaining = _env->GetArrayLength(size_ref) - sizeOffset;
5155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    size_base = (GLint *)
5255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _env->GetPrimitiveArrayCritical(size_ref, (jboolean *)0);
5355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    size = size_base + sizeOffset;
5455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer
5555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (!type_ref) {
5655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _exception = 1;
5755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _exceptionType = "java/lang/IllegalArgumentException";
5855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _exceptionMessage = "type == null";
5955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        goto exit;
6055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
6155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (typeOffset < 0) {
6255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _exception = 1;
6355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _exceptionType = "java/lang/IllegalArgumentException";
6455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _exceptionMessage = "typeOffset < 0";
6555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        goto exit;
6655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
6755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    _typeRemaining = _env->GetArrayLength(type_ref) - typeOffset;
6855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    type_base = (GLenum *)
6955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _env->GetPrimitiveArrayCritical(type_ref, (jboolean *)0);
7055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    type = type_base + typeOffset;
7155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer
7255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (!name_ref) {
7355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _exception = 1;
7455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _exceptionType = "java/lang/IllegalArgumentException";
7555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _exceptionMessage = "name == null";
7655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        goto exit;
7755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
7855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (nameOffset < 0) {
7955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _exception = 1;
8055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _exceptionType = "java/lang/IllegalArgumentException";
8155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _exceptionMessage = "nameOffset < 0";
8255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        goto exit;
8355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
8455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    _nameRemaining = _env->GetArrayLength(name_ref) - nameOffset;
8555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    name_base = (char *)
8655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _env->GetPrimitiveArrayCritical(name_ref, (jboolean *)0);
8755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    name = name_base + nameOffset;
8855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer
8955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    glGetActiveAttrib(
9055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        (GLuint)program,
9155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        (GLuint)index,
9255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        (GLsizei)bufsize,
9355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        (GLsizei *)length,
9455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        (GLint *)size,
9555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        (GLenum *)type,
9655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        (char *)name
9755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    );
9855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer
9955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshoferexit:
10055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (name_base) {
10155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _env->ReleasePrimitiveArrayCritical(name_ref, name_base,
10255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer            _exception ? JNI_ABORT: 0);
10355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
10455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (type_base) {
10555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _env->ReleasePrimitiveArrayCritical(type_ref, type_base,
10655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer            _exception ? JNI_ABORT: 0);
10755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
10855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (size_base) {
10955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _env->ReleasePrimitiveArrayCritical(size_ref, size_base,
11055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer            _exception ? JNI_ABORT: 0);
11155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
11255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (length_base) {
11355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _env->ReleasePrimitiveArrayCritical(length_ref, length_base,
11455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer            _exception ? JNI_ABORT: 0);
11555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
11655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (_exception) {
11755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        jniThrowException(_env, _exceptionType, _exceptionMessage);
11855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
11955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer}
12055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer
12155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer/* void glGetActiveAttrib ( GLuint program, GLuint index, GLsizei bufsize, GLsizei *length, GLint *size, GLenum *type, char *name ) */
12255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshoferstatic void
12355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshoferandroid_glGetActiveAttrib__IIILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_IntBuffer_2B
12455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer  (JNIEnv *_env, jobject _this, jint program, jint index, jint bufsize, jobject length_buf, jobject size_buf, jobject type_buf, jbyte name) {
12555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    jarray _lengthArray = (jarray) 0;
12655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    jint _lengthBufferOffset = (jint) 0;
12755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    jarray _sizeArray = (jarray) 0;
12855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    jint _sizeBufferOffset = (jint) 0;
12955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    jarray _typeArray = (jarray) 0;
13055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    jint _typeBufferOffset = (jint) 0;
13155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    jint _lengthRemaining;
13255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    GLsizei *length = (GLsizei *) 0;
13355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    jint _sizeRemaining;
13455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    GLint *size = (GLint *) 0;
13555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    jint _typeRemaining;
13655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    GLenum *type = (GLenum *) 0;
13755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer
13855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    length = (GLsizei *)getPointer(_env, length_buf, &_lengthArray, &_lengthRemaining, &_lengthBufferOffset);
13955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    size = (GLint *)getPointer(_env, size_buf, &_sizeArray, &_sizeRemaining, &_sizeBufferOffset);
14055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    type = (GLenum *)getPointer(_env, type_buf, &_typeArray, &_typeRemaining, &_typeBufferOffset);
14155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (length == NULL) {
14255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        char * _lengthBase = (char *)_env->GetPrimitiveArrayCritical(_lengthArray, (jboolean *) 0);
14355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        length = (GLsizei *) (_lengthBase + _lengthBufferOffset);
14455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
14555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (size == NULL) {
14655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        char * _sizeBase = (char *)_env->GetPrimitiveArrayCritical(_sizeArray, (jboolean *) 0);
14755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        size = (GLint *) (_sizeBase + _sizeBufferOffset);
14855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
14955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (type == NULL) {
15055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        char * _typeBase = (char *)_env->GetPrimitiveArrayCritical(_typeArray, (jboolean *) 0);
15155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        type = (GLenum *) (_typeBase + _typeBufferOffset);
15255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
15355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    glGetActiveAttrib(
15455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        (GLuint)program,
15555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        (GLuint)index,
15655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        (GLsizei)bufsize,
15755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        (GLsizei *)length,
15855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        (GLint *)size,
15955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        (GLenum *)type,
16055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        (char *)name
16155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    );
16255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (_typeArray) {
16355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        releasePointer(_env, _typeArray, type, JNI_TRUE);
16455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
16555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (_sizeArray) {
16655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        releasePointer(_env, _sizeArray, size, JNI_TRUE);
16755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
16855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (_lengthArray) {
16955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        releasePointer(_env, _lengthArray, length, JNI_TRUE);
17055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
17155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer}
17255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer
17355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer/* void glGetActiveAttrib ( GLuint program, GLuint index, GLsizei bufsize, GLsizei *length, GLint *size, GLenum *type, char *name ) */
17455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshoferstatic jstring
17555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshoferandroid_glGetActiveAttrib1
17655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer  (JNIEnv *_env, jobject _this, jint program, jint index, jintArray size_ref, jint sizeOffset, jintArray type_ref, jint typeOffset) {
17755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    jint _exception = 0;
17855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    const char * _exceptionType;
17955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    const char * _exceptionMessage;
18055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    GLint *size_base = (GLint *) 0;
18155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    jint _sizeRemaining;
18255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    GLint *size = (GLint *) 0;
18355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    GLenum *type_base = (GLenum *) 0;
18455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    jint _typeRemaining;
18555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    GLenum *type = (GLenum *) 0;
18655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer
18755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    jstring result = 0;
18855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer
18955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    GLint len = 0;
19055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    glGetProgramiv((GLuint)program, GL_ACTIVE_ATTRIBUTE_MAX_LENGTH, &len);
19155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (!len) {
19255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        return _env->NewStringUTF("");
19355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
19455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    char* buf = (char*) malloc(len);
19555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer
19655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (buf == NULL) {
19755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        jniThrowException(_env, "java/lang/IllegalArgumentException", "out of memory");
19855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        return NULL;
19955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
20055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (!size_ref) {
20155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _exception = 1;
20255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _exceptionType = "java/lang/IllegalArgumentException";
20355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _exceptionMessage = "size == null";
20455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        goto exit;
20555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
20655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (sizeOffset < 0) {
20755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _exception = 1;
20855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _exceptionType = "java/lang/IllegalArgumentException";
20955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _exceptionMessage = "sizeOffset < 0";
21055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        goto exit;
21155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
21255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    _sizeRemaining = _env->GetArrayLength(size_ref) - sizeOffset;
21355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    size_base = (GLint *)
21455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _env->GetPrimitiveArrayCritical(size_ref, (jboolean *)0);
21555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    size = size_base + sizeOffset;
21655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer
21755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (!type_ref) {
21855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _exception = 1;
21955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _exceptionType = "java/lang/IllegalArgumentException";
22055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _exceptionMessage = "type == null";
22155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        goto exit;
22255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
22355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (typeOffset < 0) {
22455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _exception = 1;
22555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _exceptionType = "java/lang/IllegalArgumentException";
22655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _exceptionMessage = "typeOffset < 0";
22755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        goto exit;
22855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
22955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    _typeRemaining = _env->GetArrayLength(type_ref) - typeOffset;
23055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    type_base = (GLenum *)
23155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _env->GetPrimitiveArrayCritical(type_ref, (jboolean *)0);
23255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    type = type_base + typeOffset;
23355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer
23455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    glGetActiveAttrib(
23555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        (GLuint)program,
23655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        (GLuint)index,
23755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        (GLsizei)len,
23855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        NULL,
23955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        (GLint *)size,
24055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        (GLenum *)type,
24155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        (char *)buf
24255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    );
24355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshoferexit:
24455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (type_base) {
24555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _env->ReleasePrimitiveArrayCritical(type_ref, type_base,
24655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer            _exception ? JNI_ABORT: 0);
24755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
24855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (size_base) {
24955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        _env->ReleasePrimitiveArrayCritical(size_ref, size_base,
25055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer            _exception ? JNI_ABORT: 0);
25155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
25255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (_exception != 1) {
25355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        result = _env->NewStringUTF(buf);
25455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
25555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (buf) {
25655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        free(buf);
25755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
25855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (_exception) {
25955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        jniThrowException(_env, _exceptionType, _exceptionMessage);
26055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
26155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (result == 0) {
26255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        result = _env->NewStringUTF("");
26355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
26455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer
26555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    return result;
26655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer}
26755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer
26855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer/* void glGetActiveAttrib ( GLuint program, GLuint index, GLsizei bufsize, GLsizei *length, GLint *size, GLenum *type, char *name ) */
26955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshoferstatic jstring
27055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshoferandroid_glGetActiveAttrib2
27155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer  (JNIEnv *_env, jobject _this, jint program, jint index, jobject size_buf, jobject type_buf) {
27255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    jarray _sizeArray = (jarray) 0;
27355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    jint _sizeBufferOffset = (jint) 0;
27455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    jarray _typeArray = (jarray) 0;
27555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    jint _typeBufferOffset = (jint) 0;
27655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    jint _lengthRemaining;
27755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    GLsizei *length = (GLsizei *) 0;
27855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    jint _sizeRemaining;
27955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    GLint *size = (GLint *) 0;
28055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    jint _typeRemaining;
28155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    GLenum *type = (GLenum *) 0;
28255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer
28355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    jstring result = 0;
28455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer
28555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    GLint len = 0;
28655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    glGetProgramiv((GLuint)program, GL_ACTIVE_ATTRIBUTE_MAX_LENGTH, &len);
28755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (!len) {
28855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        return _env->NewStringUTF("");
28955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
29055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    char* buf = (char*) malloc(len);
29155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer
29255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (buf == NULL) {
29355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        jniThrowException(_env, "java/lang/IllegalArgumentException", "out of memory");
29455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        return NULL;
29555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
29655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer
29755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    size = (GLint *)getPointer(_env, size_buf, &_sizeArray, &_sizeRemaining, &_sizeBufferOffset);
29855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    type = (GLenum *)getPointer(_env, type_buf, &_typeArray, &_typeRemaining, &_typeBufferOffset);
29955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (size == NULL) {
30055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        char * _sizeBase = (char *)_env->GetPrimitiveArrayCritical(_sizeArray, (jboolean *) 0);
30155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        size = (GLint *) (_sizeBase + _sizeBufferOffset);
30255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
30355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (type == NULL) {
30455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        char * _typeBase = (char *)_env->GetPrimitiveArrayCritical(_typeArray, (jboolean *) 0);
30555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        type = (GLenum *) (_typeBase + _typeBufferOffset);
30655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
30755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    glGetActiveAttrib(
30855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        (GLuint)program,
30955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        (GLuint)index,
31055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        (GLsizei)len,
31155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        NULL,
31255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        (GLint *)size,
31355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        (GLenum *)type,
31455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        (char *)buf
31555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    );
31655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer
31755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (_typeArray) {
31855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        releasePointer(_env, _typeArray, type, JNI_TRUE);
31955b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
32055b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (_sizeArray) {
32155b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        releasePointer(_env, _sizeArray, size, JNI_TRUE);
32255b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
32355b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    result = _env->NewStringUTF(buf);
32455b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    if (buf) {
32555b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer        free(buf);
32655b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    }
32755b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer    return result;
32855b4e553c8e6021cb65a9ac99857bfbf4d4f335dThomas Tafertshofer}
329