gpt4 book ai didi

c++ - 无法从后台缓冲区 (DirectX9) 捕获数据

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:30:20 26 4
gpt4 key购买 nike

我正在尝试找到最快的截屏方法。到目前为止,我已经知道可以使用 GDI 或 DirectX。使用 GDI 我能够在 35 毫秒内捕获屏幕,而使用 DirectX 前端缓冲区平均需要 73 毫秒。我想要比这更快的方法。为此目的,在 DirectX 中捕获后台缓冲区似乎是一个好方法。我正在使用以下代码来执行相同的操作:

    D3DDISPLAYMODE  ddm;
D3DPRESENT_PARAMETERS d3dpp;

if((g_pD3D=Direct3DCreate9(D3D_SDK_VERSION))==NULL)
{
ErrorMessage("Unable to Create Direct3D ");
return E_FAIL;
}

if(FAILED(g_pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT,&ddm)))
{
ErrorMessage("Unable to Get Adapter Display Mode");
return E_FAIL;
}

ZeroMemory(&d3dpp,sizeof(D3DPRESENT_PARAMETERS));

d3dpp.Windowed=WINDOW_MODE;
d3dpp.Flags=D3DPRESENTFLAG_LOCKABLE_BACKBUFFER;
d3dpp.BackBufferFormat=ddm.Format;
d3dpp.BackBufferHeight=nDisplayHeight=gScreenRect.bottom =ddm.Height;
d3dpp.BackBufferWidth=nDisplayWidth=gScreenRect.right =ddm.Width;
d3dpp.MultiSampleType=D3DMULTISAMPLE_NONE;
// d3dpp.SwapEffect=D3DSWAPEFFECT_DISCARD;
d3dpp.SwapEffect=D3DSWAPEFFECT_COPY;
d3dpp.hDeviceWindow=hWnd;
d3dpp.PresentationInterval=D3DPRESENT_INTERVAL_DEFAULT;
d3dpp.FullScreen_RefreshRateInHz=D3DPRESENT_RATE_DEFAULT;

if(FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,hWnd,D3DCREATE_SOFTWARE_VERTEXPROCESSING ,&d3dpp,&g_pd3dDevice)))
{
ErrorMessage("Unable to Create Device");
return E_FAIL;
}

if(FAILED(g_pd3dDevice->CreateOffscreenPlainSurface(ddm.Width, ddm.Height, D3DFMT_A8R8G8B8, D3DPOOL_SCRATCH, &g_pSurface, NULL)))
{
ErrorMessage("Unable to Create Surface");
return E_FAIL;
}

g_pd3dDevice->GetBackBuffer(0,0,D3DBACKBUFFER_TYPE_MONO,&g_pSurface);
D3DXSaveSurfaceToFile("d:\\v\\temp.bmp",D3DXIFF_BMP,g_pSurface,NULL,NULL);

问题是,输出文件大小为 5MB,但在输出中只显示黑色。在相同的代码中,如果我使用 GetFrontBufferData,我可以成功捕获屏幕。我做错了什么吗?请帮帮我..

最佳答案

您无法从后台缓冲区捕获屏幕截图。

前缓冲区-后缓冲区关系是这样工作的:删除后缓冲区,然后一次绘制一个绘制调用场景。一旦准备就绪,它就会与前缓冲区一起翻转,以便前缓冲区获得要显示的最终图像,同时再次删除后缓冲区。

理论上后备缓冲区有你想要的数据,但我不相信你能可靠地获得这个状态。前缓冲区专为这项任务而设计。

关于c++ - 无法从后台缓冲区 (DirectX9) 捕获数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13135829/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com