gpt4 book ai didi

hlsl - 像素着色器单元需要一个采样器

转载 作者:行者123 更新时间:2023-12-03 10:33:04 26 4
gpt4 key购买 nike

我有一个 HLSL 像素着色器:

struct PixelShaderInput
{
float4 pos : SV_POSITION;
float2 texCoord : TEXCOORD0;
};

Texture2D s_texture : register(t0);

cbuffer ColorConstantBuffer : register(b1)
{
float4 m_color;
};

SamplerState s_sampleParams
{
Filter = MIN_MAG_MIP_LINEAR;
AddressU = CLAMP;
AddressV = CLAMP;
};

float4 main(PixelShaderInput input) : SV_TARGET
{
float4 t = s_texture.Sample(s_sampleParams, input.texCoord);
return t * m_color;
}

它在视觉上工作正常,但垃圾邮件输出带有警告:

D3D11 警告:ID3D11DeviceContext::Draw:像素着色器单元期望在插槽 0 设置采样器,但没有绑定(bind)。这是完全有效的,因为 NULL 采样器映射到默认采样器状态。但是,开发人员可能不想依赖默认值。 [执行警告 #352:DEVICE_DRAW_SAMPLER_NOT_SET]

如您所见,我已经设置了 s_sampleParams 所以任何人都可以解释哪里出了问题吗?

最佳答案

除非你使用效果框架,它会为你创建一个采样器(并在你调用 EffectPass 上的 Apply 时绑定(bind)它),默认情况下使用普通 hlsl 不会创建采样器状态,所以你需要创建一个(如 here 所述) )

这里有一个详细的版本,可以匹配你需要的采样器;

D3D11_SAMPLER_DESC samplerDesc;
samplerDesc.Filter = D3D11_FILTER_MIN_MAG_MIP_LINEAR;
samplerDesc.AddressU = D3D11_TEXTURE_ADDRESS_CLAMP;
samplerDesc.AddressV = D3D11_TEXTURE_ADDRESS_CLAMP;
samplerDesc.AddressW = D3D11_TEXTURE_ADDRESS_CLAMP;
samplerDesc.MipLODBias = 0.0f;
samplerDesc.MaxAnisotropy = 1;
samplerDesc.ComparisonFunc= D3D11_COMPARISON_NEVER;
samplerDesc.MinLOD = -FLT_MAX;
samplerDesc.MaxLOD = FLT_MAX;

请注意,我将边框颜色保留为任何颜色,因为您想要换行,所以不会用到它。

创建采样器:

ID3D11SamplerState* myLinearWrapSampler;
HRESULT hr = d3dDevice->CreateSamplerState(&samplerDesc, &myLinearWrapSampler);

然后调用:

deviceContext->PSSetSamplers(0,1, myLinearWrapSampler);

为了将采样器附加到您的像素着色器。

由于在您的情况下您的采样器设置与默认设置匹配,因此将采样器状态设置为 null 也是有效的(但我仍然建议创建一个以阐明意图,并避免运行时警告)

关于hlsl - 像素着色器单元需要一个采样器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24323281/

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