状态对象

设备状态被分为状态对象,这些状态对象可大大降低状态变化的成本。 状态对象有多个,每一个状态对象旨在对特定管道阶段的一组状态进行初始化。 状态对象因 Direct3D 的版本而异。

输入布局状态

此组状态规定输入汇编程序 (IA) 阶段如何从输入缓冲区读取数据,并将数据汇编供顶点着色器使用。 其中包括输入缓冲区的元素数量以及输入数据的签名等状态。 输入汇编程序 (IA) 阶段通过流式传输将基元从内存传入管道。

光栅器状态

此组状态能够对光栅器 (RS) 阶段进行初始化。 此对象包括填充或精选模式等状态,让剪刀矩形能够剪切和设置多重采样参数。 此阶段可将基元光栅化为像素,执行相关操作,例如将基元剪切并映射至视区。

深度模具状态

此组状态可对输出合并器 (OM) 阶段的深度模具部分进行初始化。 具体而言,此对象可初始化深度和模具测试。

混合状态

此组状态可对输出合并器 (OM) 阶段的混合部分进行初始化。

取样器状态

此组状态可初始化取样器对象。 着色器阶段使用取样器对象筛选内存中的纹理。

在 Direct3D 中,取样器对象不与特定纹理绑定,只描述在有任何附带资源的情况下如何进行筛选。

性能注意事项

设计 API 使用状态对象可带来多项性能优势。 其中包括验证对象创建时的状态、实现状态对象在硬件中的缓存以及显著减少在状态设置 API 调用(将图柄传递至状态对象,而不是状态)时通过的状态量。

为了实现这些性能改进,应用程序启动时,应在呈现循环之前创建状态对象。 状态对象不可变,也就是说在创建后,你无法对其进行更改。 必须将其销毁并重新创建。

你可使用各类取样器状态组合,创建多个取样器对象。 然后,调用将图柄传递至对象(不同于取样器状态)的相应“设置”API,实现对取样器状态的更改。 由于调用数量和数据量大大减少,因此,这能够显著降低每一个状态更改渲染帧期间的间接成本。

或者,你也可以选择使用效果系统,它能够自动管理应用程序状态对象的有效创建和销毁。

图形管道

视图