Microsoft提供了一个list来解释顶点和像素着色器的输入和输出语义。到目前为止,我已经看到了一些不使用记录的数据类型的代码示例。他们使用float3
作为输入COLOR
到像素着色器,或float2
作为输入POSITION
到顶点着色器。尽管双组分位置或3组分颜色确实对我有意义,但我无法找到这个记录,这让我想知道
我可以使用float3
作为顶点着色器输入POSITION
(如果我知道我不会使用W组件)而不会出现错误吗?
如果我可以使用除已记录的数据类型以外的数据类型,是否有可用的列表显示语义或规则的每个允许的数据类型,例如“只要使用的数据类型较小或大小相同记录的一个,你可以使用它?“
不遵循文档的代码示例:
StackOverflow - Passing colors through a pixel shader in HLSL
C++ / DirectX11 Tutorials - S02E05 - Creating and loading Shaders 9:33
答案 0 :(得分:1)
在着色器模型4.0及更高版本(DX10 +)中,唯一重要的语义名称是系统值语义(以SV_
为前缀的那些)。除了用于将着色器参数与其输入匹配之外,其他语义没有特殊处理。关于语义的文档,例如COLOR
为float4
,纯粹是约定,或者是DX9的遗留物。在DX10 / SM4 +中,没有什么可以阻止你将COLOR
声明为float2
,或决定使用UNICORN
作为颜色的语义名称,但如果这种混淆不要感到惊讶其他开发人员(或您自己)将来审查代码。
要回答您的具体问题,是您可以使用任何您想要的非SV_
语义的数据类型,甚至可以创建自己的名称。只需确保在阶段和输入布局声明之间使用一致的命名和通道计数。