DirectX11 2窗口渲染

Que*_*est 5 c++ directx-11

如何使用DirectX将对象渲染到2个独立的窗口中?

Que*_*est 7

您需要为每个窗口创建一个 SwapChain 和 RenderTargetView。

1 如果您通过 CreateDeviceAndSwapChain 创建设备,则需要先获取 IDXGIFactory

IDXGIDevice * device;
d3ddevice->QueryInterface(__uuidof(IDXGIDevice), (void**)&device);

IDXGIAdapter * adapter;
device->GetParent(__uuidof(IDXGIAdapter), (void**)&adapter);

IDXGIFactory * factory;
adapter->GetParent(__uuidof(DDXGIFactory), (void**)&factory);
Run Code Online (Sandbox Code Playgroud)

使用 DXGIFactory,您可以为新窗口创建额外的交换链

factory->CreateSwapChain(g_pd3dDevice, &sd, &g_pSwapChain2);
Run Code Online (Sandbox Code Playgroud)

然后创建一个渲染目标视图

ID3D11Texture2D* pBackBuffer = NULL;
hr = g_pSwapChain2->GetBuffer( 0, __uuidof( ID3D11Texture2D ), ( LPVOID* )&pBackBuffer );
if( FAILED( hr ) )
    return hr;

hr = g_pd3dDevice->CreateRenderTargetView( pBackBuffer, NULL, &g_pRenderTargetView );
pBackBuffer->Release();
if( FAILED( hr ) )
    return hr;
Run Code Online (Sandbox Code Playgroud)

最后只需设置渲染目标并绘制一些东西!

g_immediateContext->OMSetRenderTargets(1, &g_RenderTargetView, NULL);
....
Run Code Online (Sandbox Code Playgroud)

希望这有用。

最好的问候奎斯特:)