在我的HLSL for Direct3d 11應用程序中,我遇到了一個問題,其中texture.Sample內部始終返回0.我知道我的數據和參數是正確的,因爲如果我使用texture.Load而不是Sample,則返回的值是正確的。無法獲取texture.Sample工作,雖然我可以texture.Load在Direct 3d 11着色器中工作正常
這裏是我的聲明:
extern Texture2D<float> texMask;
SamplerState TextureSampler : register (s2);
這裏是我的像素着色器works--這證實了我的紋理可正確地着色器和我texcoord值是正確的代碼:
float maskColor = texMask.Load(int3(8192*texcoord.x, 4096*texcoord.y, 0));
如果我替換下面這行,maskColor始終爲0,我找不出原因。
float maskColor = texMask.Sample(TextureSampler, texcoord);
TextureSampler具有默認狀態值; texMask被定義爲1 mip級別。
我也試過:
float maskColor = texMask.SampleLevel(TextureSampler, texcoord, 0);
並且還總是返回0
C++代碼用於設置採樣:
D3D11_SAMPLER_DESC sd;
ZeroMemory(&sd, sizeof(D3D11_SAMPLER_DESC));
sd.Filter = D3D11_FILTER_MIN_MAG_MIP_LINEAR;
sd.AddressU = D3D11_TEXTURE_ADDRESS_WRAP;
sd.AddressV = D3D11_TEXTURE_ADDRESS_WRAP;
ID3D11SamplerState* pSampler;
dev->CreateSamplerState(&sd, &pSampler);
devcon->PSSetSamplers(2, 1, &pSampler);
設置採樣器插槽2的C++代碼端是什麼樣的? – 2015-03-03 00:06:58
@ChuckWalbourn - 我添加了C++代碼來設置採樣器;我也嘗試過,沒有設置採樣器,因爲我使用的是默認設置,它似乎沒有什麼區別 – antlersoft 2015-03-03 00:26:02