vcl/skia/osx/bitmap.cxx |    9 +++++++++
 1 file changed, 9 insertions(+)

New commits:
commit afdfc9bb5d56fde866882e7d87869ecafed1e3d0
Author:     Luboš Luňák <l.lu...@collabora.com>
AuthorDate: Tue Nov 30 14:13:53 2021 +0100
Commit:     Luboš Luňák <l.lu...@collabora.com>
CommitDate: Tue Nov 30 15:44:11 2021 +0100

    handle Skia not drawing GPU-backend shader to a bitmap (tdf#145797)
    
    https: //bugs.chromium.org/p/skia/issues/detail?id=12685
    Change-Id: I4de51b154e270df470102c357c25bdfa430a4488
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/126118
    Tested-by: Jenkins
    Reviewed-by: Luboš Luňák <l.lu...@collabora.com>

diff --git a/vcl/skia/osx/bitmap.cxx b/vcl/skia/osx/bitmap.cxx
index 77e34697aa50..16d32191a627 100644
--- a/vcl/skia/osx/bitmap.cxx
+++ b/vcl/skia/osx/bitmap.cxx
@@ -66,9 +66,18 @@ CGImageRef createCGImage(const Image& rImage)
         
assert(dynamic_cast<SkiaSalBitmap*>(alphaBitmap.ImplGetSalBitmap().get()) != 
nullptr);
         SkiaSalBitmap* skiaAlpha
             = 
static_cast<SkiaSalBitmap*>(alphaBitmap.ImplGetSalBitmap().get());
+#if 0
+        // Drawing to a bitmap using a shader from a GPU-backed image fails 
silently.
+        // https://bugs.chromium.org/p/skia/issues/detail?id=12685
         paint.setShader(SkShaders::Blend(SkBlendMode::kDstOut,
                                          
skiaBitmap->GetSkShader(SkSamplingOptions()),
                                          
skiaAlpha->GetAlphaSkShader(SkSamplingOptions())));
+#else
+        sk_sp<SkImage> imB = skiaBitmap->GetSkImage()->makeNonTextureImage();
+        sk_sp<SkImage> imA = 
skiaAlpha->GetAlphaSkImage()->makeNonTextureImage();
+        paint.setShader(SkShaders::Blend(SkBlendMode::kDstOut, 
imB->makeShader(SkSamplingOptions()),
+                                         
imA->makeShader(SkSamplingOptions())));
+#endif
         SkCanvas canvas(targetBitmap);
         canvas.concat(matrix);
         canvas.drawPaint(paint);

Reply via email to