В момента работя с DX9/SM3 и документацията на MSDN за HLSL семплерите изглежда крайно липсва в обяснението как да се използват различните типове семплери. По-лошото е, че се опитват да покрият DX9 и DX10 в една статия, така че смесват всички ключови думи:
sampler Name = SamplerType { Texture = ‹texture_variable>; [име_на_състояние = стойност_на_състояние;] ... };
...
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_s и кога бихте използвали, да речем, sampler
или sampler2D
вместо sampler_state
? Трябва да сте изрични, когато извличате така или иначе, напр. tex2D
, texCUBE
, какво става тук?