繁体   English   中英

正确使用d3d9的后缓冲功能

[英]Using d3d9's backbuffer functionalities correctly

我正在尝试编写一个简单的DLL,该DLL使我可以对调用它的程序进行截图。

该程序使用DL​​L调用给我它的窗口句柄。

根据返回的HRESULT值,CreateDevice函数CreateOffScreenPlainSurface可使用提供的句柄正常工作。

但是输出图像是空白的,那么我认为我没有正确使用DirectX的GetBackBuffer函数。

这是我的操作方法:

HRESULT GFBD_r = g_pd3dDevice->GetBackBuffer(0, 0, D3DBACKBUFFER_TYPE_MONO, &pSurface);
HRESULT LR_r = pSurface->LockRect(&lr, &rect, D3DLOCK_READONLY);
memcpy(&Frame[0], lr.pBits, Width*Height*4);
pSurface->UnlockRect();

我的帧向量仍然保持空白。 也许问题来自多重采样? 我不完全了解它是如何工作的,除了我正在使用d3dpp.MultiSampleType = D3DMULTISAMPLE_NONE; 在我的D3DPRESENT_PARAMETERS中。

为现有窗口创建D3D设备无法捕获其内容,即使该窗口是使用硬件加速渲染的也是如此。 如果该窗口已存在D3D设备,则创建该设备的API调用将失败(iirc)。 如果窗口是使用常规Windows API(即GDI)绘制的,则D3D内容将根据其他Windows版本与其他内容组成,或者以未定义的方式运行。 这种组合将您访问后台缓冲区以及(可能)在其他地方之后发生。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM