TL; DR Либо измените модель сальто на более старую DXGI_SWAP_EFFECT_DISCARD
, либо создайте цель рендеринга MSAA, которую вы явно разрешите.
- Создайте цепочку обмена как один пример(т.е. без MSAA).
- Создайте целевую текстуру рендеринга, использующую один или несколько образцов (например, MSAA).
- Создание представления цели рендеринга для цели рендеринга MSAA
- Каждый кадр, рендеринг в цель рендеринга MSAA, затем
ResolveSubresource
в буфер буфера обмена swapchain или в какой-либо другой буфер для одного образца.-, затем Present
.
Подробный пример кода см. GitHub .
Вы также не можете создать его как DXGI_FORMAT_*_SRGB
гамма-корректирующий swapchain с новыми DXGI_SWAP_EFFECT_FLIP_*
моделями.Вы можете создать представление цели рендеринга, равное DXGI_FORMAT_*_SRGB
для цепочки подкачки, которая не является sRGB, чтобы получить тот же эффект.Немного трудновато делать MSAA и sRGB вместе с новыми моделями флип, которые исправлены в Windows 10 Fall Creators Update (16299) или более поздней версии.
Если вы использовали DirectX 12, вы неу вас есть возможность использовать более старые эффекты подкачки, поэтому вам нужно напрямую реализовать цель рендеринга MSAA.Опять же, см. GitHub .
В дни до Pre-Directx 12 / Vulkan DirectX облегчал включение MSAA, выполняя кучу вещей за кулисами для вас.,Это создаст цель рендеринга не-MSAA для отображения, вернет вам цель рендеринга MSAA для рендеринга и выполнит для вас разрешение как часть Present
.Это было легко, но также было немного расточительно.
С новым подходом DirectX 12 «без магии», вы должны сделать это явно в приложении.В реальных играх вы хотите сделать это в любом случае, потому что вы обычно выполняете много постобработки и хотите выполнить разрешение задолго до Present
или даже выполнить другие виды разрешения (FXAA, MLAA, SMAA).Например:
Render 3D scene to a floating-point MSAA render target
->
Resolve to a single-sample floating-point render target
->
Perform tone-mapping/color-grading/blur/bloom/etc.
->
Render UI/HUD
->
Perform HDR10 signal generation/gamma-correction/color-space warp
->
Present
Как вы можете видеть из этого потока, довольно глупо когда-либо иметь подмену MSAA, за исключением примеров игрушек или примеров кода.
Чтобы получитьощущение того, сколько современной игры выполняет несколько проходов рендеринга, см. этот пост
См. DirectX Tool Kit для DX 11 и DX12