RED*_*AIR 20 opengl graphics winapi gdi+ gdi
如果您在microsoft.com上打开"图形和游戏(Windows)"页面
最后一类被描述为
旧版图形:已过时且不应在新应用程序中使用的技术.
此类别包括(以及其他)以下API:
你怎么看?如果我想今天推出一款新软件,它必须支持Windows XP(仍然约占所有已安装系统的50%).Direct2D需要Windows 7/Vista.还应该使用什么?
Vin*_*irk 14
我怀疑微软对"遗产"的定义与任何明智的开发者应该做的事情没什么关系,而是基于Windows API的一些重写.
从Windows Vista开始,微软一直在重新设计他们的许多API.我们现在有MMDevAPI作为One True Sound API,WIC是One True Image File API等.从我所看到/听到的,这些新的API比旧的更好,而且"遗留"系统都可以工作基于新的.在Windows Vista及更高版本中,DirectSound完全基于MMDevAPI,需要读取图像文件的组件通过WIC完成.
Windows 8将具有ARM版本,它看起来只支持当前Windows API的一个子集.在Windows上发布Windows之前我们不会确定,但是,基于Visual Studio 11中ARM平台所包含的库(参考:http://www.winehq.org/pipermail/wine-devel/2012-) 3月/ 094559.html),它看起来像GDI +和OpenGL将无法使用.GDI可用于链接,但这并不一定意味着它完好无损.
这个来自Vista及以后的新API大致对应于VS11 ARM目标中的库.我猜这个列表上的任何内容都存在,因为它是执行它所做的最新和最好的方式,或者丢弃(现在)技术上太重要了.因此,"遗产"是任何不是最新和最好的方式来做至少一件事.
我不确定什么是One True Graphics API.我们已经有Direct2D,Direct3D,DirectComposition(顺便说一句,直到Windows 8才能使用),DirectWrite和DXGI.DXGI似乎最接近,但我对图形API的理解还不够深入.我怀疑gdi32在技术上很难摆脱.非传统应用程序是如何旨在找出当窗口的一部分已经被揭示,因此一定要涂,不使用WM_PAINT,它涉及到一个HDC,怎么可能一个图书馆做代表应用程序的,而无需更换其窗口程序?我们如何在不使用UpdateLayeredWindow制作半透明窗口的情况下使用HDC?user32依赖于gdi32多少钱,它们真的可以分开吗?
从技术角度来看,Windows可以轻松摆脱GDI +和OpenGL,但我不相信即使在不承诺任何向后兼容性的新平台上,摆脱OpenGL也会成功.对开发人员来说似乎太有价值了 GDI +并不是那么重要,但第三方提供替代品非常容易.
我会说使用你列出的任何API,而最糟糕的情况是,如果你想将你的应用程序移植到Metro或Windows上的Windows,你必须重写你的UI.如果您的需求很简单并且您将直接为Windows API编码,那么GDI是一个很好的选择.在我推荐GDI +而不是OpenGL作为绘图API的情况并不多.GDI +速度慢,有限,仅适用于Windows.GDI + API更简单,因为它是2D,所以如果你需要做一些非常简单但有抗锯齿的东西,也许这是值得的.
OpenGL并没有被弃用,微软的实现也是如此.微软的实施仍停留在版本1.1,这是旧版本.该标准的当前版本是过去的版本4.如果您想使用OpenGL,Windows桌面上的NVidia,ATI和Intel显卡完全支持它,但Metro Windows现代UI应用程序中没有,是行业标准,并且适用于Mac和Linux.如果你需要一个软件回退实现,Mesa已经让你了解它,甚至可以在DOS上运行.(由于Mesa可以渲染到内存缓冲区,因此它没有理由在Modern UI应用程序中不起作用,但你可能不想这样做,因为它可能很慢.)有一点需要注意的是WGL,它的API在Windows桌面上访问OpenGL功能取决于GDI(已弃用),因此如果您希望面向未来的应用程序,您可能希望使用像FreeGLUT或SDL这样的东西,这也会让您获得平台独立性.
OpenGL ES是OpenGL的一种变体,适用于Android和Apple iOS.它也可以通过WebGL访问,Internet Explorer 11将支持它(而且几乎所有其他浏览器都支持它.)ANGLE提供了一个硬件加速的GLES for Windows实现,它可以搭载DirectX(版本9或11),从而应该也适用于Modern UI应用程序.Mesa再一次覆盖了软件实现.
TL; DR:OpenGL不仅不被弃用,它是跨平台的,标准的,并且在行业中具有巨大的动力.GDI和GDI +,不是那么多.
如果您想支持Windows XP,那么您将支持"遗留"操作系统,因此,使用"传统"图形框架是合乎逻辑的选择.
即使这不是真的,我们只是说我不同意链接的MSDN文章给出的建议.这里的"遗产"状态更多地与Windows团队本周认为酷的技术有关."过时"的状态标识仅表示负责组不再接受或完成错误报告(关键安全问题除外).没有太大的交易 - 这些技术已经存在足够长的时间,它们相当完整且稳定.
GDI不会去任何地方,所以如果你需要一些可以保证在任何地方和任何地方得到支持的坚如磐石的东西,那就是我要用的东西.
如果您需要比GDI提供的更多2D功能(例如,alpha通道透明度),那么您可以考虑使用GDI +.它比GDI慢了近一个数量级,但对于功率比你想要的更多的现代机器而言,这并不是一个大问题.这也将在很长一段时间内得到支持.
也就是说,如果我今天正在编写一个新的应用程序,我可能不会打扰OpenGL.它提供的优势远远超过Direct2D和DirectWrite,这些都是微软推动的GDI/GDI +的替代品.如果您绝对必须使用OpenGL,那么使用OpenGL可能会有一些好处,因为据我所知,Direct2D/DirectWrite仅在Vista及更高版本上受支持,但这是因为(正如我之前提到的),Windows XP完全属于"遗产"或"过时"阵营本身.或者,如果您已经很好地了解OpenGL并且没有时间或者想要学习Direct2D/DirectWrite,那么在新应用程序中继续使用它可能是有意义的.
不要让MSDN文章的措辞吓到你.根据所有可用信息,选择适合您特定用例的任何技术.当这些技术中的任何一种完全消失时,您将不得不完全重写该应用程序以达到其他十几个原因.
编辑:嗯,看起来DirectWrite也已被声明(至少有些人)"已过时",已被Direct2D取代.这很有趣,它甚至没有足够长的时间让我费心去学习它.我想这只是为了支持我之前的论点,即"过时"只是指出一种特定的技术并不是微软开发人员当前认为流行的技术.
在我为任何应用程序进行切换之前,我个人都在等待,直到所有错误都得到解决(并且我们决定采用半永久性标准).我在DirectDraw或Direct2D中看到的所有东西都有严重的渲染错误,即使在合理的机器上也是一场性能噩梦.当然,它们有时只会在适当的条件下出现,但这对我来说太过分了.我发誓,模糊的文字一直出现.无法阅读屏幕上的内容对我和我的用户来说是一个交易杀手.GDI没有这个问题,它不会去任何地方.
GDI,GDI +和OpenGL真的已经过时/弃用了吗?
对于OpenGL,情况并非如此.OpenGL 4允许您在winxp上使用几何着色器.DirectX无法实现这一点(WInXP不支持DirectX 10及更高版本).它也是唯一的跨平台3D API之一.
从商业角度来看,MS有兴趣推广DirectX,因为他们的技术将Developer锁定在Windows平台上(他们也有兴趣让DirectX对开发人员更具吸引力,但这是另一个故事).因此,他们不热衷于推广OpenGL是有道理的.
还应该使用什么?
我建议尽可能停止使用特定于平台的技术.获取跨平台框架并将其用于您的应用程序.有用于GUI应用程序的Qt,GTK,wxWidgets和其他工具包,以及用于游戏的SDL(和备选方案).这样,当平台开发人员决定做出一个荒谬的决定(比如不支持WinXP上的DX10)时,你就不用担心,你将能够以最低的开发成本移动到其他地方.Qt也非常强大,目前我没有理由使用其他东西进行GUI开发.不过,情况可能在未来发生变化.
简而言之,在为某个平台开发时,您应该记住,平台开发人员的目标可能与您的愿望不符.发现您的资源已被锁定在单一平台中并不是非常愉快的体验.你自己的目标应该是第一要务,如果os开发人员试图让你使用你不喜欢的某些技术,那么你就不应该支持这种技术.