我看到HSLS在float(1-4)和很多字段(r,rr,rrrr,arar,...)之后有浮点数和一个数字(我在{{3}的帮助下看到这些字段感谢Tim Jones:D - 我无法想象(现在)我们如何在没有这个工具的情况下编程HSLS)。
我试图找到有关此数据类型及其字段的参考资料,但我找不到任何关于它的信息(为什么数字1-4及其字段的含义。在C ++中浮点数只是浮点数,在这里,什么是浮动)
以下是我目前的进展:
float - 32位浮点值。
例如,这是一个4分量符号规范化的浮点变量声明。
snorm float4 fourComponentIEEEFloat;
它没有回答我的问题:这段代码是什么意思
RWTexture2D<float4> testTexture : register(u0);
[numthreads(@value( threads_per_group_x ), @value( threads_per_group_y ), @value( threads_per_group_z ))]
void main
(
uint3 gl_LocalInvocationID : SV_GroupThreadID,
uint3 gl_GlobalInvocationID : SV_DispatchThreadId
)
{
testTexture[gl_GlobalInvocationID.xy].xyzw = float4( float2(gl_LocalInvocationID.xy) / 16.0f, 0.0f, 1.0f );
}
我可能会略微理解float2(gl_LocalInvocationID.xy)是2 float
testTexture[gl_GlobalInvocationID.xy].xyzw = float4( float2(gl_LocalInvocationID.xy) / 16.0f, 0.0f, 1.0f );
相等
testTexture[gl_GlobalInvocationID.xy].xyzw = float4(gl_LocalInvocationID.x / 16.0f, gl_LocalInvocationID.y / 16.0f, 0.0f, 1.0f);
但我不知道它是否正确,旁边,r rr,rrrr,arar等字段如何...我之前提到过。
感谢阅读。
答案 0 :(得分:2)
这些字段不是真正的字段,而是Source Register Swizzling(doc)。
float4
是一个四分量浮点矢量,其中的分量是x,y,z和w。由于float4通常也用作颜色,因此这些组件也可以通过r,g,b和a来解决(所以.xyzw相当于.rgba)。
源代码调整使您可以内联交换,缩小或重复组件,因此,如果您只需要float3 vec
的xy组件,则只需编写vec.xy
而不是float2(vec.x, vec.y)
。如果您想要交换float4 color
的颜色通道进行某些计算,您可以轻松编写color.bgra
来交换红色和蓝色组件。最后,您还可以复制频道,例如vec.xxxx
,以便在所有四个组件中获得float4
vec.x
。也允许组合这些方法,例如vec.yzxx
。