Для чего нужны все разные типы сэмплеров HLSL?

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

сэмплер Name = SamplerType {Texture = ‹texture_variable>; [state_name = state_value;] ...};

...

SamplerType

[in] Тип сэмплера, который может быть одним из следующих: sampler, 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_ и когда вы бы использовали, скажем, sampler или sampler2D вместо sampler_state? В любом случае вы должны быть явным при получении, например tex2D, texCUBE, так что здесь происходит?


person Community    schedule 19.08.2009    source источник


Ответы (2)


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

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

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

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

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

person Tchami    schedule 19.08.2009
comment
Имейте в виду, что [email protected] активно не отслеживается. - person Goz; 20.08.2009
comment
Не знал, спасибо. Ну, я также оценил и предоставил отзывы о рассматриваемой статье, так что, возможно, это сработает. - person Tchami; 20.08.2009
comment
Спасибо, рад, что не потерял. Мне удалось откопать мой старый DX9 CHM, и там была статья куда чище. DX9 даже поддерживает массивы семплеров, но вы никогда не узнаете об этом из недавно испорченной страницы MSDN. - person ; 20.08.2009

Sampler Name = SamplerType {Текстура =; [state_name = state_value;]};

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

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

person Kostadin.Petkov    schedule 24.02.2014