Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Существует несколько способов доступа к ресурсам . Независимо от того, Direct3D гарантирует возврат нуля для любого ресурса, доступ к которому осуществляется вне границ.
Доступ по смещению байта
Доступ к двум новым типам буферов можно получить с помощью смещения байтов:
- ByteAddressBuffer — это буфер только для чтения.
- RWByteAddressBuffer — это буфер чтения или записи.
Доступ по индексу
Типы ресурсов могут использовать индекс для ссылки на определенное расположение в ресурсе. Рассмотрим этот пример:
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)).
Связанные разделы
-
Обзор вычислительного шейдера