Tho*_*ini 8 c++ directx direct3d directx-10
我正在阅读使用DirectX 10的3D游戏编程简介来学习一些DirectX,我正在尝试进行拟议的练习(第4章为拥有该书的人).
一个练习要求使用禁用Alt + Enter功能(切换全屏模式)IDXGIFactory::MakeWindowAssociation.
然而,无论如何它都会切换全屏模式,我无法理解为什么.这是我的代码:
HR(D3D10CreateDevice(
0, //default adapter
md3dDriverType,
0, // no software device
createDeviceFlags,
D3D10_SDK_VERSION,
&md3dDevice) );
IDXGIFactory *factory;
HR(CreateDXGIFactory(__uuidof(IDXGIFactory), (void **)&factory));
HR(factory->CreateSwapChain(md3dDevice, &sd, &mSwapChain));
factory->MakeWindowAssociation(mhMainWnd, DXGI_MWA_NO_ALT_ENTER);
ReleaseCOM(factory);
Run Code Online (Sandbox Code Playgroud)
Dan*_*ski 11
我认为问题是这样的.
由于您自己创建设备(而不是通过工厂),因此对您创建的工厂的任何调用都不会更改任何内容.
所以要么你:
a)提前创建工厂并通过它创建设备
要么
b)通过以下代码检索实际用于创建设备的工厂.
IDXGIDevice * pDXGIDevice;
HR( md3dDevice->QueryInterface(__uuidof(IDXGIDevice), (void **)&pDXGIDevice) );
IDXGIAdapter * pDXGIAdapter;
HR( pDXGIDevice->GetParent(__uuidof(IDXGIAdapter), (void **)&pDXGIAdapter) );
IDXGIFactory * pIDXGIFactory;
pDXGIAdapter->GetParent(__uuidof(IDXGIFactory), (void **)&pIDXGIFactory);
Run Code Online (Sandbox Code Playgroud)
并通过该工厂调用该函数(在创建SwapChain之后)
pIDXGIFactory->MakeWindowAssociation(mhMainWnd, DXGI_MWA_NO_ALT_ENTER);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5647 次 |
| 最近记录: |