glFlush()在透明背景的窗口上需要很长时间

时间:2011-01-24 10:06:15

标签: windows winapi opengl

我使用How to make an OpenGL rendering context with transparent background?中的代码创建了一个透明背景的窗口。我的问题是帧速率非常低 - 即使我绘制一个四边形(由2个三角形组成),我也有大约20帧/秒。我试图找出原因,glFlush()需要大约0.047秒。你知道为什么吗?同样的东西在一个窗口中渲染,在6000 fps时没有透明背景(当我删除60 fps限制时)。它也需要一个核心到100%。我使用Win7在A94 Radeon 4800的Q9450 @2.66GHz上进行测试。

1 个答案:

答案 0 :(得分:3)

我认为你不能用这种方式获得好的表现,在链接的例子中有以下代码

void draw(HDC pdcDest)
{
    assert(pdcDIB);
    verify(BitBlt(pdcDest, 0, 0, w, h, pdcDIB, 0, 0, SRCCOPY));
}

BitBlt是在处理器上执行的功能,而OpenGL功能由GPU执行。所以来自GPU的渲染数据要爬回到主存储器,并且有效地从GPU到CPU的带宽有限(甚至更多,因为数据一旦BitBlt用于返回那里)。

如果您真的想要使用渲染内容的透明窗口,您可能需要查看Direct2D和/或Direct3D,可能有一些方法可以做到这一点,而不会影响数据移动的性能损失。