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 窗口渲染的主要内容,如果未能解决你的问题,请参考以下文章

DirectX 11 渲染到特定区域

基于 DirectX11 的 MMDViewer 03-渲染管线

DirectX 12和DirectX 11选哪个,有什么区别

GDI 和 DirectX 渲染

基于 DirectX11 的 MMDViewer 04-渲染目标视图和多视口

DirectX11第二篇 DirectX11渲染管线(2016.05.09更新)