В соответствии с философией проектирования DirectX 12 «без магического поведения во время выполнения», вам не разрешено создавать backbuffer как MSAA.Это связано с тем, что оборудование для вывода видео на самом деле не может представлять буферные буферы MSAA, поэтому они должны быть разрешены до одного пикселя каждый в некоторой точке конвейера.В DirectX 11 это было сделано «за кулисами», когда вы создали буфер MSAA.В DirectX 12 вы несете ответственность за создание целевой текстуры рендеринга MSAA самостоятельно, а затем выполняете преобразование в буферный буфер или запускаете какой-то другой постпроцесс, который выполняет преобразование.Настройка точно такая же, только более многословная и явная и находится под контролем приложения, а не «волшебная».
См. SimpleMSAA12 пример.
В DirectX 12 вам также не разрешено создавать буферы формата sRGB.Вы можете создать целевые представления рендера sRGB, которые будут выполнять гамму при записи в буфер.Были некоторые ошибки в старых слоях отладки и во время выполнения Windows 10 при прямом разрешении целей рендеринга sRGB MSAA в не-sRGB-буферы.Это также отмечено в приведенном выше примере.
Обратите внимание, что приложения UWP ведут себя точно так же, как DirectX 12 для настольных приложений Win32.Это связано с тем, что как приложения UWP, так и DirectX 12 должны использовать эффекты обмена DXGI_SWAP_EFFECT_FLIP_*
вместо устаревших режимов обмена DXGI_SWAP_EFFECT_*
.
Кстати, если вы включили отладку DXGI, вы быполучили некоторые специфические результаты диагностики отладки, когда вы пытались создать 4-кратный буфер MSAA:
DXGI ERROR: IDXGIFactory::CreateSwapChain: Flip model swapchains (
DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL
and DXGI_SWAP_EFFECT_FLIP_DISCARD) do not support multisampling.
[ MISCELLANEOUS ERROR #102: ]
Посмотрите эту запись в блоге для получения подробной информации о включении отладки DXGI в вашем проекте, иливзгляните на реализацию DeviceResources .