[Libreoffice-commits] core.git: Branch 'feature/opengl-vcl2' - 2 commits - vcl/inc vcl/opengl vcl/source vcl/unx

Jan Holesovsky kendy at collabora.com
Tue Nov 18 00:41:41 PST 2014


 vcl/inc/opengl/contextprovider.hxx |   28 ----------------------------
 vcl/inc/opengl/salbmp.hxx          |    2 +-
 vcl/inc/salgdi.hxx                 |    4 ++++
 vcl/inc/unx/salgdi.h               |    2 +-
 vcl/opengl/salbmp.cxx              |   23 ++++++-----------------
 vcl/opengl/texture.cxx             |    8 --------
 vcl/source/gdi/salgdilayout.cxx    |   13 ++++++++++++-
 vcl/unx/generic/gdi/salgdi.cxx     |    9 ---------
 8 files changed, 24 insertions(+), 65 deletions(-)

New commits:
commit a33aaf1c3f43725594448c76b072c3100a7d8dbf
Author: Jan Holesovsky <kendy at collabora.com>
Date:   Tue Nov 18 09:17:01 2014 +0100

    Revert "vcl: Fix crash when requesting coordonnates for empty texture"
    
    Not necessary any more.
    
    This reverts commit 2195500d40055a182c573da074e61ddf0a2b4d5a.

diff --git a/vcl/opengl/texture.cxx b/vcl/opengl/texture.cxx
index 5afb611..938de54 100644
--- a/vcl/opengl/texture.cxx
+++ b/vcl/opengl/texture.cxx
@@ -173,14 +173,6 @@ int OpenGLTexture::GetHeight() const
 void OpenGLTexture::GetCoord( GLfloat* pCoord, const SalTwoRect& rPosAry, bool bInverted ) const
 {
     SAL_INFO( "vcl.opengl", "Getting coord " << Id() << " [" << maRect.Left() << "," << maRect.Top() << "] " << GetWidth() << "x" << GetHeight() );
-
-    if( mpImpl == NULL )
-    {
-        pCoord[0] = pCoord[1] = pCoord[2] = pCoord[3] = 0.0f;
-        pCoord[4] = pCoord[5] = pCoord[6] = pCoord[7] = 0.0f;
-        return;
-    }
-
     pCoord[0] = pCoord[2] = (maRect.Left() + rPosAry.mnSrcX) / (double) mpImpl->mnWidth;
     pCoord[4] = pCoord[6] = (maRect.Left() + rPosAry.mnSrcX + rPosAry.mnSrcWidth) / (double) mpImpl->mnWidth;
 
commit d09f827b1d33ca001ebfa55bdecca1b3437e53ec
Author: Jan Holesovsky <kendy at collabora.com>
Date:   Tue Nov 18 09:07:31 2014 +0100

    windows opengl: Provide the context to textures everywhere where we have it.
    
    Change-Id: Ib820326fdc752d0893840bad3eb7f1369469f796

diff --git a/vcl/inc/opengl/contextprovider.hxx b/vcl/inc/opengl/contextprovider.hxx
deleted file mode 100644
index 47eb98c..0000000
--- a/vcl/inc/opengl/contextprovider.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_OPENGL_CONTEXTPROVIDER_HXX
-#define INCLUDED_VCL_INC_OPENGL_CONTEXTPROVIDER_HXX
-
-#include "vclpluginapi.h"
-
-#include <vcl/opengl/OpenGLContext.hxx>
-
-class VCLPLUG_GEN_PUBLIC OpenGLContextProvider
-{
-public:
-    virtual ~OpenGLContextProvider() {};
-
-    /* Get the OpenGL context provided by this instance */
-    virtual OpenGLContext* GetOpenGLContext() const = 0;
-};
-
-#endif // INCLUDED_VCL_INC_OPENGL_CONTEXTPROVIDER_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/inc/opengl/salbmp.hxx b/vcl/inc/opengl/salbmp.hxx
index 98fc2fe..c862672 100644
--- a/vcl/inc/opengl/salbmp.hxx
+++ b/vcl/inc/opengl/salbmp.hxx
@@ -52,7 +52,7 @@ private:
     int                                 mnBufHeight;
     std::deque< OpenGLSalBitmapOp* >    maPendingOps;
 
-    bool makeCurrent();
+    void makeCurrent();
 
 public:
     OpenGLSalBitmap();
diff --git a/vcl/inc/salgdi.hxx b/vcl/inc/salgdi.hxx
index 4a567f5..95920a0 100644
--- a/vcl/inc/salgdi.hxx
+++ b/vcl/inc/salgdi.hxx
@@ -44,6 +44,7 @@ class SalLayout;
 class ImplLayoutArgs;
 class Rectangle;
 class FontSubsetInfo;
+class OpenGLContext;
 class OutputDevice;
 class ServerFontLayout;
 struct SystemGraphicsData;
@@ -85,6 +86,9 @@ public:
 
     virtual SalGraphicsImpl*    GetImpl() const = 0;
 
+    /// Check that our mpImpl is OpenGL and return the context, otherwise NULL.
+    virtual OpenGLContext*      GetOpenGLContext() const;
+
     void                        setAntiAliasB2DDraw(bool bNew) { m_bAntiAliasB2DDraw = bNew; }
     bool                        getAntiAliasB2DDraw() const { return m_bAntiAliasB2DDraw; }
 
diff --git a/vcl/inc/unx/salgdi.h b/vcl/inc/unx/salgdi.h
index 6b0e2be..6bf4c04 100644
--- a/vcl/inc/unx/salgdi.h
+++ b/vcl/inc/unx/salgdi.h
@@ -62,7 +62,7 @@ namespace basegfx {
     class B2DTrapezoid;
 }
 
-class VCLPLUG_GEN_PUBLIC X11SalGraphics : public SalGraphics, public OpenGLContextProvider
+class VCLPLUG_GEN_PUBLIC X11SalGraphics : public SalGraphics
 {
     friend class ServerFontLayout;
     friend class X11SalGraphicsImpl;
diff --git a/vcl/opengl/salbmp.cxx b/vcl/opengl/salbmp.cxx
index 78bcf07..c664d7e 100644
--- a/vcl/opengl/salbmp.cxx
+++ b/vcl/opengl/salbmp.cxx
@@ -27,7 +27,6 @@
 #include "svdata.hxx"
 #include "salgdi.hxx"
 
-#include "opengl/contextprovider.hxx"
 #include "opengl/salbmp.hxx"
 
 static bool isValidBitCount( sal_uInt16 nBitCount )
@@ -407,8 +406,7 @@ GLuint OpenGLSalBitmap::CreateTexture()
         }
     }
 
