Quiero renderizar un video cuadro por cuadro usando DirectX 10. Los marcos serían procesados posteriormente por alguna otra herramienta como mencoder o ffmpeg.¿Cómo guardar backbuffer en un archivo en DirectX 10?
No tuve problemas para hacerlo en DX9 usando D3DXSaveSurfaceToFile
.
Ahora, en DX10 encontré D3DX10SaveTextureToFile
, pero no tuve suerte al usarlo para guardar mi backbuffer.
uso el siguiente código:
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();
Esto crea una imagen .dds que no puede ser abierto por cualquier tipo de DDS ver/editor que conozco.
¿Qué pasa con mi código?