我想做一个简单的关卡编辑器,其中编辑器的图形用户界面将由Direct2d渲染,所有其他3D图形将由DirectX11处理。就像Unity3D一样..如图所示...
https://i.stack.imgur.com/tf5G1.png
如您所见,3D图形是在GUI中渲染的。如何与direct2d共享我的directx11应用程序的后台缓冲区(用于渲染gui)...因此3D场景将在GUI中呈现。或者,除了使用direct2d之外,请提出一些其他的建议。同样考虑到性能..谢谢。。
发布于 2019-03-03 18:45:15
我不知道共享是否可行。创建另一个d3d11纹理,从它获取表面,然后在这个表面上创建Direct2D目标/上下文可能更容易。稍后,您可以将此UI纹理与3D内容一起渲染,就像对任何其他纹理所做的那样。
发布于 2020-09-20 22:13:25
是的,你能做到。
在你的页眉中保留:
ID2D1Device* m_d2device;
ID2D1DeviceContext* m_deviceContext;
ID2D1RenderTarget* m_renderTargetView;
ID2D1Factory* m_factory2d;
IDXGISurface* m_dxgiBackbuffer;
IDWriteFactory1* m_writeFactory;Factory 2D:
HRESULT result;
// create the D2D factory
D2D1_FACTORY_OPTIONS options2d;
options2d.debugLevel = D2D1_DEBUG_LEVEL_NONE;
result = D2D1CreateFactory(D2D1_FACTORY_TYPE::D2D1_FACTORY_TYPE_MULTI_THREADED, options2d, &m_factory2d);创建DXGI曲面:
// set up the D2D render target using the back buffer
m_swapChain->GetBuffer(0, IID_PPV_ARGS(&m_dxgiBackbuffer));
D2D1_RENDER_TARGET_PROPERTIES props =
D2D1::RenderTargetProperties
(D2D1_RENDER_TARGET_TYPE_DEFAULT,
D2D1::PixelFormat
(
DXGI_FORMAT_UNKNOWN,
D2D1_ALPHA_MODE_PREMULTIPLIED
)
);
m_factory2d->CreateDxgiSurfaceRenderTarget(
m_dxgiBackbuffer,
props,
&m_d2dRenderTarget);
DWriteCreateFactory(DWRITE_FACTORY_TYPE_SHARED, __uuidof(m_writeFactory),
(IUnknown**)(&m_writeFactory));在你的渲染循环中,首先渲染3D物体,然后渲染2D物体。您可以在3D上渲染2D,反之亦然。只需将其传递到3D。我在DX11.0和win10上都进行了测试。我强烈建议您将3D呼叫和2D呼叫分离到不同的类别中,这样可以提供更好的管理。
https://stackoverflow.com/questions/54957880
复制相似问题