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


Доступ к ресурсам

Существует несколько способов доступа к ресурсам. Несмотря на это, Direct3D гарантирует возврат нуля для любого ресурса, доступ к которому осуществляется вне границ.

Доступ по смещению байтов

Доступ к двум новым типам буферов можно получить с помощью смещения байтов:

Доступ по индексу

Типы ресурсов могут использовать индекс для ссылки на определенное расположение в ресурсе. Рассмотрим следующий пример.

uint2 pos;
Texture2D<float4> myTexture;
float4 myVar = myTexture[pos];

В этом примере 4 значения float, хранящиеся в текселе, расположенном в позиции pos в ресурсе текстуры myTexture 2D, присваиваются переменной myVar .

Примечание

По умолчанию для доступа к текстуре таким образом используется нулевой уровень MIP-карты (самый подробный уровень).

 

Примечание

Строка "float4 myVar = myTexture[pos];" эквивалентна "float4 myVar = myTexture.Load(uint3(pos,0));". Доступ по индексу — это новое расширение синтаксиса HLSL.

 

Примечание

Компилятор в версии пакета SDK для DirectX за июнь 2010 г. и более поздних версий позволяет индексировать все типы ресурсов, кроме буферов байтов адресов.

 

Примечание

Компилятор за июнь 2010 г. и более поздние версии позволяют объявлять переменные локальных ресурсов. Вы можете назначить глобально определенные ресурсы (например , myTexture) этим переменным и использовать их так же, как и их глобальные аналоги.

 

Метод Access по Mips

Объекты текстуры имеют метод mips (например, Texture2D.mips), который можно использовать для указания уровня MIP-карты. В этом примере считывается цвет, хранящийся в (7,16) на уровне 2 MIP-карты в двухd-текстуре:

uint x = 7;
uint y = 16;
float4 myColor = myTexture.mips[2][uint2(x,y)];

Это улучшение компилятора за июнь 2010 г. и более поздних версий. Выражение myTexture.mips[2][uint2(x,y)]" эквивалентно myTexture.Load(uint3(x,y,2))).

Общие сведения о вычислительном шейдере