首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DirectX11设置着色器常量

DirectX11设置着色器常量
EN

Stack Overflow用户
提问于 2012-03-03 10:21:52
回答 2查看 8.3K关注 0票数 4

有了XNA的背景知识,我尝试创建一个简单的DirectX11应用程序。现在我试图弄清楚如何设置着色器常量,如投影矩阵等。我正在阅读关于常量缓冲区的文章-但是在渲染之前没有简单的方法来设置一些常量,而不使用缓冲区吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-03 19:38:03

我也走了同样的路,这也是我一直在努力解决的问题。自DirectX10以来,界面发生了很多变化,允许进行更全面的控制。

迟早你会习惯这些缓冲区,并发现它们实际上相当整洁。

以下是一些优势和提示:

HLSL现在有一种统一的方式将顶点、索引和常量数据绑定到流水线上,即class.

  • Constants被打包在寄存器中,每个寄存器最多容纳四个32位components.

  • You
  • Buffer pack the constants manually使用packoffset() HLSL函数。
  • 由于您可以将多个常量缓冲区绑定到单个阶段,因此建议根据它们的更新频率进行separate your constants。例如,视图和投影矩阵通常每帧更新一次,而世界矩阵将为每个网格更改。为获得最佳性能,应创建两个缓冲区,一个包含每帧数据,另一个包含constant buffers

限制的每个网格

每个常量缓冲区最多可以容纳4096个向量;每个向量最多包含四个32位值。每个流水线阶段最多可以绑定14个常量缓冲区(保留2个额外的插槽供内部使用)。

票数 8
EN

Stack Overflow用户

发布于 2012-03-03 14:52:24

在DirectX11中,可以为着色器设定恒定缓冲区。一次不能只设置一个常量。一次只能设置整个缓冲区。要么使用常量缓冲区,要么查看Effects11框架,这将使您更容易使用着色器常量的API (类似于D3D9效果)。

下面是创建常量缓冲区并将其应用于顶点着色器的示例:http://msdn.microsoft.com/en-us/library/ff476896.aspx

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9542832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档