Direct3D9 Fx/HLSL的若干条有用的笔记
Direct3D中的Shader是这样的:
1. ASM Shader是最元老的也是DX8主要使用Shader
2. fxc编译器可以同时编译ASM,HLSL和fx脚本,其中HLSL和fx可以查看编译后的GPU汇编代码
3. D3D9中,fx是HLSL的一种渲染脚本,简化了HLSL设置及常量绑定,并且附带RenderStateBlock及设置
但只能用于制作简单的Shader
4. DirectXSDK中有一个概念混淆:C++例子中的BasicHLSL使用的其实还是fx,HLSLwithoutEffects例子才是真正的纯HLSL
5.fx与HLSL程序鉴别:
使用fx程序必定含有:D3DXCreateEffectXXX 系列函数, ID3DXEffect对象,渲染中能看到SetTechnique,BeginPass,EndPass之类的字眼
使用纯HLSL程序含有:D3DXCompileShader,ID3DXConstantTable对象,GetConstantByName,GetConstantDesc之类的字眼
6. 在fx中包含有 VertexShader,PixelShader代码及profile,entry,RenderState设置及简单的绘制过程(pass)。一次编译后,VS,PS,Texture,Sampler及常量都是在ID3DXEffect对象中自动完成,无需手动设置。
7. HLSL可以将VS及PS代码写入1个.hlsl文件。注意,以下这种代码可以在HLSL中编译过,但实际没有任何效果
1: sampler_state
2: {
3: Texture = <tex>;
4: MipFilter = LINEAR;
5: MinFilter = LINEAR;
6: MagFilter = LINEAR;
7: };
这点可以参考AMD RenderMonkey中只在shader中使用sampler而忽略texture。
8. fx中往shader设置纹理使用的是ID3DXBaseEffect::SetTexture下的这个函数
1: HRESULT SetTexture(
2: D3DXHANDLE hParameter,
3: LPDIRECT3DBASETEXTURE9 pTexture
4: );
但是在HLSL中,这点就变得很麻烦,需要手动设置,可以参考这篇文章
Shader代码片段:
1: sampler Samp0 = sampler_state
2: {
3: Texture = <Tex0>;
4: MipFilter = LINEAR;
5: MinFilter = LINEAR;
6: MagFilter = LINEAR;
7: };
编译HLSL代码后得到ConstantTable,然后取出句柄:
1: ScalarHandle = pixelConstTable->GetConstantByName(0, "Scalar");
2:
3: Samp0Handle = pixelConstTable->GetConstantByName(0, "Samp0");
4:
5: Samp1Handle = pixelConstTable->GetConstantByName(0, "Samp1");
再从句柄取出symbol的描述:
1: UINT count;
2:
3: pixelConstTable->GetConstantDesc(Samp0Handle, & Samp0Desc, &count);
4:
5: pixelConstTable->GetConstantDesc(Samp1Handle, & Samp1Desc, &count);
通过上面的描述,将纹理变量的寄存器偏移作为纹理的stage
8. 优化常量设置速度的方法一般就是根据字符串取出句柄,以后每次渲染时,只通过句柄设置。但ID3DXConstantTable最后还是通过
IDirect3DDevice9::SetPixelShaderConstantX 系列函数来实现的
1: HRESULT SetPixelShaderConstantF(
2: UINT StartRegister,
3: CONST float * pConstantData,
4: UINT Vector4fCount
5: );
9. HLSL将一段包含VS和PS代码编译完成后,将得到VS和PS两个单独的ID3DXConstantTable
Direct3D9 Fx/HLSL的若干条有用的笔记相关推荐
- Android项目笔记整理(1)
第二部分 工作项目中以及平时看视频.看书或者看博客时整理的个人觉得挺有用的笔记 1.Activity界面切换: if(条件1){ setContentView(R.layout. ...
- 1.2什么是HLSL
1.2什么是HLSL Direct8.x中,着色器是通过低级着色汇编语言来编写的,这样的程序更像是汇编式的指令集合,由于其效率低.可读性差.版本限制等缺点,迫切要求出现一门更高级的着色语言.到了Dir ...
- ggplot2学习笔记7:通过图层逐层构建图形
Build a Plot Layer by Layer 5.1 介绍(Introduction) ggplot2背后的一个关键思想是,它允许轻松地迭代,一次一层地构建一个复杂的绘图.每个图层可以来自不 ...
- 《脑力赋能》读书笔记
https://book.douban.com/subject/34855932/ 评语: 比较浅显的入门书,快速阅读完毕,有些小练习不错 有用的笔记: 1) 练习:渐进放松 1. 在椅子上坐好,双脚 ...
- linux离线安装redmine_9 款 Linux 上的最佳笔记应用 | Linux 中国
无论你做什么,做笔记总是一个好习惯.https://linux.cn/article-12307-1.html作者:Ankush Das译者:Xingyu.Wang 无论你做什么,做笔记总是一个好习惯 ...
- sqlserver linux 付费吗_9 款 Linux 上的最佳笔记应用 | Linux 中国
无论你做什么,做笔记总是一个好习惯. 来源:https://linux.cn/article-12307-1.html 作者:Ankush Das 译者:Xingyu.Wang 无论你做什么,做笔记总 ...
- 【电子笔记软件推荐】
最近搜罗了一些笔记软件,我自己稍微总结了一下,虽然讲道理笔记软件不是最重要的,真的整理好自己的知识和形成体系才是最重要的,哎,我就是懒,就先挑不用脑子的事情做,摸鱼... 1.本地笔记本 看了很多人的 ...
- matlab视觉呈现任务,视觉笔记 | 国内外优秀作品解读赏析(1)
嗨大家好,欢迎来到我们每周视觉笔记解读赏析栏目. 作为视觉呈现者,眼界是决定你能力的上限,好的作品能够刺激我们持续的画图的动力.下面为大家分享3种不同风格的视觉笔记,并简单解读. 看别人的作品,寻找自 ...
- oracle update单引号,Oracle学习笔记:update的字段中包括单引号
平时update的时候直接更改字段内的值,例如: update table_temp set name = 'Hider' where id = 100; 但更新后的值中包括单引号,则不能按以上方式进 ...
最新文章
- 某大厂程序员吐槽:在北京当码农,不敢结婚不敢生娃,真是注孤生!
- 使用sqlite3解决IDEA中SVN更新提示cleanup却无法cleanup的问题
- 利用HTML5 canvas合并图片并解决Filaed to execute 'toDataURL' on 'HTMLCanvasElement'异常
- initialization of 'XXX' is skipped by 'case' label
- SecureCRT同时向多个终端发送命令
- [php] in_array 判断问题(坑)
- HTML音乐播放没声音,网页没有声音但系统显示有声音怎么回事?如何解决?
- php中cnum函数,PHP vprintf() 函数
- IIS 服务器下载apk文件报404错
- 紧追SpaceX,又一星际飞船明年4月要首次载人飞行
- pfx导入后仍然打不开加密文件_天正CAD图纸加密和解密方法
- python:configparser模块
- mysql数据库集群版_MySQL数据库集群实战
- 计算机应用基础陈江鸿,广播电视大学计算机教育改革探索与实践-计算机教育论文-计算机论文(6页)-原创力文档...
- 重新挂载磁盘mysql重新建表_Linux重新挂载磁盘
- Excel表的标题栏锁定
- 记一次修复Mac和Win7双系统启动菜单的经历
- 小米5之Root攻略
- docker容器不阻塞的进入
- D3.js v5.0 旭日图
热门文章
- 如何迁移outlook邮件到另一个硬盘_猎头如何有效的搜寻与筛选简历
- python 元组与数组的区别_python – NumPy – 从元组到数组的高效转换?
- cassandra随机获取数据_Cassandra维护最终一致性 和存储机制 分区策略
- 二进制转换 html,javascript 处理回传的二进制图像并显示在html上
- android内存置换,课内资源 - 基于Android实现的页面置换模拟
- 少儿是先学计算机 还是学机器人,机器人学习和少儿编程有什么区别?
- teamviewer11 android,teamviewer安卓最新版本
- linux目录详解i-node,i-node节点与链接
- Java讲课笔记07:计数循环与嵌套循环
- 安卓案例:基于HttpClient下载文本与图片