我正在为Android编写一个应用程序,该应用程序使用片段着色器进行图像处理。我正在使用两个带有纹理的FBO作为颜色附件,以便可以翻转这些FBO并在初始图像上进行一次以上的传递。

一切都很好,因为该应用程序运行正常。但是,我试图在连续的OpenGL调用之间使用System.currentTimeMillis()GLES20.glFinish()进行一些计时。

从时间上我看到的使我惊讶。首先,不同运行之间的时间安排非常稳定。其次,glReadPixels调用似乎取决于我的着色器的复杂性,即,如果GPU花更多的时间来处理图像,那么它会花更多的时间从FBO纹理读取像素。请注意,我在调用GLES20.glFinish()之前先放置了GLES20.glReadPixels,但是无论是否放置它都没有任何区别。

您对为什么可能存在这种依赖性有任何线索吗?这是基于Android的问题,即Android根本不执行glFinish()调用吗?

谢谢!

最佳答案

我也尝试使用glFinish对GPU进行性能分析,并放弃了-它似乎并没有像您认为的那样完全阻塞。我认为驱动程序对glFinish应该做什么有一个非常松散的解释。也许这也是特定于驱动程序的问题。

10-08 15:21