首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络游戏 >

3D游戏窗口化的有关问题

2013-07-09 
3D游戏窗口化的问题用的全局钩子HOOK到了Direct3DCreate8,然后通过虚函数表得CreateDevice的地址....游戏

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能否安全是个问题
[解决办法]
帮顶,学习一下
[解决办法]
你在网上下载个游戏窗口化的工具,看看可以用不。可以用,就是你的代码出问题了。

热点排行