В моем HLSL для приложения Direct3d 11 у меня возникла проблема, когда текстура. Исключительная внутренняя всегда возвращается 0. Я знаю, что мои данные и параметры верны, потому что, если я использую texture.Load вместо Sample, верное значение верное.Невозможно получить текстуру. Приготовьтесь к работе, хотя я могу получить texture.Load, чтобы нормально работать в Direct 3d 11 shader
Вот мои заявления:
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);
Что такое кодовая сторона C++ для установки слота сэмплера 2? –
@ChuckWalbourn - я добавил код C++ для настройки пробоотборника; Я также пробовал это без установки пробоотборника вообще, так как я использую настройки по умолчанию, и это, похоже, не имеет значения – antlersoft