我有一个成熟的MFC C ++应用程序,它在屏幕上显示并使用Win32 GDI上的CDC包装进行打印。虽然它已经过多年的优化,但我想用更快的东西替换它。图形包括渲染的三角形曲面模型,复杂的折线和多边形以及大量文本。它需要符合以下标准;
显示的矢量数量可能非常大。例如,单个曲面三角形在渲染时可能会生成数字线和实心填充。目前,此信息不会存储在任何位置,而是即时生成和绘制。 SDK应支持限制缓冲向量的总数,否则可能会耗尽内存。
SDK应该能够呈现给任何CWnd派生类,包括CView和ScrollView类。
SDK应支持打印到任何Windows打印设备
SDK应该足够低,以使来自低级别CDC / GDI调用的端口相对简单。
开源总是很好,但一次性成本高达2万美元,可选的升级/支持也可以。不接受每位用户的许可证费用,
访问源代码将是一个很大的好处,特别是在Windows CE / Mobile上运行部分SDK的想法。
我当前处理自己的3d到2d视口管理。如果没有合适的低级别SDK,则更高级别的SDK必须处理好3d,并在32位Windows平台上使用数百万个三角形,多边形和文本实体。
有什么建议吗?在您提出的建议中列出具体的利弊将不胜感激。
答案 0 :(得分:2)
我认为DirectX或SDL将满足您的需求。它们专为3D设计,但也适用于2D。两者都支持Windows CE / Mobile和SDL,也可用于一堆非Microsoft OS。
不幸的是,库中不支持与GDI的直接兼容性。但是你可以通过创建一个转换器类来实现这个技巧,它将接受来自GDI设计的应用程序类的所有输出图形,并转换格式以满足DirectX或SDL类的需要(取决于你想要使用的是什么)。
我个人曾经做过这样的转换器课程。我有一个为Pocket PC编写的游戏,使用SDL,我需要将它移植到Palm设备。在那里我不得不使用不同的图形库(我现在不记得lib的名称)但我成功地将所有SDL函数输出移植到另一个lib所需的格式。我需要更改我的应用程序以调用转换器(包装器)函数,该函数将调用转发到Palm或Pocket PC库,具体取决于它当前正在运行的设备。所以我认为你可以做同样的转换GDI - > DirectX或GDI - > SDL。
答案 1 :(得分:1)
我曾经为一个项目评估过FastGraph(http://www.fastgraph.com)。我喜欢它在我写的小测试程序中,它非常快。我们最终没有出于外部原因使用它(与我评估的库无关)所以我没有更多的实践经验。