When I'm playing with this MSDN sample, I just fail to add a blur effect on an ID2D1Image created by DXGISurface and filled with some rectangles.
Here is my EndDraw
method:
void Scenario1ImageSource::EndDraw()
{
// Remove the transform and clip applied in BeginDraw since
// the target area can change on every update.
m_d2dContext->SetTransform(D2D1::IdentityMatrix());
m_d2dContext->PopAxisAlignedClip();
DX::ThrowIfFailed(
m_d2dContext->Flush()
);
ComPtr<ID2D1Image> bitmap;
m_d2dContext->GetTarget(&bitmap);
DX::ThrowIfFailed(
m_d2dContext->CreateEffect(CLSID_D2D1GaussianBlur, &m_gaussianBlurEffect)
);
m_gaussianBlurEffect->SetInput(0, bitmap.Get());
DX::ThrowIfFailed(
m_gaussianBlurEffect->SetValue(D2D1_GAUSSIANBLUR_PROP_STANDARD_DEVIATION, 3.0f)
);
DX::ThrowIfFailed(
m_gaussianBlurEffect->SetValue(D2D1_GAUSSIANBLUR_PROP_BORDER_MODE, D2D1_BORDER_MODE_HARD)
);
m_d2dContext->BeginDraw();
m_d2dContext->DrawImage(m_gaussianBlurEffect.Get());
// Remove the render target and end drawing.
DX::ThrowIfFailed(
m_d2dContext->EndDraw()
);
m_d2dContext->SetTarget(nullptr);
// Query for ISurfaceImageSourceNative interface.
Microsoft::WRL::ComPtr<ISurfaceImageSourceNative> sisNative;
DX::ThrowIfFailed(
reinterpret_cast<IUnknown*>(this)->QueryInterface(IID_PPV_ARGS(&sisNative))
);
DX::ThrowIfFailed(
sisNative->EndDraw()
);
}
I want to blur my rectangles after they draw on the image. Why it failed by throwing exception with error code D2DERR_INVALID_GRAPH_CONFIGURATION?