1 /* void glGetShaderSource ( GLuint shader, GLsizei bufsize, GLsizei *length, char *source ) */
2 static void
android_glGetShaderSource__II_3II_3BI(JNIEnv * _env,jobject _this,jint shader,jint bufsize,jintArray length_ref,jint lengthOffset,jbyteArray source_ref,jint sourceOffset)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
android_glGetShaderSource__IILjava_nio_IntBuffer_2B(JNIEnv * _env,jobject _this,jint shader,jint bufsize,jobject length_buf,jbyte source)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         reinterpret_cast<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 ) */
android_glGetShaderSource(JNIEnv * _env,jobject,jint shader)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