Direct3D 9) (效果

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

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

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

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

效果和 3D 管道

下图显示了管道。

3D 管道图

管道将输入数据转换为填充帧缓冲区的输出像素。 输入数据来自由对象空间中的顶点组成的对象,或由 N 贴片、矩形斑块和三角形补丁创建的更高阶图面。 输入数据细化后,管道将执行顶点处理、基元处理和像素处理,然后生成最终像素颜色。

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

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

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

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

效果保存和还原状态

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

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

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

效果可以共享参数

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

克隆的效果池使用与从中克隆的效果相同的效果池。 克隆效果将创建效果的精确副本,包括全局变量、技术、传递和注释。

Direct3D 9 编程指南