Амортизация рендеринга наложения пользовательского интерфейса Direct2D для DirectX12

Мой опыт работы с D3D11on12 и Direct2D был не очень хорошим. нечасто я получаю

ОШИБКА D3D12: ID3D12Device::RemoveDevice: удаление устройства было инициировано по следующей причине (DXGI_ERROR_ACCESS_DENIED: приложение пыталось использовать ресурс, к которому оно не имеет доступа. Это может быть, например, рендеринг в текстуру при наличии только доступа для чтения.). [ОШИБКА ВЫПОЛНЕНИЯ № 232: DEVICE_REMOVAL_PROCESS_AT_FAULT]

когда я делаю рендеринг в бэкбуфер цепочки подкачки. Также есть скачки отставания. И вдобавок ко всему этому, я думаю, потребуется амортизировать «пользовательский интерфейс», когда я попытаюсь увеличить частоту кадров.

Синхронизация между пользовательским интерфейсом и реальной сценой на самом деле не имеет значения, поэтому я могу с радостью использовать любой пользовательский интерфейс, рендеринг которого Direct2D последний раз закончил.

Поэтому я хотел бы использовать Direct2D для визуализации пользовательского интерфейса на прозрачном растровом изображении D3D11on12 (то есть созданном с использованиемCreateBitmapFromDxgiSurfaceсID3D11ResourceотID3D11On12Device::CreateWrappedResource). А затем отрендерите это наложение в резервный буфер цепи обмена.

Проблема в том, что я ничего не знаю о конвейере 3D, так как делаю все с помощью вычислительных шейдеров/DirectML + CopyTextureRegion или Direct2D. Я полагаю, это довольно простой вопрос о том, как сделать альфа-смешивание.

1 ответ

Я полагаю, что для альфа-смешивания вам нужно использовать 3D-конвейер. К счастью, directXTK12, кажется, делает учебник, который достаточно тривиален по этой теме https://github.com/Microsoft/DirectXTK12/wiki/Sprites-and-textures .

Другие вопросы по тегам