Для чего нужны различные типы сэмплеров HLSL?
Вопрос
В данный момент я работаю с DX9/SM3 и документацией MSDN по HLSL-сэмплеры Кажется, ему очень не хватает объяснения того, как использовать различные типы сэмплеров.Что еще хуже, они пытаются охватить DX9 и DX10 в одной статье, поэтому смешивают все ключевые слова:
пробоотборник Имя = Тип пробоотборника { Текстура = <текстура_переменная>; [имя_государства = значение_состояния;] ... };
...
Тип пробоотборника
[in] Тип сэмплера, который может быть одним из следующих: пробоотборник, сэмплер1D, сэмплер2D, сэмплер3D, сэмплерКУБ, sampler_state, Сэмплерстате.
Различия между Direct3D 9 и Direct3D 10:
Direct3D 10 поддерживает один дополнительный тип сэмплера: SamplerComparisonState.
У меня такое ощущение, что вопреки этому описанию, SamplerState
только DX10.Практически весь код, который я вижу, использует sampler_state
для Тип пробоотборника.Быстрый пример из BasicHLSL (DX9):
sampler MeshTextureSampler =
sampler_state
{
Texture = <g_MeshTexture>;
MipFilter = LINEAR;
MinFilter = LINEAR;
MagFilter = LINEAR;
};
Почему существуют все разные _SamplerType_ и когда вы будете использовать, скажем, sampler
или sampler2D
вместо sampler_state
?В любом случае вам необходимо указать явное значение при выборке, например. tex2D
, texCUBE
, и так, что здесь происходит?
Решение
Ты прав.Это очень странно.
Кажется, что документация по синтаксису DirectX 9 неверна.Я ни в коем случае не являюсь экспертом ни в HLSL, ни в DirectX, но я всегда видел, чтобы семплеры в DirectX 9 объявлялись следующим образом:
SamplerType Name = sampler_state{ Texture = <texture_variable>; [state_name = state_value;] ... };
Возможно, я что-то упускаю, но для меня приведенный выше синтаксис имеет больше смысла, чем тот, который указан в документации.Вы объявляете сэмплер заданного типа и указываете его состояние.
ОБНОВЛЯТЬ: Видимо это неправильно.я начал тема на официальном форуме и до сих пор я получил только подтверждение того, что это неправильно.Я также отправил письмо непосредственно команде DirectX.Просто на всякий случай.
Другие советы
Имя семплера = SamplerType { Текстура = ;[имя_состояния = значение_состояния;]};
Верно!Декларация действительна только для эффектов.
РЕДАКТИРОВАТЬ:официальные форумы находятся на MSDN.Вы можете опубликовать предложение или ошибку, используя «Дополнения сообщества».