DirectX11 2 窗口渲染
Posted
技术标签:
【中文标题】DirectX11 2 窗口渲染【英文标题】:DirectX11 2 window rendering 【发布时间】:2014-01-22 20:12:37 【问题描述】:如何使用 DirectX 将我的对象渲染到 2 个单独的窗口中?
【问题讨论】:
如果你想回答自己的问题,你应该写一个实际的答案,而不是把答案放在问题中。 好吧对不起……我会记住的 不用抱歉,我只是指出来。 @Quest 很好,你会记住这一点,但你应该为这个问题这样做,就像现在一样。将答案变成答案并接受它,并将问题部分更改为实际上有一个措辞良好的问题。否则这会让人感觉不完整,我不想支持这样一个格式很差的主题。实际上,除非这样做,否则我倾向于反对并标记它。 @leetNightshade 完成 :) 【参考方案1】:您需要为每个窗口创建一个 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);
....
我希望这会有所帮助。
最好的问候任务:)
【讨论】:
以上是关于DirectX11 2 窗口渲染的主要内容,如果未能解决你的问题,请参考以下文章
基于 DirectX11 的 MMDViewer 03-渲染管线
DirectX 12和DirectX 11选哪个,有什么区别