summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan-Marek Glogowski <glogow@fbihome.de>2021-08-19 21:45:42 +0200
committerXisco Fauli <xiscofauli@libreoffice.org>2021-08-25 10:29:34 +0200
commite11bbf3c3ccd45c3c7adc75077c4f4cebf6892b2 (patch)
treedcb9db24f4584b75bb32e288f869cdd5f65db13f
parentofz: MemorySanitizer: use-of-uninitialized-value (diff)
downloadcore-e11bbf3c3ccd45c3c7adc75077c4f4cebf6892b2.tar.gz
core-e11bbf3c3ccd45c3c7adc75077c4f4cebf6892b2.zip
VCL allow plugins to declare OpenGL support
... and get rid of the whole GetBackendCapabilities, which was just overkill. Maybe this should even be some bitmap + enum + set/get function, but I'm too lazy... In the end add a bool for the OpenGL support of the VCL plugin (or maybe sticking it into ImplSVData, which is already some catchall for common VCL data). Change-Id: I9f0ececac482d8e2a94ef6024628e9631b49e773 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/120760 Tested-by: Jenkins Reviewed-by: Jan-Marek Glogowski <glogow@fbihome.de> (cherry picked from commit 9ca30cd1d04cf39411c3ede687805c28ebe2a980) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/120775 Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
-rw-r--r--compilerplugins/clang/singlevalfields.results3
-rw-r--r--compilerplugins/clang/unnecessaryoverride.cxx5
-rw-r--r--vcl/headless/svpinst.cxx51
-rw-r--r--vcl/inc/backend/BackendCapabilities.hxx28
-rw-r--r--vcl/inc/headless/svpinst.hxx4
-rw-r--r--vcl/inc/salinst.hxx16
-rw-r--r--vcl/inc/unx/salinst.h2
-rw-r--r--vcl/inc/win/salinst.h1
-rw-r--r--vcl/qa/cppunit/BitmapExTest.cxx3
-rw-r--r--vcl/qa/cppunit/BitmapTest.cxx6
-rw-r--r--vcl/qa/cppunit/bitmaprender/BitmapRenderTest.cxx3
-rw-r--r--vcl/source/app/salvtables.cxx6
-rw-r--r--vcl/source/bitmap/BitmapReadAccess.cxx6
-rw-r--r--vcl/source/filter/png/PngImageReader.cxx3
-rw-r--r--vcl/source/opengl/OpenGLHelper.cxx4
-rw-r--r--vcl/unx/generic/app/salinst.cxx16
-rw-r--r--vcl/win/app/salinst.cxx16
17 files changed, 34 insertions, 139 deletions
diff --git a/compilerplugins/clang/singlevalfields.results b/compilerplugins/clang/singlevalfields.results
index b2f91d4d97a1..c426b4a42580 100644
--- a/compilerplugins/clang/singlevalfields.results
+++ b/compilerplugins/clang/singlevalfields.results
@@ -976,9 +976,6 @@ vcl/headless/svpgdi.cxx:598
vcl/headless/svpgdi.cxx:1641
SvpSalGraphics::drawPolyLine bDoDirectCairoStroke
1
-vcl/inc/backend/BackendCapabilities.hxx:18
- vcl::BackendCapabilities mbSupportsBitmap32
- 0
vcl/inc/canvasbitmap.hxx:53
vcl::unotools::VclCanvasBitmap m_nEndianness
0
diff --git a/compilerplugins/clang/unnecessaryoverride.cxx b/compilerplugins/clang/unnecessaryoverride.cxx
index 10ab158b7d8d..cae1220b0e23 100644
--- a/compilerplugins/clang/unnecessaryoverride.cxx
+++ b/compilerplugins/clang/unnecessaryoverride.cxx
@@ -246,11 +246,6 @@ bool UnnecessaryOverride::VisitCXXMethodDecl(const CXXMethodDecl* methodDecl)
return true;
}
- auto fdc = loplugin::DeclCheck(methodDecl);
- // Has code only in #ifdef.
- if (fdc.Function("GetBackendCapabilities").Class("X11SalInstance").GlobalNamespace())
- return true;
-
// If overriding more than one base member function, or one base member
// function that is available in multiple (non-virtual) base class
// instances, then this is a disambiguating override:
diff --git a/vcl/headless/svpinst.cxx b/vcl/headless/svpinst.cxx
index 700c6b87f645..71efed967af3 100644
--- a/vcl/headless/svpinst.cxx
+++ b/vcl/headless/svpinst.cxx
@@ -35,9 +35,6 @@
#include <vcl/virdev.hxx>
#include <vcl/inputtypes.hxx>
#include <vcl/lok.hxx>
-#if HAVE_FEATURE_UI
-# include <vcl/opengl/OpenGLContext.hxx>
-#endif
#include <headless/svpinst.hxx>
#include <headless/svpframe.hxx>
@@ -89,6 +86,8 @@ SvpSalInstance::SvpSalInstance( std::unique_ptr<SalYieldMutex> pMutex )
#if !defined(ANDROID) && !defined(IOS)
pthread_atfork(nullptr, nullptr, atfork_child);
#endif
+
+ m_bSupportsOpenGL = false;
}
SvpSalInstance::~SvpSalInstance()
@@ -591,52 +590,6 @@ void SvpSalInstance::AddToRecentDocumentList(const OUString&, const OUString&, c
{
}
-std::shared_ptr<vcl::BackendCapabilities> SvpSalInstance::GetBackendCapabilities()
-{
- auto pBackendCapabilities = SalInstance::GetBackendCapabilities();
-#if 0 // LO code is not yet bitmap32-ready.
-#ifndef IOS
- // Note: This code is used for iOS, too. Let's not use 32-bit bitmaps with included alpha on iOS for now.
- pBackendCapabilities->mbSupportsBitmap32 = true;
-#endif
-#endif
- return pBackendCapabilities;
-}
-
-//obviously doesn't actually do anything, it's just a nonfunctional stub
-
-#if HAVE_FEATURE_UI
-
-namespace {
-
-class SvpOpenGLContext : public OpenGLContext
-{
- GLWindow m_aGLWin;
-private:
- virtual const GLWindow& getOpenGLWindow() const override { return m_aGLWin; }
- virtual GLWindow& getModifiableOpenGLWindow() override { return m_aGLWin; }
-};
-
-}
-
-OpenGLContext* SvpSalInstance::CreateOpenGLContext()
-{
- return new SvpOpenGLContext;
-}
-
-#else
-
-class SvpOpenGLContext
-{
-};
-
-OpenGLContext* SvpSalInstance::CreateOpenGLContext()
-{
- return nullptr;
-}
-
-#endif
-
SvpSalTimer::~SvpSalTimer()
{
}
diff --git a/vcl/inc/backend/BackendCapabilities.hxx b/vcl/inc/backend/BackendCapabilities.hxx
deleted file mode 100644
index 89879ee492e1..000000000000
--- a/vcl/inc/backend/BackendCapabilities.hxx
+++ /dev/null
@@ -1,28 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- */
-
-#ifndef INCLUDED_VCL_INC_BACKENDCAPABILITIES_HXX
-#define INCLUDED_VCL_INC_BACKENDCAPABILITIES_HXX
-
-namespace vcl
-{
-struct BackendCapabilities
-{
- bool mbSupportsBitmap32;
- BackendCapabilities()
- : mbSupportsBitmap32(false)
- {
- }
-};
-}
-
-#endif // INCLUDED_VCL_INC_BACKENDCAPABILITIES_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/inc/headless/svpinst.hxx b/vcl/inc/headless/svpinst.hxx
index 2f48049b4839..51de503c3b24 100644
--- a/vcl/inc/headless/svpinst.hxx
+++ b/vcl/inc/headless/svpinst.hxx
@@ -159,8 +159,6 @@ public:
// SalBitmap
virtual std::shared_ptr<SalBitmap> CreateSalBitmap() override;
- std::shared_ptr<vcl::BackendCapabilities> GetBackendCapabilities() override;
-
// wait next event and dispatch
// must returned by UserEvent (SalFrame::PostEvent)
// and timer
@@ -169,8 +167,6 @@ public:
virtual bool IsMainThread() const override;
virtual void updateMainThread() override;
- virtual OpenGLContext* CreateOpenGLContext() override;
-
virtual OUString GetConnectionIdentifier() override;
virtual void AddToRecentDocumentList(const OUString& rFileUrl, const OUString& rMimeType, const OUString& rDocumentService) override;
diff --git a/vcl/inc/salinst.hxx b/vcl/inc/salinst.hxx
index f38d6f45e44c..1c61dc029cc6 100644
--- a/vcl/inc/salinst.hxx
+++ b/vcl/inc/salinst.hxx
@@ -26,8 +26,6 @@
#include <vcl/salgtype.hxx>
#include <vcl/vclenum.hxx>
-#include "backend/BackendCapabilities.hxx"
-
#include "displayconnectiondispatch.hxx"
#include <com/sun/star/uno/XComponentContext.hpp>
@@ -80,10 +78,17 @@ private:
const std::unique_ptr<comphelper::SolarMutex> m_pYieldMutex;
css::uno::Reference<css::uno::XInterface> m_clipboard;
+protected:
+ bool m_bSupportsBitmap32 = false;
+ bool m_bSupportsOpenGL = true;
+
public:
SalInstance(std::unique_ptr<comphelper::SolarMutex> pMutex);
virtual ~SalInstance();
+ bool supportsBitmap32() const { return m_bSupportsBitmap32; }
+ bool supportsOpenGL() const { return m_bSupportsOpenGL; }
+
//called directly after Application::Init
virtual void AfterAppInit() {}
virtual bool SVMainHook(int*) { return false; }
@@ -128,11 +133,6 @@ public:
virtual SalSystem* CreateSalSystem() = 0;
// SalBitmap
virtual std::shared_ptr<SalBitmap> CreateSalBitmap() = 0;
- // BackendCapabilities
- virtual std::shared_ptr<vcl::BackendCapabilities> GetBackendCapabilities()
- {
- return std::make_shared<vcl::BackendCapabilities>();
- }
// YieldMutex
comphelper::SolarMutex* GetYieldMutex();
@@ -158,7 +158,7 @@ public:
// may return NULL to disable session management, only used by X11 backend
virtual std::unique_ptr<SalSession> CreateSalSession();
- virtual OpenGLContext* CreateOpenGLContext() = 0;
+ virtual OpenGLContext* CreateOpenGLContext();
virtual weld::Builder* CreateBuilder(weld::Widget* pParent, const OUString& rUIRoot, const OUString& rUIFile);
virtual weld::Builder* CreateInterimBuilder(vcl::Window* pParent, const OUString& rUIRoot, const OUString& rUIFile,
diff --git a/vcl/inc/unx/salinst.h b/vcl/inc/unx/salinst.h
index 9378b243a58e..75a5cd6ae5ab 100644
--- a/vcl/inc/unx/salinst.h
+++ b/vcl/inc/unx/salinst.h
@@ -77,8 +77,6 @@ public:
virtual void AfterAppInit() override;
- std::shared_ptr<vcl::BackendCapabilities> GetBackendCapabilities() override;
-
// dtrans implementation
virtual css::uno::Reference< css::uno::XInterface >
CreateClipboard( const css::uno::Sequence< css::uno::Any >& i_rArguments ) override;
diff --git a/vcl/inc/win/salinst.h b/vcl/inc/win/salinst.h
index cd98a0231288..bde64dd1bb8d 100644
--- a/vcl/inc/win/salinst.h
+++ b/vcl/inc/win/salinst.h
@@ -73,7 +73,6 @@ public:
virtual void AddToRecentDocumentList(const OUString& rFileUrl, const OUString& rMimeType, const OUString& rDocumentService) override;
virtual OUString getOSVersion() override;
- virtual std::shared_ptr<vcl::BackendCapabilities> GetBackendCapabilities() override;
virtual void BeforeAbort(const OUString&, bool) override;
static int WorkaroundExceptionHandlingInUSER32Lib(int nExcept, LPEXCEPTION_POINTERS pExceptionInfo);
diff --git a/vcl/qa/cppunit/BitmapExTest.cxx b/vcl/qa/cppunit/BitmapExTest.cxx
index 6f235237c2f3..a0a6b3096f53 100644
--- a/vcl/qa/cppunit/BitmapExTest.cxx
+++ b/vcl/qa/cppunit/BitmapExTest.cxx
@@ -55,8 +55,7 @@ void BitmapExTest::testGetPixelColor32()
{
// Check backend capabilities and return from the test successfully
// if the backend doesn't support 32-bit bitmap
- auto pBackendCapabilities = ImplGetSVData()->mpDefInst->GetBackendCapabilities();
- if (!pBackendCapabilities->mbSupportsBitmap32)
+ if (!ImplGetSVData()->mpDefInst->supportsBitmap32())
return;
Bitmap aBitmap(Size(3, 3), vcl::PixelFormat::N32_BPP);
diff --git a/vcl/qa/cppunit/BitmapTest.cxx b/vcl/qa/cppunit/BitmapTest.cxx
index 4d033c9e37a3..edb9fe386de6 100644
--- a/vcl/qa/cppunit/BitmapTest.cxx
+++ b/vcl/qa/cppunit/BitmapTest.cxx
@@ -136,8 +136,7 @@ void BitmapTest::testCreation()
// Check backend capabilities and return from the test successfully
// if the backend doesn't support 32-bit bitmap
- auto pBackendCapabilities = ImplGetSVData()->mpDefInst->GetBackendCapabilities();
- if (pBackendCapabilities->mbSupportsBitmap32)
+ if (ImplGetSVData()->mpDefInst->supportsBitmap32())
{
Bitmap aBmp(Size(10, 10), vcl::PixelFormat::N32_BPP);
Size aSize = aBmp.GetSizePixel();
@@ -507,8 +506,7 @@ void BitmapTest::testBitmap32()
{
// Check backend capabilities and return from the test successfully
// if the backend doesn't support 32-bit bitmap
- auto pBackendCapabilities = ImplGetSVData()->mpDefInst->GetBackendCapabilities();
- if (!pBackendCapabilities->mbSupportsBitmap32)
+ if (!ImplGetSVData()->mpDefInst->supportsBitmap32())
return;
Bitmap aBitmap(Size(3, 3), vcl::PixelFormat::N32_BPP);
diff --git a/vcl/qa/cppunit/bitmaprender/BitmapRenderTest.cxx b/vcl/qa/cppunit/bitmaprender/BitmapRenderTest.cxx
index d4cb8ed1532b..26c1136cbe4d 100644
--- a/vcl/qa/cppunit/bitmaprender/BitmapRenderTest.cxx
+++ b/vcl/qa/cppunit/bitmaprender/BitmapRenderTest.cxx
@@ -144,8 +144,7 @@ void BitmapRenderTest::testDrawAlphaBitmapEx()
aPngReader.read(aBitmapEx);
// Check backend capabilities, if the backend support 32-bit bitmap
- auto pBackendCapabilities = ImplGetSVData()->mpDefInst->GetBackendCapabilities();
- if (pBackendCapabilities->mbSupportsBitmap32)
+ if (ImplGetSVData()->mpDefInst->supportsBitmap32())
{
CPPUNIT_ASSERT_EQUAL(vcl::PixelFormat::N32_BPP, aBitmapEx.GetBitmap().getPixelFormat());
}
diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx
index 9b4baab77446..a66e95158aa4 100644
--- a/vcl/source/app/salvtables.cxx
+++ b/vcl/source/app/salvtables.cxx
@@ -123,6 +123,12 @@ void SalInstance::AcquireYieldMutex(sal_uInt32 nCount) { m_pYieldMutex->acquire(
std::unique_ptr<SalSession> SalInstance::CreateSalSession() { return nullptr; }
+OpenGLContext* SalInstance::CreateOpenGLContext()
+{
+ assert(!m_bSupportsOpenGL);
+ std::abort();
+}
+
std::unique_ptr<SalMenu> SalInstance::CreateMenu(bool, Menu*)
{
// default: no native menus
diff --git a/vcl/source/bitmap/BitmapReadAccess.cxx b/vcl/source/bitmap/BitmapReadAccess.cxx
index cf531189913c..6e87debd1ec1 100644
--- a/vcl/source/bitmap/BitmapReadAccess.cxx
+++ b/vcl/source/bitmap/BitmapReadAccess.cxx
@@ -50,11 +50,7 @@ BitmapReadAccess::BitmapReadAccess(Bitmap& rBitmap, BitmapAccessMode nMode)
BitmapReadAccess::~BitmapReadAccess() {}
-bool Bitmap32IsPreMultipled()
-{
- auto pBackendCapabilities = ImplGetSVData()->mpDefInst->GetBackendCapabilities();
- return pBackendCapabilities->mbSupportsBitmap32;
-}
+bool Bitmap32IsPreMultipled() { return ImplGetSVData()->mpDefInst->supportsBitmap32(); }
FncGetPixel BitmapReadAccess::GetPixelFunction(ScanlineFormat nFormat)
{
diff --git a/vcl/source/filter/png/PngImageReader.cxx b/vcl/source/filter/png/PngImageReader.cxx
index 6631c238629e..56945e9d9c4b 100644
--- a/vcl/source/filter/png/PngImageReader.cxx
+++ b/vcl/source/filter/png/PngImageReader.cxx
@@ -97,8 +97,7 @@ bool reader(SvStream& rStream, BitmapEx& rBitmapEx,
BitmapScopedWriteAccess pWriteAccessInstance;
AlphaScopedWriteAccess pWriteAccessAlphaInstance;
std::vector<std::vector<png_byte>> aRows;
- auto pBackendCapabilities = ImplGetSVData()->mpDefInst->GetBackendCapabilities();
- const bool bSupportsBitmap32 = pBackendCapabilities->mbSupportsBitmap32;
+ const bool bSupportsBitmap32 = ImplGetSVData()->mpDefInst->supportsBitmap32();
const bool bOnlyCreateBitmap
= static_cast<bool>(nImportFlags & GraphicFilterImportFlags::OnlyCreateBitmap);
const bool bUseExistingBitmap
diff --git a/vcl/source/opengl/OpenGLHelper.cxx b/vcl/source/opengl/OpenGLHelper.cxx
index b2f6e4a874e7..2c90bc808bb4 100644
--- a/vcl/source/opengl/OpenGLHelper.cxx
+++ b/vcl/source/opengl/OpenGLHelper.cxx
@@ -38,6 +38,8 @@
#include <watchdog.hxx>
#include <vcl/skia/SkiaHelper.hxx>
#include <vcl/glxtestprocess.hxx>
+#include <salinst.hxx>
+#include <svdata.hxx>
#if USING_X11
#include <opengl/x11/X11DeviceInfo.hxx>
@@ -790,6 +792,8 @@ bool OpenGLHelper::supportsOpenGL()
{
if( getenv("SAL_DISABLEGL") != nullptr )
return false;
+ if (!ImplGetSVData()->mpDefInst->supportsOpenGL())
+ return false;
if( isDeviceDenylisted())
return false;
if( officecfg::Office::Common::VCL::DisableOpenGL::get())
diff --git a/vcl/unx/generic/app/salinst.cxx b/vcl/unx/generic/app/salinst.cxx
index 21d878cfa612..ad81916a5894 100644
--- a/vcl/unx/generic/app/salinst.cxx
+++ b/vcl/unx/generic/app/salinst.cxx
@@ -74,6 +74,10 @@ X11SalInstance::X11SalInstance(std::unique_ptr<SalYieldMutex> pMutex)
pSVData->maAppData.mxToolkitName = OUString("x11");
#if HAVE_FEATURE_SKIA
X11SkiaSalGraphicsImpl::prepareSkia();
+#if SKIA_USE_BITMAP32
+ if (SkiaHelper::isVCLSkiaEnabled())
+ m_bSupportsBitmap32 = true;
+#endif
#endif
}
@@ -234,16 +238,4 @@ std::unique_ptr<GenPspGraphics> X11SalInstance::CreatePrintGraphics()
return std::make_unique<GenPspGraphics>();
}
-std::shared_ptr<vcl::BackendCapabilities> X11SalInstance::GetBackendCapabilities()
-{
- auto pBackendCapabilities = SalInstance::GetBackendCapabilities();
-#if HAVE_FEATURE_SKIA
-#if SKIA_USE_BITMAP32
- if( SkiaHelper::isVCLSkiaEnabled())
- pBackendCapabilities->mbSupportsBitmap32 = true;
-#endif
-#endif
- return pBackendCapabilities;
-}
-
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/win/app/salinst.cxx b/vcl/win/app/salinst.cxx
index 50f48b076679..f2981bbd9d1c 100644
--- a/vcl/win/app/salinst.cxx
+++ b/vcl/win/app/salinst.cxx
@@ -386,6 +386,10 @@ WinSalInstance::WinSalInstance()
pSVData->maAppData.mxToolkitName = OUString("win");
#if HAVE_FEATURE_SKIA
WinSkiaSalGraphicsImpl::prepareSkia();
+#if SKIA_USE_BITMAP32
+ if (SkiaHelper::isVCLSkiaEnabled())
+ m_bSupportsBitmap32 = true;
+#endif
#endif
}
@@ -919,18 +923,6 @@ OUString WinSalInstance::getOSVersion()
return aVer.makeStringAndClear();
}
-std::shared_ptr<vcl::BackendCapabilities> WinSalInstance::GetBackendCapabilities()
-{
- auto pBackendCapabilities = SalInstance::GetBackendCapabilities();
-#if HAVE_FEATURE_SKIA
-#if SKIA_USE_BITMAP32
- if( SkiaHelper::isVCLSkiaEnabled())
- pBackendCapabilities->mbSupportsBitmap32 = true;
-#endif
-#endif
- return pBackendCapabilities;
-}
-
void WinSalInstance::BeforeAbort(const OUString&, bool)
{
ImplFreeSalGDI();