TORQUE引擎的GPU代码生成器

  T3D引擎的GPU代码渲染分成2种情况: 一种是通过GPU代码生成器来生成GPU的代码,包括HLSL和GLSL。还有一种就是后期渲染的特效post effect。这种类型的特效都需要开发人员自己去手动写GPU代码来实现的。比如体积光,屏幕柔光等等。这里我着重说说前一种,C++代码来生成GPU的代码。

    首先说说原理,原理比较简单就是通过顶点格式来生成。简单说就是这样的。ShaderGen类是生成器。负责最后所有的的GPU代码的生成。ShaderGen的getShader函数通过把格式转换成一个64位的哈希数字,然后放到一个容器里面去。ShaderComponent ShaderConnector 以及这些类的派生类都是用来做生成GPU代码的结构部分的内容。如果说一个GPU代码

    struct IN

    {

        float 3 point : POINT;

    }

    就是用来生成出来这部分的代码的。

    ShaderFeature ShaderFeatureHLSL以及这些类的派生类。这些是非常关键的。生成的VS 和PS代码就是靠这些类的派生类来实现的。类的processVert函数用来生成VS代码,processPix用来生成PS代码。这个时候比如要你写一些引擎本身不支持的特效,那么你需要继承ShaderFeatureHLSL,来实现这2个函数。当然这个类还其他的函数功能是类似的。我就不在重复了。DeclareFeatureType FEATUREMGR->registerFeature()ImplementFeatureType 这3个也很关键。你怎么把你写的东西让GPU代码生成器知道并且生成出来,这3个宏很关键。前2个宏保证你的代码可以让GPU代码生成器生成出来你需要的代码。最后一个宏控制生成的顺序。比如说是先处理法线贴图还是高光贴图?这些的生成顺序是什么就靠这个宏了,这个宏有一个参数来控制顺序。不过,特别要注意的是。这个顺序只保证大家是在同一个类型的情况下才有顺序。所以要注意,不然可能会出现你不想要的结果。可以看看他的排序函数_typeCmp。而且建议一定要看看。

你可能感兴趣的:(TORQUE引擎的GPU代码生成器)