131f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall/* void glGetTransformFeedbackVarying ( GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name ) */
231f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hallstatic void
331f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hallandroid_glGetTransformFeedbackVarying__III_3II_3II_3II_3BI
431f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall  (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) {
531f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    jint _exception = 0;
631f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    const char * _exceptionType;
731f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    const char * _exceptionMessage;
831f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    GLsizei *length_base = (GLsizei *) 0;
931f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    jint _lengthRemaining;
1031f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    GLsizei *length = (GLsizei *) 0;
1131f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    GLint *size_base = (GLint *) 0;
1231f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    jint _sizeRemaining;
1331f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    GLint *size = (GLint *) 0;
1431f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    GLenum *type_base = (GLenum *) 0;
1531f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    jint _typeRemaining;
1631f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    GLenum *type = (GLenum *) 0;
1731f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    char *name_base = (char *) 0;
1831f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    jint _nameRemaining;
1931f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    char *name = (char *) 0;
2031f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall
2131f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    if (!length_ref) {
2231f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        _exception = 1;
2331f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
2431f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        _exceptionMessage = "length == null";
2531f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        goto exit;
2631f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    }
2731f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    if (lengthOffset < 0) {
2831f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        _exception = 1;
2931f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
3031f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        _exceptionMessage = "lengthOffset < 0";
3131f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        goto exit;
3231f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    }
3331f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    _lengthRemaining = _env->GetArrayLength(length_ref) - lengthOffset;
3431f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    length_base = (GLsizei *)
3531f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        _env->GetPrimitiveArrayCritical(length_ref, (jboolean *)0);
3631f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    length = length_base + lengthOffset;
3731f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall
3831f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    if (!size_ref) {
3931f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        _exception = 1;
4031f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4131f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        _exceptionMessage = "size == null";
4231f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        goto exit;
4331f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    }
4431f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    if (sizeOffset < 0) {
4531f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        _exception = 1;
4631f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
4731f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        _exceptionMessage = "sizeOffset < 0";
4831f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        goto exit;
4931f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    }
5031f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    _sizeRemaining = _env->GetArrayLength(size_ref) - sizeOffset;
5131f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    size_base = (GLint *)
5231f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        _env->GetPrimitiveArrayCritical(size_ref, (jboolean *)0);
5331f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    size = size_base + sizeOffset;
5431f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall
5531f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    if (!type_ref) {
5631f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        _exception = 1;
5731f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
5831f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        _exceptionMessage = "type == null";
5931f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        goto exit;
6031f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    }
6131f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    if (typeOffset < 0) {
6231f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        _exception = 1;
6331f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
6431f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        _exceptionMessage = "typeOffset < 0";
6531f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        goto exit;
6631f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    }
6731f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    _typeRemaining = _env->GetArrayLength(type_ref) - typeOffset;
6831f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    type_base = (GLenum *)
6931f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        _env->GetPrimitiveArrayCritical(type_ref, (jboolean *)0);
7031f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    type = type_base + typeOffset;
7131f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall
7231f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    if (!name_ref) {
7331f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        _exception = 1;
7431f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
7531f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        _exceptionMessage = "name == null";
7631f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        goto exit;
7731f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    }
7831f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    if (nameOffset < 0) {
7931f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        _exception = 1;
8031f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
8131f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        _exceptionMessage = "nameOffset < 0";
8231f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        goto exit;
8331f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    }
8431f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    _nameRemaining = _env->GetArrayLength(name_ref) - nameOffset;
8531f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    name_base = (char *)
8631f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        _env->GetPrimitiveArrayCritical(name_ref, (jboolean *)0);
8731f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    name = name_base + nameOffset;
8831f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall
8931f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    glGetTransformFeedbackVarying(
9031f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        (GLuint)program,
9131f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        (GLuint)index,
9231f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        (GLsizei)bufsize,
9331f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        (GLsizei *)length,
9431f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        (GLint *)size,
9531f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        (GLenum *)type,
9631f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        (char *)name
9731f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    );
9831f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall
9931f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hallexit:
10031f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    if (name_base) {
10131f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        _env->ReleasePrimitiveArrayCritical(name_ref, name_base,
10231f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall            _exception ? JNI_ABORT: 0);
10331f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    }
10431f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    if (type_base) {
10531f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        _env->ReleasePrimitiveArrayCritical(type_ref, type_base,
10631f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall            _exception ? JNI_ABORT: 0);
10731f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    }
10831f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    if (size_base) {
10931f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        _env->ReleasePrimitiveArrayCritical(size_ref, size_base,
11031f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall            _exception ? JNI_ABORT: 0);
11131f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    }
11231f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    if (length_base) {
11331f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        _env->ReleasePrimitiveArrayCritical(length_ref, length_base,
11431f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall            _exception ? JNI_ABORT: 0);
11531f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    }
11631f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    if (_exception) {
11731f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
11831f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    }
11931f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall}
12031f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall
12131f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall/* void glGetTransformFeedbackVarying ( GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name ) */
12231f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hallstatic void
12331f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hallandroid_glGetTransformFeedbackVarying__IIILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_IntBuffer_2B
12431f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint index, jint bufsize, jobject length_buf, jobject size_buf, jobject type_buf, jbyte name) {
12531f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    jarray _lengthArray = (jarray) 0;
12631f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    jint _lengthBufferOffset = (jint) 0;
12731f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    jarray _sizeArray = (jarray) 0;
12831f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    jint _sizeBufferOffset = (jint) 0;
12931f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    jarray _typeArray = (jarray) 0;
13031f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    jint _typeBufferOffset = (jint) 0;
13131f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    jint _lengthRemaining;
13231f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    GLsizei *length = (GLsizei *) 0;
13331f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    jint _sizeRemaining;
13431f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    GLint *size = (GLint *) 0;
13531f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    jint _typeRemaining;
13631f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    GLenum *type = (GLenum *) 0;
13731f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall
13831f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    length = (GLsizei *)getPointer(_env, length_buf, &_lengthArray, &_lengthRemaining, &_lengthBufferOffset);
13931f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    size = (GLint *)getPointer(_env, size_buf, &_sizeArray, &_sizeRemaining, &_sizeBufferOffset);
14031f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    type = (GLenum *)getPointer(_env, type_buf, &_typeArray, &_typeRemaining, &_typeBufferOffset);
14131f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    if (length == NULL) {
14231f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        char * _lengthBase = (char *)_env->GetPrimitiveArrayCritical(_lengthArray, (jboolean *) 0);
14331f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        length = (GLsizei *) (_lengthBase + _lengthBufferOffset);
14431f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    }
14531f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    if (size == NULL) {
14631f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        char * _sizeBase = (char *)_env->GetPrimitiveArrayCritical(_sizeArray, (jboolean *) 0);
14731f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        size = (GLint *) (_sizeBase + _sizeBufferOffset);
14831f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    }
14931f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    if (type == NULL) {
15031f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        char * _typeBase = (char *)_env->GetPrimitiveArrayCritical(_typeArray, (jboolean *) 0);
15131f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        type = (GLenum *) (_typeBase + _typeBufferOffset);
15231f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    }
15331f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    glGetTransformFeedbackVarying(
15431f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        (GLuint)program,
15531f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        (GLuint)index,
15631f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        (GLsizei)bufsize,
15731f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        (GLsizei *)length,
15831f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        (GLint *)size,
15931f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        (GLenum *)type,
16031f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        (char *)name
16131f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    );
16231f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    if (_typeArray) {
16331f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        releasePointer(_env, _typeArray, type, JNI_TRUE);
16431f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    }
16531f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    if (_sizeArray) {
16631f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        releasePointer(_env, _sizeArray, size, JNI_TRUE);
16731f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    }
16831f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    if (_lengthArray) {
16931f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        releasePointer(_env, _lengthArray, length, JNI_TRUE);
17031f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    }
17131f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall}
17231f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall
17331f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall/* void glGetTransformFeedbackVarying ( GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name ) */
17431f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hallstatic jstring
17531f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hallandroid_glGetTransformFeedbackVarying1
17631f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint index, jintArray size_ref, jint sizeOffset, jintArray type_ref, jint typeOffset) {
17731f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    jint _exception = 0;
17831f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    const char * _exceptionType;
17931f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    const char * _exceptionMessage;
18031f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    GLint *size_base = (GLint *) 0;
18131f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    jint _sizeRemaining;
18231f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    GLint *size = (GLint *) 0;
18331f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    GLenum *type_base = (GLenum *) 0;
18431f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    jint _typeRemaining;
18531f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    GLenum *type = (GLenum *) 0;
18631f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall
18731f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    jstring result = 0;
18831f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall
18931f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    GLint len = 0;
19031f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    glGetProgramiv((GLuint)program, GL_ACTIVE_ATTRIBUTE_MAX_LENGTH, &len);
19131f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    if (!len) {
19231f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        return _env->NewStringUTF("");
19331f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    }
19431f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    char* buf = (char*) malloc(len);
19531f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall
19631f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    if (buf == NULL) {
19731f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        jniThrowException(_env, "java/lang/IllegalArgumentException", "out of memory");
19831f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        return NULL;
19931f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    }
20031f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    if (!size_ref) {
20131f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        _exception = 1;
20231f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
20331f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        _exceptionMessage = "size == null";
20431f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        goto exit;
20531f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    }
20631f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    if (sizeOffset < 0) {
20731f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        _exception = 1;
20831f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
20931f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        _exceptionMessage = "sizeOffset < 0";
21031f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        goto exit;
21131f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    }
21231f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    _sizeRemaining = _env->GetArrayLength(size_ref) - sizeOffset;
21331f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    size_base = (GLint *)
21431f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        _env->GetPrimitiveArrayCritical(size_ref, (jboolean *)0);
21531f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    size = size_base + sizeOffset;
21631f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall
21731f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    if (!type_ref) {
21831f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        _exception = 1;
21931f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
22031f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        _exceptionMessage = "type == null";
22131f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        goto exit;
22231f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    }
22331f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    if (typeOffset < 0) {
22431f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        _exception = 1;
22531f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        _exceptionType = "java/lang/IllegalArgumentException";
22631f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        _exceptionMessage = "typeOffset < 0";
22731f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        goto exit;
22831f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    }
22931f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    _typeRemaining = _env->GetArrayLength(type_ref) - typeOffset;
23031f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    type_base = (GLenum *)
23131f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        _env->GetPrimitiveArrayCritical(type_ref, (jboolean *)0);
23231f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    type = type_base + typeOffset;
23331f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall
23431f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    glGetTransformFeedbackVarying(
23531f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        (GLuint)program,
23631f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        (GLuint)index,
23731f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        (GLsizei)len,
23831f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        NULL,
23931f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        (GLint *)size,
24031f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        (GLenum *)type,
24131f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        (char *)buf
24231f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    );
24331f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hallexit:
24431f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    if (type_base) {
24531f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        _env->ReleasePrimitiveArrayCritical(type_ref, type_base,
24631f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall            _exception ? JNI_ABORT: 0);
24731f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    }
24831f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    if (size_base) {
24931f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        _env->ReleasePrimitiveArrayCritical(size_ref, size_base,
25031f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall            _exception ? JNI_ABORT: 0);
25131f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    }
25231f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    if (_exception != 1) {
25331f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        result = _env->NewStringUTF(buf);
25431f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    }
25531f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    if (buf) {
25631f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        free(buf);
25731f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    }
25831f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    if (_exception) {
25931f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        jniThrowException(_env, _exceptionType, _exceptionMessage);
26031f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    }
26131f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    if (result == 0) {
26231f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        result = _env->NewStringUTF("");
26331f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    }
26431f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall
26531f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    return result;
26631f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall}
26731f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall
26831f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall/* void glGetTransformFeedbackVarying ( GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name ) */
26931f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hallstatic jstring
27031f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hallandroid_glGetTransformFeedbackVarying2
27131f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall  (JNIEnv *_env, jobject _this, jint program, jint index, jobject size_buf, jobject type_buf) {
27231f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    jarray _sizeArray = (jarray) 0;
27331f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    jint _sizeBufferOffset = (jint) 0;
27431f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    jarray _typeArray = (jarray) 0;
27531f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    jint _typeBufferOffset = (jint) 0;
27631f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    jint _lengthRemaining;
27731f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    GLsizei *length = (GLsizei *) 0;
27831f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    jint _sizeRemaining;
27931f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    GLint *size = (GLint *) 0;
28031f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    jint _typeRemaining;
28131f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    GLenum *type = (GLenum *) 0;
28231f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall
28331f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    jstring result = 0;
28431f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall
28531f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    GLint len = 0;
28631f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    glGetProgramiv((GLuint)program, GL_ACTIVE_ATTRIBUTE_MAX_LENGTH, &len);
28731f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    if (!len) {
28831f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        return _env->NewStringUTF("");
28931f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    }
29031f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    char* buf = (char*) malloc(len);
29131f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall
29231f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    if (buf == NULL) {
29331f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        jniThrowException(_env, "java/lang/IllegalArgumentException", "out of memory");
29431f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        return NULL;
29531f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    }
29631f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall
29731f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    size = (GLint *)getPointer(_env, size_buf, &_sizeArray, &_sizeRemaining, &_sizeBufferOffset);
29831f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    type = (GLenum *)getPointer(_env, type_buf, &_typeArray, &_typeRemaining, &_typeBufferOffset);
29931f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    if (size == NULL) {
30031f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        char * _sizeBase = (char *)_env->GetPrimitiveArrayCritical(_sizeArray, (jboolean *) 0);
30131f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        size = (GLint *) (_sizeBase + _sizeBufferOffset);
30231f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    }
30331f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    if (type == NULL) {
30431f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        char * _typeBase = (char *)_env->GetPrimitiveArrayCritical(_typeArray, (jboolean *) 0);
30531f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        type = (GLenum *) (_typeBase + _typeBufferOffset);
30631f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    }
30731f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    glGetTransformFeedbackVarying(
30831f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        (GLuint)program,
30931f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        (GLuint)index,
31031f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        (GLsizei)len,
31131f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        NULL,
31231f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        (GLint *)size,
31331f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        (GLenum *)type,
31431f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        (char *)buf
31531f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    );
31631f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall
31731f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    if (_typeArray) {
31831f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        releasePointer(_env, _typeArray, type, JNI_TRUE);
31931f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    }
32031f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    if (_sizeArray) {
32131f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        releasePointer(_env, _sizeArray, size, JNI_TRUE);
32231f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    }
32331f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    result = _env->NewStringUTF(buf);
32431f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    if (buf) {
32531f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall        free(buf);
32631f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    }
32731f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall    return result;
32831f6edc21bbc2802f4c755b4982945d5237e92ceJesse Hall}
329