[英]Using d3d9's backbuffer functionalities correctly
我正在尝试编写一个简单的DLL,该DLL使我可以对调用它的程序进行截图。
该程序使用DLL调用给我它的窗口句柄。
根据返回的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.