问题描述
我正在做一个D2D / D3D互操作性程序。从外部获取ID3D11Texture2D后,将在指定区域中对其进行渲染。我尝试了CreatedxgiSurfacerendertarget但没有效果
-
下面的
-
代码,该代码“正常”运行,没有错误,并且显示了调试信息,但是界面显示黑屏。如果忽略参数纹理,则仅更改为_back_render_target-> FillRectange有效
HRESULT CGraphRender::DrawTexture(ID3D11Texture2D* texture,const RECT& dst_rect) { float dpi = GetDpiFromD2DFactory(_d2d_factory); CComPtr<ID3D11Texture2D> temp_texture2d; CComPtr<ID2D1rendertarget> temp_render_target; CComPtr<ID2D1Bitmap> temp_bitmap; D3D11_TEXTURE2D_DESC desc = { 0 }; texture->GetDesc(&desc); CD3D11_TEXTURE2D_DESC capture_texture_desc(dxgi_FORMAT_B8G8R8A8_UnorM,desc.Width,desc.Height,1,D3D11_BIND_RENDER_TARGET); HRESULT hr = _d3d_device->CreateTexture2D(&capture_texture_desc,nullptr,&temp_texture2d); RETURN_ON_FAIL(hr); CComPtr<IdxgiSurface> dxgi_capture; hr = temp_texture2d->QueryInterface(IID_PPV_ARGS(&dxgi_capture)); RETURN_ON_FAIL(hr); D2D1_RENDER_TARGET_PROPERTIES rt_props = D2D1::rendertargetProperties(D2D1_RENDER_TARGET_TYPE_DEFAULT,D2D1::PixelFormat(dxgi_FORMAT_B8G8R8A8_UnorM,D2D1_ALPHA_MODE_PREMULTIPLIED),dpi,dpi); hr = _d2d_factory->CreatedxgiSurfacerendertarget(dxgi_capture,rt_props,&temp_render_target); RETURN_ON_FAIL(hr); D2D1_BITMAP_PROPERTIES bmp_prop = D2D1::BitmapProperties(D2D1::PixelFormat(dxgi_FORMAT_B8G8R8A8_UnorM,dpi); hr = temp_render_target->CreateBitmap(D2D1::SizeU(desc.Width,desc.Height),bmp_prop,&temp_bitmap); RETURN_ON_FAIL(hr); CComPtr<ID3D11DeviceContext> immediate_context; _d3d_device->GetImmediateContext(&immediate_context); if (!immediate_context) { return E_UNEXPECTED; } immediate_context->copyResource(temp_texture2d,texture); D2D1_POINT_2U src_point = D2D1::Point2U(); D2D1_RECT_U src_rect = D2D1::RectU(0,desc.Height); hr = temp_bitmap->copyFromrendertarget(&src_point,temp_render_target,&src_rect); RETURN_ON_FAIL(hr); D2D1_RECT_F d2d1_rect = { (float)dst_rect.left,(float)dst_rect.top,(float)dst_rect.right,(float)dst_rect.bottom}; _back_render_target->DrawBitmap(temp_bitmap,d2d1_rect); return S_OK; }
-
请参阅DirectXTK,directxtk的SpritBatch代码具有简短的外观。有必要引入许多上下文设置。我还不了解这种关系。我不知道。现有代码是否有任何影响,例如设置TargetView,ViewPort甚至是Shader。
-
是否有一种相对简单有效的方法,就像ID2D1rendertarget的DrawBitmap一样简单又暴力?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)