JNIEXPORT void JNICALL Java_org_lwjgl_opengl_ARBShadingLanguageInclude_nglCompileShaderIncludeARB__IIJJ(JNIEnv *__env, jclass clazz, jint shader, jint count, jlong pathAddress, jlong lengthAddress) { glCompileShaderIncludeARBPROC glCompileShaderIncludeARB = (glCompileShaderIncludeARBPROC)tlsGetFunction(1323); intptr_t path = (intptr_t)pathAddress; intptr_t length = (intptr_t)lengthAddress; UNUSED_PARAM(clazz) glCompileShaderIncludeARB(shader, count, path, length); }
GLuint GLSLProgram::compileProgram(const char *vsource, const char *gsource, const char *fsource, GLenum gsInput, GLenum gsOutput, int maxVerts) { bool bErrors = false; GLint success = 0; char temp[1024]; GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER); GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER); mProg = glCreateProgram(); if(vsource) { glShaderSource(vertexShader, 1, &vsource, 0); glCompileShaderIncludeARB(vertexShader, 1, incPaths,NULL); glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &success); if (!success) { glGetShaderInfoLog(vertexShader, 1024, 0, temp); LOGE("%s: Failed to compile VtxShader:\n%s\n", curVSName ? curVSName:"VSNoname", temp); glDeleteShader(vertexShader); vertexShader = 0; bErrors = true; } else glAttachShader(mProg, vertexShader); } // NOTE: had some issues using include paths with https://www.opengl.org/registry/specs/ARB/shading_language_include.txt glShaderSource(fragmentShader, 1, &fsource, 0); glCompileShaderIncludeARB(fragmentShader, 1, incPaths,NULL); glGetShaderiv(fragmentShader, GL_COMPILE_STATUS, &success); if (!success) { glGetShaderInfoLog(fragmentShader, 1024, 0, temp); LOGE("%s: Failed to compile FragShader:\n%s\n", curFSName ? curFSName:"VSNoname", temp); glDeleteShader(fragmentShader); fragmentShader = 0; bErrors = true; } else glAttachShader(mProg, fragmentShader); if (gsource) { GLuint geomShader = glCreateShader(GL_GEOMETRY_SHADER); // NOTE: had some issues using include paths with https://www.opengl.org/registry/specs/ARB/shading_language_include.txt glShaderSource(geomShader, 1, &gsource, 0); glCompileShaderIncludeARB(geomShader, 1, incPaths,NULL); glGetShaderiv(geomShader, GL_COMPILE_STATUS, &success); if (!success) { glGetShaderInfoLog(geomShader, 1024, 0, temp); LOGE("%s: Failed to compile GShader:\n%s\n", curGSName ? curGSName:"VSNoname", temp); glDeleteShader(geomShader); geomShader = 0; bErrors = true; } else glAttachShader(mProg, geomShader); //glProgramParameteri(mProg, GL_GEOMETRY_INPUT_TYPE, gsInput); //glProgramParameteri(mProg, GL_GEOMETRY_OUTPUT_TYPE, gsOutput); //glProgramParameteri(mProg, GL_GEOMETRY_VERTICES_OUT, maxVerts); } if(bErrors) { glDeleteProgram(mProg); mProg = 0; return 0; } glLinkProgram(mProg); // check if program linked glGetProgramiv(mProg, GL_LINK_STATUS, &success); if (!success) { glGetProgramInfoLog(mProg, 1024, 0, temp); LOGE("%s: Failed to link program:\n%s\n", curProgName ?curProgName:"Noname", temp); glDeleteProgram(mProg); mProg = 0; return 0; } return mProg; }
void ShadingLanguageIncludeImplementation_ARB::compile(const Shader * shader) const { std::vector<const char*> cStrings = collectCStrings(shader->includePaths()); glCompileShaderIncludeARB(shader->id(), static_cast<GLint>(cStrings.size()), cStrings.data(), nullptr); }