2013-09-24 3 views
0

Быстрый вопрос ребята ... Я сейчас работаю с Directx3D и 2D, и мне было интересно, нужно ли мне повторно создавать цель рендеринга при изменении размера Windows или Direct2D автоматически обнаруживает это, так как это связано на DXGISurface (back-buffer swapchain), когда я его создал.Изменение размера Render Target Direct2D после WM_SIZE

Вот код, который я использовал, чтобы связать цели визуализации вместе:

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

См Care_and_Feeding_of_the_Swap_Chain и Handling_Window_Resizing

Quote1: Естественно, лучший маршрут приложения заключается в реагировании на WM_SIZE и вызов IDXGISwapChain::ResizeBuffers, передавая размер, содержащийся в параметрах сообщения.

Quote2: Прежде чем позвонить ResizeBuffers, вы должны освободить все выдающиеся ссылки на буферы цепи обмена. Объект, который обычно содержит ссылку на буфер подкачки, представляет собой визуализацию-цель-представление.