Для чего нужны все типы сэмплеров HLSL? - PullRequest
9 голосов
/ 19 августа 2009

Я сейчас работаю с DX9 / SM3, и в документации MSDN по сэмплерам HLSL , похоже, крайне не хватает объяснения, как использовать различные типы сэмплеров. Что еще хуже, они пытаются охватить DX9 и DX10 в одной статье, поэтому они смешивают все ключевые слова:

сэмплер Имя = SamplerType {Texture = <<em> texture_variable >; [ имя_состояния = значение_состояния ;] ...};

...

SamplerType

[in] Тип сэмплера, который является одним из следующих: сэмплер , sampler1D , sampler2D , sampler3D , samplerCUBE , sampler_state , SamplerState .

Различия между Direct3D 9 и Direct3D 10:

Direct3D 10 поддерживает один дополнительный тип сэмплера: SamplerComparisonState .

У меня такое ощущение, что вопреки этой записи, SamplerState - это только DX10. Практически весь код, который я вижу, использует sampler_state для SamplerType . Быстрый пример из BasicHLSL (DX9):

sampler MeshTextureSampler =
sampler_state
{
    Texture = <g_MeshTexture>;
    MipFilter = LINEAR;
    MinFilter = LINEAR;
    MagFilter = LINEAR;
};

Почему существуют все различные _SamplerType_s и когда вы будете использовать, скажем, sampler или sampler2D вместо sampler_state? Вы должны быть явными при получении, так или иначе, например, tex2D, texCUBE, так что здесь происходит?

Ответы [ 2 ]

4 голосов
/ 20 августа 2009

Ты прав. Это очень странно.

Кажется, что документация по синтаксису DirectX 9 неверна. Я ни в коем случае не эксперт по HLSL или DirectX, но я всегда видел только сэмплеры в DirectX 9, объявленные так:

SamplerType Name = sampler_state{   Texture = <texture_variable>;   [state_name = state_value;]   ... }; 

Возможно, я что-то упускаю, но для меня приведенный выше синтаксис имеет больший смысл, чем тот, который приведен в документации. Вы объявляете сэмплер с заданным типом и указываете состояние сэмплера.

ОБНОВЛЕНИЕ: Видимо, это неправильно. Я создал ветку на официальных форумах и до сих пор получил только подтверждение, что это неправильно. Я также отправил письмо напрямую команде DirectX. Просто чтобы быть в безопасности.

0 голосов
/ 25 февраля 2014

Имя сэмплера = SamplerType {Texture =; [state_name = state_value;]};

Это правильно! Декларация действительна только для эффектов.

РЕДАКТИРОВАТЬ: официальные форумы на MSDN. Вы можете опубликовать предложение или ошибку, используя "Дополнения сообщества".

...