快速(HW加速)绘制到外部窗口(可能使用Direct3D)

时间:2012-12-16 18:57:15

标签: gdi direct3d

我正在开发某个项目,其中任务是将位图(当前为HBITMAP / bitblt / alphablend)绘制到所有可见窗口(即不属于我的应用程序的窗口)的非客户区域。它必须非常快速地完成 - 当窗口移动,调整大小等时,位图会更新。此外,必须在此位图上应用某种模糊算法。它应该适用于Win7和Win8(因此不需要XP)。

我已成功与GDI合作。我将GetWindowDC,GetWindowRect和AlphaBlend位图放入缓冲区(CreateCompatibleDC / CreateCompatibleBitmap),然后将BitBlt放入GetWindowDC。这完美地工作......除了......它没有我想要的那么快。如果我在位图上应用模糊算法,那么一切都很慢。

所以我的问题是如何提高速度?我正在考虑硬件加速绘图。

a)我尝试了与GDI兼容的Direct2D(使用ID2D1DCRenderTarget + BindDC),但它比纯GDI慢得多。

b)我在考虑Direct3D。问题是我可能不知道如何使用它。如果我调用D3D10CreateDeviceAndSwapChain并将swapchain的OutputWindow设置为我的应用程序的HWND,那么它返回S_OK但是当我将OutputWindow设置为任何外部窗口的HWND时,该方法失败。所以我不确定如何渲染到外国窗口。

c)如何在图像的一部分上正确应用模糊?我发现了许多算法,但它们都是在CPU上处理的。如何在GPU上制作?

提前感谢您如何解决我的问题。

1 个答案:

答案 0 :(得分:0)

您是否考虑过使用DComp?为什么使用DComp可能是合适的,请看一下:http://msdn.microsoft.com/en-us/library/windows/desktop/hh449195%28v=vs.85%29.aspx

有关DComp的简要摘要(来自MSDN):

Microsoft DirectComposition是一个Windows组件,可通过转换,效果和动画实现高性能位图合成。应用程序开发人员可以使用DirectComposition API创建具有视觉吸引力的用户界面,这些界面具有从一个视觉到另一个视觉的丰富和流畅的动画过渡。

DirectComposition通过使用图形硬件实现高帧率,并独立于UI线程运行,实现丰富和流畅的转换。 DirectComposition可以接受由不同渲染库(包括Microsoft DirectX位图)绘制的位图内容,以及渲染到窗口的位图(HWND位图)。此外,DirectComposition支持各种变换,例如2D仿射变换和3D透视变换,以及剪裁和不透明度等基本效果。

DirectComposition旨在简化组合视觉效果和创建动画过渡的过程。如果您的应用程序已包含渲染代码或已使用推荐的DirectX API,则只需要进行少量工作即可有效地使用DirectComposition。

相关问题