在hlsl中,我们可以像在C中一样使用#include "somefile"
。我只想声明一次我的常量缓冲区,并将它们包含在多个着色器中。但是寄存器呢?在某些文件中,常量缓冲区设置为b0,在其他文件中,常量缓冲区设置为b4。在此处包括文件的最佳做法是什么?
您可以在包含标头之前#define寄存器名称,并且可以在标头文件中像常规预处理器令牌一样使用它们-代替在标头中包含register(b0)
,您可以在其中键入register(B_CAMERA)
,并且在包含#define B_CAMERA b0
之前。
但是要小心,如果您只想传递像0这样的寄存器号而不是像b0
这样的整个寄存器名,因为HLSL预处理器处理##级联slightly differently than the C preprocessor,并且还有differences in how the shader model 5 and below and how the shader model 6 compilers进行扩展。