Direct3D: moyen efficace pour obtenir bitmap mémoire système à partir IDirect3DSurface9 (pool par défaut)?

StackOverflow https://stackoverflow.com/questions/4430204

Question

Je IDirect3DSurface9, piscine défaut, le format YUV. Comment puis-je obtenir efficacement bitmap bits à partir de ce? Au I moment:

    créer render target:
    device->CreateRenderTarget(surf_desc.Width, surf_desc.Height, D3DFMT_A8R8G8B8, D3DMULTISAMPLE_NONE, 0, TRUE, &render_target, NULL)
    convertir YUV en RGB32:
    device->StretchRect(videomem_surf, NULL, render_target_, NULL, D3DTEXF_NONE)
    (Rectangle complet, étirage no)
    créer de surface hors écran plaine dans la mémoire système
    device->CreateOffscreenPlainSurface(surf_desc.Width, surf_desc.Height, D3DFMT_A8R8G8B8, D3DPOOL_SYSTEMMEM, &sysmem_offscreen_surf, NULL)
    données de copie de la vidéo à mem sysmem:
    device->GetRenderTargetData(render_target, sysmem_offscreen_surface)
    GetDC de surface hors écran, créer bitmap DC et compatible compatible, BitBlt de offscreen sufrace DC à DC compatible et copier les bits bitmap à mon tampon par GetDIBits ()

cela ressemble un peu de frais généraux, à cause de tant de copie: de la surface d'origine pour rendre cible, puis à la surface hors-champ, puis bitmap compatible, puis enfin à mon tampon. Comment cela peut-il être amélioré?

Merci

Était-ce utile?
scroll top