c++ - 如何在不使用 LockRect 的情况下获取像素数据?(性能问题)
问题描述
我正在使用某人在 StackOverflow 上发布的这些功能,但性能太差了..
不使用此功能(不捕获像素)FPS显示超过6k,但使用此功能,FPS仅显示60!
那么有没有什么快速的方法可以在显存和系统内存之间进行复制呢?
请问有人吗?
HRESULT capture(IDirect3DDevice9* m_d3ddev, void* buffer, int& width, int& height, D3DFORMAT format)
{
IDirect3DSurface9 *renderTarget = NULL;
IDirect3DSurface9 *destTarget = NULL;
HRESULT hr = m_d3ddev->GetRenderTarget(0, &renderTarget);
hr = m_d3ddev->CreateOffscreenPlainSurface(width, height, format, D3DPOOL_SYSTEMMEM, &destTarget, NULL);
if (FAILED(hr))
{
printf("Failed CreateOffscreenPlainSurface!");
}
hr = m_d3ddev->GetRenderTargetData(renderTarget, destTarget);
if (FAILED(hr))
{
printf("Failed GetRenderTargetData!");
}
D3DLOCKED_RECT lr;
ZeroMemory(&lr, sizeof(D3DLOCKED_RECT));
hr = destTarget->LockRect(&lr, 0, D3DLOCK_READONLY);
if (FAILED(hr))
{
printf("Cannot lock rect!");
}
if (lr.pBits)
{
memcpy(buffer, lr.pBits, width * height * 4);
}
hr = destTarget->UnlockRect();
if (FAILED(hr))
{
printf("Cannot unlock rect!");
}
renderTarget->Release();
destTarget->Release();
return hr;
}
解决方案
推荐阅读
- reactjs - (PDF.js) 如何将 Hand 工具添加到您的 pdf 页面
- java - 如何解决 Neo4J-admin 导入中的未排序数据错误
- c++ - selectedIndexes() 返回的 QModelIndexList 始终为空
- javascript - 从 LAN 中的其他设备访问我的 ReactJS 项目
- c# - c# nunit extent 报告没有截屏,传递异常
- r - 如何提取列表中所有唯一因子水平的排列
- audiokit - 如何播放一次 AKAppleSequencer 的一个部分/范围
- verilog - FIFO的verilog代码(先进先出)没有显示正确的结果?
- java - 错误:JMSCC5007:不支持使用 JMS2.0 API“createContext()”
- django - 更改语言后如何重定向到上一页?