Tôi muốn hiển thị từng khung hình video bằng DirectX 10. Các khung hình sẽ được xử lý sau bởi một số công cụ khác như mencoder hoặc ffmpeg.Làm thế nào để lưu backbuffer để tập tin trong DirectX 10?
Tôi không gặp vấn đề gì trong DX9 khi sử dụng D3DXSaveSurfaceToFile
.
Bây giờ, trong DX10 tôi đã tìm thấy D3DX10SaveTextureToFile
, nhưng không có may mắn khi sử dụng nó để lưu backbuffer của tôi.
tôi sử dụng đoạn mã sau:
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();
Điều này tạo ra một hình ảnh DDS mà không thể được mở bằng bất kỳ loại DDS xem/biên tập viên tôi biết.
Mã của tôi có vấn đề gì?