openGL之API学习(七十三)opengl与Direct3D(D3D)

128 篇文章 54 订阅
112 篇文章 15 订阅

架构上:

在架构上其实两者没有什么区别,只是D3D的runtime是在OS里,对于不同硬件来说都是一样的。而OpenGL的runtime直接是和驱动合为一体的。但这并不会造成性能有所差别。

shader上:

OpenGL 的原生shading language是GLSL,D3D的是HLSL。两者语法相似,但细节上天差地别。好在,NVIDIA的Cg在很大程度上类似于HLSL,而且可以编译 出GLSL来。所以,Cg编译器成了跨越这两种shader的桥梁。当然,要真正实用起来,还需要不少工作。比如Cg的Geometry Shader和HLSL 10+的有些许不同,需要通过#ifdef来分开。另外,Cg编译器生成的GLSL需要一些调整才能在ATI的驱动上工作,所以还需要多一次转换。好在这 些事情都可以通过程序自动完成,而且速度很快。具体可以参考KlayGE的OGLShaderObject::ConvertToGLSL。实际上,KlayGE的所有shader都只写了一份(语法用HLSL 11的),在不同API上可以自动编译成原生的shader使用(有OpenGL和OpenGL ES的编译器,曾经还有D3D9的)。这样就没有重写的繁琐,也没有增加runtime开销,破解了流言2。

当然,这里还有另一种更好的选择,把HLSL编译器生成的bytecode转换成GLSL。

坐标系上:

OpenGL用右手坐标系,而D3D用左手;裁剪空间里OpenGL的z是[-1, 1],而D3D是[0, 1]。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值