Как обновить ресурсы сэмплера

Sampler::Sampler(Graphics& gfx)
    {
        D3D11_SAMPLER_DESC samplerDesc = {};
        samplerDesc.Filter = D3D11_FILTER_ANISOTROPIC;
        samplerDesc.AddressU = D3D11_TEXTURE_ADDRESS_WRAP;
        samplerDesc.AddressV = D3D11_TEXTURE_ADDRESS_WRAP;
        samplerDesc.AddressW = D3D11_TEXTURE_ADDRESS_WRAP;
        samplerDesc.MaxAnisotropy = D3D11_REQ_MAXANISOTROPY;
        samplerDesc.MipLODBias = .0f;
        samplerDesc.MinLOD = .0f;
        samplerDesc.MaxLOD = D3D11_FLOAT32_MAX;

        GetDevice(gfx)->CreateSamplerState(&samplerDesc, &pSampler);
    }

class Sampler 
    {
    public:
        Sampler(Graphics& gfx);
    protected:
        Microsoft::WRL::ComPtr<ID3D11SamplerState> pSampler;
    };

Подскажите, как обновить данные сэмплера в рантайме, например, я хочу поменять фильтрацию. Что мне для этого надо сделать? Я только изучаю DX


Ответы (1 шт):

Автор решения: user7860670

Объекты состояния семплера являются неизменяемыми. Соответственно для того чтобы поменять фильтрацию или любой другой параметр семплера, необходимо создать еще один объект состояния семплера. А затем выбрать нужный уже при рендеринге посредством метода ID3D11DeviceContext::PSSetSamplers и т.п. Обычно состояния семплера являются достаточно перманентными ресурсами, т.е. все нужные состояния создаются один раз в начале.

ЗЫ результат выполнения CreateSamplerState необходимо проверять.

→ Ссылка