Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

DirectX11 2 window rendering

Tags:

c++

directx-11

How can I render my objects with DirectX into 2 separated windows?

like image 374
Quest Avatar asked Jan 22 '14 20:01

Quest


1 Answers

You need to create one SwapChain and RenderTargetView for every window.

1 if you created your device via CreateDeviceAndSwapChain you need to obtain IDXGIFactory first

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

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

IDXGIFactory * factory;
adapter->GetParent(__uuidof(DDXGIFactory), (void**)&factory);

With DXGIFactory you can create additional swapchain for new window

factory->CreateSwapChain(g_pd3dDevice, &sd, &g_pSwapChain2);

then create a render target view

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;

And finally just set your render target(s) and Draw something!

g_immediateContext->OMSetRenderTargets(1, &g_RenderTargetView, NULL);
....

I hope this has been helpful.

Best regards Quest :)

like image 158
Quest Avatar answered Sep 28 '22 04:09

Quest