上一篇提出了跨越OpenGL和D3D的基本问题,介绍了一些能在不改变API的情况下,通过输入数据来消除OpenGL和D3D之区别。本篇的重点是如何利用现代OpenGL提供的扩展和新功能,消除一些无法在上层解决的问题。
顶点颜色顺序
D3D9 最常用的顶点颜色格式是BGRA格式(也就是D3DCOLOR),而OpenGL默认用的是RGBA格式。D3D9用BGRA纯粹是因为历史原因,早期硬 件不支持UBYTE4的格式,只能用D3DCOLOR,然后再shader里调用D3DCOLORtoUBYTE4。现在的GPU都支持 UBYTE4,D3D10+也是可以直接使用RGBA,所以这已经不是问题了。
如果需要兼容已经生成BGRA格式数据,现代OpenGL提供了GL_EXT_vertex_array_bgra这个扩展,也可以使用BGRA作为顶点颜色输入格式 ...
多年来,在论坛和各个网站上不断能看到拿OpenGL和D3D进行比较的帖子和文章。他们经常制造很多谜思,使得初学者和一些从业人员对OpenGL和D3D产生了各种各样的流言。
有人说,OpenGL直接调到驱动,性能高于D3D。
有人说,Shader都得写两套,很麻烦。
有人说,OpenGL和D3D在底层有很多区别,而且不可设置。
有人说,图形引擎如果要兼容两者,就只能取其功能的交集,最后还不如任何一种API。
真的么?
本文试图:
找出现代OpenGL和D3D的共通之处
归纳如何让API对上层代码尽量透明
本文不希望:
讲解函数间的对应关系
如何在OpenGL和D3D之间作选择
贬低一方,抬高另一方
下面先从几个比较基本的方面 ...
NVIDIA的developer网站沉寂了几个月,原来是在酝酿着大改版。现在的界面风格很像其他zone的样式。同时,期待已久的Graphics SDK 11也同时发布了!Direct3D的版本已经可以下载,OpenGL的版本将在不久的将来发布。
这个版本的SDK在内容上还是很给力的,涵盖了3D Vision、FXAA、Tessellation、Water、Hair、GI等多方面新技术。独立的例子可以在这里看到。目前各个例子的Whitepaper还不能下载,相信过两天就能解决。
EDIT: whitepaper和图片都恢复正常了。
在以前的一个帖子里,我还期待NV SDK 11早日到来。结果1月份快过去了,11没到,NV却偷偷摸摸地发布了NV SDK 10.6。更新如下:
An improved version of Instanced Tessellation. This sample implements 3 major schemes for Approximating Catmull-Clark Subdivision Surfaces using instanced tessellation in both DX9 and DX10. In the sample, these three schemes are also compared in terms of their visual quality and performance.
Bug fix for StencilRoutedKBuffer: the previous version would create a DX 10.1 device, resulting in corruption errors. A modification to DXUTCore prevents the DX 10.1 device from bei ...
[zh]
在WinXP下,即使GPU支持D3D10+,也只能用D3D9的API。但实际上各个厂商都对D3D9做了一些扩展,把部分D3D10+的特性暴露给了D3D9 API。以下是一些特殊的纹理格式,通过FOURCC的方式来使用。通过CheckDeviceFormat可以检测是否支持该格式,在CreateTexture的时候传入即可。下表的源头是各厂商的GPU文档,经过Unity的Aras整理而来:
Usage列:DS=DepthStencil,RT=RenderTarget;Resource列:tex=texture,surf=surface。越绿表示越多硬件支持。
[/zh]
[en]
In WinXP, even a GPU supports D3D10+ can only uses D3D9 API. Actually, most GPU vendors have their extensions, some D3D10+'s features are exposed to D3D9 AP ...
版本号为9.29.1973,发布日期11/30/2010。下载地址:http://www.microsoft.com/downloads/en/details.aspx?FamilyID=2da43d38-db71-4c1b-bc6a-9b6652cd92a3。
估计新版本的DirectX SDK也快发布了。
自从NVIDIA的GTX480推出以来,网上能见到不少对比评测。但大家一般都是用3DMark之类大型的评测方法,得到的结果比较笼统。我在这里打算评测的方法是用DX SDK Feb2010的sample,对GPU的不同模块分开评测。这样的结果对于图形相关人员更有意义。
我的评测打算分三轮进行,分别评测传统图形流水线,DirectCompute和Tessellation的性能。测试的机器是两台Dell T5400 Workstation(Xeon E5440 4-core,4GB内存),分别装一块GTX480和一块HD5870。两块显卡都是公版配置。操作系统是Win7 64bit,使用传统界面以消除Areo界面的PS开销。显卡驱动分别是Forceware 197.41和Catalyst 10.3。
第一轮 传统图形流水线
第一论测试的是两块显卡在游戏常见 ...