0

独自のモデルをレンダリングできるフックがあります。このモデルでは、カスタムの頂点シェーダーを使用したいと考えています。ここでの問題は、外側のプログラムがまだ古いシェーダー/プログラム メソッド (glUseProgram) を使用してレンダリングすることです。新しい 4.4 ProgramPipeline に切り替えたときにプログラムの互換性を維持し、同時に、ユーザーがそうでない場合でも同じ機能を提供したいと考えています。 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?
4

1 に答える 1

1

現在のパイプラインを保存するには:

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

そしてそれを復元するには:

glBindProgramPipeline(prevPipeline);
于 2014-07-14T08:39:05.767 に答える