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 шт):

Автор решения: user7860670

От этого эффекта избавиться нельзя. Backbuffer не предназначен для кеширования изображений. Если необходимо рисовать инкрементально, то рисуйте все в текстуру, а потом эту текстуру в backbuffer.

→ Ссылка