在opengl中乱序渲染像素着色器

时间:2016-03-22 19:06:56

标签: c++ opengl

我正在研究一些代码,以帮助测量和校正头戴式显示系统中的光学失真。我这样做是通过编写两个像素着色器(在全屏四边形上渲染片段着色器)来生成不同的测试模式,另一个是应用扭曲校正。 (现在,经线着色器只是一个临时像素着色器,可以渲染多色四边形)。我的问题是,在我的主渲染循环中,我甚至认为我首先渲染模式着色器四边形,然后我的虚拟测试变形着色器模式着色器始终在经线着色器顶部。我的主渲染循环中的代码如下所示:

 if (showPattern){
   glUseProgram(patternShader->shaderprog);
   //configure shader uniforms
   glBindVertexArray(patternShader->vao);
   glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);
   glUseProgram(NULL);
 }

 if (doWarp){
   glUseProgram(warpShader->shaderprog);
   //configure shader uniforms
   glBindVertexArray(warpShader->vao);
   glDrawElements(GLddddd_TRIANGLES, 6, GL_UNSIGNED_INT, 0);
 glUseProgram(NULL);
 }

如果只有showPattern为true,那么我得到了patternShader的预期输出。同样,如果只有doWarp为真,我得到warpShader的预期输出。但是如果两者都是真的,我会在warp着色器的顶部得到patternShader的输出,而不是像我预期的那样。如果我切换if块的顺序,我得到了我想要的相反效果,但我想理解为什么它不能像我认为的那样工作。

0 个答案:

没有答案
相关问题