У меня есть крючок, который позволяет мне визуализировать мою собственную модель. Для этой модели я хочу использовать пользовательский вершинный шейдер. Теперь проблема в том, что внешняя программа по-прежнему выполняет рендеринг с использованием старых методов шейдера/программы (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?