• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* GLuint glCreateShaderProgramv ( GLenum type, GLsizei count, const GLchar *const *strings ) */
2 static jint
android_glCreateShaderProgramv(JNIEnv * _env,jobject _this,jint type,jobjectArray strings)3 android_glCreateShaderProgramv
4   (JNIEnv *_env, jobject _this, jint type, jobjectArray strings) {
5     jint _exception = 0;
6     const char * _exceptionType = NULL;
7     const char * _exceptionMessage = NULL;
8     GLsizei _count;
9     const GLchar** _strings = NULL;
10     jstring* _jstrings = NULL;
11     GLuint _returnValue = 0;
12 
13     if (!strings) {
14         _exception = 1;
15         _exceptionType = "java/lang/IllegalArgumentException";
16         _exceptionMessage = "strings == null";
17         goto exit;
18     }
19 
20     _count = _env->GetArrayLength(strings);
21 
22     _strings = (const GLchar**) calloc(_count, sizeof(const GLchar*));
23     if (!_strings) {
24         _exception = 1;
25         _exceptionType = "java/lang/OutOfMemoryError";
26         _exceptionMessage = "out of memory";
27         goto exit;
28     }
29 
30     _jstrings = (jstring*) calloc(_count, sizeof(jstring));
31     if (!_jstrings) {
32         _exception = 1;
33         _exceptionType = "java/lang/OutOfMemoryError";
34         _exceptionMessage = "out of memory";
35         goto exit;
36     }
37 
38     for(int i = 0; i < _count; i++) {
39         _jstrings[i] = (jstring) _env->GetObjectArrayElement(strings, i);
40         if (!_jstrings[i]) {
41             _exception = 1;
42             _exceptionType = "java/lang/IllegalArgumentException";
43             _exceptionMessage = "strings == null";
44             goto exit;
45         }
46         _strings[i] = _env->GetStringUTFChars(_jstrings[i], 0);
47     }
48 
49     _returnValue = glCreateShaderProgramv((GLenum)type, _count, _strings);
50 exit:
51     if (_strings && _jstrings) {
52         for(int i = 0; i < _count; i++) {
53             if (_strings[i] && _jstrings[i]) {
54                 _env->ReleaseStringUTFChars(_jstrings[i], _strings[i]);
55             }
56         }
57     }
58     if (_strings) {
59         free(_strings);
60     }
61     if (_jstrings) {
62         free(_jstrings);
63     }
64     if (_exception) {
65         jniThrowException(_env, _exceptionType, _exceptionMessage);
66     }
67     return (jint)_returnValue;
68 }
69