19875750593aae7c2a62f33c620809d49162393ebElliott Hughes#include <stdlib.h>
250d0b14689b0ae95ea7b66a8c2f7b955115812ddJack Palevich
350d0b14689b0ae95ea7b66a8c2f7b955115812ddJack Palevich/* void glGetShaderInfoLog ( GLuint shader, GLsizei maxLength, GLsizei* length, GLchar* infoLog ) */
49875750593aae7c2a62f33c620809d49162393ebElliott Hughesstatic jstring android_glGetShaderInfoLog(JNIEnv *_env, jobject, jint shader) {
550d0b14689b0ae95ea7b66a8c2f7b955115812ddJack Palevich    GLint infoLen = 0;
650d0b14689b0ae95ea7b66a8c2f7b955115812ddJack Palevich    glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &infoLen);
79875750593aae7c2a62f33c620809d49162393ebElliott Hughes    if (!infoLen) {
87eb9c3a4e5d29469985b7d27673d566b211e4d13Romain Guy        infoLen = 512;
950d0b14689b0ae95ea7b66a8c2f7b955115812ddJack Palevich    }
109875750593aae7c2a62f33c620809d49162393ebElliott Hughes    char* buf = (char*) malloc(infoLen);
119875750593aae7c2a62f33c620809d49162393ebElliott Hughes    if (buf == NULL) {
129875750593aae7c2a62f33c620809d49162393ebElliott Hughes        jniThrowException(_env, "java/lang/IllegalArgumentException", "out of memory");
139875750593aae7c2a62f33c620809d49162393ebElliott Hughes        return NULL;
1450d0b14689b0ae95ea7b66a8c2f7b955115812ddJack Palevich    }
157eb9c3a4e5d29469985b7d27673d566b211e4d13Romain Guy    GLsizei outLen = 0;
167eb9c3a4e5d29469985b7d27673d566b211e4d13Romain Guy    glGetShaderInfoLog(shader, infoLen, &outLen, buf);
177eb9c3a4e5d29469985b7d27673d566b211e4d13Romain Guy    jstring result = _env->NewStringUTF(outLen == 0 ? "" : buf);
189875750593aae7c2a62f33c620809d49162393ebElliott Hughes    free(buf);
199875750593aae7c2a62f33c620809d49162393ebElliott Hughes    return result;
209875750593aae7c2a62f33c620809d49162393ebElliott Hughes}
21