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);
}
Esempio n. 2
0
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);
}