DirectX 效果是由 HLSL 编写的表达式和特定于效果框架的一些语法设置的管道状态的集合。
编译效果后,使用效果框架 API 呈现。 效果功能的范围可以从转换几何图形的顶点着色器和输出纯色的像素着色器到需要多个传递的呈现技术、使用图形管道的每个阶段以及处理着色器状态以及与可编程着色器无关的管道状态。
第一步是组织想要在效果中控制的状态。 这包括着色器状态(顶点、外壳、域、几何图形、像素和计算着色器)、着色器使用的纹理和采样器状态,以及其他非可编程管道状态。 可以将内存中的效果创建为文本字符串,但通常,大小足够大,以便将效果状态存储在效果文件中(以 .fx 扩展名结尾的文本文件)。 若要使用效果,必须编译它(若要检查 HLSL 语法和效果框架语法),通过 API 调用初始化效果状态,并修改呈现循环以调用呈现 API。
效果将特定效果所需的所有呈现状态封装到称为技术的单一呈现函数中。 传递是包含呈现状态的技术子集。 若要实现多个传递呈现效果,在技术中实现一个或多个传递。 例如,假设你想要使用一组深度/模具缓冲区呈现一些几何图形,然后在上面绘制一些子画面。 可以在第一个传递中实现几何图形呈现,并在第二个传递中实现子画面绘制。 若要呈现效果,只需在呈现循环中呈现两个传递。 你可以在一个效果中实现任意数量的技术。 当然,技术数量越大,效果的编译时间越大。 利用此功能的一种方法是使用设计在不同硬件上运行的技术创建效果。 这允许应用程序根据检测到的硬件功能正常降级性能。
一组技术可以分组到一个组中(使用语法“fxgroup”)。 可以通过任何方式对技术进行分组。 例如,可以创建多个组,每个材料一个;每个材料可以为每个硬件级别提供一种技术;每个技术都有一组传递,用于定义特定硬件上的材料。
在本部分中
主题 | 描述 |
---|---|
在效果 中 组织状态 |
使用 Direct3D 11 时,某些管道阶段的效果状态按结构进行组织。 |
效果系统接口 |
效果系统定义了用于管理效果状态的多个接口。 |
专用接口 |
ID3DX11EffectVariable 有许多方法可将接口强制转换为所需的特定接口类型。 |
在效果 中 接口和类 |
在 Effects 11 中使用类和接口有多种方法。 |
呈现效果 |
效果可用于存储信息,或使用一组状态呈现。 |
克隆效果 |
克隆效果会创建第二个几乎完全相同的效果副本。 |
流出语法 |
使用特定语法声明带流出的几何着色器。 |
效果 10 和效果 11 之间的差异 |
本主题介绍效果 10 和效果 11 之间的差异。 |