android - gl_ReadPixels 怎么可能取决于着色器的复杂性?

标签 android opengl-es timing

我正在编写一个使用 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/

相关文章:

android - 通过 fragment 着色器将 YUV 转换为 RGB

iphone - 使用 OpenGL 在 iPhone 上扭曲图像

python - 为 Python 处理其输出的外部程序计时

java - JavaRDD 上每个操作的 Apache Spark 计时

android: onClickListener for relativelayout

android - 当 ESLint 发出错误时如何使 React Native 项目中的构建失败

java - Android.App.Activity - 包不存在

android - Cordova / ionic 安卓 : Conflicting Google Play Services versions between Push and GoogleMaps plugins

android - 如何在 OpenGLES 中渲染到特定的 mip 级别?

javascript - 如何在 Javascript 中对循环的不同部分进行计时