HSLS float1,..., float4 及其字段

HSLS float1,..., float4 and its fields

我看到 HSLS 有浮点数和浮点数 (1-4) 之后的数字和很多字段(r、rr、rrrr、arar、...)(我在 [= 的帮助下看到了这些字段15=] 感谢 Tim Jones :D - 我无法想象(目前)我们如何在没有这个工具的情况下对 HSLS 进行编程。

我试图找到有关此数据类型及其字段的参考资料,但我找不到任何相关信息(为什么数字 1-4 及其字段的含义。在 C++ 中,float 只是浮点数,在这里,什么是浮动)

以下是我目前的进度:

根据this article

float - 32-bit floating point value.

For example, here is a 4-component signed-normalized float-variable declaration.

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,...怎么样

感谢阅读。

这些字段不是真正的字段,而是 Source Register Swizzling (doc)。

A float4 是一个四分量浮点向量,其中分量是 x、y、z 和 w。由于 float4 也经常用作颜色,因此这些组件也可以通过 r、g、b 和 a 来寻址(因此 .xyzw 等同于 .rgba)。

Source swizzling 使您能够交换、减少或重复内联组件,因此如果您只需要 float3 vec 的 xy 组件,您可以只写 vec.xy 而不是像 float2(vec.x, vec.y).例如,如果您想交换 float4 color 的颜色通道以进行某些计算,您可以轻松编写 color.bgra 来交换红色和蓝色分量。最后,您还可以复制频道,例如 vec.xxxx 以在所有四个组件中获得 float4vec.x。也允许组合这些方法,例如vec.yzxx.