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