2011-01-24 50 views
3

我使用的代码从How to make an OpenGL rendering context with transparent background?创建具有透明背景上的窗口。我的问题是帧率非常低 - 即使绘制一个四边形(由两个三角形构成),我也有大约20帧/秒。我试图找出为什么和glFlush()大约需要0.047秒。你有什么想法,为什么?同样的东西在没有6000 fps透明背景的窗口中渲染(当我删除60 fps限制时)。它也需要一个核心到100%。我使用Win7在ATI Radeon 4800上以[email protected]测试它。glFlush()发生在窗口很长的时间与透明背景

+0

你有没有考虑使用``而不是glFlush()`双缓冲和`SwapBuffers()? – arul 2011-01-24 10:51:53

+0

该技术不适合渲染OpenGL动画,但它是我知道在Vista之前的Windows上绘制透明OpenGL窗口的唯一方法。这个页面有一个有趣的例子,你可以尝试扭转它找到了如何做:http://coreytabaka.com/programming/cube-demo/ – karlphillip 2011-02-01 17:47:47

回答

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'ed)。

如果你真的想呈现的内容透明窗口,你可能想看看Direct2D和/或Direct3D的,也许有一些办法做到这一点没有数据的性能损失动人。