DirectX11 2个窗口渲染

8
如何使用DirectX将我的对象渲染到2个分离的窗口中?

3
如果您想回答自己的问题,应该编写实际的答案,而不是将答案放在问题中。 - Borgleader
1
好的,抱歉...我会记住的。 - Quest
2
不用道歉,我只是指出来而已。 - Borgleader
@Quest 很好,你会记住这个,但是你应该立即为这个问题做出回答,并接受它,然后将问题部分改为一个措辞得当的问题。否则,这会让人感觉不完整,我不想给这样格式不良的主题点赞。实际上,除非完成这些操作,否则我倾向于给它点踩并标记它。 - leetNightshade
@leetNightshade 完成了 :) - Quest
@Quest,希望我的评论没有听起来太苛刻。感谢你的跟进! :) - leetNightshade
1个回答

6

您需要为每个窗口创建一个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);

使用DXGIFactory,您可以为新窗口创建额外的交换链。
factory->CreateSwapChain(g_pd3dDevice, &sd, &g_pSwapChain2);

然后创建一个渲染目标视图。
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;

最后,只需设置您的渲染目标并绘制一些内容!
g_immediateContext->OMSetRenderTargets(1, &g_RenderTargetView, NULL);
....

我希望这对您有所帮助。 最好的问候 Quest :)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接