如何简单地呈现ID3D11Texture2D

问题描述

我正在做一个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;
     }
    
  • 请参阅DirectXTKdirectxtk的SpritBatch代码具有简短的外观。有必要引入许多上下文设置。我还不了解这种关系。我不知道。现有代码是否有任何影响,例如设置TargetView,ViewPort甚至是Shader。

  • 是否有一种相对简单有效的方法,就像ID2D1rendertarget的DrawBitmap一样简单又暴力?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)