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