已关闭。此问题为opinion-based。目前不接受回答。
**要改进此问题吗?**更新此问题,以便editing this post可以使用事实和引文来回答。
6年前关闭。
社区在8天前审查了是否重新打开此问题,并将其关闭:
原始关闭原因未解决
Improve this question的
如果您打开页面"Graphics and Gaming (Windows)" on microsoft.com
最后一类被描述为
传统图形:过时的技术,不应在新应用程序中使用。
此类别包括(除其他外)以下API:
- GDI
- GDI+
- OpenGL
你的意见呢?如果我想推出一个新的软件今天,它必须支持Windows XP(仍然约50%的所有安装的系统)。Direct 2D需要Windows 7/Vista。还有什么应该使用?
6条答案
按热度按时间htzpubme1#
我怀疑微软对“遗留”的定义与任何明智的开发人员应该做的事情没有什么关系,而是基于对Windows API的一些大重写。
从Windows Vista开始,微软一直在重新设计他们的许多API。我们现在有MMDevAPI作为一个真正的声音API,WIC是一个真正的图像文件API等。从我所看到/听到的,这些新的API的比旧的好得多,和“传统”系统都工作在新的基础上。在Windows Vista和更高版本,DirectSound完全基于MMDevAPI,而需要读取图像文件的组件通过WIC来完成。
Windows 8将有一个ARM版本,它似乎只支持当前Windows API的一个子集。在Windows on ARM发布之前,我们无法确定,但是,根据Visual Studio 11中为ARM平台提供的库,(参考:http://www.winehq.org/pipermail/wine-devel/2012-March/094559.html),看起来GDI+和OpenGL将不可用。GDI可用于链接,但这并不一定意味着它完好无损。
这个新的API来自Vista和更高版本,大致对应于VS 11 ARM目标中的库。我猜这个列表上的任何东西都在那里,因为它要么是最新和最好的方法来做它所做的事情,要么它在技术上太重要而不能丢弃(现在)。因此,“遗留”是任何不是最新和最好的方法来做至少一件事。
我不知道什么是真正的图形API。我们已经有Direct 2D,Direct 3D,DirectComposition(顺便说一句,在Windows 8之前是不可用的),DirectWrite和DXGI。DXGI似乎是最接近的,但是我对图形API的理解不够深入,我怀疑gdi 32在技术上很难摆脱。遗留应用程序意味着发现窗口的一部分何时被显示,因此必须被绘制,而不使用WM_PAINT,这涉及到HDC,一个库如何代表应用程序做到这一点而不替换它的窗口过程?我们如何在不使用UpdateLayeredWindow的情况下制作半透明的窗口,它需要一个HDC?user 32在多大程度上依赖于gdi 32,它们真的可以分离吗?
从技术的Angular 来看,Windows可以很容易地摆脱GDI+和OpenGL,但我不相信摆脱OpenGL会奏效,即使在一个不承诺任何向后兼容性的新平台上也是如此。它对开发人员来说似乎太有价值了。GDI+并不那么重要,但对于第三方来说提供替代品非常容易。
我会说使用你列出的任何API,最糟糕的情况可能是,如果你想将你的应用程序移植到ARM上的Metro或Windows,你必须重写你的UI。如果你的需求很简单,你将直接为Windows API编码,GDI是一个不错的选择。我推荐GDI+而不是OpenGL作为绘图API的情况并不多。GDI+速度慢,限制大,GDI+ API更简单,因为它是2D的,所以如果你需要做一些非常简单但带有反锯齿的事情,也许这是值得的。
fjnneemd2#
OpenGL并没有被弃用,* 微软的实现是 *。微软的实现停留在1.1版本,这是 * 旧的。该标准的当前版本是过去的版本4。
如果你想使用OpenGL,它完全支持Windows桌面上的NVidia、ATI和Intel图形卡,但不支持Metro Windows Modern UI apps. It is an industry standard,也可以在Mac和Linux上工作。
如果你需要一个软件回退实现,Mesa可以满足你,它是even works on DOS。由于梅萨可以渲染到内存缓冲区,没有理由它不会在现代UI应用程序中工作(但你可能不想这样做,因为它可能很慢)。
需要注意的一点是,WGL,用于在Windows桌面上访问OpenGL功能的API,依赖于GDI(已被弃用),所以如果你想让你的应用程序面向未来,你可能会想使用像FreeGLUT或SDL这样的东西,这也会让你的平台独立性。
OpenGL ES是OpenGL的一个变体,可以在Android和Apple iOS上运行。它也可以通过WebGL,which Internet Explorer 11 will support在JavaScript中访问(and pretty much every other browser already does). ANGLE提供了GLES for Windows的硬件加速实现,它依赖于DirectX(版本9或11),因此也应该在Modern UI应用程序中工作。
**TL;医生:OpenGL不仅没有被弃用,而且是跨平台的标准,在业界有着巨大的发展势头。GDI和GDI+,嗯,没有那么多。
lstz6jyr3#
如果你想支持Windows XP,那么你就是在支持一个“传统”的操作系统,因此,使用一个“传统”的图形框架是合乎逻辑的选择。
即使那不是真的,我不同意MSDN文章中的建议。这里的“遗留”状态更多的是与Windows团队认为本周哪种技术很酷有关。“过时”的状态指定只是意味着负责的团队不再接受或履行错误报告(除了关键的安全问题)。没什么大不了的这些技术已经存在了足够长的时间,它们的功能相当完整和稳定。
GDI不会去任何地方,所以如果你需要一些坚如磐石的东西,保证在任何地方都能得到支持,这就是我想要的。
如果你需要比GDI提供的更多的2D功能(例如,alpha通道透明度),那么你可以考虑使用GDI+。它比GDI慢了将近一个数量级,但在现代机器上这不是一个太大的问题,因为它的功能比你想要的更多。这也将在很长一段时间内得到支持。
也就是说,如果我今天写一个新的应用程序,我可能不会为OpenGL而烦恼。它提供的好处很少超过Direct 2D和DirectWrite,这两个都是微软推动的GDI/GDI+的替代品。如果你绝对必须针对Windows XP,使用OpenGL可能会有一些好处,因为据我所知,Direct 2D/DirectWrite仅在Vista和更高版本上受支持,但这是因为(正如我最初提到的),Windows XP福尔斯完全落入了“遗留”或“过时”的阵营。或者,如果你已经很好地了解OpenGL,没有时间或愿望学习Direct 2D/DirectWrite,那么在新的应用程序中继续使用它可能是有意义的。
不要让MSDN文章中的废话吓到你。根据所有可用的信息,选择任何对你的特定用例最有意义的技术。当这些技术中的任何一种完全消失时,你将不得不完全重写应用程序,因为其他十几个原因。
**编辑:**嗯,看起来DirectWrite也被宣布(至少被一些人)“过时”了,已经被Direct 2D取代了。这很有趣,它甚至还没有足够长的时间让我费心去学习它。我想这只会支持我之前的论点,“过时”只是指一种特定的技术不是微软开发人员目前认为流行的技术。
我个人一直在等待,直到所有的错误得到解决,(我们决定一个半永久的标准)之前,我使我的任何应用程序的切换。一切我看到写在DirectDraw或Direct 2D有严重的渲染错误,是一个性能噩梦,即使在合理的主管机器。当然,他们只显示 * 有时 *,在正确的条件下,但这对我来说太多了。我发誓,模糊的文本显示 * 所有的时间 *。无法阅读屏幕上的内容对我和我的用户来说是一个交易杀手。GDI没有这个问题,它不会去任何地方。
kqqjbcuj4#
GDI、GDI+和OpenGL真的过时了吗?
OpenGL 4允许你在winxp上使用几何着色器。这是DirectX不可能实现的(DirectX 10及以上版本在WinXP上不支持)。它也是唯一的跨平台3D API之一。
从商业的Angular 来看,微软对推广DirectX感兴趣,因为这是他们的技术,将开发人员锁定在Windows平台上(他们也对使DirectX对开发人员更具吸引力感兴趣,但这是另一回事)。
还应该使用什么?
我建议尽可能停止使用特定于平台的技术。抓住跨平台框架并将其用于您的应用程序。(和替代品)的游戏。这种方式时,平台开发商决定作出荒谬的决定(比如在WinXP上不支持DX10),你可以用最小的开发成本移动到其他地方。Qt也非常强大,目前我没有理由使用它。但是,情况在未来可能会发生变化。
简而言之,当你在特定的平台上开发时,你应该记住平台开发者的目标可能与你的愿望不一致。发现你的源代码被锁定在单一的平台上并不是一件愉快的事情。你自己的目标应该是第一位的,如果操作系统开发者试图让你使用你不喜欢的技术,那么你不应该支持这种技术。
2vuwiymt5#
由于OpenGL是一种标准,它应该被视为与C或C++一样被弃用,因此整个Windows API -由于Wine,今天已经成为在每台x86机器上运行一次的编译器API-被认为是.NET和C#的弃用。
我使用GDI来处理简单的图形,当我需要加速的3D时,我使用OpenGL。
另一个方面是,微软的内置OpenGL实现肯定被认为是不推荐的,因为它只是1.1版本或其他版本,但这已经有很长一段时间了。
ifmq2ha26#
是的,关于OpenGL,它实际上在很多方面都优于DirectX,无论是资源还是显示方面。它永远不会被微软推广,因为它不能拥有OpenGL,更不用说大多数人不做他们的研究,微软可以声称它是旧的。事实是opengl是开源标准,并以比封闭更快的速度发展,因为它是超过一个房间的开发人员支付工作。微软与许多公司签订了合同,只使用微软的软件发布,这导致了微软更多的业务,而更少地使用更先进的OpenGL标准。如果你愿意,这是一个有趣的锁定,微软创建这些合同,使许多程序都是用DirectX编写的,以保持微软的业务,没有公司会拒绝它,因为微软有大约80%以上的家庭用户市场。