summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/vcl/opengl/OpenGLWrapper.hxx6
-rw-r--r--offapi/com/sun/star/awt/XToolkitExperimental.idl5
-rw-r--r--toolkit/Library_tk.mk5
-rw-r--r--toolkit/source/awt/vclxtoolkit.cxx12
-rw-r--r--vcl/Library_vcl.mk4
-rw-r--r--vcl/inc/OpenGLWrapper.hxx20
-rw-r--r--vcl/osx/OpenGLWrapper.cxx27
-rw-r--r--vcl/source/opengl/OpenGLContext.cxx23
8 files changed, 44 insertions, 58 deletions
diff --git a/include/vcl/opengl/OpenGLWrapper.hxx b/include/vcl/opengl/OpenGLWrapper.hxx
index e73aa08466be..3b7f6a7e91da 100644
--- a/include/vcl/opengl/OpenGLWrapper.hxx
+++ b/include/vcl/opengl/OpenGLWrapper.hxx
@@ -23,6 +23,12 @@ struct VCL_DLLPUBLIC OpenGLWrapper
* Returns true if VCL has OpenGL rendering enabled
*/
static bool isVCLOpenGLEnabled();
+
+
+ /**
+ * Returns the number of times OpenGL buffers have been swapped.
+ */
+ static sal_Int64 getBufferSwapCounter();
};
#endif // INCLUDED_VCL_OPENGL_OPENGLWRAPPER_HXX
diff --git a/offapi/com/sun/star/awt/XToolkitExperimental.idl b/offapi/com/sun/star/awt/XToolkitExperimental.idl
index 3b7305739331..7c5d36331958 100644
--- a/offapi/com/sun/star/awt/XToolkitExperimental.idl
+++ b/offapi/com/sun/star/awt/XToolkitExperimental.idl
@@ -22,6 +22,11 @@ interface XToolkitExperimental : XToolkit2
/** Process all pending idle events
*/
void processEventsToIdle();
+
+
+ /** Get the number of OpenGL buffer swaps.
+ */
+ hyper getOpenGLBufferSwapCounter();
};
}; }; }; };
diff --git a/toolkit/Library_tk.mk b/toolkit/Library_tk.mk
index e5aaad5083e4..1136e2e65896 100644
--- a/toolkit/Library_tk.mk
+++ b/toolkit/Library_tk.mk
@@ -21,7 +21,10 @@ $(eval $(call gb_Library_Library,tk))
$(eval $(call gb_Library_set_componentfile,tk,toolkit/util/tk))
-$(eval $(call gb_Library_use_external,tk,boost_headers))
+$(eval $(call gb_Library_use_externals,tk,\
+ boost_headers \
+ glew \
+))
$(eval $(call gb_Library_set_include,tk,\
$$(INCLUDE) \
diff --git a/toolkit/source/awt/vclxtoolkit.cxx b/toolkit/source/awt/vclxtoolkit.cxx
index 32aa182853f2..3b5548be561b 100644
--- a/toolkit/source/awt/vclxtoolkit.cxx
+++ b/toolkit/source/awt/vclxtoolkit.cxx
@@ -113,6 +113,7 @@
#include <vcl/window.hxx>
#include <vcl/wrkwin.hxx>
#include <vcl/throbber.hxx>
+#include <vcl/opengl/OpenGLWrapper.hxx>
#include "toolkit/awt/vclxspinbutton.hxx"
#include <tools/debug.hxx>
#include <comphelper/processfactory.hxx>
@@ -195,6 +196,9 @@ public:
virtual void SAL_CALL processEventsToIdle()
throw (css::uno::RuntimeException, std::exception) override;
+ virtual sal_Int64 SAL_CALL getOpenGLBufferSwapCounter()
+ throw (css::uno::RuntimeException, std::exception) override;
+
// css::awt::XToolkit
css::uno::Reference< css::awt::XWindowPeer > SAL_CALL getDesktopWindow( ) throw(css::uno::RuntimeException, std::exception) override;
css::awt::Rectangle SAL_CALL getWorkArea( ) throw(css::uno::RuntimeException, std::exception) override;
@@ -1906,6 +1910,8 @@ void SAL_CALL VCLXToolkit::reschedule()
Application::Reschedule(true);
}
+// css::awt::XToolkitExperimental
+
void SAL_CALL VCLXToolkit::processEventsToIdle()
throw (css::uno::RuntimeException, std::exception)
{
@@ -1913,6 +1919,12 @@ void SAL_CALL VCLXToolkit::processEventsToIdle()
Scheduler::ProcessEventsToIdle();
}
+sal_Int64 SAL_CALL VCLXToolkit::getOpenGLBufferSwapCounter()
+ throw (css::uno::RuntimeException, std::exception)
+{
+ return OpenGLWrapper::getBufferSwapCounter();
+}
+
// css:awt:XToolkitRobot
void SAL_CALL VCLXToolkit::keyPress( const css::awt::KeyEvent & aKeyEvent )
diff --git a/vcl/Library_vcl.mk b/vcl/Library_vcl.mk
index b0804a05bf55..a9fe72fd73a4 100644
--- a/vcl/Library_vcl.mk
+++ b/vcl/Library_vcl.mk
@@ -106,10 +106,6 @@ $(eval $(call gb_Library_add_cxxflags,vcl,\
$(gb_OBJCXXFLAGS) \
))
-$(eval $(call gb_Library_add_exception_objects,vcl,\
- vcl/osx/OpenGLWrapper \
-))
-
endif
ifeq ($(ENABLE_JAVA),TRUE)
diff --git a/vcl/inc/OpenGLWrapper.hxx b/vcl/inc/OpenGLWrapper.hxx
deleted file mode 100644
index 9134801ea98a..000000000000
--- a/vcl/inc/OpenGLWrapper.hxx
+++ /dev/null
@@ -1,20 +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/.
- */
-
-#include "AppKit/NSOpenGLView.h"
-#include "AppKit/NSOpenGL.h"
-
-namespace OpenGLWrapper
-{
- void swapBuffers(NSOpenGLView* pView);
- void makeCurrent(NSOpenGLView* pView);
- void resetCurrent();
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/osx/OpenGLWrapper.cxx b/vcl/osx/OpenGLWrapper.cxx
deleted file mode 100644
index fc008f41929d..000000000000
--- a/vcl/osx/OpenGLWrapper.cxx
+++ /dev/null
@@ -1,27 +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/.
- */
-
-#include "OpenGLWrapper.hxx"
-
-void OpenGLWrapper::swapBuffers(NSOpenGLView* pView)
-{
- [[pView openGLContext] flushBuffer];
-}
-
-void OpenGLWrapper::makeCurrent(NSOpenGLView* pView)
-{
- [[pView openGLContext] makeCurrentContext];
-}
-
-void OpenGLWrapper::resetCurrent()
-{
- [NSOpenGLContext clearCurrentContext];
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/source/opengl/OpenGLContext.cxx b/vcl/source/opengl/OpenGLContext.cxx
index 82d987deeaae..bdd6a4e7e08e 100644
--- a/vcl/source/opengl/OpenGLContext.cxx
+++ b/vcl/source/opengl/OpenGLContext.cxx
@@ -11,6 +11,7 @@
#include <vcl/opengl/OpenGLContext.hxx>
#include <vcl/opengl/OpenGLHelper.hxx>
+#include <vcl/opengl/OpenGLWrapper.hxx>
#include <vcl/syschild.hxx>
#include <vcl/sysdata.hxx>
@@ -22,7 +23,8 @@
#if defined(MACOSX)
#include <premac.h>
-#include "OpenGLWrapper.hxx"
+#include <AppKit/NSOpenGLView.h>
+#include <AppKit/NSOpenGL.h>
#include <postmac.h>
#endif
@@ -49,6 +51,8 @@ static std::vector<GLXContext> g_vShareList;
static std::vector<HGLRC> g_vShareList;
#endif
+static sal_Int64 nBufferSwapCounter = 0;
+
GLWindow::~GLWindow()
{
#if defined( UNX ) && !defined MACOSX && !defined IOS && !defined ANDROID && !defined(LIBO_HEADLESS)
@@ -991,7 +995,7 @@ bool OpenGLContext::ImplInit()
VCL_GL_INFO("OpenGLContext::ImplInit----start");
NSOpenGLView* pView = getOpenGLView();
- OpenGLWrapper::makeCurrent(pView);
+ [[pView openGLContext] makeCurrentContext];
bool bRet = InitGLEW();
InitGLEWDebugging();
@@ -1265,7 +1269,7 @@ void OpenGLContext::reset()
m_aGLWin.hRC = 0;
}
#elif defined( MACOSX )
- OpenGLWrapper::resetCurrent();
+ [NSOpenGLContext clearCurrentContext];
#elif defined( IOS ) || defined( ANDROID ) || defined(LIBO_HEADLESS)
// nothing
#elif defined( UNX )
@@ -1421,7 +1425,7 @@ void OpenGLContext::makeCurrent()
}
#elif defined( MACOSX )
NSOpenGLView* pView = getOpenGLView();
- OpenGLWrapper::makeCurrent(pView);
+ [[pView openGLContext] makeCurrentContext];
#elif defined( IOS ) || defined( ANDROID ) || defined(LIBO_HEADLESS)
// nothing
#elif defined( UNX )
@@ -1512,7 +1516,7 @@ void OpenGLContext::resetCurrent()
wglMakeCurrent(NULL, NULL);
#elif defined( MACOSX )
(void) this; // loplugin:staticmethods
- OpenGLWrapper::resetCurrent();
+ [NSOpenGLContext clearCurrentContext];
#elif defined( IOS ) || defined( ANDROID ) || defined(LIBO_HEADLESS)
// nothing
#elif defined( UNX )
@@ -1529,13 +1533,15 @@ void OpenGLContext::swapBuffers()
SwapBuffers(m_aGLWin.hDC);
#elif defined( MACOSX )
NSOpenGLView* pView = getOpenGLView();
- OpenGLWrapper::swapBuffers(pView);
+ [[pView openGLContext] flushBuffer];
#elif defined( IOS ) || defined( ANDROID ) || defined(LIBO_HEADLESS)
// nothing
#elif defined( UNX )
glXSwapBuffers(m_aGLWin.dpy, m_aGLWin.win);
#endif
+ nBufferSwapCounter++;
+
static bool bSleep = getenv("SAL_GL_SLEEP_ON_SWAP");
if (bSleep)
{
@@ -1545,6 +1551,11 @@ void OpenGLContext::swapBuffers()
}
}
+sal_Int64 OpenGLWrapper::getBufferSwapCounter()
+{
+ return nBufferSwapCounter;
+}
+
void OpenGLContext::sync()
{
OpenGLZone aZone;