DirectX11笔记(九)--Direct3D渲染5--CONSTANT BUFFERS
原文:DirectX11笔记(九)--Direct3D渲染5--CONSTANT BUFFERS
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010333737/article/details/78778217
在之前例子的 shader 里有这样一段代码
cbuffer cbPerObject
{
float4x4 gWorldViewProj;
};
这段代码定义了一个 cbuffer 类型的变量 cbPerObject. Constant buffer 时间上就是一个存储能被 shader 访问的变量的数据块, 这个例子中他存储了一个 4 x 4 的矩阵用来表示 WVP 矩阵. 存储在 constant buffer 里的数据是不随顶点改变发生变化的, 但是我们可以通过 C++ 在代码中去更新这个 buffer, 这个特性建立了 C++ 逻辑代码与 shader 的联系.
一般我们在编程的时候最好根据变量更新的频率来设计 cbuffer, 当更新一个 cbuffer 时它的所有成员都需要更新, 所以为了运行效率, 可以将 cbuffer 进行拆分. 以下面的代码为例
cbuffer cbPerObject
{
float4x4 gWVP;
};
cbuffer cbPerFrame
{
float3 gLightDirection;
float3 gLightPosition;
float4 gLightColor;
};
cbuffer cbRarely
{
float4 gFogColor;
float gFogStart;
float gFogEnd;
};
WVP 矩阵对于每一个物体都不一样, 当我们这一帧渲染 100 个物体时他将被调用 100 次. 但是第二个 cbuffer 里存储的是场景的光属性, 我们假设这个光是动态的, 所以我们需要每帧跟新一次. 最后一个 cbuffer 存储的是雾的属性, 我们假设雾是基本不会变化的.
DirectX11笔记(九)--Direct3D渲染5--CONSTANT BUFFERS的更多相关文章
- DirectX11笔记(七)--Direct3D渲染3--INDICES AND INDEX BUFFERS
原文:DirectX11笔记(七)--Direct3D渲染3--INDICES AND INDEX BUFFERS 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.cs ...
- DirectX11笔记(八)--Direct3D渲染4--VERTEX SHADER
原文:DirectX11笔记(八)--Direct3D渲染4--VERTEX SHADER 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u0103 ...
- DirectX11笔记(六)--Direct3D渲染2--VERTEX BUFFER
原文:DirectX11笔记(六)--Direct3D渲染2--VERTEX BUFFER 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u0103 ...
- DirectX11笔记(十一)--Direct3D渲染7--RENDER STATES
原文:DirectX11笔记(十一)--Direct3D渲染7--RENDER STATES 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u010 ...
- DirectX11笔记(十)--Direct3D渲染6--PIXEL SHADER
原文:DirectX11笔记(十)--Direct3D渲染6--PIXEL SHADER 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u01033 ...
- DirectX11笔记(五)--Direct3D渲染1--VERTICES AND INPUT LAYOUTS
原文:DirectX11笔记(五)--Direct3D渲染1--VERTICES AND INPUT LAYOUTS 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.c ...
- DirectX11笔记(三)--Direct3D初始化2
原文:DirectX11笔记(三)--Direct3D初始化2 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u010333737/article/ ...
- DirectX11笔记(二)--Direct3D初始化1之基本概念
原文:DirectX11笔记(二)--Direct3D初始化1之基本概念 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u010333737/art ...
- DirectX11笔记(三)--Direct3D初始化代码
原文:DirectX11笔记(三)--Direct3D初始化代码 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u010333737/article ...
随机推荐
- springMVC和springBoot区别
Spring MVC是什么?(1)Spring MVC是Spring提供的一个强大而灵活的模块式web框架.通过Dispatcher Servlet, ModelAndView 和 View Reso ...
- Django项目:CRM(客户关系管理系统)--68--58PerfectCRM实现king_admin批量生成上课记录
# kingadmin.py # ————————04PerfectCRM实现King_admin注册功能———————— from crm import models #print("ki ...
- 获取地址栏URL中参数, getQuerySting()方法
今天同事用的以前的获取url地址参数获取不到.以前的方法失效了.后面发现是正则表达式bug: 第一种获取方法(针对普通情况的一般够用): function getQueryString(name) { ...
- 深入浅出 Java Concurrency (15): 锁机制 part 10 锁的一些其它问题[转]
主要谈谈锁的性能以及其它一些理论知识,内容主要的出处是<Java Concurrency in Practice>,结合自己的理解和实际应用对锁机制进行一个小小的总结. 首先需要强调的一点 ...
- Composer安装Yii2以及相关扩展
1.安装redis扩展 命令:composer require yiisoft/yii2-redis Git地址:https://github.com/yiisoft/yii2-redis/blob/ ...
- 通过BlukLoad的方式快速导入海量数据
http://www.cnblogs.com/MOBIN/p/5559575.html 摘要 加载数据到HBase的方式有多种,通过HBase API导入或命令行导入或使用第三方(如sqoop)来导入 ...
- 使用 windows 批处理指令(BAT文件)进行压缩文件(zip)解压操作
以下指令包括文件删除.复制.zip文件解压操作.使用7z指令指令进行解压操作前,需要确保 windows 的 path 系统环境变量中存在7z的安装路径. 7z的下载地址:https://www.7- ...
- git与github建立链接(学习笔记)
总结步骤: 1.将所有文件添加到本库 git add . 2. git commit -m "提示信息随便写" 3.查看git修改状态 git status 4.获取远程库与本地同 ...
- iFrame 父子窗口通讯
今天就来说说 iFrame 的父子窗口通讯,关于 iFrame 这里就不陈述了,想要了解的盆友可以百度一下, 由于项目需要,前些天用到了个弹框框架 layer 弹出层,有很多弹出的方式,其中一种就是用 ...
- 转载 WPF -- 控件模板 (ControlTemplate)(一) https://blog.csdn.net/qq_23018459/article/details/79899838
ControlTemplate(控件模板) https://blog.csdn.net/qq_23018459/article/details/79899838 WPF包含数据模板和控件模板,其中 ...