DXGISwapChain рисование на фронтальном буффере
Интересует есть ли возможность рисовать исключительно на фронтальном буффере при использовании IDXGISwapChain1. Проблема заключается в том что я пытаюсь рисовать 2D контент(график с данными в реальном времени) с использованием ранее нарисованого контента (холст при каждом рисовании не очищается), т.к я использую DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL и BufferCount = 2 то при каждом вызове Present на свапчейне просиходит переворачивание буффера из-за часть контента рисуется на первом буфере а часть на втором.
DXGI_SWAP_CHAIN_DESC1
description.Format = DXGI_FORMAT_B8G8R8A8_UNORM;
description.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
description.SwapEffect = DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL;
description.BufferCount = 2;
description.SampleDesc.Count = 1;
description.SampleDesc.Quality = 0;
description.AlphaMode = DXGI_ALPHA_MODE_PREMULTIPLIED;
Использование DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL необходимо для DirectComposition, т.к мне нужно прозрачное окно. Рисую контент на ID2D1DeviceContext1.
HR(swapChain->GetBuffer(
0,
__uuidof(pBackBuffer),
reinterpret_cast<void**>(&pBackBuffer)));
if (pBackBuffer != nullptr) {
HR(dc->CreateBitmapFromDxgiSurface(pBackBuffer,
properties,
&bitmap));
}
dc->SetTarget(bitmap);
Интересует есть ли какая-то возможность избавится от этого еффекта переворачивания, или создания прозрачного окна чтобы без DirectComposition и двойного буффера рисовать контент.
Спасибо.
Ответы (1 шт):
От этого эффекта избавиться нельзя. Backbuffer не предназначен для кеширования изображений. Если необходимо рисовать инкрементально, то рисуйте все в текстуру, а потом эту текстуру в backbuffer.