Поделиться через


Указанное шейдером эталонное значение трафарета (графика Direct3D 11)

Включение пиксельных шейдеров для вывода эталонного значения трафарета вместо использования указанного api-интерфейса обеспечивает очень точный контроль над операциями набора элементов.

Указанное значение шейдера заменяет для этого вызова указанное в API значение ссылки на набор элементов. Это означает, что изменение влияет как на тест трафарета, так и на D3D11_STENCIL_OP_REPLACE трафарета (один элемент D3D11_STENCIL_OP) для записи ссылочного значения в буфер трафарета.

В более ранних версиях D3D11 значение ссылки на набор элементов можно указать только с помощью метода ID3D11DeviceContext::OMSetDepthStencilState . Это означает, что это значение можно определить только при степени детализации для каждого рисования. Эта функция D3D11.3 позволяет разработчикам считывать и использовать эталонное значение трафарета (SV_StencilRef), которое выводится из пиксельного шейдера. Это означает, что его можно указать на уровне детализации для каждого пикселя или выборки.

Эта функция является необязательной в D3D11.3. Чтобы проверить поддержку, проверка PSSpecifiedStencilRefSupported логическое поле D3D11_FEATURE_DATA_D3D11_OPTIONS2 с помощью ID3D11Device::CheckFeatureSupport.

Ниже приведен пример использования SV_StencilRef в пиксельном шейдере:

uint main2(float4 c : COORD) : SV_StencilRef
{
    return uint(c.x);
}

Функции Direct3D 11.3

Модель шейдера 5.1