微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何简单地呈现ID3D11Texture2D

如何解决如何简单地呈现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 举报,一经查实,本站将立刻删除。