效果 (Direct3D 9)

Microsoft DirectX 效果使顶点着色器和像素着色器与管道状态集成可以呈现对象。 效果是组合着色器以生成唯一呈现条件的下一个逻辑步骤。

效果还提供了一种为不同硬件版本编写着色器的便捷方法。 由于不同的视频卡支持不同的功能,因此应用程序可以编写多种技术,这些技术将在各种设备上运行。 这样,如果应用程序在最新的和最伟大的硬件上运行,则应用程序可以运行最复杂的效果技术。 另一方面,可以自动选择不太复杂的效果技术,以在成本较低或功能较低的硬件上运行。

效果可以替换图形管道执行的顶点处理和像素处理的一部分。 使用顶点着色器和像素着色器的效果示例位于 BasicHLSL 示例中。 可以从 DirectX SDK 获取此示例并了解它。 有关 DirectX SDK 的信息,请参阅 DirectX SDK 在哪里?

有关效果的详细信息,请参阅以下主题:

效果和 3D 管道

下图显示了管道。

3d 管道关系图

管道将输入数据转换为填充帧缓冲区的输出像素。 输入数据来自由对象空间中的顶点构成的对象,或从 N 补丁、矩形补丁和三角形补丁创建的更高顺序图面。 在对输入数据进行分割后,管道在生成最终像素颜色之前执行顶点处理、基元处理和像素处理。

顶点和像素处理可由固定函数管道执行,也可以通过可编程着色器实现。 输入数据分割、基元处理和数据输出由管道状态控制。 这一切都可以集成到效果中。 效果设置控制管道运行方式的状态。 效果管理可编程着色器和固定函数状态。

效果可以保存和还原状态,使设备处于与运行效果之前相同的状态。 效果可以管理的状态类型包括:

  • 着色器状态。 这包括创建和删除着色器、设置着色器常量、设置着色器状态以及使用着色器呈现。
  • 纹理和采样器状态。 这包括指定纹理文件、初始化纹理阶段、创建采样器对象和设置采样器状态。
  • 其他管道状态。 这包括设置转换、照明、材料和呈现选项的状态。 这些变量可以是全局变量或局部变量。 变量可由效果本身或应用程序设置。

效果包含多个称为技术的呈现选项。 每种技术封装全局变量、管道状态、纹理和采样器状态以及着色器状态。 在呈现传递中实现了单个样式。 一个或多个传递可以封装在技术中。 可以验证所有传递和技术,以查看效果代码是否会在硬件设备上运行。

效果保存和还原状态

效果管理状态。 此处使用单词状态非常广泛,因为它包含管道需要指定呈现条件的各种信息。 这包括管道几乎所有的功能区域。

呈现选项由技术和传递控制。 应用程序通过设置一种活动技术并呈现一个或多个传递来呈现效果。 效果中的所有呈现在匹配的 BeginEnd 调用中完成。 调用 Begin 时,将创建状态块并保存设备状态(除非另有指定)。 技术呈现应用程序指定要呈现的传递后,将调用 end 以结束活动技术。 效果系统通过自动还原状态块中捕获的管道状态(除非你选择禁用此保存和还原功能)来响应。

当对多传递呈现序列进行编程时,每个序列都需要自己的状态设置,效果可以减少跟踪状态更改所需的管家。 若要查看可通过效果保存和还原的状态的详细信息,请参阅 效果状态(Direct3D 9)

效果可以共享参数

效果参数是效果中声明的所有非静态变量。 这可以包括全局变量和注释。 通过使用共享关键字声明参数,然后使用效果池创建效果,可以在不同效果之间共享效果参数。

克隆效果使用与克隆效果池相同的效果池。 克隆效果可精确复制效果,包括全局变量、技术、传递和批注。

Direct3D 9 编程指南