RepositoryExternal.mk | 1 include/sal/log-areas.dox | 1 vcl/README.vars | 7 +- vcl/inc/skia/gdiimpl.hxx | 14 +++++ vcl/inc/skia/salbmp.hxx | 11 ++++ vcl/skia/gdiimpl.cxx | 98 ++++++++++++++++++++++++++++++++------- vcl/skia/salbmp.cxx | 25 ++++++++- vcl/skia/win/gdiimpl.cxx | 3 + vcl/skia/x11/cairotextrender.cxx | 9 +++ vcl/skia/x11/gdiimpl.cxx | 3 + 10 files changed, 149 insertions(+), 23 deletions(-)
New commits: commit a524a73e7c25bff4e053a680dd0c7dff23a4d972 Author: Luboš Luňák <l.lu...@collabora.com> AuthorDate: Tue Nov 5 14:04:39 2019 +0100 Commit: Luboš Luňák <l.lu...@collabora.com> CommitDate: Tue Nov 5 17:35:55 2019 +0100 add SAL log group vcl.skia for tracing Skia usage Change-Id: Ife21bbe0b86c3edd20e657da09c6e218fa4fced3 diff --git a/RepositoryExternal.mk b/RepositoryExternal.mk index c7963c83c380..90c63982635d 100644 --- a/RepositoryExternal.mk +++ b/RepositoryExternal.mk @@ -116,6 +116,7 @@ define gb_LinkTarget__use_skia $(call gb_LinkTarget_set_include,$(1),\ -I$(call gb_UnpackedTarball_get_dir,skia)/include/core \ -I$(call gb_UnpackedTarball_get_dir,skia)/include/effects \ + -I$(call gb_UnpackedTarball_get_dir,skia)/include/gpu \ -I$(call gb_UnpackedTarball_get_dir,skia)/include/config \ -I$(call gb_UnpackedTarball_get_dir,skia)/include/third_party/vulkan \ -I$(call gb_UnpackedTarball_get_dir,skia) \ diff --git a/include/sal/log-areas.dox b/include/sal/log-areas.dox index 4711bd8a6a0f..ce0fa239b292 100644 --- a/include/sal/log-areas.dox +++ b/include/sal/log-areas.dox @@ -496,6 +496,7 @@ certain functionality. @li @c vcl.scrollbar - Scroll Bars @li @c vcl.se - VCL Session Manager @li @c vcl.se.debug +@li @c vcl.skia - drawing using the Skia library @li @c vcl.sm - Session Manager Client @li @c vcl.sm.debug @li @c vcl.uitest - The UI testing framework code diff --git a/vcl/inc/skia/gdiimpl.hxx b/vcl/inc/skia/gdiimpl.hxx index 0c70ce0705ee..f45b29abb07e 100644 --- a/vcl/inc/skia/gdiimpl.hxx +++ b/vcl/inc/skia/gdiimpl.hxx @@ -215,6 +215,8 @@ protected: void setProvider(SalGeometryProvider* provider) { mProvider = provider; } bool isOffscreen() const { return mProvider == nullptr || mProvider->IsOffScreen(); } + // TODO mainly for debugging purposes + bool isGPU() const; void invert(basegfx::B2DPolygon const& rPoly, SalInvert eFlags); @@ -241,6 +243,14 @@ protected: void prefillSurface(); #endif + template <typename charT, typename traits> + friend inline std::basic_ostream<charT, traits>& + operator<<(std::basic_ostream<charT, traits>& stream, const SkiaSalGraphicsImpl* graphics) + { // O - offscreen, G - GPU-based, R - raster + return stream << (void*)graphics << " " << Size(graphics->GetWidth(), graphics->GetHeight()) + << (graphics->isOffscreen() ? "O" : "") << (graphics->isGPU() ? "G" : "R"); + } + SalGraphics& mParent; /// Pointer to the SalFrame or SalVirtualDevice SalGeometryProvider* mProvider; diff --git a/vcl/inc/skia/salbmp.hxx b/vcl/inc/skia/salbmp.hxx index b7d0bd25a1b6..c5922685c5b7 100644 --- a/vcl/inc/skia/salbmp.hxx +++ b/vcl/inc/skia/salbmp.hxx @@ -78,6 +78,17 @@ private: void verify() const {}; #endif + template <typename charT, typename traits> + friend inline std::basic_ostream<charT, traits>& + operator<<(std::basic_ostream<charT, traits>& stream, const SkiaSalBitmap* bitmap) + { // TODO GPU-based, once it's done + // B - has SkBitmap, A - has alpha SkBitmap, D - has data buffer + return stream << (void*)bitmap << " " << bitmap->GetSize() << "/" << bitmap->mBitCount + << (!bitmap->mBitmap.drawsNothing() ? "B" : "") + << (!bitmap->mAlphaBitmap.drawsNothing() ? "A" : "") + << (bitmap->mBuffer.get() ? "D" : ""); + } + // TODO use something GPU-backed, or at least cache it for when drawing it to something GPU-backed? SkBitmap mBitmap; SkBitmap mAlphaBitmap; // TODO for use as an alpha channel or mask diff --git a/vcl/skia/gdiimpl.cxx b/vcl/skia/gdiimpl.cxx index d85ba18ffa76..8e12cc5a5300 100644 --- a/vcl/skia/gdiimpl.cxx +++ b/vcl/skia/gdiimpl.cxx @@ -28,6 +28,7 @@ #include <SkPath.h> #include <SkRegion.h> #include <SkDashPathEffect.h> +#include <GrBackendSurface.h> #include <basegfx/polygon/b2dpolygontools.hxx> @@ -255,8 +256,22 @@ void SkiaSalGraphicsImpl::postDraw() // to create it in Init() if it gets recreated later anyway). void SkiaSalGraphicsImpl::checkSurface() { - if (!mSurface || GetWidth() != mSurface->width() || GetHeight() != mSurface->height()) + if (!mSurface) + { + recreateSurface(); + SAL_INFO("vcl.skia", + "create(" << this << "): " << Size(mSurface->width(), mSurface->height())); + } + else if (GetWidth() != mSurface->width() || GetHeight() != mSurface->height()) + { +#ifdef SAL_LOG_INFO + Size oldSize(mSurface->width(), mSurface->height()); +#endif recreateSurface(); + SAL_INFO("vcl.skia", "recreate(" << this << "): old " << oldSize << " new " + << Size(mSurface->width(), mSurface->height()) + << " requested " << Size(GetWidth(), GetHeight())); + } } static SkIRect toSkIRect(const tools::Rectangle& rectangle) @@ -297,6 +312,7 @@ bool SkiaSalGraphicsImpl::setClipRegion(const vcl::Region& region) return true; mClipRegion = region; checkSurface(); + SAL_INFO("vcl.skia", "setclipregion(" << this << "): " << region); SkCanvas* canvas = mSurface->getCanvas(); // SkCanvas::clipRegion() can only further reduce the clip region, // but we need to set the given region, which may extend it. @@ -387,6 +403,7 @@ void SkiaSalGraphicsImpl::drawPixel(long nX, long nY, Color nColor) if (nColor == SALCOLOR_NONE) return; preDraw(); + SAL_INFO("vcl.skia", "drawpixel(" << this << "): " << Point(nX, nY) << ":" << nColor); SkCanvas* canvas = mSurface->getCanvas(); SkPaint paint; paint.setColor(toSkColor(nColor)); @@ -401,6 +418,8 @@ void SkiaSalGraphicsImpl::drawLine(long nX1, long nY1, long nX2, long nY2) if (mLineColor == SALCOLOR_NONE) return; preDraw(); + SAL_INFO("vcl.skia", "drawline(" << this << "): " << Point(nX1, nY1) << "->" << Point(nX2, nY2) + << ":" << mLineColor); SkCanvas* canvas = mSurface->getCanvas(); SkPaint paint; paint.setColor(toSkColor(mLineColor)); @@ -413,6 +432,9 @@ void SkiaSalGraphicsImpl::privateDrawAlphaRect(long nX, long nY, long nWidth, lo double fTransparency, bool blockAA) { preDraw(); + SAL_INFO("vcl.skia", "privatedrawrect(" << this << "): " << Point(nX, nY) << "/" + << Size(nWidth, nHeight) << ":" << mLineColor << ":" + << mFillColor << ":" << fTransparency); SkCanvas* canvas = mSurface->getCanvas(); SkPaint paint; paint.setAntiAlias(!blockAA && mParent.getAntiAliasB2DDraw()); @@ -497,6 +519,8 @@ bool SkiaSalGraphicsImpl::drawPolyPolygon(const basegfx::B2DHomMatrix& rObjectTo SkPath aPath; basegfx::B2DPolyPolygon aPolyPolygon(rPolyPolygon); aPolyPolygon.transform(rObjectToDevice); + SAL_INFO("vcl.skia", "drawpolypolygon(" << this << "): " << aPolyPolygon << ":" << mLineColor + << ":" << mFillColor); lclPolyPolygonToPath(aPolyPolygon, aPath); aPath.setFillType(SkPath::kEvenOdd_FillType); @@ -533,6 +557,7 @@ bool SkiaSalGraphicsImpl::drawPolyLine(const basegfx::B2DHomMatrix& rObjectToDev return true; preDraw(); + SAL_INFO("vcl.skia", "drawpolyline(" << this << "): " << rPolyLine << ":" << mLineColor); basegfx::B2DVector aLineWidths(rLineWidths); const bool bObjectToDeviceIsIdentity(rObjectToDevice.isIdentity()); @@ -649,6 +674,9 @@ void SkiaSalGraphicsImpl::copyArea(long nDestX, long nDestY, long nSrcX, long nS if (nDestX == nSrcX && nDestY == nSrcY) return; preDraw(); + SAL_INFO("vcl.skia", "copyarea(" << this << "): " << Point(nSrcX, nSrcY) << "->" + << Point(nDestX, nDestY) << "/" + << Size(nSrcWidth, nSrcHeight)); sk_sp<SkImage> image = mSurface->makeImageSnapshot(SkIRect::MakeXYWH(nSrcX, nSrcY, nSrcWidth, nSrcHeight)); // TODO makeNonTextureImage() ? @@ -668,6 +696,7 @@ void SkiaSalGraphicsImpl::copyBits(const SalTwoRect& rPosAry, SalGraphics* pSrcG else src = this; src->checkSurface(); + SAL_INFO("vcl.skia", "copybits(" << this << "): (" << src << "):" << rPosAry); sk_sp<SkImage> image = src->mSurface->makeImageSnapshot( SkIRect::MakeXYWH(rPosAry.mnSrcX, rPosAry.mnSrcY, rPosAry.mnSrcWidth, rPosAry.mnSrcHeight)); // TODO makeNonTextureImage() ? @@ -777,6 +806,8 @@ std::shared_ptr<SalBitmap> SkiaSalGraphicsImpl::getBitmap(long nX, long nY, long long nHeight) { checkSurface(); + SAL_INFO("vcl.skia", + "getbitmap(" << this << "): " << Point(nX, nY) << "/" << Size(nWidth, nHeight)); mSurface->getCanvas()->flush(); sk_sp<SkImage> image = mSurface->makeImageSnapshot(SkIRect::MakeXYWH(nX, nY, nWidth, nHeight)); return std::make_shared<SkiaSalBitmap>(*image); @@ -785,6 +816,7 @@ std::shared_ptr<SalBitmap> SkiaSalGraphicsImpl::getBitmap(long nX, long nY, long Color SkiaSalGraphicsImpl::getPixel(long nX, long nY) { checkSurface(); + SAL_INFO("vcl.skia", "getpixel(" << this << "): " << Point(nX, nY)); mSurface->getCanvas()->flush(); // TODO this is presumably slow, and possibly won't work with GPU surfaces SkBitmap bitmap; @@ -798,6 +830,7 @@ Color SkiaSalGraphicsImpl::getPixel(long nX, long nY) void SkiaSalGraphicsImpl::invert(basegfx::B2DPolygon const& rPoly, SalInvert eFlags) { preDraw(); + SAL_INFO("vcl.skia", "invert(" << this << "): " << rPoly << ":" << int(eFlags)); // TrackFrame just inverts a dashed path around the polygon if (eFlags == SalInvert::TrackFrame) { @@ -928,6 +961,7 @@ void SkiaSalGraphicsImpl::drawBitmap(const SalTwoRect& rPosAry, const SkBitmap& aPaint.setBlendMode(eBlendMode); preDraw(); + SAL_INFO("vcl.skia", "drawbitmap(" << this << "): " << rPosAry << ":" << int(eBlendMode)); mSurface->getCanvas()->drawBitmapRect(aBitmap, aSourceRect, aDestinationRect, &aPaint); postDraw(); } @@ -981,6 +1015,8 @@ bool SkiaSalGraphicsImpl::drawTransformedBitmap(const basegfx::B2DPoint& rNull, aMatrix.set(SkMatrix::kMTransY, rNull.getY()); preDraw(); + SAL_INFO("vcl.skia", + "drawtransformedbitmap(" << this << "): " << rNull << ":" << rX << ":" << rY); { SkAutoCanvasRestore autoRestore(mSurface->getCanvas(), true); mSurface->getCanvas()->concat(aMatrix); @@ -1018,6 +1054,12 @@ bool SkiaSalGraphicsImpl::supportsOperation(OutDevSupportType eType) const } } +bool SkiaSalGraphicsImpl::isGPU() const +{ + return mSurface.get() + && mSurface->getBackendRenderTarget(SkSurface::kFlushRead_BackendHandleAccess).isValid(); +} + #ifdef DBG_UTIL void SkiaSalGraphicsImpl::dump(const char* file) const { diff --git a/vcl/skia/salbmp.cxx b/vcl/skia/salbmp.cxx index 9322e7ee8e55..c1ff1f13e9e3 100644 --- a/vcl/skia/salbmp.cxx +++ b/vcl/skia/salbmp.cxx @@ -55,7 +55,8 @@ SkiaSalBitmap::SkiaSalBitmap(const SkImage& image) bool SkiaSalBitmap::Create(const Size& rSize, sal_uInt16 nBitCount, const BitmapPalette& rPal) { - Destroy(); + mBitmap.reset(); + mBuffer.reset(); if (!isValidBitCount(nBitCount)) return false; // Skia only supports 8bit gray, 16bit and 32bit formats (e.g. 24bpp is actually stored as 32bpp). @@ -96,7 +97,7 @@ bool SkiaSalBitmap::Create(const Size& rSize, sal_uInt16 nBitCount, const Bitmap int bitScanlineWidth; if (o3tl::checked_multiply<int>(rSize.Width(), nBitCount, bitScanlineWidth)) { - SAL_WARN("vcl.gdi", "checked multiply failed"); + SAL_WARN("vcl.skia", "checked multiply failed"); return false; } mScanlineSize = AlignedWidth4Bytes(bitScanlineWidth); @@ -120,6 +121,7 @@ bool SkiaSalBitmap::Create(const Size& rSize, sal_uInt16 nBitCount, const Bitmap mPalette = rPal; mBitCount = nBitCount; mSize = rSize; + SAL_INFO("vcl.skia", "create(" << this << ")"); return true; } @@ -154,11 +156,13 @@ bool SkiaSalBitmap::Create(const SalBitmap& rSalBmp, sal_uInt16 nNewBitCount) mBuffer.reset(newBuffer); mScanlineSize = src.mScanlineSize; } + SAL_INFO("vcl.skia", "create(" << this << "): (" << &src << ")"); return true; } if (!Create(src.mSize, src.mBitCount, src.mPalette)) return false; // TODO copy data + SAL_INFO("vcl.skia", "copy(" << this << "): (" << &src << ")"); abort(); return true; } @@ -174,6 +178,7 @@ bool SkiaSalBitmap::Create(const css::uno::Reference<css::rendering::XBitmapCanv void SkiaSalBitmap::Destroy() { + SAL_INFO("vcl.skia", "destroy(" << this << ")"); mBitmap.reset(); mBuffer.reset(); } @@ -309,6 +314,7 @@ const SkBitmap& SkiaSalBitmap::GetSkBitmap() const data.release(), mSize.Width() * 4, [](void* addr, void*) { delete[] static_cast<sal_uInt8*>(addr); }, nullptr)) abort(); + SAL_INFO("vcl.skia", "skbitmap(" << this << ")"); } else { @@ -324,6 +330,7 @@ const SkBitmap& SkiaSalBitmap::GetSkBitmap() const data.release(), mSize.Width() * 4, [](void* addr, void*) { delete[] static_cast<sal_uInt8*>(addr); }, nullptr)) abort(); + SAL_INFO("vcl.skia", "skbitmap(" << this << ")"); } } return mBitmap; @@ -347,6 +354,7 @@ const SkBitmap& SkiaSalBitmap::GetAlphaSkBitmap() const [](void* addr, void*) { delete[] static_cast<sal_uInt8*>(addr); }, nullptr)) abort(); + SAL_INFO("vcl.skia", "skalphabitmap(" << this << ")"); } else { @@ -378,6 +386,7 @@ const SkBitmap& SkiaSalBitmap::GetAlphaSkBitmap() const .setPixelRef(sk_ref_sp(bitmap8->pixelRef()), bitmap8->pixelRefOrigin().x(), bitmap8->pixelRefOrigin().y()); delete convertedBitmap; + SAL_INFO("vcl.skia", "skalphabitmap(" << this << ")"); return mAlphaBitmap; } } commit 4986672b841fa758701a9749143880c75c61a22e Author: Luboš Luňák <l.lu...@collabora.com> AuthorDate: Tue Nov 5 12:58:18 2019 +0100 Commit: Luboš Luňák <l.lu...@collabora.com> CommitDate: Tue Nov 5 17:35:13 2019 +0100 handle properly Skia color endianess Change-Id: I59af62fa92903823eb7105d82157017e485ba0df diff --git a/vcl/skia/gdiimpl.cxx b/vcl/skia/gdiimpl.cxx index 18bd87efdc88..d85ba18ffa76 100644 --- a/vcl/skia/gdiimpl.cxx +++ b/vcl/skia/gdiimpl.cxx @@ -831,27 +831,29 @@ void SkiaSalGraphicsImpl::invert(basegfx::B2DPolygon const& rPoly, SalInvert eFl // TODO Cache the bitmap SkBitmap aBitmap; aBitmap.allocN32Pixels(4, 4); + const SkPMColor white = SkPreMultiplyARGB(0xFF, 0xFF, 0xFF, 0xFF); + const SkPMColor black = SkPreMultiplyARGB(0xFF, 0x00, 0x00, 0x00); SkPMColor* scanline; scanline = aBitmap.getAddr32(0, 0); - *scanline++ = 0xFFFFFFFF; - *scanline++ = 0xFFFFFFFF; - *scanline++ = 0xFF000000; - *scanline++ = 0xFF000000; + *scanline++ = white; + *scanline++ = white; + *scanline++ = black; + *scanline++ = black; scanline = aBitmap.getAddr32(0, 1); - *scanline++ = 0xFFFFFFFF; - *scanline++ = 0xFFFFFFFF; - *scanline++ = 0xFF000000; - *scanline++ = 0xFF000000; + *scanline++ = white; + *scanline++ = white; + *scanline++ = black; + *scanline++ = black; scanline = aBitmap.getAddr32(0, 2); - *scanline++ = 0xFF000000; - *scanline++ = 0xFF000000; - *scanline++ = 0xFFFFFFFF; - *scanline++ = 0xFFFFFFFF; + *scanline++ = black; + *scanline++ = black; + *scanline++ = white; + *scanline++ = white; scanline = aBitmap.getAddr32(0, 3); - *scanline++ = 0xFF000000; - *scanline++ = 0xFF000000; - *scanline++ = 0xFFFFFFFF; - *scanline++ = 0xFFFFFFFF; + *scanline++ = black; + *scanline++ = black; + *scanline++ = white; + *scanline++ = white; // The bitmap is repeated in both directions the checker pattern is as big // as the polygon (usually rectangle) aPaint.setShader(aBitmap.makeShader(SkTileMode::kRepeat, SkTileMode::kRepeat)); commit 564326be6677a8e2a0c29034ca76be36a428a2cb Author: Luboš Luňák <l.lu...@collabora.com> AuthorDate: Tue Nov 5 12:51:31 2019 +0100 Commit: Luboš Luňák <l.lu...@collabora.com> CommitDate: Tue Nov 5 17:35:02 2019 +0100 pre-fill Skia bitmaps/surfaces with garbage in dbgutil mode In order to be able to detect incorrect/missing drawing. Change-Id: I18b3f05c1fdff69b461f22e984e0aef3c4ce3364 diff --git a/vcl/inc/skia/gdiimpl.hxx b/vcl/inc/skia/gdiimpl.hxx index 432f8f2512e5..0c70ce0705ee 100644 --- a/vcl/inc/skia/gdiimpl.hxx +++ b/vcl/inc/skia/gdiimpl.hxx @@ -237,6 +237,10 @@ protected: }; static RenderMethod renderMethodToUse(); +#ifdef DBG_UTIL + void prefillSurface(); +#endif + SalGraphics& mParent; /// Pointer to the SalFrame or SalVirtualDevice SalGeometryProvider* mProvider; diff --git a/vcl/skia/gdiimpl.cxx b/vcl/skia/gdiimpl.cxx index c36184714adb..18bd87efdc88 100644 --- a/vcl/skia/gdiimpl.cxx +++ b/vcl/skia/gdiimpl.cxx @@ -209,6 +209,9 @@ void SkiaSalGraphicsImpl::createSurface() // Create surface for offscreen graphics. Subclasses will create GPU-backed // surfaces as appropriate. mSurface = SkSurface::MakeRasterN32Premul(GetWidth(), GetHeight()); +#ifdef DBG_UTIL + prefillSurface(); +#endif } void SkiaSalGraphicsImpl::destroySurface() @@ -1031,6 +1034,23 @@ void SkiaSalGraphicsImpl::dump(const SkBitmap& bitmap, const char* file) std::ofstream ostream(file, std::ios::binary); ostream.write(static_cast<const char*>(data->data()), data->size()); } + +void SkiaSalGraphicsImpl::prefillSurface() +{ + // Pre-fill the surface with deterministic garbage. + SkBitmap bitmap; + bitmap.allocN32Pixels(2, 2); + SkPMColor* scanline; + scanline = bitmap.getAddr32(0, 0); + *scanline++ = SkPreMultiplyARGB(0xFF, 0xBF, 0x80, 0x40); + *scanline++ = SkPreMultiplyARGB(0xFF, 0x40, 0x80, 0xBF); + scanline = bitmap.getAddr32(0, 1); + *scanline++ = SkPreMultiplyARGB(0xFF, 0xE3, 0x5C, 0x13); + *scanline++ = SkPreMultiplyARGB(0xFF, 0x13, 0x5C, 0xE3); + SkPaint paint; + paint.setShader(bitmap.makeShader(SkTileMode::kRepeat, SkTileMode::kRepeat)); + mSurface->getCanvas()->drawPaint(paint); +} #endif /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/skia/salbmp.cxx b/vcl/skia/salbmp.cxx index b1b01f683fe4..9322e7ee8e55 100644 --- a/vcl/skia/salbmp.cxx +++ b/vcl/skia/salbmp.cxx @@ -82,6 +82,13 @@ bool SkiaSalBitmap::Create(const Size& rSize, sal_uInt16 nBitCount, const Bitmap { return false; } +#ifdef DBG_UTIL + // fill with random garbage + sal_uInt8* buffer = static_cast<sal_uInt8*>(mBitmap.getPixels()); + size_t size = mBitmap.rowBytes() & mBitmap.height(); + for (size_t i = 0; i < size; i++) + buffer[i] = (i & 0xFF); +#endif } else { @@ -101,7 +108,10 @@ bool SkiaSalBitmap::Create(const Size& rSize, sal_uInt16 nBitCount, const Bitmap allocate += sizeof(CANARY); #endif buffer = new sal_uInt8[allocate]; -#if OSL_DEBUG_LEVEL > 0 +#ifdef DBG_UTIL + // fill with random garbage + for (size_t i = 0; i < allocate; i++) + buffer[i] = (i & 0xFF); memcpy(buffer + allocate - sizeof(CANARY), CANARY, sizeof(CANARY)); #endif } diff --git a/vcl/skia/win/gdiimpl.cxx b/vcl/skia/win/gdiimpl.cxx index 4640e3b57897..d54120d5ffce 100644 --- a/vcl/skia/win/gdiimpl.cxx +++ b/vcl/skia/win/gdiimpl.cxx @@ -66,6 +66,9 @@ void WinSkiaSalGraphicsImpl::createSurface() assert(SkToBool(mWindowContext)); // TODO mSurface = mWindowContext->getBackbufferSurface(); assert(mSurface.get()); +#ifdef DBG_UTIL + prefillSurface(); +#endif } void WinSkiaSalGraphicsImpl::DeInit() diff --git a/vcl/skia/x11/gdiimpl.cxx b/vcl/skia/x11/gdiimpl.cxx index f4575d8af867..fff94936a33d 100644 --- a/vcl/skia/x11/gdiimpl.cxx +++ b/vcl/skia/x11/gdiimpl.cxx @@ -74,6 +74,9 @@ void X11SkiaSalGraphicsImpl::createSurface() assert(SkToBool(mWindowContext)); // TODO mSurface = mWindowContext->getBackbufferSurface(); assert(mSurface.get()); +#ifdef DBG_UTIL + prefillSurface(); +#endif } void X11SkiaSalGraphicsImpl::DeInit() commit bf8c0bc77b5d121d9fd18393913733c8a77bec02 Author: Luboš Luňák <l.lu...@collabora.com> AuthorDate: Mon Nov 4 15:51:09 2019 +0100 Commit: Luboš Luňák <l.lu...@collabora.com> CommitDate: Tue Nov 5 17:34:46 2019 +0100 fix Skia text color on X11 Change-Id: I061acb80294c3bd6b45bd60dbb32c9a906619ed0 diff --git a/vcl/skia/x11/cairotextrender.cxx b/vcl/skia/x11/cairotextrender.cxx index 82577d026ce9..73b7fc1052db 100644 --- a/vcl/skia/x11/cairotextrender.cxx +++ b/vcl/skia/x11/cairotextrender.cxx @@ -11,6 +11,7 @@ #include <salbmp.hxx> #include <skia/gdiimpl.hxx> +#include <osl/endian.h> #include <cairo.h> @@ -71,8 +72,14 @@ void SkiaX11CairoTextRender::releaseCairoContext(cairo_t* cr) SalTwoRect aRect(0, 0, nWidth, nHeight, aClipRect.Left(), aClipRect.Top(), nWidth, nHeight); + SkImageInfo info; +#ifdef OSL_LITENDIAN + info = SkImageInfo::Make(nWidth, nHeight, kBGRA_8888_SkColorType, kPremul_SkAlphaType); +#else + info = SkImageInfo::Make(nWidth, nHeight, kARGB_8888_SkColorType, kPremul_SkAlphaType); +#endif SkBitmap bitmap; - if (!bitmap.installPixels(SkImageInfo::MakeN32Premul(nWidth, nHeight), pSrc, nWidth * 4)) + if (!bitmap.installPixels(info, pSrc, nWidth * 4)) abort(); pImpl->drawBitmap(aRect, bitmap); commit 00a4fecfae2281cd6726b6393558b653296d44ac Author: Luboš Luňák <l.lu...@collabora.com> AuthorDate: Mon Nov 4 14:43:28 2019 +0100 Commit: Luboš Luňák <l.lu...@collabora.com> CommitDate: Tue Nov 5 17:34:34 2019 +0100 some VCL OpenGL-specific env.vars. actually apply to Skia as well now Change-Id: Ia8cfa8ef855f85cc324bc811e26dcab83b50b1be diff --git a/vcl/README.vars b/vcl/README.vars index 65a088fa3f27..f8026c35ccce 100644 --- a/vcl/README.vars +++ b/vcl/README.vars @@ -36,8 +36,6 @@ OpenGL SAL_FORCEGL - force enable OpenGL SAL_GL_NO_SWAP - disable buffer swapping if set (should show nothing) SAL_GL_SLEEP_ON_SWAP - sleep for half a second on each swap-buffers. -SAL_WITHOUT_WIDGET_CACHE - disable LRU caching of native widget textures -SAL_DISABLE_GLYPH_CACHING - don't render glyphs through OpenGL textures SAL_DISABLE_GL_WATCHDOG - don't start the thread that watches for broken GL drivers Skia @@ -46,3 +44,8 @@ SAL_DISABLESKIA=1 - force disabled Skia SAL_ENABLESKIA=1 - enable Skia, unless blacklisted (and if the VCL backend supports Skia) SAL_FORCESKIA=1 - force using Skia, even if blacklisted SAL_SKIA=raster|vulkan - select Skia's drawing method, by default Vulkan is used + +OpenGL,Skia +----------- +SAL_WITHOUT_WIDGET_CACHE - disable LRU caching of native widget textures +SAL_DISABLE_GLYPH_CACHING - don't render glyphs through OpenGL textures or Skia surfaces _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits