gpt4 book ai didi

c++ - 如何在 directx11 着色器中使用 swizzle .rrrg

转载 作者:太空宇宙 更新时间:2023-11-04 12:40:13 24 4
gpt4 key购买 nike

我必须在 directx9 到 directx11 中创建具有等效格式 D3DFMT_A8L8 的纹理。但是我不清楚文档中的注释。有人会解释应该做什么吗?创建输入布局时,我遇到无效参数错误。

D3DFMT_A8L8 => DXGI_FORMAT_R8G8_UNORM注意:在着色器中使用 swizzle .rrrg 复制红色并将绿色移动到 alpha 组件以获得 Direct3D 9 行为。

最佳答案

在 Direct3D 9 中,“亮度”格式将在着色器中自动读取为 RGB 值(复制),因为它们是灰度格式。在 Direct3D 10+ 中,没有“亮度”格式。有一种和两种 channel 格式,它们没有“特殊行为”。

因此,在着色器中,DXGI_FORMAT_R8G8_UNORM 纹理将在“r” channel 中具有第一个 channel ,在“g” channel 中具有第二个 channel 。 DXGI_FORMAT_R8G8_UNORM 具有与 D3DFMT_A8L8 相同的内存占用空间,即两个 8 位无符号普通整数数据通道,但如果您希望现代着色器中的行为匹配旧的你必须用着色器调配明确地做到这一点:

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;

This has nothing at all to do with input layouts. It's just the way a texture sampler works.

关于c++ - 如何在 directx11 着色器中使用 swizzle .rrrg,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54566627/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com