ID2D1DeviceContext结束绘制矩形后的D2DERR_WRONG_STATE



我尝试使用Direct2D绘制矩形。在初始化Direct2D设备和Direct2D设备上下文并设置渲染目标后,如以下MSDN文章所述,我尝试绘制一个矩形,如下所示:

  HRESULT result;
  result = g_d2dContext->CreateSolidColorBrush(
    D2D1::ColorF(D2D1::ColorF::Blue),
    &g_SolidBrush
    );
  D2D1_RECT_F rect = D2D1::RectF(
    g_targetRect.left + 10.0f,
    g_targetRect.top + 10.0f,
    g_targetRect.right - 10.0f,
    g_targetRect.bottom - 10.0f);
  g_d2dContext->BeginDraw();
  {
    g_d2dContext->DrawRectangle(rect, g_SolidBrush, 5.0f);
  }
  result = g_d2dContext->EndDraw();
  if (FAILED(result))
  {
    OutputDebugStringW(L"The object was not in the correct state to process the method.");
  }

EndDraw()方法返回以下HRESULT:0x88990001 (D2DERR_WRONG_STATE) - The object was not in the correct state to process the method

不会绘制矩形。我只得到一张黑色的照片。

编辑:

我想问题是在调用CreateBitmapFromDxgiSurface之后,得到一个指向位图/渲染目标的NULL指针。

  g_d2dContext->CreateBitmapFromDxgiSurface(
    dxgiBackBuffer.Get(),
    &bitmapProperties,
    &g_targetBitmap);
  g_d2dContext->SetTarget(g_targetBitmap.Get());

但是,为什么targetBitmap为NULL?

有什么想法吗?

提前谢谢。

我刚刚解决了这个问题。我用错误的值初始化了bitmapProperties。

现在它工作了:

  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, // dpi
    96.0f  // dpi
    );
  // Direct2D needs the dxgi version of the backbuffer surface pointer.
  ComPtr<IDXGISurface> dxgiBackBuffer;
  hr = g_swapChain->GetBuffer(0, IID_PPV_ARGS(&dxgiBackBuffer));
  // Get a D2D surface from the DXGI back buffer to use as the D2D render target.
  hr = g_d2dContext->CreateBitmapFromDxgiSurface(
    dxgiBackBuffer.Get(),
    bitmapProperties,
    g_targetBitmap.GetAddressOf());
  // Now we can set the Direct2D render target.
  g_d2dContext->SetTarget(g_targetBitmap.Get());

相关内容

  • 没有找到相关文章

最新更新