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


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

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

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

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

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

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

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

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

Заметка

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

 

Заметка

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

 

Заметка

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

 

Заметка

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

 

Метод "Доступ по методу Mips"

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

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)).

Обзор вычислительного шейдера