OpenGL:何时以及在什么情况下进行着色器修补?

时间:2016-01-15 17:59:55

标签: c++ performance opengl shader

我们目前在将网格动态加载到应用程序中的应用程序中遇到了一些性能问题。网格/纹理上传后(通过glBufferData)发生打嗝并首次渲染(该帧中的glRenderEelements调用特别长)。

我们的假设是打嗝可能是由顶点/索引数据或纹理数据的懒惰CPU到GPU传输引起的。但是当我们停用纹理上传和渲染没有纹理以及我们发布渲染调用时,也会发生随后的打嗝,这些渲染调用在上传后立即使用虚拟着色器渲染VBO(虚拟渲染调用很快,但随后的真实渲染调用在下一帧仍然很慢。

因此,也许着色器修补会导致我们的打嗝。

网格使用相同的着色器渲染,以前的帧中的网格已经渲染,并且也具有相同的顶点格式(当然,新的VBO用于创建顶点和索引以及新的VAO' s ),所以根据我的理解,在这种情况下不应该发生着色器修补(只有在使用应用程序生命周期之前未遇到过的着色器,顶点格式和某些(哪些?)其他gl状态的组合时才会发生着色器修补)。这是对的吗?

有没有办法跟踪驱动程序何时以及是否执行着色器修补?

任何其他想法可能导致这些打嗝?

0 个答案:

没有答案