首页 > 解决方案 > 使用 Directx 11 c++ 提高将纹理保存到文件的速度

问题描述

我有一个基于 DirectX11 的渲染器,我需要将大量渲染图像保存到硬盘上。我使用了 SaveWICTextureToFile 但需要 0.2 秒来保存每个图像。图像以 1024x768 的分辨率保存。

这是保存图像的代码:

    ComPtr<ID3D11Texture2D> backBuffer;
                HRESULT hr = _swapChain->GetBuffer(0, __uuidof(ID3D11Texture2D), reinterpret_cast<LPVOID*>(backBuffer.GetAddressOf()));
                throwIfFail(hr, "Unable to get a buffer");
#ifdef LOG
                auto end = high_resolution_clock::now();
                wchar_t str[256];
                auto tmp = end;
#endif
                hr = SaveWICTextureToFile(_context.Get(), backBuffer.Get(), GUID_ContainerFormatJpeg, w.c_str()/*,&GUID_WICPixelFormat32bppBGRA*/);
                //hr = SaveDDSTextureToFile(_context.Get(), backBuffer.Get(), w.c_str()/*,&GUID_WICPixelFormat32bppBGRA*/);
#ifdef LOG
                end = high_resolution_clock::now();
                wsprintf(str, L"DXRender::saveLastRenderToFile: %d \n", duration_cast<microseconds>(end - tmp).count());
                OutputDebugString(str);
                tmp = end;
#endif
                throwIfFail(hr, "Unable to save buffer");

如何减少保存每张图像所需的时间?

标签: c++c++11directx-11

解决方案


推荐阅读