-    if( !makeCurrent() )
-        return 0;
+    makeCurrent();
 
     maTexture = OpenGLTexture (mnBufWidth, mnBufHeight, nFormat, nType, pData );
     SAL_INFO( "vcl.opengl", "Created texture " << maTexture.Id() );
@@ -470,21 +468,13 @@ sal_uInt16 OpenGLSalBitmap::GetBitCount() const
     return mnBits;
 }
 
-bool OpenGLSalBitmap::makeCurrent()
+void OpenGLSalBitmap::makeCurrent()
 {
     if (!mpContext || !mpContext->isInitialized())
-    {
-        OpenGLContextProvider *pProvider;
-        pProvider = dynamic_cast< OpenGLContextProvider* >( ImplGetDefaultWindow()->GetGraphics() );
-        if( pProvider == NULL )
-        {
-            SAL_WARN( "vcl.opengl", "Couldn't get default OpenGL context provider" );
-            return false;
-        }
-        mpContext = pProvider->GetOpenGLContext();
-    }
+        mpContext = ImplGetDefaultWindow()->GetGraphics()->GetOpenGLContext();
+
+    assert(mpContext && "Couldn't get default OpenGL context provider");
     mpContext->makeCurrent();
-    return true;
 }
 
 BitmapBuffer* OpenGLSalBitmap::AcquireBuffer( bool /*bReadOnly*/ )
@@ -499,8 +489,7 @@ BitmapBuffer* OpenGLSalBitmap::AcquireBuffer( bool /*bReadOnly*/ )
 
     if( !maPendingOps.empty() )
     {
-        if (!makeCurrent())
-            return NULL;
+        makeCurrent();
 
         SAL_INFO( "vcl.opengl", "** Creating texture and reading it back immediatly" );
         if( !CreateTexture() || !AllocateUserData() || !ReadTexture() )
diff --git a/vcl/source/gdi/salgdilayout.cxx b/vcl/source/gdi/salgdilayout.cxx
index 599500b..da02043 100644
--- a/vcl/source/gdi/salgdilayout.cxx
+++ b/vcl/source/gdi/salgdilayout.cxx
@@ -27,11 +27,13 @@
 #include <vcl/metaact.hxx>
 #include <vcl/gdimtf.hxx>
 #include <vcl/print.hxx>
+#include <vcl/opengl/OpenGLContext.hxx>
 #include <vcl/outdev.hxx>
 #include <vcl/unowrap.hxx>
 #include <vcl/settings.hxx>
 
 #include <window.h>
+#include <openglgdiimpl.hxx>
 #include <outdev.h>
 #include <sallayout.hxx>
 #include <salgdi.hxx>
@@ -43,7 +45,7 @@
 #include <boost/scoped_array.hpp>
 #include <boost/scoped_ptr.hpp>
 
-#include "basegfx/polygon/b2dpolygon.hxx"
+#include <basegfx/polygon/b2dpolygon.hxx>
 
 // The only common SalFrame method
 
@@ -75,6 +77,15 @@ SalGraphics::~SalGraphics()
 {
 }
 
+OpenGLContext* SalGraphics::GetOpenGLContext() const
+{
+    OpenGLSalGraphicsImpl *pImpl = dynamic_cast<OpenGLSalGraphicsImpl*>(GetImpl());
+    if (pImpl)
+        return &pImpl->GetOpenGLContext();
+
+    return NULL;
+}
+
 bool SalGraphics::drawTransformedBitmap(
     const basegfx::B2DPoint& /* rNull */,
     const basegfx::B2DPoint& /* rX */,
diff --git a/vcl/unx/generic/gdi/salgdi.cxx b/vcl/unx/generic/gdi/salgdi.cxx
index fc2ca50..34df86d 100644
--- a/vcl/unx/generic/gdi/salgdi.cxx
+++ b/vcl/unx/generic/gdi/salgdi.cxx
@@ -172,15 +172,6 @@ void X11SalGraphics::DeInit()
     SetDrawable( None, m_nXScreen );
 }
 
-OpenGLContext* X11SalGraphics::GetOpenGLContext() const
-{
-    OpenGLSalGraphicsImpl *pImpl;
-    pImpl = dynamic_cast<OpenGLSalGraphicsImpl*>(mpImpl.get());
-    if( pImpl )
-        return &pImpl->GetOpenGLContext();
-    return NULL;
-}
-
 void X11SalGraphics::SetClipRegion( GC pGC, Region pXReg ) const
 {
     Display *pDisplay = GetXDisplay();


More information about the Libreoffice-commits mailing list