DirectX 中的多种着色器与多种技术

jah*_*aho 5 c++ directx 3d shader

我正在浏览所有Rastertek DirectX 教程,这些教程非常好,作者倾向于使用多个着色器来处理不同的事情。在后来的一个教程中,他甚至介绍了一个着色器管理器类。

虽然我认为使用具有多种技术的单个着色器会更有效,但基于其他一些来源。教程中的多个着色器是为了简单起见,还是在某些情况下使用多个着色器比使用单个大着色器更好?

小智 4

我想他们在教程中使用它们是为了简单起见。

将它们按技术分组或单独分组是设计决策。在某些情况下,拥有多个着色器是有益的,因为您可以根据需要组合它们。

从 Windows 8 中的 DirectX 11 开始,D3DX 库已被弃用,因此您会发现它发生了变化。您可以在 DirectX 工具包的源代码中看到这样的示例: http: //directxtk.codeplex.com/以及它们如何处理其效果。

通常你的内存中会有不同的顶点着色器、像素着色器等;技术倾向于将它们结合为一个整体,因此当您编译着色器文件时,将为该技术编译特定的顶点和像素着色器。当选择带有 Y 通道的 X 技术时,您的效果对象正在处理设备设置的顶点/像素着色器。

您可以手动执行此操作,例如,仅编译像素着色器并将其设置到设备。