我正在编写一个使用 fragment 着色器进行图像处理的 Android 应用。我使用两个带有纹理的 FBO 作为颜色附件,这样我就可以翻转 FBO 并对初始图像进行不止一次传递。
一切都很好,应用程序工作正常。但是,我正在尝试在连续的 OpenGL 调用之间使用 System.currentTimeMillis()
和 GLES20.glFinish()
进行一些计时。
我从时间上看到的让我感到惊讶。首先,不同运行之间的时间非常稳定。其次,glReadPixels
调用似乎取决于我的着色器的复杂性,即如果 GPU 花费更多时间处理图像,它就会花费更多时间从 FBO 纹理读取像素。请注意,我在调用 GLES20.glReadPixels
之前放置了 GLES20.glFinish()
,但是放置与否没有任何区别。
您是否知道为什么会存在这种依赖性?这是一个基于 Android 的问题,即 Android 根本没有执行 glFinish()
调用?
谢谢!
最佳答案
我也尝试使用 glFinish 对 GPU 进行性能分析,但后来放弃了——它似乎并没有像您想象的那样完全阻塞。我假设驱动程序对 glFinish 应该做什么有一个非常宽松的解释。也许这也是一个特定于驱动程序的问题。
关于android - gl_ReadPixels 怎么可能取决于着色器的复杂性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5421419/