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