Объект текстуры
В Direct3D 10 вы указываете образцы и текстуры независимо; Выборка текстур реализуется с помощью объекта шаблонной текстуры. Этот объект шаблонной текстуры имеет определенный формат, возвращает определенный тип и реализует несколько методов.
Различия между Direct3D9 и Direct3D10:
- В Direct3D 9 примеры привязаны к определенным текстурам.
- В Direct3D 10 текстуры и образцы являются независимыми объектами. Каждый объект шаблонной текстуры реализует методы выборки текстур, которые принимают текстуру и образец в качестве входных параметров.
Не все форматы поддерживаются для всех функций. Поэтому необходимо использовать CheckFeatureSupport для проверка, поддерживается ли формат для определенного использования.
Ниже приведен синтаксис для создания всех объектов текстур (за исключением многофакторных объектов).
Object1 [<Type>] Name; |
---|
Многофакторные объекты (Texture2DMS и Texture2DMSArray) требуют явного указания размера текстуры и выражения в виде количества выборок.
Object2 [<Type, Samples>] Name; |
---|
Параметры
Элемент | Description | ||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Объект |
Объект текстуры. Должен быть одним из следующих типов.
|
||||||||||||||||||||||||
Тип |
Необязательно. Любой скалярный тип 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 |