首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将DirectX11后台缓冲区渲染到Direct2d上

将DirectX11后台缓冲区渲染到Direct2d上
EN

Stack Overflow用户
提问于 2019-03-02 19:14:12
回答 2查看 736关注 0票数 1

我想做一个简单的关卡编辑器,其中编辑器的图形用户界面将由Direct2d渲染,所有其他3D图形将由DirectX11处理。就像Unity3D一样..如图所示...

https://i.stack.imgur.com/tf5G1.png

如您所见,3D图形是在GUI中渲染的。如何与direct2d共享我的directx11应用程序的后台缓冲区(用于渲染gui)...因此3D场景将在GUI中呈现。或者,除了使用direct2d之外,请提出一些其他的建议。同样考虑到性能..谢谢。。

EN

回答 2

Stack Overflow用户

发布于 2019-03-03 18:45:15

我不知道共享是否可行。创建另一个d3d11纹理,从它获取表面,然后在这个表面上创建Direct2D目标/上下文可能更容易。稍后,您可以将此UI纹理与3D内容一起渲染,就像对任何其他纹理所做的那样。

票数 0
EN

Stack Overflow用户

发布于 2020-09-20 22:13:25

是的,你能做到。

在你的页眉中保留:

代码语言:javascript
复制
ID2D1Device* m_d2device;
ID2D1DeviceContext* m_deviceContext;
ID2D1RenderTarget* m_renderTargetView;
ID2D1Factory* m_factory2d;
IDXGISurface* m_dxgiBackbuffer;
IDWriteFactory1* m_writeFactory;

Factory 2D:

代码语言:javascript
复制
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曲面:

代码语言:javascript
复制
// 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呼叫分离到不同的类别中,这样可以提供更好的管理。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54957880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档