В настоящее время я работаю с 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
, так что здесь происходит?