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


Объект текстуры

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

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

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

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

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

Object1 [<Type>] Name;

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

Object2 [<Type, Samples>] Name;

Параметры

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

  1. Тип буфера поддерживает большинство методов объекта текстуры, кроме 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;

Методы объекта текстуры

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

Метод текстуры Description 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
GetDimensions Получите измерение текстуры для указанного уровня mipmap. x х х х х x
GetDimensions (MultiSample) Получите измерение текстуры для указанного уровня mipmap. x х x
GetSamplePosition Получите позицию указанного примера. x х x
Загрузить Загрузка данных без фильтрации или выборки. x х х х х x
Загрузка (multisample) Загрузка данных без фильтрации или выборки. x х х x
Образец Пример текстуры. x x
SampleBias Пример текстуры после применения значения смещения к уровню mipmap. x x
SampleCmp Пример текстуры с использованием значения сравнения для отклонения примеров. x x
SampleCmpLevelZero Пример текстуры (только mipmap уровня 0), используя значение сравнения для отклонения примеров. x х х х х x
SampleGrad Пример текстуры с помощью градиента, чтобы повлиять на способ вычисления расположения образца. x х х х х x
SampleLevel Пример текстуры на указанном уровне mipmap. x х х х х x

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

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

Тип Описание
с плавающей запятой 32-разрядная с плавающая запятая (см. раздел "Правила с плавающей запятой с плавающей запятой") (см . правила с плавающей запятой с плавающей запятой IEEE)
INT 32-битное целое число со знаком
unsigned int 32-разрядное целое число без знака
snorm 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 и более поздних моделей шейдеров yes

См. также

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