NaCl的3D渲染API使用的GLES2.0, 这也很好理解, 因为这已经是公认的跨平台标准了. 手机, 平板, 网页, PC都可以使用.
就算在Windows上, 也有一些基于DX9的GLES2.0实现, 比如ANGLE. 有时候我真在想, 像M$这种升级个操作系统版本号就淘汰一种API的做法, 还不如全都使用标准库, 这样也节省了跨平台移植的成本~所以什么DX10/DX11, 还是省省吧
其实从DX9到GLES(本文提到的都是指2.0版本), 大部分只是API换了种写法, 难度不大. 之前有在手机上做过一个简单的GLES渲染器, 有一些差异总结一下吧(不限于NaCl):
- GLES没有固定管线, 就算画条线要也写个shader. 不过我到是挺喜欢这种设计的, 干净
- GLES现在的支持最低相当于SM2.0(一般是嵌入式设备), 主流的手机等都是SM3.0的标准. 所以, 常用的渲染效果都可以实现, 做个次世代画面也有一定的可行性
- GLES的API都是C函数, 不像DX9那种有点面向对象的设计. 但是实际写代码, 这种API比较方便, 不用依赖指针
- GLES因为是为移动平台设计的, 所以对于标准支持的特性有限. 比如FloatTexture, DXTn, BufferLock等都是基于扩展来实现的, 这点跟GL很像
- GLES投影后Z的范围是[-1, 1], 这点需要特别注意. 至于什么左右手坐标