如何在DPI下提高Direct2D的渲染速度

时间:2018-10-15 03:13:59

标签: dpi direct2d

为了支持播放多声乐和录音,我需要将ID2D1HwndRenderTarget设置为D2D1_RENDER_TARGET_TYPE_SOFTWARE类型(请参阅https://docs.microsoft.com/en-us/windows/desktop/Direct2D/resources-and-resource-domains#sharing_render_target_resources),但是找到了我的本地计算机(CPU i7-7710、16G内存,Geforce GTX1060 6GB)测试绘图(“ _pRenderTarget-> EndDraw()”)的性能瓶颈相对较高:

HRESULT CD2D1Context::Present()
{
    if (!_pRenderTarget || !_pBackRenderTarget)
    {
        return E_FAIL;
    }
    CComPtr<ID2D1Bitmap> pBackBitmap;
    HRESULT hr = _pBackRenderTarget->GetBitmap(&pBackBitmap);
    if (FAILED(hr))
    {
        return hr;
    }
    _pRenderTarget->BeginDraw();
    _pRenderTarget->Clear(D2D1::ColorF(1.0f, 1.0f, 1.0f, 1.0f));
    D2D1_SIZE_F sizeF = pBackBitmap->GetSize();
    _pRenderTarget->DrawBitmap(pBackBitmap, D2D1::RectF(0, 0, sizeF.width, sizeF.height));
    hr = _pRenderTarget->EndDraw();
    if (hr == D2DERR_RECREATE_TARGET)
    {
        hr = S_OK;
        DiscardDeviceResources();
    }
    return hr;

}

  • 如果您未启用DPI,但使用D2D1_RENDER_TARGET_TYPE_SOFTWARE,则“渲染”将花费一点时间,大约为0-16毫秒(使用GetTickCount64)。
  • 如果启用高DPI(例如384)和D2D1_RENDER_TARGET_TYPE_HARDWARE(表示不支持屏幕截图),则渲染消耗也很少,大约为0-16毫秒。
  • 如果启用DPI(例如144的值)和D2D1_RENDER_TARGET_TYPE_SOFTWARE,则大约需要70-100毫秒。
  • 由于有必要实现打开DPI和播放视频文件(可能为30帧速率)和录制屏幕的功能,因此这些要求之间存在差距。我们如何才能实现更好的实施?

0 个答案:

没有答案