我为另一个程序编写插件/插件。这也允许我为使用 OpenGL 的其他程序渲染内容。所以我现在遇到的问题是我不知道我的渲染函数的调用者已经绑定了什么程序。我试图用管道解决问题。我使用的代码是这样的(请记住我在java中的程序,但你的答案不一定是,我可以查找java-equivalent to C / C ++ - 我自己的OpenGL函数)。
int currProgram = GL11.glGetInteger(GL20.GL_CURRENT_PROGRAM); // Get old program
if (currProgram != 0) { // If there was any
GL41.glUseProgramStages(pipeline, GL41.GL_ALL_SHADER_BITS,
currProgram); // Bind it to my pipeline
GL41.glUseProgramStages(pipeline, GL41.GL_VERTEX_SHADER_BIT,
geometryProgram); // Bind my vertexShader to the pipeline
GL20.glUseProgram(0);
GL41.glBindProgramPipeline(pipeline); // Bind the pipeline
} else { // If there wasn't
GL20.glUseProgram(geometryProgram); // Use my program
}
//RENDERCODE
GL41.glBindProgramPipeline(0); // Unbind pipeline
GL20.glUseProgram(currProgram); // rebind old program
我有两个问题,现在困扰我。首先,我暗示说我不知道预绑定程序是否从一个调用更改为另一个调用。这引出了我的问题:
如何取消绑定管道中的各个阶段?我只是致电
GL41.glUseProgramStages(pipeline, GL41.GL_ALL_SHADER_BITS,
0);
其次,每次渲染时绑定我自己的顶点着色器似乎或多或少都不高效。我介绍了这个,因为我认为一次可以绑定多个顶点抖动。如果不是这种情况,我可以使用GL41.GL_ALL_SHADER_BITS ^ GL41.GL_VERTEX_SHADER_BIT来绑定和取消绑定其他着色器,并将我的着色器绑定到管道。问题二:
是否可以同时将多个vertexShaders绑定到管道?我如何重新编写代码以提高效率?
答案 0 :(得分:0)
不只是绑定特定对象所需的那个。然后将另一个绑定到下一个对象。 “取消绑定”只是像你一样绑定零。