当前位置: 首页 > news >正文

艰难的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的结构。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • visual studio 怎么生成coredump文件_如何在docker容器中生成core dump
  • 对信息系统集成项目管理的一点看法
  • 电子工程师之家_「德语学习」电气、电子、电力什么区别?
  • javascript操作radio的几种方法
  • arcengine遍历属性表_【Python@arcpy】python操作Excel与属性表批处理
  • ExtremeTable的导出问题
  • 运动估计算法的程序实现_光流法--Lucas Kanade算法
  • 网吧系统母盘制作(系统分区整体考虑优化配置篇)
  • 点在多边形内_空间分析:2-4.Python生成泰森多边形
  • struts2的s:param标签使用
  • leetcode 打印_剑指 Offer 32 - I. 从上到下打印二叉树
  • 使用spring的MBeanExporter暴露hibernate的StatisticsService对象方法
  • springboot分页插件_Spring boot整合Mybatis Generator以及PageHelper源码分析
  • ext2.0不能与prototype1.6一起使用
  • c语言scanf一次不定_初学C语言编程时最容易犯的错误,你踩坑了吗?
  • 77. Combinations
  • JAVA SE 6 GC调优笔记
  • jquery cookie
  • leetcode46 Permutation 排列组合
  • oldjun 检测网站的经验
  • Python中eval与exec的使用及区别
  • ucore操作系统实验笔记 - 重新理解中断
  • Yeoman_Bower_Grunt
  • 高程读书笔记 第六章 面向对象程序设计
  • 搞机器学习要哪些技能
  • 工作手记之html2canvas使用概述
  • 将 Measurements 和 Units 应用到物理学
  • 聊聊flink的BlobWriter
  • C# - 为值类型重定义相等性
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • ‌移动管家手机智能控制汽车系统
  • #Lua:Lua调用C++生成的DLL库
  • #pragma 指令
  • (¥1011)-(一千零一拾一元整)输出
  • (2024.6.23)最新版MAVEN的安装和配置教程(超详细)
  • (编译到47%失败)to be deleted
  • (第三期)书生大模型实战营——InternVL(冷笑话大师)部署微调实践
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (排序详解之 堆排序)
  • (学习日记)2024.01.09
  • (译)2019年前端性能优化清单 — 下篇
  • (转)jdk与jre的区别
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .Net CoreRabbitMQ消息存储可靠机制
  • .net core开源商城系统源码,支持可视化布局小程序
  • .net 逐行读取大文本文件_如何使用 Java 灵活读取 Excel 内容 ?
  • .NET中 MVC 工厂模式浅析
  • [ A*实现 ] C++,矩阵地图
  • [ 环境搭建篇 ] 安装 java 环境并配置环境变量(附 JDK1.8 安装包)
  • [ 隧道技术 ] cpolar 工具详解之将内网端口映射到公网
  • [ 物联网 ]拟合模型解决传感器数据获取中数据与实际值的误差的补偿方法
  • [AAuto]给百宝箱增加娱乐功能
  • [Android] 240204批量生成联系人,短信,通话记录的APK
  • [C]编译和预处理详解