获得OpenGL纹理或渲染缓冲区的"平均"颜色的任何快速方法?

And*_* 3D 2 opengl

我在操作系统上有一个OpenGl应用程序,可以在应用程序失去焦点时抢夺OpenGL上下文,即使应用程序仍在内存中.当应用程序返回焦点时,我将纹理重新加载到新的OpenGL上下文中,这会导致屏幕闪烁.

我正在努力将重新加载分解为增量,以便它看起来更好.但我也想知道这种可能性:

  1. 当程序发现它将失去焦点时,捕获显示器(或主要纹理)的"平均"颜色.
  2. 当程序重新获得焦点时,使用步骤1中捕获的颜色快速执行glClearColor(r,g,b).
  3. 然后,在用户看到步骤2中设置的颜色时,正常重新加载纹理.

我认为这将是一种视觉技巧,使闪烁不那么明显.有一个问题:我认为通过平均每个像素捕获聚合颜色将花费太长时间而不值得.

所以我想知道是否有任何OpenGl技巧可以让应用程序粗略估计用户在屏幕上看到的平均颜色?

Tim*_*Tim 7

我听说过平均屏幕颜色的最快方法是将其复制到纹理,调用glGenerateMipmap并抓取最小的图层(1x1 mip级别),其中包含像素的平均颜色.这对我来说听起来不是特别快,所以不确定它是否对你的目的有帮助.