TemporaryRef<DataSourceSurface> SourceSurfaceD2D1::GetDataSurface() { HRESULT hr; EnsureRealizedBitmap(); RefPtr<ID2D1Bitmap1> softwareBitmap; D2D1_BITMAP_PROPERTIES1 props; props.dpiX = 96; props.dpiY = 96; props.pixelFormat = D2DPixelFormat(mFormat); props.colorContext = nullptr; props.bitmapOptions = D2D1_BITMAP_OPTIONS_CANNOT_DRAW | D2D1_BITMAP_OPTIONS_CPU_READ; hr = mDC->CreateBitmap(D2DIntSize(mSize), nullptr, 0, props, (ID2D1Bitmap1**)byRef(softwareBitmap)); if (FAILED(hr)) { gfxCriticalError() << "Failed to create software bitmap: " << mSize << " Code: " << hexa(hr); return nullptr; } D2D1_POINT_2U point = D2D1::Point2U(0, 0); D2D1_RECT_U rect = D2D1::RectU(0, 0, mSize.width, mSize.height); hr = softwareBitmap->CopyFromBitmap(&point, mRealizedBitmap, &rect); if (FAILED(hr)) { gfxWarning() << "Failed to readback into software bitmap. Code: " << hexa(hr); return nullptr; } return MakeAndAddRef<DataSourceSurfaceD2D1>(softwareBitmap, mFormat); }
TemporaryRef<DataSourceSurface> SourceSurfaceD2D1::GetDataSurface() { EnsureRealizedBitmap(); RefPtr<ID2D1Bitmap1> softwareBitmap; D2D1_BITMAP_PROPERTIES1 props; props.dpiX = 96; props.dpiY = 96; props.pixelFormat = D2DPixelFormat(mFormat); props.colorContext = nullptr; props.bitmapOptions = D2D1_BITMAP_OPTIONS_CANNOT_DRAW | D2D1_BITMAP_OPTIONS_CPU_READ; mDC->CreateBitmap(D2DIntSize(mSize), nullptr, 0, props, (ID2D1Bitmap1**)byRef(softwareBitmap)); D2D1_POINT_2U point = D2D1::Point2U(0, 0); D2D1_RECT_U rect = D2D1::RectU(0, 0, mSize.width, mSize.height); softwareBitmap->CopyFromBitmap(&point, mRealizedBitmap, &rect); return new DataSourceSurfaceD2D1(softwareBitmap, mFormat); }