折腾了许久,今天终于完成到D3D10的移植了。总体感觉不错,性能提高了不少。基本上,有一种再也不想回到混乱的D3D9时代的感觉。新的API很精简,没有冗余,操作和性能的关系很明了,完全贴合硬件。
当然,这也意味着,它和D3D8、9的设计方向完全不同,而是一套偏向底层的API。早年,D3D API一直饱受争议,PC开发者大多认为它太底层太难用,而少数来自游戏主机开发背景的人则反而认为它抽象层次太高阻碍优化(游戏主机的API要更加底层)。当然,PC开发者的意见形成压倒性的优势,所以D3D不断向易用性方向前进,在版本8、9达到顶峰,甚至一时间赢得了超过OpenGL的口碑。但出乎意料的是,可编程管线的迅速发展改写了前进的方向,尤其是顶级的游戏厂商,他们对性能和灵活性的追求远远超过易用性。一套API难以同时满足不同需求的用户。此时的OpenGL也遇到了相同的问题,游戏开发者认为GL API已经严重脱离当今的硬件加速模型,需要调整精简,而CAD开发者则认为完全不需要,兼容性才最重要。争论n年之后的结果,就是分成两个profile。
这种情况下,D3D10被设计成一套全新的底层API,面向高端用户。一般商务3D需求则有高层的WPF来满足,两者间的空白由XNA来填补。WPF和XNA都是基于.NET的,而对D3D10,微软甚至没有官方的.NET包装。这个定位,也导致D3D10的使用难度很高,如果不是追求顶级性能和灵活性,没必要为此浪费青春,退半步就有微软在易用性上下了苦功的XNA,而且XNA本身也为未来过渡到D3D10架构做了充足的铺垫(XNA还是跨平台的,支持Windows、XBox、Windows Phone 7、Zune)。
作为底层的API,D3D10是不太适合直接用来写应用的——尻,D3D就没有一个版本适合直接用来写应用的,每隔几年API就变得面目全非了,总得包装一层。但因为这次变动太大,包装层都不得不改。同时,D3DX的扩展库大幅缩水,大量的设计时预处理功能不复存在,而D3D11的扩展库几乎就不剩什么东西了。因为高端开发者是看不上D3DX的,他们都有自己的更优秀的
D3D10移植感想
最新推荐文章于 2019-12-11 21:38:48 发布