DirectX 11 Что такое представление ресурсов шейдера

Читаю книгу: «Практическая визуализация и вычисления с Direct3D 11» и ищу определение в Интернете: https://docs.microsoft.com/en-us/windows/uwp/graphics-concepts/shader-resource-view--srv-

Я все еще не понимаю, что такое ID3D11ShaderResourceView.

Имейте в виду, что я изучаю DirectX 11 для создания видеоигр. С этим в мыслях ...

Что такое представление ресурсов шейдера? В каких ситуациях вы бы использовали представление ресурсов шейдера? И самое главное, как вы используете представление ресурсов шейдера?

Я предполагаю, что вы можете использовать этот ресурс в своем коде HLSL, но в книге я еще не видел примера того, как это сделать и каким образом он используется для движков видеоигр.

Благодарю вас!


person Mike5050    schedule 29.09.2017    source источник


Ответы (2)


В более старой версии, такой как Direct3D 9, у вас был единый интерфейс, такой как IDirect3DTexture9, IDirect3DCubeTexture9 или IDirect3DVolumeTexture9, который инкапсулировал как сами биты изображения, так и ожидаемую семантику использования. У этого была особая логика, чтобы заставить его работать как цель рендеринга.

В Direct3D 10 это было разделено на два элемента:

  • Ресурс (то есть биты изображения), такие как ID3DxxTexture1D, ID3DxxTexture2D и ID3DxxTexture3D

  • Семантика использования: либо ID3DxxShaderResourceView, который используется для чтения текстуры в шейдере, либо- ID3D10RenderTargetView, который используется для рендеринга в текстуру.

Преимущество нового дизайна заключается в том, что вы можете иметь один ресурс ID3DxxTexture2D и иметь SRV, когда используете его для рендеринга, и RTV, когда вы используете его в качестве текстуры рендеринга. Вы можете рассматривать кубическую карту как 2D-текстуру с размером массива 6.

Возможно, вам будет полезна старая документация в MSDN.

Вам следует ознакомиться с руководствами по набору инструментов DirectX.

person Chuck Walbourn    schedule 30.09.2017
comment
Хорошо! Чтобы на самом деле использовать текстуру в шейдере, у вас должен быть ShaderResourceView? - person Mike5050; 01.10.2017
comment
У вас должен быть SRV для привязки ресурса к шейдеру для чтения. У вас должен быть RTV для привязки ресурса к выходным данным конвейера рендеринга. - person Chuck Walbourn; 02.10.2017
comment
Благодарю вас! Имеет гораздо больше смысла! - person Mike5050; 02.10.2017

Таким образом, реальным примером будут тени — в основном вы просматриваете свою геометрию от положения источников света, заполняя буфер глубины, а затем просматриваете геометрию от положения камеры и используете данные из буфера глубины, чтобы вычислить, находится ли пиксель в тени или нет. Таким образом, *View в DirectX можно перевести как «рассматривать этот ресурс как». В первой части вы будете использовать текстуру как DepthStencilView («рассматривать эту текстуру как трафарет глубины»), а в следующей части вы будете использовать ту же текстуру в качестве входных данных для шейдера (ShaderResourceView, «обрабатывать эту текстуру как ресурс шейдера) .

Этот «переход» очень важен с точки зрения синхронизации ресурсов. В DX11 это делает за вас драйвер, однако в DX12 вы должны сами об этом позаботиться.

person Bartosz Boczula    schedule 11.10.2017