将着色器与directx 11结合使用

时间:2013-11-19 00:40:34

标签: c++ directx hlsl

有没有办法合并着色器?

假设我想要4个型号:

  • 仅提供纹理的一个。
  • 一个具有纹理和基本光效的。
  • 使用骨骼动画渲染的内容。
  • 使用骨骼动画和基本光效进行渲染。

我知道这样做的唯一方法是创建4个像素和顶点着色器文件。但是我还有5个想要添加的效果,我必须创建更多文件,如果我想添加越来越多的效果?我怀疑每个效果我必须为每种可能性创建一个更多的文件。我知道,对于光线,我可以直接在其他文件中设置它,当我不想使用光线时,我将其设置为1.0f,因此颜色不会改变。但是如果我想要更多的效果,我的着色器中会有20个变量,如果我不使用它们就不会没用了?还有另一种方法吗?

在此先感谢,我尽可能地理解,对不起我的英语。

1 个答案:

答案 0 :(得分:1)

以下是一些想法:

  • 将常用功能移至单独的文件,并使用#include将其分散在着色器之间。
  • 使用#ifdef进行条件编译。 Pass通过/D fxc.exe D3D_SHADER_MACRO的{​​{1}}标记定义D3DCompile。您可以在一个着色器中组合所有,然后将其编译为许多不同的二进制文件。
  • 使用一些效果框架(默认使用DirectX,谷歌搜索或制作自己的):你不需要单独的着色器文件,所有文件都在一个文件中,所以作为状态。
  • 保持原样:HLSL很复杂,任何更多的并发症都会导致无法维护的混乱。

希望它有所帮助!