在WM_SIZE之后调整渲染目标Direct2D的大小

时间:2013-09-24 22:48:24

标签: direct2d

快速提问的人...我目前正在使用Directx3D和2D,我想知道在调整Windows大小时是否必须重新创建渲染目标,或者Direct2D是否自动检测到这一点,因为它已绑定到DXGISurface(返回 - 我创建它时,交换链的缓冲区。

以下是我用于将渲染目标绑定在一起的代码:

ComPtr<IDXGISurface1> dxgibackBuffer;
hr = m_pDxSwapchain->GetBuffer(0, IID_PPV_ARGS(&dxgibackBuffer));

D2D1_BITMAP_PROPERTIES1 bitmapProperties = D2D1::BitmapProperties1(
    D2D1_BITMAP_OPTIONS_TARGET | D2D1_BITMAP_OPTIONS_CANNOT_DRAW,
    D2D1::PixelFormat(DXGI_FORMAT_B8G8R8A8_UNORM, D2D1_ALPHA_MODE_IGNORE),
    96.0f,
    96.0f);
hr = m_pD2DContext->CreateBitmapFromDxgiSurface(dxgibackBuffer.Get(), &bitmapProperties, &m_pD2DTargetBitmap);

// last step
m_pD2DContext->SetTarget(m_pD2DTargetBitmap.Get());

1 个答案:

答案 0 :(得分:1)

请参阅Care_and_Feeding_of_the_Swap_ChainHandling_Window_Resizing

Quote1: 当然,应用程序的最佳路径是响应WM_SIZE,并调用IDXGISwapChain::ResizeBuffers,传递消息参数中包含的大小。

Quote2: 在调用ResizeBuffers之前,必须释放对交换链缓冲区的所有未完成引用。通常持有对交换链缓冲区的引用的对象是render-target-view。