Функция W-буферизации в Direct3D 9 является частью устаревшего конвейера с фиксированными функциями. В Direct3D 10 и более поздних версиях вы можете использовать только программируемый шейдерный конвейер (или для DirectX 11+ шейдерный конвейер DirectCompute). Следовательно, аппаратная функция «w-buffering» не актуальна. Это было также гораздо более серьезной проблемой с аппаратным обеспечением Direct3D 9-ой эпохи, когда люди использовали 16-битные буферы глубины.
В модели программируемого шейдера ваши шейдеры могут вычислять значения глубины, используя обычный z или линеаризованный -depth значения и установите соответствующее состояние глубины / трафарета. Помните, что вам нужно использовать SV_DepthGreater
или SV_DepthLessEqual
вместо SV_Depth
, чтобы не потерять оптимизацию "раннего отклонения z".
См. этот пост и этот пост для хорошего обсуждения топи c.
TL; DR: Большинство людей просто используют DXGI_FORMAT_D32_FLOAT
и не беспокоятся об этом.