Eu estava tentando entender/editar um codigo para capturar uma janela especifica pelo DirectX, como o “Capturar jogo” do OBS Studio faz, porém não consegui entender nenhum exemplo que encontrei na internet.
Eu encontrei esse codigo no github que duplica o Desktop pelo DirectX: https://github.com/arBmind/desktop-duplication-cpp, porém não faço ideia de como fazê-lo capturar uma janela específica ao invés do desktop, é totalmente diferente dos metodos que eu utilizava (PrintWindow\BitBlt).
Outro exemplo que eu encontrei foi esse, porém também não consegui entendê-lo:
void dump_buffer()
{
IDirect3DSurface9* pRenderTarget=NULL;
IDirect3DSurface9* pDestTarget=NULL;
const char file[] = "Pickture.bmp";
// sanity checks.
if (Device == NULL)
return;
// get the render target surface.
HRESULT hr = Device->GetRenderTarget(0, &pRenderTarget);
// get the current adapter display mode.
//hr = pDirect3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT,&d3ddisplaymode);
// create a destination surface.
hr = Device->CreateOffscreenPlainSurface(DisplayMde.Width,
DisplayMde.Height,
DisplayMde.Format,
D3DPOOL_SYSTEMMEM,
&pDestTarget,
NULL);
//copy the render target to the destination surface.
hr = Device->GetRenderTargetData(pRenderTarget, pDestTarget);
//save its contents to a bitmap file.
hr = D3DXSaveSurfaceToFile(file,
D3DXIFF_BMP,
pDestTarget,
NULL,
NULL);
// clean up.
pRenderTarget->Release();
pDestTarget->Release();
}