Home | History | Annotate | Download | only in gles11
      1 /* void glGetShaderSource ( GLuint shader, GLsizei bufsize, GLsizei *length, char *source ) */
      2 static void
      3 android_glGetShaderSource__II_3II_3BI
      4   (JNIEnv *_env, jobject _this, jint shader, jint bufsize, jintArray length_ref, jint lengthOffset, jbyteArray source_ref, jint sourceOffset) {
      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     char *source_base = (char *) 0;
     12     jint _sourceRemaining;
     13     char *source = (char *) 0;
     14 
     15     if (!length_ref) {
     16         _exception = 1;
     17         _exceptionType = "java/lang/IllegalArgumentException";
     18         _exceptionMessage = "length == null";
     19         goto exit;
     20     }
     21     if (lengthOffset < 0) {
     22         _exception = 1;
     23         _exceptionType = "java/lang/IllegalArgumentException";
     24         _exceptionMessage = "lengthOffset < 0";
     25         goto exit;
     26     }
     27     _lengthRemaining = _env->GetArrayLength(length_ref) - lengthOffset;
     28     length_base = (GLsizei *)
     29         _env->GetPrimitiveArrayCritical(length_ref, (jboolean *)0);
     30     length = length_base + lengthOffset;
     31 
     32     if (!source_ref) {
     33         _exception = 1;
     34         _exceptionType = "java/lang/IllegalArgumentException";
     35         _exceptionMessage = "source == null";
     36         goto exit;
     37     }
     38     if (sourceOffset < 0) {
     39         _exception = 1;
     40         _exceptionType = "java/lang/IllegalArgumentException";
     41         _exceptionMessage = "sourceOffset < 0";
     42         goto exit;
     43     }
     44     _sourceRemaining = _env->GetArrayLength(source_ref) - sourceOffset;
     45     source_base = (char *)
     46         _env->GetPrimitiveArrayCritical(source_ref, (jboolean *)0);
     47     source = source_base + sourceOffset;
     48 
     49     glGetShaderSource(
     50         (GLuint)shader,
     51         (GLsizei)bufsize,
     52         (GLsizei *)length,
     53         (char *)source
     54     );
     55 
     56 exit:
     57     if (source_base) {
     58         _env->ReleasePrimitiveArrayCritical(source_ref, source_base,
     59             _exception ? JNI_ABORT: 0);
     60     }
     61     if (length_base) {
     62         _env->ReleasePrimitiveArrayCritical(length_ref, length_base,
     63             _exception ? JNI_ABORT: 0);
     64     }
     65     if (_exception) {
     66         jniThrowException(_env, _exceptionType, _exceptionMessage);
     67     }
     68 }
     69 
     70 /* void glGetShaderSource ( GLuint shader, GLsizei bufsize, GLsizei *length, char *source ) */
     71 static void
     72 android_glGetShaderSource__IILjava_nio_IntBuffer_2B
     73   (JNIEnv *_env, jobject _this, jint shader, jint bufsize, jobject length_buf, jbyte source) {
     74     jarray _array = (jarray) 0;
     75     jint _bufferOffset = (jint) 0;
     76     jint _remaining;
     77     GLsizei *length = (GLsizei *) 0;
     78 
     79     length = (GLsizei *)getPointer(_env, length_buf, &_array, &_remaining, &_bufferOffset);
     80     if (length == NULL) {
     81         char * _lengthBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
     82         length = (GLsizei *) (_lengthBase + _bufferOffset);
     83     }
     84     glGetShaderSource(
     85         (GLuint)shader,
     86         (GLsizei)bufsize,
     87         (GLsizei *)length,
     88         (char *)source
     89     );
     90     if (_array) {
     91         releasePointer(_env, _array, length, JNI_TRUE);
     92     }
     93 }
     94 
     95 /* void glGetShaderSource ( GLuint shader, GLsizei bufsize, GLsizei *length, char *source ) */
     96 static jstring android_glGetShaderSource(JNIEnv *_env, jobject, jint shader) {
     97     GLint shaderLen = 0;
     98     glGetShaderiv((GLuint)shader, GL_SHADER_SOURCE_LENGTH, &shaderLen);
     99     if (!shaderLen) {
    100         return _env->NewStringUTF("");
    101     }
    102     char* buf = (char*) malloc(shaderLen);
    103     if (buf == NULL) {
    104         jniThrowException(_env, "java/lang/IllegalArgumentException", "out of memory");
    105         return NULL;
    106     }
    107     glGetShaderSource(shader, shaderLen, NULL, buf);
    108     jstring result = _env->NewStringUTF(buf);
    109     free(buf);
    110     return result;
    111 }
    112