Mat*_*Mat 4 constants hlsl directx-11
有了XNA背景,我尝试创建一个简单的DirectX11应用程序.现在我试着弄清楚如何设置着色器常量,例如投影矩阵等.我正在阅读有关常量缓冲区的信息 - 但是在渲染之前没有简单的方法来设置一些常量,而不使用缓冲区?
我采取了同样的道路,这也是我一直在努力的事情.由于DirectX10对界面进行了很多更改,因此可以进行更全面的控制.
迟早你会习惯缓冲区,发现它们实际上非常整洁.
以下是一些优点和提示:
现在有一种将顶点,索引和常量数据绑定到管道的统一方法,即Buffer类.
缓冲区不关心数据的布局.你可以写任何浮点数组合,而不仅仅是矩阵和向量.我通常将一个缓冲区的所有常量组合在一起packoffset(),然后使用循环将其写入流中.
常量被打包在寄存器中,每个寄存器最多可容纳四个32位组件.
由于您可以将多个常量缓冲区绑定到单个阶段,因此建议您按常规更新频率分隔常量.例如,视图和投影矩阵通常每帧更新一次,而世界矩阵将针对每个网格更改.为获得最佳性能,您将创建两个缓冲区,一个包含每帧数据,另一个包含每个网格数据.
最后,常量缓冲区的限制:
每个常量缓冲区最多可容纳4096个向量; 每个向量包含最多四个32位值.每个管道阶段最多可以绑定14个常量缓冲区(保留2个额外的插槽供内部使用).