3D游戏窗口化的问题
用的全局钩子HOOK到了Direct3DCreate8,然后通过虚函数表得CreateDevice的地址....
游戏启动时执行到了我自己的hook_CreateDevice函数里面,原本以为把D3DPRESENT_PARAMETERS结构里的改一下就可以窗口化了
pPresentationParameters->hDeviceWindow=myhwnd;
pPresentationParameters->Windowed = true;
pPresentationParameters->FullScreen_RefreshRateInHz = 0;
pPresentationParameters->FullScreen_PresentationInterval=0;
改好后继续执行,除句柄和pPresentationParameters其它的不动
HRESULT ret =orig_CreateDevice(pInterface,
Adapter,
DeviceType,
myhwnd,
BehaviorFlags,
pPresentationParameters,
ppReturnedDeviceInterface);
////////////////////////////////////////////////////////////////////
D3d8dev = *ppReturnedDeviceInterface; //保留设备指针
return ret;
但是问题来了,只要是pPresentationParameters->Windowed = true;游戏就无法继续执行了,改回false就没问题,自己也尝试去填充一个D3DPRESENT_PARAMETERS来代替原有参数,但是只要是Windowed = true,就无法进行下去了。另外保留的设备指针(因为在dll里,我把它定义到了全局共享数据段里)虽然不为空,但是也不能用,执行一个BeginScene() 程序就崩溃
[解决办法]
你可以试试多头显卡下的处理
另外,d3d本来就不是线程安全的机制,hook能否安全是个问题
[解决办法]
帮顶,学习一下
[解决办法]
你在网上下载个游戏窗口化的工具,看看可以用不。可以用,就是你的代码出问题了。