Вертексный шейдер
Выполняет обработку геометрии - изменяет позицию, текстурные координаты, цвет вершин. Также может выполнять вычислении освещения. Допустимое количество команд может достигать одной-двух сотен. Пример фрагмента кода:
float2 movepos = float2 (matWorld._m03, matWorld._m13) + vPosition.xy;
Пиксельный шейдер
Выполняет обработку цветовых данных, полученных при отрисовке треугольника. Оперирует с текстурами и цветом. Количество инструкций значительно ограничено, так, к примеру, в версии 1.4 оно не может быть больше 32. Пример фрагмента кода:
float4 tex;
if(apply_depth)
{
tex = tex2D(ReflectionTextureSampler, (0.25f * normal.xy) + float2(0.5f + 0.5f * (In.PosWater.x / In.PosWater.w), 0.5f - 0.5f * (In.PosWater.y / In.PosWater.w)));
}
else
{
//for objects use env map (they use same texture register)
tex = tex2D(EnvTextureSampler, (vView - normal).yx * 3.4f);
}