我必须在directx9到directx11中创建一个等效格式为D3DFMT_A8L8的纹理。但是文档中的说明对我来说并不清楚。有人会解释应该做什么吗?在创建输入布局时,我面临无效参数错误。
D3DFMT_A8L8 => DXGI_FORMAT_R8G8_UNORM注意:在着色器中使用swizzle .rrrg复制红色并将绿色移动到alpha组件以获得Direct3D 9行为。
在Direct3D 9中,“亮度”格式将自动在着色器中作为RGB值(复制)读取,因为它们是灰度格式。在Direct3D 10+中,没有“Luminance”格式。有一种和两种频道格式,它们没有“特殊行为”。
因此,在着色器中,DXGI_FORMAT_R8G8_UNORM
纹理将具有“r”通道中的第一个通道和“g”通道中的第二个通道。 DXGI_FORMAT_R8G8_UNORM
具有与D3DFMT_A8L8
相同的内存足迹,即两个无符号正常整数数据的8位通道,但如果您希望现代着色器中的行为与旧的着色器匹配,则必须使用着色器swizzles明确地执行此操作:
Texture2D<float4> Texture : register(t0);
sampler Sampler : register(s0);
float4 color = Texture.Sample(Sampler, pin.TexCoord);
// Special-case for DXGI_FORMAT_R8G8_UNORM treated as D3DFMT_A8L8
color = color.rrrg;
这与输入布局没有任何关系。这就是纹理采样器的工作方式。