|
今天看realtimerendering的时候,看到这样的一段话:
一种常用的解决办法是写一段将要被编译很多次的足够长的shader,然后每次用语言的特性或是预编译来创建不同特点版本的shader。这个称之为supershader。
不过不是很明白,google了一下supershader,看到一段cg的代码,里面很多预编译命令如#ifdef #define....
然后根据不同的define进行编译。
这让我想到前不久一个前辈告诉我的话,说有的引擎会建立很大的shader,但是里面一般都是很小的函数,然后根据不同的需求,连接成需要的shader。
不知道这两个说的是不是同一回事,如果是的话,那这样做具体的实现办法是什么呢?所谓“将小的函数连接成新的shader”具体要怎么做呢?
我最近在胡乱自己建立框架,但是在封装shader和effect的时候,很是郁闷。因为shader毕竟需要单独编译,没有外面是用api编写的代码有足够多的自由。比如不同的材质,或是不同的效果,难道每需要一个effect就建立一个effect?或者一个technique?这样明显会有很多代码冗余的地方,而且也不方便管理。
请牛人指教一下。自己还没有系统的看过一个引擎,这地方还是很迷茫啊。。。
|
|