Java OpenGL 4.4: Store/Push, Pop текущий программный конвейер

У меня есть крючок, который позволяет мне визуализировать мою собственную модель. Для этой модели я хочу использовать пользовательский вершинный шейдер. Теперь проблема в том, что внешняя программа по-прежнему выполняет рендеринг с использованием старых методов шейдера/программы (glUseProgram), и я хочу, чтобы моя программа была совместима при переключении на новый ProgramPipeline 4.4 и в то же время предоставляла ту же функциональность, даже если пользователь не не поддерживает OpenGL 4.x. Теперь я подумал, что могу сделать следующее:

//Start of hook
int currProgram = glGetInteger(GL_CURRENT_PROGRAM);
int currVertexShader;
int currPipeline;
if (supportsPipelines) {
    glUseProgramStages(pipelineName, EXTERNAL_SHADER_BITS, currProgram);
    glUseProgram(0);
    // How do I store the currently selected pipeline, if any?
    glBindProgramPipeline(currPipeline);
} else {
    if(currProgram == 0) {
        glUseProgram(programName);
    } else {
        // Fiddle with the shaders ?
    }
}
// Do some rendering
// How do I pop back into the original configuration?

person WorldSEnder    schedule 14.07.2014    source источник


Ответы (1)


Чтобы сохранить текущий конвейер:

GLint prevPipeline = 0;
glGetIntegerv(GL_PROGRAM_PIPELINE_BINDING, &previousPipeline);
// assorted error checking

И восстановить его:

glBindProgramPipeline(prevPipeline);
person trapezoid    schedule 14.07.2014