码迷,mamicode.com
首页 > 其他好文 > 详细

引擎设计跟踪(九.14.2d) [翻译] shader的跨平台方案之2014

时间:2014-12-29 20:01:25      阅读:215      评论:0      收藏:0      [点我收藏+]

标签:

Origin: http://aras-p.info/blog/2014/03/28/cross-platform-shaders-in-2014/

 

简译 translation:

作者在2012年写过一篇shader跨平台的文章, 开始提到了并有链接.

1.手写或者宏替换

使用宏定义将 HLSL & GLSL 的不同之处封装, 并让每个开发人员了解他们的不同之处. 例子: Valve的Source 2引擎

优点: 简单,容易实现
缺点: 每个开发者都必须熟悉使用宏定义库, 还有其他语法上的不同.

 

2.设计自己的Shader Langugage, 并转换为HLSL/GLSL后端代码

或者使用可视化shader编辑器来动态生成HLSL/GLSL.

 

3.将HLSL的byte code翻译成GLSL

优点: byte code翻译比HLSL翻译更简单. 而且M$的D3DCompile做了很好的优化, 这样从优化后的byte code, 可以直接转为足够优化的GLSL.

缺点:HLSL的封闭式工具链, 只能在windows上跑. HLSL的编译器做的优化可能太过, 有些优化对于现代显卡没有意义.

对应的工具:

  • James Jones的HLSLCrossCompiler, 支持DX10/11 byte code到多种GLSL的转换, 目前处于活跃开发状态.
  • Ryan Gordon的MojoShader, 支持DX9, SM1.1 - SM3.0
  • Valve的TOGL, 仍然是DX9, 而且部分支持. (只部分支持SM3.0)
  • (译者附: KlayGE 好像也有DX的byte code 到GLSL的翻译器)

 

4.在源代码级别将HLSL翻译为GLSL, 或者GLSL到HLSL

  • hlsl2glslfork - by Unity: DX9的HLSL转换到GLSL 1.xx 和GLSL ES(支持ES3). Unity的产品和其他地方有用到, 确实可用, 不过原代码不怎么好, 而且不支持DX10/11.
  • ANGLE - by Google: OpenGL ES 2.0 (还有3.0?) 转换到DX9/10的HLSL. 这套GLES的模拟器基于D3D, 正好也有shader交叉编译器.
  • OpenGL Reference Compiler -  by Khronos: 本身只是一个GLSL校验器和解析器, 但是可以用来生成HLSL.
  • HLSL Cross Compiler - by Epic UE4: 不开源.希望会开源吧. 可能是基于Mesa GLSL或者glsl optimizer.
  • hlslparser: 来源未知. DX9的HLSL转换到GLSL3.1
  • MojoShader - by Ryan Gordon:好像有DX9 HLSL的解析代码

原作者是hlsl2glslfork的owner, 使用的是hlsl2glslfork+glsloptimizer(感觉是Unity内部的?).他也曾想过UE4的方式, 用自己的解析器, 或者Mesa 的GLSL栈, 替换掉hlsl2glslfork, 因为Mesa的GLSL代码比hlsl2glslfork的好, 而且支持SM3.0以后的特性,但是他没有时间做.

 

总结:

作者认为, 目前看来, 最终需要使用两种shader了. 独立于硬件(可以在不同硬件上跑的shader)的方案不太可行. 比如nVidia的Cg, 现在基本停止开发了.(可能是因为Cg太早了, 如果换做现在或许会好点).

翻译DX9 HLSL的方式, 这个基本已经有了解决方案, 比如hlsl2glslfork, mojoshader, ANGLE. 但是目前缺乏DX10/DX11级别的翻译/转换工具, 只有byte code级别的.

 

(译者注: 记得在搜索的时候发现, 虽然Cg可以直接在A/N卡上跑, 但是Cg是N商的东西, 对A卡支持不好. 目前已经停止开发了, 现在nVidia搞的nvFX, 但是还没有去看是什么情况.

另: 一直以为Cg是个翻译器, 直接翻译成HLSL或者GLSL. 难道有自己的byte code而且可以直接装入显卡运行?)

引擎设计跟踪(九.14.2d) [翻译] shader的跨平台方案之2014

标签:

原文地址:http://www.cnblogs.com/crazii/p/4192259.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!