Home | History | Annotate | Download | only in gles11
      1 /* void glGetTransformFeedbackVarying ( GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name ) */
      2 static void
      3 android_glGetTransformFeedbackVarying__III_3II_3II_3II_3BI
      4   (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) {
      5     jint _exception = 0;
      6     const char * _exceptionType;
      7     const char * _exceptionMessage;
      8     GLsizei *length_base = (GLsizei *) 0;
      9     jint _lengthRemaining;
     10     GLsizei *length = (GLsizei *) 0;
     11     GLint *size_base = (GLint *) 0;
     12     jint _sizeRemaining;
     13     GLint *size = (GLint *) 0;
     14     GLenum *type_base = (GLenum *) 0;
     15     jint _typeRemaining;
     16     GLenum *type = (GLenum *) 0;
     17     char *name_base = (char *) 0;
     18     jint _nameRemaining;
     19     char *name = (char *) 0;
     20 
     21     if (length_ref) {
     22         if (lengthOffset < 0) {
     23             _exception = 1;
     24             _exceptionType = "java/lang/IllegalArgumentException";
     25             _exceptionMessage = "lengthOffset < 0";
     26             goto exit;
     27         }
     28         _lengthRemaining = _env->GetArrayLength(length_ref) - lengthOffset;
     29         length_base = (GLsizei *)
     30             _env->GetIntArrayElements(length_ref, (jboolean *)0);
     31         length = length_base + lengthOffset;
     32     }
     33 
     34     if (!size_ref) {
     35         _exception = 1;
     36         _exceptionType = "java/lang/IllegalArgumentException";
     37         _exceptionMessage = "size == null";
     38         goto exit;
     39     }
     40     if (sizeOffset < 0) {
     41         _exception = 1;
     42         _exceptionType = "java/lang/IllegalArgumentException";
     43         _exceptionMessage = "sizeOffset < 0";
     44         goto exit;
     45     }
     46     _sizeRemaining = _env->GetArrayLength(size_ref) - sizeOffset;
     47     size_base = (GLint *)
     48         _env->GetIntArrayElements(size_ref, (jboolean *)0);
     49     size = size_base + sizeOffset;
     50 
     51     if (!type_ref) {
     52         _exception = 1;
     53         _exceptionType = "java/lang/IllegalArgumentException";
     54         _exceptionMessage = "type == null";
     55         goto exit;
     56     }
     57     if (typeOffset < 0) {
     58         _exception = 1;
     59         _exceptionType = "java/lang/IllegalArgumentException";
     60         _exceptionMessage = "typeOffset < 0";
     61         goto exit;
     62     }
     63     _typeRemaining = _env->GetArrayLength(type_ref) - typeOffset;
     64     type_base = (GLenum *)
     65         _env->GetIntArrayElements(type_ref, (jboolean *)0);
     66     type = type_base + typeOffset;
     67 
     68     if (!name_ref) {
     69         _exception = 1;
     70         _exceptionType = "java/lang/IllegalArgumentException";
     71         _exceptionMessage = "name == null";
     72         goto exit;
     73     }
     74     if (nameOffset < 0) {
     75         _exception = 1;
     76         _exceptionType = "java/lang/IllegalArgumentException";
     77         _exceptionMessage = "nameOffset < 0";
     78         goto exit;
     79     }
     80     _nameRemaining = _env->GetArrayLength(name_ref) - nameOffset;
     81     name_base = (char *)
     82         _env->GetByteArrayElements(name_ref, (jboolean *)0);
     83     name = name_base + nameOffset;
     84 
     85     glGetTransformFeedbackVarying(
     86         (GLuint)program,
     87         (GLuint)index,
     88         (GLsizei)bufsize,
     89         (GLsizei *)length,
     90         (GLint *)size,
     91         (GLenum *)type,
     92         (char *)name
     93     );
     94 
     95 exit:
     96     if (name_base) {
     97         _env->ReleaseByteArrayElements(name_ref, (jbyte*)name_base,
     98             _exception ? JNI_ABORT: 0);
     99     }
    100     if (type_base) {
    101         _env->ReleaseIntArrayElements(type_ref, (jint*)type_base,
    102             _exception ? JNI_ABORT: 0);
    103     }
    104     if (size_base) {
    105         _env->ReleaseIntArrayElements(size_ref, (jint*)size_base,
    106             _exception ? JNI_ABORT: 0);
    107     }
    108     if (length_base) {
    109         _env->ReleaseIntArrayElements(length_ref, (jint*)length_base,
    110             _exception ? JNI_ABORT: 0);
    111     }
    112     if (_exception) {
    113         jniThrowException(_env, _exceptionType, _exceptionMessage);
    114     }
    115 }
    116 
    117 /* void glGetTransformFeedbackVarying ( GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name ) */
    118 static void
    119 android_glGetTransformFeedbackVarying__IIILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_IntBuffer_2B
    120   (JNIEnv *_env, jobject _this, jint program, jint index, jint bufsize, jobject length_buf, jobject size_buf, jobject type_buf, jbyte name) {
    121     jniThrowException(_env, "java/lang/UnsupportedOperationException", "deprecated");
    122 }
    123 
    124 /* void glGetTransformFeedbackVarying ( GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name ) */
    125 static void
    126 android_glGetTransformFeedbackVarying__IIILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_ByteBuffer_2
    127   (JNIEnv *_env, jobject _this, jint program, jint index, jint bufsize, jobject length_buf, jobject size_buf, jobject type_buf, jobject name_buf) {
    128     jintArray _lengthArray = (jintArray) 0;
    129     jint _lengthBufferOffset = (jint) 0;
    130     jintArray _sizeArray = (jintArray) 0;
    131     jint _sizeBufferOffset = (jint) 0;
    132     jintArray _typeArray = (jintArray) 0;
    133     jint _typeBufferOffset = (jint) 0;
    134     jbyteArray _nameArray = (jbyteArray)0;
    135     jint _nameBufferOffset = (jint)0;
    136     jint _lengthRemaining;
    137     GLsizei *length = (GLsizei *) 0;
    138     jint _sizeRemaining;
    139     GLint *size = (GLint *) 0;
    140     jint _typeRemaining;
    141     GLenum *type = (GLenum *) 0;
    142     jint _nameRemaining;
    143     GLchar* name = (GLchar*)0;
    144 
    145 
    146     length = (GLsizei *)getPointer(_env, length_buf, (jarray*)&_lengthArray, &_lengthRemaining, &_lengthBufferOffset);
    147     size = (GLint *)getPointer(_env, size_buf, (jarray*)&_sizeArray, &_sizeRemaining, &_sizeBufferOffset);
    148     type = (GLenum *)getPointer(_env, type_buf, (jarray*)&_typeArray, &_typeRemaining, &_typeBufferOffset);
    149     name = (GLchar*)getPointer(_env, name_buf, (jarray*)&_nameArray, &_nameRemaining, &_nameBufferOffset);
    150     if (length == NULL) {
    151         char * _lengthBase = (char *)_env->GetIntArrayElements(_lengthArray, (jboolean *) 0);
    152         length = (GLsizei *) (_lengthBase + _lengthBufferOffset);
    153     }
    154     if (size == NULL) {
    155         char * _sizeBase = (char *)_env->GetIntArrayElements(_sizeArray, (jboolean *) 0);
    156         size = (GLint *) (_sizeBase + _sizeBufferOffset);
    157     }
    158     if (type == NULL) {
    159         char * _typeBase = (char *)_env->GetIntArrayElements(_typeArray, (jboolean *) 0);
    160         type = (GLenum *) (_typeBase + _typeBufferOffset);
    161     }
    162     if (name == NULL) {
    163         char* _nameBase = (char *)_env->GetByteArrayElements(_nameArray, (jboolean*)0);
    164         name = (GLchar *) (_nameBase + _nameBufferOffset);
    165     }
    166     glGetTransformFeedbackVarying(
    167         (GLuint)program,
    168         (GLuint)index,
    169         (GLsizei)bufsize,
    170         (GLsizei *)length,
    171         (GLint *)size,
    172         (GLenum *)type,
    173         (GLchar*)name
    174     );
    175     if (_typeArray) {
    176         releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _typeArray, (jint*)type, JNI_TRUE);
    177     }
    178     if (_sizeArray) {
    179         releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _sizeArray, (jint*)size, JNI_TRUE);
    180     }
    181     if (_lengthArray) {
    182         releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _lengthArray, (jint*)length, JNI_TRUE);
    183     }
    184     if (_nameArray) {
    185         releaseArrayPointer<jbyteArray, jbyte*, ByteArrayReleaser>(_env, _nameArray, (jbyte*)name, JNI_TRUE);
    186     }
    187 }
    188 
    189 /* void glGetTransformFeedbackVarying ( GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name ) */
    190 static jstring
    191 android_glGetTransformFeedbackVarying1
    192   (JNIEnv *_env, jobject _this, jint program, jint index, jintArray size_ref, jint sizeOffset, jintArray type_ref, jint typeOffset) {
    193     jint _exception = 0;
    194     const char * _exceptionType;
    195     const char * _exceptionMessage;
    196     GLint *size_base = (GLint *) 0;
    197     jint _sizeRemaining;
    198     GLint *size = (GLint *) 0;
    199     GLenum *type_base = (GLenum *) 0;
    200     jint _typeRemaining;
    201     GLenum *type = (GLenum *) 0;
    202 
    203     jstring result = 0;
    204 
    205     GLint len = 0;
    206     glGetProgramiv((GLuint)program, GL_ACTIVE_ATTRIBUTE_MAX_LENGTH, &len);
    207     if (!len) {
    208         return _env->NewStringUTF("");
    209     }
    210     char* buf = (char*) malloc(len);
    211 
    212     if (buf == NULL) {
    213         jniThrowException(_env, "java/lang/IllegalArgumentException", "out of memory");
    214         return NULL;
    215     }
    216     if (!size_ref) {
    217         _exception = 1;
    218         _exceptionType = "java/lang/IllegalArgumentException";
    219         _exceptionMessage = "size == null";
    220         goto exit;
    221     }
    222     if (sizeOffset < 0) {
    223         _exception = 1;
    224         _exceptionType = "java/lang/IllegalArgumentException";
    225         _exceptionMessage = "sizeOffset < 0";
    226         goto exit;
    227     }
    228     _sizeRemaining = _env->GetArrayLength(size_ref) - sizeOffset;
    229     size_base = (GLint *)
    230         _env->GetIntArrayElements(size_ref, (jboolean *)0);
    231     size = size_base + sizeOffset;
    232 
    233     if (!type_ref) {
    234         _exception = 1;
    235         _exceptionType = "java/lang/IllegalArgumentException";
    236         _exceptionMessage = "type == null";
    237         goto exit;
    238     }
    239     if (typeOffset < 0) {
    240         _exception = 1;
    241         _exceptionType = "java/lang/IllegalArgumentException";
    242         _exceptionMessage = "typeOffset < 0";
    243         goto exit;
    244     }
    245     _typeRemaining = _env->GetArrayLength(type_ref) - typeOffset;
    246     type_base = (GLenum *)
    247         _env->GetIntArrayElements(type_ref, (jboolean *)0);
    248     type = type_base + typeOffset;
    249 
    250     glGetTransformFeedbackVarying(
    251         (GLuint)program,
    252         (GLuint)index,
    253         (GLsizei)len,
    254         NULL,
    255         (GLint *)size,
    256         (GLenum *)type,
    257         (char *)buf
    258     );
    259 exit:
    260     if (type_base) {
    261         _env->ReleaseIntArrayElements(type_ref, (jint*)type_base,
    262             _exception ? JNI_ABORT: 0);
    263     }
    264     if (size_base) {
    265         _env->ReleaseIntArrayElements(size_ref, (jint*)size_base,
    266             _exception ? JNI_ABORT: 0);
    267     }
    268     if (_exception != 1) {
    269         result = _env->NewStringUTF(buf);
    270     }
    271     if (buf) {
    272         free(buf);
    273     }
    274     if (_exception) {
    275         jniThrowException(_env, _exceptionType, _exceptionMessage);
    276     }
    277     if (result == 0) {
    278         result = _env->NewStringUTF("");
    279     }
    280 
    281     return result;
    282 }
    283 
    284 /* void glGetTransformFeedbackVarying ( GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name ) */
    285 static jstring
    286 android_glGetTransformFeedbackVarying2
    287   (JNIEnv *_env, jobject _this, jint program, jint index, jobject size_buf, jobject type_buf) {
    288     jintArray _sizeArray = (jintArray) 0;
    289     jint _sizeBufferOffset = (jint) 0;
    290     jintArray _typeArray = (jintArray) 0;
    291     jint _typeBufferOffset = (jint) 0;
    292     jint _lengthRemaining;
    293     GLsizei *length = (GLsizei *) 0;
    294     jint _sizeRemaining;
    295     GLint *size = (GLint *) 0;
    296     jint _typeRemaining;
    297     GLenum *type = (GLenum *) 0;
    298 
    299     jstring result = 0;
    300 
    301     GLint len = 0;
    302     glGetProgramiv((GLuint)program, GL_ACTIVE_ATTRIBUTE_MAX_LENGTH, &len);
    303     if (!len) {
    304         return _env->NewStringUTF("");
    305     }
    306     char* buf = (char*) malloc(len);
    307 
    308     if (buf == NULL) {
    309         jniThrowException(_env, "java/lang/IllegalArgumentException", "out of memory");
    310         return NULL;
    311     }
    312 
    313     size = (GLint *)getPointer(_env, size_buf, (jarray*)&_sizeArray, &_sizeRemaining, &_sizeBufferOffset);
    314     type = (GLenum *)getPointer(_env, type_buf, (jarray*)&_typeArray, &_typeRemaining, &_typeBufferOffset);
    315     if (size == NULL) {
    316         char * _sizeBase = (char *)_env->GetIntArrayElements(_sizeArray, (jboolean *) 0);
    317         size = (GLint *) (_sizeBase + _sizeBufferOffset);
    318     }
    319     if (type == NULL) {
    320         char * _typeBase = (char *)_env->GetIntArrayElements(_typeArray, (jboolean *) 0);
    321         type = (GLenum *) (_typeBase + _typeBufferOffset);
    322     }
    323     glGetTransformFeedbackVarying(
    324         (GLuint)program,
    325         (GLuint)index,
    326         (GLsizei)len,
    327         NULL,
    328         (GLint *)size,
    329         (GLenum *)type,
    330         (char *)buf
    331     );
    332 
    333     if (_typeArray) {
    334         releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _typeArray, (jint*)type, JNI_TRUE);
    335     }
    336     if (_sizeArray) {
    337         releaseArrayPointer<jintArray, jint*, IntArrayReleaser>(_env, _sizeArray, (jint*)size, JNI_TRUE);
    338     }
    339     result = _env->NewStringUTF(buf);
    340     if (buf) {
    341         free(buf);
    342     }
    343     return result;
    344 }
    345