Объект Texture

В Direct3D 10 вы указываете образцы и текстуры независимо; Выборка текстур реализуется с помощью объекта шаблонной текстуры. Этот объект текстуры шаблона имеет определенный формат, возвращает определенный тип и реализует несколько методов.

Различия между Direct3D9 и Direct3D10:

  • В Direct3D 9 выборщики привязаны к определенным текстурам.
  • В Direct3D 10 текстуры и образцы являются независимыми объектами. Каждый объект шаблонной текстуры реализует методы выборки текстур, которые принимают текстуру и образец в качестве входных параметров.

Ниже приведен синтаксис для создания всех объектов текстуры (за исключением многосампленных объектов).

Object1 [<Type>] Name;

Объекты с несколькими выборками (Texture2DMS и Texture2DMSArray) требуют явного указания размера текстуры и их выражений в виде количества выборок.

Object2 [<Type, Samples>] Name;

Параметры

Элемент Описание
Объекта
Объект текстуры. Должен быть одним из следующих типов.
Тип Object1 Описание
Буфер Буфер
Texture1D 1D-текстура
Texture1DArray Массив 1D-текстур
Texture2D 2D-текстура
Texture2DArray Массив 2D-текстур
Texture3D Трехмерная текстура
TextureCube Текстура куба
TextureCubeArray Массив текстур куба
Тип Object2 Описание
Texture2DMS Многошаговая текстура с 2D
Texture2DMSArray Массив многомерных текстур

  1. Тип Buffer поддерживает большинство методов объекта текстуры, кроме GetDimensions.
  2. TextureCubeArray доступен в модели шейдера 4.1 или более поздней версии.
  3. Модель шейдера 4.1 доступна в Direct3D 10.1 или более поздней версии.

Тип

Необязательный элемент. Любой скалярный тип HLSL или тип вектора HLSL, окруженный угловой скобкой. Тип по умолчанию — float4.

Имя

Строка ASCII, указывающая имя объекта текстуры.

Образцы

Количество выборок (диапазонов от 1 до 128).

Пример 1

Ниже приведен пример объявления объекта текстуры.

Texture2D <float4> MyTex;

Texture2DMS <float4, 128> MyMSTex;

Методы объекта Texture

Каждый объект текстуры реализует определенные методы; Ниже приведена таблица, в которую перечислены все методы. Просмотрите справочную страницу для каждого метода, чтобы узнать, какие объекты могут использовать этот метод.

Метод Texture Описание vs_4_0 vs_4_1 ps_4_0 ps_4_1 gs_4_0 gs_4_1
CalculateLevelOfDetail Вычислите loD, верните зажатый результат. x
CalculateLevelOfDetailUnclamped Вычислите loD, верните неклампированный результат. x
Собрать Возвращает четыре выборки (только красный компонент), которые будут использоваться для двулинейной интерполяции при выборке текстуры. x x x
GetDimensions Получение измерения текстуры для указанного уровня MIP-карты. x x x x x x
GetDimensions (MultiSample) Получение измерения текстуры для указанного уровня MIP-карты. x x x
GetSamplePosition Получение позиции указанного образца. x x x
Загрузить Загрузка данных без фильтрации или выборки. x x x x x x
Загрузка (multisample) Загрузка данных без фильтрации или выборки. x x x x
Образец Пример текстуры. x x
SampleBias Пример текстуры после применения значения смещения к уровню MIP-карты. x x
SampleCmp Пример текстуры с использованием значения сравнения для отклонения выборок. x x
SampleCmpLevelZero Пример текстуры (только mipmap уровня 0) с использованием значения сравнения для отклонения выборок. x x x x x x
SampleGrad Выборка текстуры с помощью градиента для влияния на способ вычисления расположения образца. x x x x x x
SampleLevel Пример текстуры на указанном уровне MIP-карты. x x x x x x

Тип возвращаемых данных

Возвращаемый тип метода объекта текстуры имеет значение float4, если не указано иное, за исключением многосампилированных объектов текстуры с псевдонимом, которые всегда нуждаются в указанном типе и количестве выборок. Тип возвращаемого значения совпадает с типом ресурса текстуры (DXGI_FORMAT). Другими словами, это может быть любой из следующих типов.

Тип Описание
FLOAT 32-разрядное число с плавающей запятой (см. раздел "Правила с плавающей запятой" для отличий от ieee float)
INT 32-битное целое число со знаком
unsigned int 32-битное целое число без знака
храп 32-разрядное число с плавающей запятой в диапазоне от -1 до 1 включительно (см. раздел "Правила с плавающей запятой с плавающей запятой IEEE")
unorm 32-разрядное число с плавающей запятой в диапазоне от 0 до 1 включительно (см. раздел "Правила с плавающей запятой с плавающей запятой IEEE")
любой тип текстуры или структура Количество возвращаемых компонентов должно быть от 1 до 3 включительно.

Кроме того, возвращаемый тип может быть любым типом текстуры, включая структуру, но он должен быть меньше 4 компонентов, таких как тип float1, который возвращает один компонент.

Значения по умолчанию для отсутствующих компонентов в текстуре

Значение по умолчанию для отсутствующих компонентов в типе ресурса текстуры равно нулю для любого компонента, кроме альфа-компонента (A); Значение по умолчанию для отсутствующих A равно одному. Способ отображения этого шейдера зависит от типа ресурса текстуры. Он принимает форму первого типизированного компонента, который фактически присутствует в типе ресурса текстуры (начиная с левого в порядке RGBA). Если эта форма имеет значение UNORM или FLOAT, значение по умолчанию для отсутствующей A равно 1,0f. Если форма имеет значение SINT или UINT, значение по умолчанию для отсутствующих A равно 0x1.

Например, когда шейдер считывает тип ресурса текстуры DXGI_FORMAT_R24_UNORM_X8_TYPELESS , значения по умолчанию для G и B равны нулю, а значение по умолчанию для A — 1,0f; когда шейдер считывает тип ресурса текстуры DXGI_FORMAT_R16G16_UINT , значение по умолчанию для B равно нулю, а значение по умолчанию для A — 0x00000001; Когда шейдер считывает тип ресурса текстуры DXGI_FORMAT_R16_SINT , значения по умолчанию для G и B равны нулю, а значение по умолчанию для A — 0x00000001.

Пример 2

Ниже приведен пример выборки текстур с помощью метода текстуры.

sampler MySamp;
Texture2D <float4> MyTex;
 
float4 main( float2 TexCoords[2] : TEXCOORD ) : SV_Target
{
    return MyTex.Sample( MySamp, TexCoords[0] ));
}

Минимальная модель шейдера

Этот объект поддерживается в следующих моделях шейдеров.

Модель шейдера Поддерживается
Модели шейдера 4 и более поздних версий шейдеров да

См. также раздел

Модель шейдера 4