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