Je veux rendre une vidéo image par image en utilisant DirectX 10. Les images seront traitées plus tard par un autre outil comme mencoder ou ffmpeg.Comment sauvegarder un backbuffer dans un fichier dans DirectX 10?
Je n'ai eu aucun problème à le faire dans DX9 en utilisant D3DXSaveSurfaceToFile
.
Maintenant, dans DX10 j'ai trouvé D3DX10SaveTextureToFile
, mais je n'ai pas eu de chance de l'utiliser pour sauvegarder mon backbuffer.
J'utilise le code suivant:
ID3D10Resource *backbufferRes;
_defaultRenderTargetView->GetResource(&backbufferRes);
D3D10_TEXTURE2D_DESC texDesc;
texDesc.ArraySize = 1;
texDesc.BindFlags = 0;
texDesc.CPUAccessFlags = D3D10_CPU_ACCESS_READ;
texDesc.Format = backbufferSurfDesc.Format;
texDesc.Height = backbufferSurfDesc.Height;
texDesc.Width = backbufferSurfDesc.Width;
texDesc.MipLevels = 1;
texDesc.MiscFlags = 0;
texDesc.SampleDesc = backbufferSurfDesc.SampleDesc;
texDesc.Usage = D3D10_USAGE_STAGING;
ID3D10Texture2D *texture;
HRESULT hr;
V(_device->CreateTexture2D(&texDesc, 0, &texture));
_device->CopyResource(texture, backbufferRes);
V(D3DX10SaveTextureToFile(texture, D3DX10_IFF_DDS, filename));
texture->Release();
Cela crée une image .dds qui ne peut être ouvert par toute sorte de vue/éditeur DDS Je connais.
Quel est le problème avec mon code?