| /* GLuint glCreateShaderProgramv ( GLenum type, GLsizei count, const GLchar *const *strings ) */ |
| static jint |
| android_glCreateShaderProgramv |
| (JNIEnv *_env, jobject _this, jint type, jobjectArray strings) { |
| jint _exception = 0; |
| const char * _exceptionType = NULL; |
| const char * _exceptionMessage = NULL; |
| GLsizei _count; |
| const GLchar** _strings = NULL; |
| jstring* _jstrings = NULL; |
| GLuint _returnValue = 0; |
| |
| if (!strings) { |
| _exception = 1; |
| _exceptionType = "java/lang/IllegalArgumentException"; |
| _exceptionMessage = "strings == null"; |
| goto exit; |
| } |
| |
| _count = _env->GetArrayLength(strings); |
| |
| _strings = (const GLchar**) calloc(_count, sizeof(const GLchar*)); |
| if (!_strings) { |
| _exception = 1; |
| _exceptionType = "java/lang/OutOfMemoryError"; |
| _exceptionMessage = "out of memory"; |
| goto exit; |
| } |
| |
| _jstrings = (jstring*) calloc(_count, sizeof(jstring)); |
| if (!_jstrings) { |
| _exception = 1; |
| _exceptionType = "java/lang/OutOfMemoryError"; |
| _exceptionMessage = "out of memory"; |
| goto exit; |
| } |
| |
| for(int i = 0; i < _count; i++) { |
| _jstrings[i] = (jstring) _env->GetObjectArrayElement(strings, i); |
| if (!_jstrings[i]) { |
| _exception = 1; |
| _exceptionType = "java/lang/IllegalArgumentException"; |
| _exceptionMessage = "strings == null"; |
| goto exit; |
| } |
| _strings[i] = _env->GetStringUTFChars(_jstrings[i], 0); |
| } |
| |
| _returnValue = glCreateShaderProgramv((GLenum)type, _count, _strings); |
| exit: |
| if (_strings && _jstrings) { |
| for(int i = 0; i < _count; i++) { |
| if (_strings[i] && _jstrings[i]) { |
| _env->ReleaseStringUTFChars(_jstrings[i], _strings[i]); |
| } |
| } |
| } |
| if (_strings) { |
| free(_strings); |
| } |
| if (_jstrings) { |
| free(_jstrings); |
| } |
| if (_exception) { |
| jniThrowException(_env, _exceptionType, _exceptionMessage); |
| } |
| return (jint)_returnValue; |
| } |