116f03928743b01638419874e2b6300b52da6eb4cJesse Hall#include <stdlib.h>
216f03928743b01638419874e2b6300b52da6eb4cJesse Hall
316f03928743b01638419874e2b6300b52da6eb4cJesse Hall/* void glGetProgramPipelineInfoLog ( GLuint shader, GLsizei maxLength, GLsizei* length, GLchar* infoLog ) */
416f03928743b01638419874e2b6300b52da6eb4cJesse Hallstatic jstring android_glGetProgramPipelineInfoLog(JNIEnv *_env, jobject, jint shader) {
516f03928743b01638419874e2b6300b52da6eb4cJesse Hall    GLint infoLen = 0;
616f03928743b01638419874e2b6300b52da6eb4cJesse Hall    glGetProgramPipelineiv(shader, GL_INFO_LOG_LENGTH, &infoLen);
716f03928743b01638419874e2b6300b52da6eb4cJesse Hall    if (!infoLen) {
816f03928743b01638419874e2b6300b52da6eb4cJesse Hall        return _env->NewStringUTF("");
916f03928743b01638419874e2b6300b52da6eb4cJesse Hall    }
1016f03928743b01638419874e2b6300b52da6eb4cJesse Hall    char* buf = (char*) malloc(infoLen);
1116f03928743b01638419874e2b6300b52da6eb4cJesse Hall    if (buf == NULL) {
1216f03928743b01638419874e2b6300b52da6eb4cJesse Hall        jniThrowException(_env, "java/lang/OutOfMemoryError", "out of memory");
1316f03928743b01638419874e2b6300b52da6eb4cJesse Hall        return NULL;
1416f03928743b01638419874e2b6300b52da6eb4cJesse Hall    }
1516f03928743b01638419874e2b6300b52da6eb4cJesse Hall    glGetProgramPipelineInfoLog(shader, infoLen, NULL, buf);
1616f03928743b01638419874e2b6300b52da6eb4cJesse Hall    jstring result = _env->NewStringUTF(buf);
1716f03928743b01638419874e2b6300b52da6eb4cJesse Hall    free(buf);
1816f03928743b01638419874e2b6300b52da6eb4cJesse Hall    return result;
1916f03928743b01638419874e2b6300b52da6eb4cJesse Hall}
20