艰难的shader系统

     其实shader系统的设计已经开始好长时间了。因为shade的拖累,整个渲染器除了能清屏以外什么都干不了。我的目标是设计一个完全可动态生成shader代码,却又不至于落入shader代码是预定义死的死板套路中。一开始发现比较简单,其实实现起来却非常难。最近研究mental mill,也没什么心得,还是把最近的一些需求和初步想法写出来,也许会有些收获,以下便是今天晚上的想法,最近没时间出去拍片,白天累的要死,心情也佳。看来思维水平下降不少啊。不知道何时能完成这个shader系统-------不过我相信总能完成的。

第一部分:
shader系统包含的shader组成部分:
一: 完整的SHader代码,这样的Shader代码独立可执行。不需要shader修改器一类的。
二: shader基础代码。这样的shader代码可以增加修改器,安装默认修改器代码后可独立执行。
三: shader修改器代码。类似于一个函数。
四: shader的输入模块。这样的shader模块,表示一个模块接受什么样的输入参数,
    这样的系统还将对输入数据进行基本处理。
 Vertex Shader通常是一个对应于Input Assembler的系统
 Pixel Shader则对应如何抓取纹理数据和接受GS/VS传递下来的数据。
 举例说,一个视频处理的ps的输入模块可能是一个转换YUV为RGB,并进行亮度,对比度调节的输入模块。
 输入模块和输出模块,修改器系统一起组成一个完整的shader.

 shader输入系统除了要对输入参数描述外,还需要对这个系统的输出数据进行定义。这样的结构叫输入描述符
 基础shader代码会包含一个输入描述符
   
五:shader输出模块:
   这样的shader模块,表示一个shader处理完后能输出什么样的数据。
   VS的输出模块要和gs/ps的输入系统匹配。
   ps的输出模块则可以定义输出多少个RenderTarget等。
   输出模块的输出参数需要进行描述,以便与对应的输入模块进行匹配。
   基础shader代码会包含一个输出描述符

六:shader的控制文件。
   用来描述用以上描述的5个部分中的那些数据来组成一个完整可用的shader。


第二部分:
shader修改器系统的组成
(以下各部分均为和具体的shader api有关,比如)

shader基础代码:
      shader基础代码如果不使用其修改器。则会调用默认的例程,
      这可能用#ifdef来控制。也可能由Shader系统用默认的插入代码。
shader的修改器描述符:
      定义shader修改器的类型,参数等,还可能定义出默认的插入代码
shader的修改器代码:
      多个修改器代码组成一个完整的修改器。
   一个修改器代码加入到shader修改器之前需要匹配参数。
shader修改器堆栈:
      一个用来描述如何用修改器代码组成修改器,并加入到shader代码里形成新shader的结构。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值