[Libreoffice-commits] core.git: Branch 'feature/chart-opengl2' - 6 commits - chart2/source external/glew

Markus Mohrhard markus.mohrhard at collabora.co.uk
Sat Jan 18 18:55:47 PST 2014


 chart2/source/view/inc/DummyXShape.hxx   |   12 -
 chart2/source/view/main/DummyXShape.cxx  |  293 +++++++++++--------------------
 chart2/source/view/main/OpenGLRender.cxx |    6 
 chart2/source/view/main/OpenGLRender.hxx |   45 ++--
 external/glew/ExternalProject_glew.mk    |    2 
 5 files changed, 142 insertions(+), 216 deletions(-)

New commits:
commit db5ae380a060b2f0b689dd58a3e13e33a9b209fa
Author: Markus Mohrhard <markus.mohrhard at collabora.co.uk>
Date:   Sun Jan 19 03:50:48 2014 +0100

    fix windows
    
    Change-Id: I6ca5967fd84851bb2ee5af1325b70a6a5e160644

diff --git a/chart2/source/view/main/DummyXShape.cxx b/chart2/source/view/main/DummyXShape.cxx
index efba1b4..103c58d 100644
--- a/chart2/source/view/main/DummyXShape.cxx
+++ b/chart2/source/view/main/DummyXShape.cxx
@@ -840,6 +840,8 @@ bool DummyChart::initWindow()
         pWindow->EnablePaint(sal_False);
         GLWin.hWnd = sysData->hWnd;
     }
+
+    return true;
 }
 
 #elif defined( UNX )
commit 63ffed18da0d9e8cf31843a88f91aade291152f5
Author: Markus Mohrhard <markus.mohrhard at collabora.co.uk>
Date:   Sun Jan 19 03:45:13 2014 +0100

    extract ugly function pointer initialization
    
    Change-Id: I4bce735da5f4d9f9b3aaae92ec0cce6725f2016d

diff --git a/chart2/source/view/main/DummyXShape.cxx b/chart2/source/view/main/DummyXShape.cxx
index fccc6a1..efba1b4 100644
--- a/chart2/source/view/main/DummyXShape.cxx
+++ b/chart2/source/view/main/DummyXShape.cxx
@@ -844,6 +844,20 @@ bool DummyChart::initWindow()
 
 #elif defined( UNX )
 
+namespace {
+
+// we need them before glew can initialize them
+// glew needs an OpenGL context so we need to get the address manually
+void initOpenGLFunctionPointers()
+{
+    glXChooseFBConfig = (GLXFBConfig*(*)(Display *dpy, int screen, const int *attrib_list, int *nelements))glXGetProcAddressARB((GLubyte*)"glXChooseFBConfig");
+    glXGetVisualFromFBConfig = (XVisualInfo*(*)(Display *dpy, GLXFBConfig config))glXGetProcAddressARB((GLubyte*)"glXGetVisualFromFBConfig");    // try to find a visual for the current set of attributes
+    glXGetFBConfigAttrib = (int(*)(Display *dpy, GLXFBConfig config, int attribute, int* value))glXGetProcAddressARB((GLubyte*)"glXGetFBConfigAttrib");
+
+}
+
+}
+
 bool DummyChart::initWindow()
 {
     const SystemEnvData* sysData(mpWindow->GetSystemData());
@@ -876,11 +890,7 @@ bool DummyChart::initWindow()
     const SystemEnvData* pChildSysData = NULL;
     pWindow.reset();
 
-    glXChooseFBConfig = (GLXFBConfig*(*)(Display *dpy, int screen, const int *attrib_list, int *nelements))glXGetProcAddressARB((GLubyte*)"glXChooseFBConfig");
-    glXGetVisualFromFBConfig = (XVisualInfo*(*)(Display *dpy, GLXFBConfig config))glXGetProcAddressARB((GLubyte*)"glXGetVisualFromFBConfig");    // try to find a visual for the current set of attributes
-    glXGetFBConfigAttrib = (int(*)(Display *dpy, GLXFBConfig config, int attribute, int* value))glXGetProcAddressARB((GLubyte*)"glXGetFBConfigAttrib");
-
-
+    initOpenGLFunctionPointers();
 
     int fbCount = 0;
     GLXFBConfig* pFBC = glXChooseFBConfig( GLWin.dpy,
commit a8e8443d84f54d556f4a88f610787598e7e78ede
Author: Markus Mohrhard <markus.mohrhard at collabora.co.uk>
Date:   Sun Jan 19 03:41:34 2014 +0100

    make multisampling available on linux if available
    
    This also greatly reduces the complexity of the OpenGL initialization on
    Linux. We now require a RGBA framebuffer with 8 bits per channeland 24
    bit depth.
    
    Change-Id: I12d4bd6c15cbf95c6211c7af6a81ffbb228f05be

diff --git a/chart2/source/view/main/DummyXShape.cxx b/chart2/source/view/main/DummyXShape.cxx
index c281fed..fccc6a1 100644
--- a/chart2/source/view/main/DummyXShape.cxx
+++ b/chart2/source/view/main/DummyXShape.cxx
@@ -862,148 +862,73 @@ bool DummyChart::initWindow()
 
     GLWin.screen = XScreenNumberOfScreen( xattr.screen );
 
-    XVisualInfo* vi( NULL );
-    XVisualInfo* visinfo;
-    XVisualInfo* firstVisual( NULL );
-    static int attrList3[] =
+    static int visual_attribs[] =
     {
-        GLX_RGBA,//only TrueColor or DirectColor
-        //single buffered
-        GLX_RED_SIZE,8,//use the maximum red bits, with a minimum of 4 bits
-        GLX_GREEN_SIZE,8,//use the maximum green bits, with a minimum of 4 bits
-        GLX_BLUE_SIZE,8,//use the maximum blue bits, with a minimum of 4 bits
-        GLX_DEPTH_SIZE,0,//no depth buffer
+        GLX_RED_SIZE,           8,
+        GLX_GREEN_SIZE,         8,
+        GLX_BLUE_SIZE,          8,
+        GLX_ALPHA_SIZE,         8,
+        GLX_DEPTH_SIZE,         24,
+        GLX_X_VISUAL_TYPE,      GLX_TRUE_COLOR,
         None
     };
-    static int attrList2[] =
-    {
-        GLX_RGBA,//only TrueColor or DirectColor
-        /// single buffered
-        GLX_RED_SIZE,8,/// use the maximum red bits, with a minimum of 4 bits
-        GLX_GREEN_SIZE,8,/// use the maximum green bits, with a minimum of 4 bits
-        GLX_BLUE_SIZE,8,/// use the maximum blue bits, with a minimum of 4 bits
-        GLX_DEPTH_SIZE,1,/// use the maximum depth bits, making sure there is a depth buffer
-        None
-    };
-    static int attrList1[] =
-    {
-        GLX_RGBA,//only TrueColor or DirectColor
-        GLX_DOUBLEBUFFER,/// only double buffer
-        GLX_RED_SIZE,8,/// use the maximum red bits, with a minimum of 4 bits
-        GLX_GREEN_SIZE,8,/// use the maximum green bits, with a minimum of 4 bits
-        GLX_BLUE_SIZE,8,/// use the maximum blue bits, with a minimum of 4 bits
-        GLX_DEPTH_SIZE,0,/// no depth buffer
-        None
-    };
-    static int attrList0[] =
-    {
-        GLX_RGBA,//only TrueColor or DirectColor
-        GLX_DOUBLEBUFFER,/// only double buffer
-        GLX_RED_SIZE,8,/// use the maximum red bits, with a minimum of 4 bits
-        GLX_GREEN_SIZE,8,/// use the maximum green bits, with a minimum of 4 bits
-        GLX_BLUE_SIZE,8,/// use the maximum blue bits, with a minimum of 4 bits
-        GLX_DEPTH_SIZE,1,/// use the maximum depth bits, making sure there is a depth buffer
-        GLX_SAMPLE_BUFFERS, 1,
-        GLX_SAMPLES, 4,
-        None
-    };
-    static int* attrTable[] =
-    {
-        attrList0,
-        attrList1,
-        attrList2,
-        attrList3,
-        NULL
-    };
 
-    int** pAttributeTable = attrTable;
     const SystemEnvData* pChildSysData = NULL;
     pWindow.reset();
 
-    GLXFBConfig* fbconfigs = NULL;
-    int nfbconfigs, value, i = 0;
+    glXChooseFBConfig = (GLXFBConfig*(*)(Display *dpy, int screen, const int *attrib_list, int *nelements))glXGetProcAddressARB((GLubyte*)"glXChooseFBConfig");
+    glXGetVisualFromFBConfig = (XVisualInfo*(*)(Display *dpy, GLXFBConfig config))glXGetProcAddressARB((GLubyte*)"glXGetVisualFromFBConfig");    // try to find a visual for the current set of attributes
+    glXGetFBConfigAttrib = (int(*)(Display *dpy, GLXFBConfig config, int attribute, int* value))glXGetProcAddressARB((GLubyte*)"glXGetFBConfigAttrib");
+
+
 
-    while( *pAttributeTable )
+    int fbCount = 0;
+    GLXFBConfig* pFBC = glXChooseFBConfig( GLWin.dpy,
+            GLWin.screen,
+            visual_attribs, &fbCount );
+
+    if(!pFBC)
     {
-        // try to find a visual for the current set of attributes
-        vi = glXChooseVisual( GLWin.dpy,
-                GLWin.screen,
-                *pAttributeTable );
-        if( vi )
+        SAL_WARN("chart2.opengl", "no suitable fb format found");
+        return false;
+    }
+
+    int best_fbc = -1, best_num_samp = -1;
+    for(int i = 0; i < fbCount; ++i)
+    {
+        XVisualInfo* pVi = glXGetVisualFromFBConfig( GLWin.dpy, pFBC[i] );
+        if(pVi)
         {
-            if( GLXEW_EXT_texture_from_pixmap )
-            {
-                if( !firstVisual )
-                    firstVisual = vi;
-                OSL_TRACE("trying VisualID %08X", vi->visualid);
-                fbconfigs = glXGetFBConfigs (GLWin.dpy, GLWin.screen, &nfbconfigs);
-
-                for ( ; i < nfbconfigs; i++)
-                {
-                    visinfo = glXGetVisualFromFBConfig (GLWin.dpy, fbconfigs[i]);
-                    if( !visinfo || visinfo->visualid != vi->visualid )
-                        continue;
-
-                    glXGetFBConfigAttrib (GLWin.dpy, fbconfigs[i], GLX_DRAWABLE_TYPE, &value);
-                    if (!(value & GLX_PIXMAP_BIT))
-                        continue;
-
-                    glXGetFBConfigAttrib (GLWin.dpy, fbconfigs[i],
-                            GLX_BIND_TO_TEXTURE_TARGETS_EXT,
-                            &value);
-                    if (!(value & GLX_TEXTURE_2D_BIT_EXT))
-                        continue;
-
-                    glXGetFBConfigAttrib (GLWin.dpy, fbconfigs[i],
-                            GLX_BIND_TO_TEXTURE_RGB_EXT,
-                            &value);
-                    if (value == sal_False)
-                        continue;
-
-                    glXGetFBConfigAttrib (GLWin.dpy, fbconfigs[i],
-                            GLX_BIND_TO_MIPMAP_TEXTURE_EXT,
-                            &value);
-                    if (value == sal_False)
-                        continue;
-
-                    // TODO: handle non Y inverted cases
-                    break;
-                }
-
-                if( i != nfbconfigs || ( firstVisual && pAttributeTable[1] == NULL ) ) {
-                    if( i != nfbconfigs ) {
-                        vi = glXGetVisualFromFBConfig( GLWin.dpy, fbconfigs[i] );
-                        // TODO:moggi
-                        // mbHasTFPVisual = true;
-                        OSL_TRACE("found visual suitable for texture_from_pixmap");
-                    } else {
-                        vi = firstVisual;
-                        // TODO:moggi
-                        // mbHasTFPVisual = false;
-                        OSL_TRACE("did not find visual suitable for texture_from_pixmap, using %08X", vi->visualid);
-                    }
-
-                }
+            // pick the one with the most samples per pixel
+            int nSampleBuf = 0;
+            int nSamples = 0;
+            glXGetFBConfigAttrib( GLWin.dpy, pFBC[i], GLX_SAMPLE_BUFFERS, &nSampleBuf );
+            glXGetFBConfigAttrib( GLWin.dpy, pFBC[i], GLX_SAMPLES       , &nSamples  );
 
+            if ( best_fbc < 0 || (nSampleBuf && ( nSamples > best_num_samp )) )
+            {
+                best_fbc = i;
+                best_num_samp = nSamples;
             }
-            SystemWindowData winData;
-            winData.nSize = sizeof(winData);
-            OSL_TRACE("using VisualID %08X", vi->visualid);
-            winData.pVisual = (void*)(vi->visual);
-            pWindow.reset(new SystemChildWindow(mpWindow.get(), 0, &winData, sal_False));
-            pChildSysData = pWindow->GetSystemData();
-
-            if( pChildSysData ) {
-                break;
-            } else {
-                pWindow.reset();
-            }
-
         }
+        XFree( pVi );
+    }
 
-        ++pAttributeTable;
+    XVisualInfo* vi = glXGetVisualFromFBConfig( GLWin.dpy, pFBC[best_fbc] );
+    if( vi )
+    {
+        SystemWindowData winData;
+        winData.nSize = sizeof(winData);
+        OSL_TRACE("using VisualID %08X", vi->visualid);
+        winData.pVisual = (void*)(vi->visual);
+        pWindow.reset(new SystemChildWindow(mpWindow.get(), 0, &winData, sal_False));
+        pChildSysData = pWindow->GetSystemData();
+
+        if( !pChildSysData )
+            return false;
     }
 
+
     if( pWindow )
     {
         pWindow->SetMouseTransparent( sal_True );
@@ -1014,11 +939,6 @@ bool DummyChart::initWindow()
 
         GLWin.dpy = reinterpret_cast<Display*>(pChildSysData->pDisplay);
         GLWin.win = pChildSysData->aWindow;
-        //TODO: moggi
-        /*
-           if( mbHasTFPVisual )
-           GLWin.fbc = fbconfigs[i];
-           */
         GLWin.vi = vi;
         GLWin.GLXExtensions = glXQueryExtensionsString( GLWin.dpy, GLWin.screen );
         OSL_TRACE("available GLX extensions: %s", GLWin.GLXExtensions);
@@ -1116,10 +1036,6 @@ bool DummyChart::initOpengl()
     GLWin.GLExtensions = glGetString( GL_EXTENSIONS );
     OSL_TRACE("available GL  extensions: %s", GLWin.GLExtensions);
 
-    // TODO: moggi
-    // mbTextureFromPixmap = GLWin.HasGLXExtension( "GLX_EXT_texture_from_pixmap" );
-    // mbGenerateMipmap = GLWin.HasGLExtension( "GL_SGIS_generate_mipmap" );
-
     if( GLWin.HasGLXExtension("GLX_SGI_swap_control" ) )
     {
         // enable vsync
commit 1f330c222d27bb813a7146780d69e10b13a5e21c
Author: Markus Mohrhard <markus.mohrhard at collabora.co.uk>
Date:   Sun Jan 19 03:41:12 2014 +0100

    create symbols for glew in the debug case
    
    Change-Id: Ia40d4477344f9fc0f9942a9d942b97a416ff11d7

diff --git a/external/glew/ExternalProject_glew.mk b/external/glew/ExternalProject_glew.mk
index f419ef5..73b32a2 100644
--- a/external/glew/ExternalProject_glew.mk
+++ b/external/glew/ExternalProject_glew.mk
@@ -24,7 +24,7 @@ else
 
 $(call gb_ExternalProject_get_state_target,glew,build) :
 	$(call gb_ExternalProject_run,glew,\
-		$(MAKE) \
+		$(if $(filter TRUE,$(ENABLE_DEBUG)),STRIP=) $(MAKE) $(if $(filter TRUE,$(ENABLE_DEBUG)),debug) \
 	)
 
 endif
commit 500b70c8d62c9f0123413c08664e4d19a36af3df
Author: Markus Mohrhard <markus.mohrhard at collabora.co.uk>
Date:   Wed Jan 15 23:44:31 2014 +0100

    split the windows and linux intialization bits
    
    This makes it much esier now to simplify the Linux selection logic.
    
    Change-Id: I7db0daf81b1c9047d4ef95527c7b51c09e6ab80a

diff --git a/chart2/source/view/inc/DummyXShape.hxx b/chart2/source/view/inc/DummyXShape.hxx
index 42eec30..f915650 100644
--- a/chart2/source/view/inc/DummyXShape.hxx
+++ b/chart2/source/view/inc/DummyXShape.hxx
@@ -12,6 +12,8 @@
 
 #include <cppuhelper/implbase6.hxx>
 
+#include "OpenGLRender.hxx"
+
 #include <com/sun/star/drawing/XShape.hpp>
 #include <com/sun/star/drawing/XShapes.hpp>
 #include <com/sun/star/beans/XMultiPropertySet.hpp>
@@ -83,19 +85,9 @@
 #elif defined( UNX )
     #include <GL/glu.h>
     #include <GL/glext.h>
-
-    namespace unx
-    {
-        #include <X11/keysym.h>
-        #include <X11/X.h>
-        #define GLX_GLXEXT_PROTOTYPES 1
-        #include <GL/glx.h>
-        #include <GL/glxext.h>
-    }
 #endif
 //[mod] by gaowei
 
-#include "OpenGLRender.hxx"
 
 //[mod] by gaowei end
 
diff --git a/chart2/source/view/main/DummyXShape.cxx b/chart2/source/view/main/DummyXShape.cxx
index 39a1306..c281fed 100644
--- a/chart2/source/view/main/DummyXShape.cxx
+++ b/chart2/source/view/main/DummyXShape.cxx
@@ -6,7 +6,8 @@
  * 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 <GL/glew.h>
+#include "DummyXShape.hxx"
+
 #include <stdio.h>
 #include <string>
 #include <vector>
@@ -16,7 +17,6 @@
 #include <stdlib.h>
 #include <string.h>
 
-#include "DummyXShape.hxx"
 #include "CommonConverters.hxx"
 #include <rtl/ustring.hxx>
 
@@ -819,39 +819,59 @@ void DummyXShapes::render()
     }
 }
 
+#if defined( WNT )
+
 bool DummyChart::initWindow()
 {
     const SystemEnvData* sysData(mpWindow->GetSystemData());
-#if defined( WNT )
-
     GLWin.hWnd = sysData->hWnd;
+    SystemWindowData winData;
+    winData.nSize = sizeof(winData);
+    pWindow.reset(new SystemChildWindow(mpWindow.get(), 0, &winData, sal_False));
+
+
+    if( pWindow )
+    {
+        pWindow->SetMouseTransparent( sal_True );
+        pWindow->SetParentClipMode( PARENTCLIPMODE_NOCLIP );
+        pWindow->EnableEraseBackground( sal_False );
+        pWindow->SetControlForeground();
+        pWindow->SetControlBackground();
+        pWindow->EnablePaint(sal_False);
+        GLWin.hWnd = sysData->hWnd;
+    }
+}
+
 #elif defined( UNX )
-    GLWin.dpy = reinterpret_cast<unx::Display*>(sysData->pDisplay);
 
-    if( unx::glXQueryExtension( GLWin.dpy, NULL, NULL ) == false )
+bool DummyChart::initWindow()
+{
+    const SystemEnvData* sysData(mpWindow->GetSystemData());
+
+    GLWin.dpy = reinterpret_cast<Display*>(sysData->pDisplay);
+
+    if( glXQueryExtension( GLWin.dpy, NULL, NULL ) == false )
         return false;
 
     GLWin.win = sysData->aWindow;
 
     OSL_TRACE("parent window: %d", GLWin.win);
 
-    unx::XWindowAttributes xattr;
-    unx::XGetWindowAttributes( GLWin.dpy, GLWin.win, &xattr );
+    XWindowAttributes xattr;
+    XGetWindowAttributes( GLWin.dpy, GLWin.win, &xattr );
 
     GLWin.screen = XScreenNumberOfScreen( xattr.screen );
 
-    unx::XVisualInfo* vi( NULL );
-#if defined( GLX_EXT_texture_from_pixmap )
-    unx::XVisualInfo* visinfo;
-    unx::XVisualInfo* firstVisual( NULL );
-#endif
+    XVisualInfo* vi( NULL );
+    XVisualInfo* visinfo;
+    XVisualInfo* firstVisual( NULL );
     static int attrList3[] =
     {
         GLX_RGBA,//only TrueColor or DirectColor
         //single buffered
-        GLX_RED_SIZE,4,//use the maximum red bits, with a minimum of 4 bits
-        GLX_GREEN_SIZE,4,//use the maximum green bits, with a minimum of 4 bits
-        GLX_BLUE_SIZE,4,//use the maximum blue bits, with a minimum of 4 bits
+        GLX_RED_SIZE,8,//use the maximum red bits, with a minimum of 4 bits
+        GLX_GREEN_SIZE,8,//use the maximum green bits, with a minimum of 4 bits
+        GLX_BLUE_SIZE,8,//use the maximum blue bits, with a minimum of 4 bits
         GLX_DEPTH_SIZE,0,//no depth buffer
         None
     };
@@ -859,9 +879,9 @@ bool DummyChart::initWindow()
     {
         GLX_RGBA,//only TrueColor or DirectColor
         /// single buffered
-        GLX_RED_SIZE,4,/// use the maximum red bits, with a minimum of 4 bits
-        GLX_GREEN_SIZE,4,/// use the maximum green bits, with a minimum of 4 bits
-        GLX_BLUE_SIZE,4,/// use the maximum blue bits, with a minimum of 4 bits
+        GLX_RED_SIZE,8,/// use the maximum red bits, with a minimum of 4 bits
+        GLX_GREEN_SIZE,8,/// use the maximum green bits, with a minimum of 4 bits
+        GLX_BLUE_SIZE,8,/// use the maximum blue bits, with a minimum of 4 bits
         GLX_DEPTH_SIZE,1,/// use the maximum depth bits, making sure there is a depth buffer
         None
     };
@@ -869,9 +889,9 @@ bool DummyChart::initWindow()
     {
         GLX_RGBA,//only TrueColor or DirectColor
         GLX_DOUBLEBUFFER,/// only double buffer
-        GLX_RED_SIZE,4,/// use the maximum red bits, with a minimum of 4 bits
-        GLX_GREEN_SIZE,4,/// use the maximum green bits, with a minimum of 4 bits
-        GLX_BLUE_SIZE,4,/// use the maximum blue bits, with a minimum of 4 bits
+        GLX_RED_SIZE,8,/// use the maximum red bits, with a minimum of 4 bits
+        GLX_GREEN_SIZE,8,/// use the maximum green bits, with a minimum of 4 bits
+        GLX_BLUE_SIZE,8,/// use the maximum blue bits, with a minimum of 4 bits
         GLX_DEPTH_SIZE,0,/// no depth buffer
         None
     };
@@ -879,10 +899,12 @@ bool DummyChart::initWindow()
     {
         GLX_RGBA,//only TrueColor or DirectColor
         GLX_DOUBLEBUFFER,/// only double buffer
-        GLX_RED_SIZE,4,/// use the maximum red bits, with a minimum of 4 bits
-        GLX_GREEN_SIZE,4,/// use the maximum green bits, with a minimum of 4 bits
-        GLX_BLUE_SIZE,4,/// use the maximum blue bits, with a minimum of 4 bits
+        GLX_RED_SIZE,8,/// use the maximum red bits, with a minimum of 4 bits
+        GLX_GREEN_SIZE,8,/// use the maximum green bits, with a minimum of 4 bits
+        GLX_BLUE_SIZE,8,/// use the maximum blue bits, with a minimum of 4 bits
         GLX_DEPTH_SIZE,1,/// use the maximum depth bits, making sure there is a depth buffer
+        GLX_SAMPLE_BUFFERS, 1,
+        GLX_SAMPLES, 4,
         None
     };
     static int* attrTable[] =
@@ -893,140 +915,121 @@ bool DummyChart::initWindow()
         attrList3,
         NULL
     };
+
     int** pAttributeTable = attrTable;
     const SystemEnvData* pChildSysData = NULL;
     pWindow.reset();
 
-#if defined( GLX_EXT_texture_from_pixmap )
-    unx::GLXFBConfig* fbconfigs = NULL;
+    GLXFBConfig* fbconfigs = NULL;
     int nfbconfigs, value, i = 0;
-#endif
 
     while( *pAttributeTable )
     {
         // try to find a visual for the current set of attributes
-        vi = unx::glXChooseVisual( GLWin.dpy,
+        vi = glXChooseVisual( GLWin.dpy,
                 GLWin.screen,
                 *pAttributeTable );
-
-#if defined( GLX_EXT_texture_from_pixmap )
-        if( vi ) {
-            if( !firstVisual )
-                firstVisual = vi;
-            OSL_TRACE("trying VisualID %08X", vi->visualid);
-            fbconfigs = glXGetFBConfigs (GLWin.dpy, GLWin.screen, &nfbconfigs);
-
-            for ( ; i < nfbconfigs; i++)
+        if( vi )
+        {
+            if( GLXEW_EXT_texture_from_pixmap )
             {
-                visinfo = glXGetVisualFromFBConfig (GLWin.dpy, fbconfigs[i]);
-                if( !visinfo || visinfo->visualid != vi->visualid )
-                    continue;
-
-                glXGetFBConfigAttrib (GLWin.dpy, fbconfigs[i], GLX_DRAWABLE_TYPE, &value);
-                if (!(value & GLX_PIXMAP_BIT))
-                    continue;
-
-                glXGetFBConfigAttrib (GLWin.dpy, fbconfigs[i],
-                        GLX_BIND_TO_TEXTURE_TARGETS_EXT,
-                        &value);
-                if (!(value & GLX_TEXTURE_2D_BIT_EXT))
-                    continue;
-
-                glXGetFBConfigAttrib (GLWin.dpy, fbconfigs[i],
-                        GLX_BIND_TO_TEXTURE_RGB_EXT,
-                        &value);
-                if (value == sal_False)
-                    continue;
-
-                glXGetFBConfigAttrib (GLWin.dpy, fbconfigs[i],
-                        GLX_BIND_TO_MIPMAP_TEXTURE_EXT,
-                        &value);
-                if (value == sal_False)
-                    continue;
-
-                // TODO: handle non Y inverted cases
-                break;
-            }
-
-            if( i != nfbconfigs || ( firstVisual && pAttributeTable[1] == NULL ) ) {
-                if( i != nfbconfigs ) {
-                    vi = glXGetVisualFromFBConfig( GLWin.dpy, fbconfigs[i] );
-                    // TODO:moggi
-                    // mbHasTFPVisual = true;
-                    OSL_TRACE("found visual suitable for texture_from_pixmap");
-                } else {
-                    vi = firstVisual;
-                    // TODO:moggi
-                    // mbHasTFPVisual = false;
-                    OSL_TRACE("did not find visual suitable for texture_from_pixmap, using %08X", vi->visualid);
+                if( !firstVisual )
+                    firstVisual = vi;
+                OSL_TRACE("trying VisualID %08X", vi->visualid);
+                fbconfigs = glXGetFBConfigs (GLWin.dpy, GLWin.screen, &nfbconfigs);
+
+                for ( ; i < nfbconfigs; i++)
+                {
+                    visinfo = glXGetVisualFromFBConfig (GLWin.dpy, fbconfigs[i]);
+                    if( !visinfo || visinfo->visualid != vi->visualid )
+                        continue;
+
+                    glXGetFBConfigAttrib (GLWin.dpy, fbconfigs[i], GLX_DRAWABLE_TYPE, &value);
+                    if (!(value & GLX_PIXMAP_BIT))
+                        continue;
+
+                    glXGetFBConfigAttrib (GLWin.dpy, fbconfigs[i],
+                            GLX_BIND_TO_TEXTURE_TARGETS_EXT,
+                            &value);
+                    if (!(value & GLX_TEXTURE_2D_BIT_EXT))
+                        continue;
+
+                    glXGetFBConfigAttrib (GLWin.dpy, fbconfigs[i],
+                            GLX_BIND_TO_TEXTURE_RGB_EXT,
+                            &value);
+                    if (value == sal_False)
+                        continue;
+
+                    glXGetFBConfigAttrib (GLWin.dpy, fbconfigs[i],
+                            GLX_BIND_TO_MIPMAP_TEXTURE_EXT,
+                            &value);
+                    if (value == sal_False)
+                        continue;
+
+                    // TODO: handle non Y inverted cases
+                    break;
                 }
-#else
-                if( vi ) {
-#endif
-                    SystemWindowData winData;
-                    winData.nSize = sizeof(winData);
-                    OSL_TRACE("using VisualID %08X", vi->visualid);
-                    winData.pVisual = (void*)(vi->visual);
-                    pWindow.reset(new SystemChildWindow(mpWindow.get(), 0, &winData, sal_False));
-                    pChildSysData = pWindow->GetSystemData();
-
-                    if( pChildSysData ) {
-                        break;
+
+                if( i != nfbconfigs || ( firstVisual && pAttributeTable[1] == NULL ) ) {
+                    if( i != nfbconfigs ) {
+                        vi = glXGetVisualFromFBConfig( GLWin.dpy, fbconfigs[i] );
+                        // TODO:moggi
+                        // mbHasTFPVisual = true;
+                        OSL_TRACE("found visual suitable for texture_from_pixmap");
                     } else {
-                        pWindow.reset();
+                        vi = firstVisual;
+                        // TODO:moggi
+                        // mbHasTFPVisual = false;
+                        OSL_TRACE("did not find visual suitable for texture_from_pixmap, using %08X", vi->visualid);
                     }
+
                 }
-#if defined( GLX_EXT_texture_from_pixmap )
+
+            }
+            SystemWindowData winData;
+            winData.nSize = sizeof(winData);
+            OSL_TRACE("using VisualID %08X", vi->visualid);
+            winData.pVisual = (void*)(vi->visual);
+            pWindow.reset(new SystemChildWindow(mpWindow.get(), 0, &winData, sal_False));
+            pChildSysData = pWindow->GetSystemData();
+
+            if( pChildSysData ) {
+                break;
+            } else {
+                pWindow.reset();
             }
-#endif
 
-            ++pAttributeTable;
         }
 
-#endif
-
-#if defined( WNT )
-        SystemWindowData winData;
-        winData.nSize = sizeof(winData);
-        pWindow.reset(new SystemChildWindow(mpWindow.get(), 0, &winData, sal_False));
-#endif
-
-        if( pWindow )
-        {
-            pWindow->SetMouseTransparent( sal_True );
-            pWindow->SetParentClipMode( PARENTCLIPMODE_NOCLIP );
-            pWindow->EnableEraseBackground( sal_False );
-            pWindow->SetControlForeground();
-            pWindow->SetControlBackground();
-            pWindow->EnablePaint(sal_False);
-#if defined( WNT )
-            GLWin.hWnd = sysData->hWnd;
-#elif defined( UNX )
-            GLWin.dpy = reinterpret_cast<unx::Display*>(pChildSysData->pDisplay);
-            GLWin.win = pChildSysData->aWindow;
-#if defined( GLX_EXT_texture_from_pixmap )
-            //TODO: moggi
-            /*
-            if( mbHasTFPVisual )
-                GLWin.fbc = fbconfigs[i];
-                */
-#endif
-            GLWin.vi = vi;
-            GLWin.GLXExtensions = unx::glXQueryExtensionsString( GLWin.dpy, GLWin.screen );
-            OSL_TRACE("available GLX extensions: %s", GLWin.GLXExtensions);
-#endif
-
-        return false;
-        }
+        ++pAttributeTable;
+    }
 
+    if( pWindow )
+    {
+        pWindow->SetMouseTransparent( sal_True );
+        pWindow->SetParentClipMode( PARENTCLIPMODE_NOCLIP );
+        pWindow->EnableEraseBackground( sal_False );
+        pWindow->SetControlForeground();
+        pWindow->SetControlBackground();
+
+        GLWin.dpy = reinterpret_cast<Display*>(pChildSysData->pDisplay);
+        GLWin.win = pChildSysData->aWindow;
+        //TODO: moggi
+        /*
+           if( mbHasTFPVisual )
+           GLWin.fbc = fbconfigs[i];
+           */
+        GLWin.vi = vi;
+        GLWin.GLXExtensions = glXQueryExtensionsString( GLWin.dpy, GLWin.screen );
+        OSL_TRACE("available GLX extensions: %s", GLWin.GLXExtensions);
+    }
     return true;
 }
-#if defined( UNX )
 
 namespace {
 
 static bool errorTriggered;
-int oglErrorHandler( unx::Display* /*dpy*/, unx::XErrorEvent* /*evnt*/ )
+int oglErrorHandler( Display* /*dpy*/, XErrorEvent* /*evnt*/ )
 {
     errorTriggered = true;
 
@@ -1121,19 +1124,19 @@ bool DummyChart::initOpengl()
     {
         // enable vsync
         typedef GLint (*glXSwapIntervalProc)(GLint);
-        glXSwapIntervalProc glXSwapInterval = (glXSwapIntervalProc) unx::glXGetProcAddress( (const GLubyte*) "glXSwapIntervalSGI" );
+        glXSwapIntervalProc glXSwapInterval = (glXSwapIntervalProc) glXGetProcAddress( (const GLubyte*) "glXSwapIntervalSGI" );
         if( glXSwapInterval ) {
-        int (*oldHandler)(unx::Display* /*dpy*/, unx::XErrorEvent* /*evnt*/);
+        int (*oldHandler)(Display* /*dpy*/, XErrorEvent* /*evnt*/);
 
         // replace error handler temporarily
-        oldHandler = unx::XSetErrorHandler( oglErrorHandler );
+        oldHandler = XSetErrorHandler( oglErrorHandler );
 
         errorTriggered = false;
 
         glXSwapInterval( 1 );
 
         // sync so that we possibly get an XError
-        unx::glXWaitGL();
+        glXWaitGL();
         XSync(GLWin.dpy, false);
 
         if( errorTriggered )
@@ -1142,7 +1145,7 @@ bool DummyChart::initOpengl()
             OSL_TRACE("set swap interval to 1 (enable vsync)");
 
         // restore the error handler
-        unx::XSetErrorHandler( oldHandler );
+        XSetErrorHandler( oldHandler );
         }
     }
 
@@ -1162,7 +1165,7 @@ bool DummyChart::initOpengl()
     SwapBuffers(GLWin.hDC);
     glFlush();
 #elif defined( UNX )
-    unx::glXSwapBuffers(GLWin.dpy, GLWin.win);
+    glXSwapBuffers(GLWin.dpy, GLWin.win);
 #endif
     glEnable(GL_LIGHTING);
     GLfloat light_direction[] = { 0.0 , 0.0 , 1.0 };
diff --git a/chart2/source/view/main/OpenGLRender.cxx b/chart2/source/view/main/OpenGLRender.cxx
index 11a77f3..4366425 100644
--- a/chart2/source/view/main/OpenGLRender.cxx
+++ b/chart2/source/view/main/OpenGLRender.cxx
@@ -502,7 +502,7 @@ int OpenGLRender::InitOpenGL(GLWindow aWindow)
 #if defined( WNT )
     SwapBuffers(glWin.hDC);
 #elif defined( UNX )
-    unx::glXSwapBuffers(glWin.dpy, glWin.win);
+    glXSwapBuffers(glWin.dpy, glWin.win);
 #endif
     glFlush();
     glEnable(GL_LIGHTING);
@@ -741,7 +741,7 @@ void OpenGLRender::renderToBitmap()
 #if defined( WNT )
     SwapBuffers(glWin.hDC);
 #elif defined( UNX )
-    unx::glXSwapBuffers(glWin.dpy, glWin.win);
+    glXSwapBuffers(glWin.dpy, glWin.win);
 #endif
     glFlush();
 }
@@ -823,7 +823,7 @@ int OpenGLRender::RenderTexture(GLuint TexID)
 #if defined( WNT )
     SwapBuffers(glWin.hDC);
 #elif defined( UNX )
-    unx::glXSwapBuffers(glWin.dpy, glWin.win);
+    glXSwapBuffers(glWin.dpy, glWin.win);
 #endif
     glFlush();
     return 0;
diff --git a/chart2/source/view/main/OpenGLRender.hxx b/chart2/source/view/main/OpenGLRender.hxx
index 58a3aef..dc9beb5 100644
--- a/chart2/source/view/main/OpenGLRender.hxx
+++ b/chart2/source/view/main/OpenGLRender.hxx
@@ -10,6 +10,12 @@
 #include <com/sun/star/drawing/XDrawPage.hpp>
 #include <vcl/font.hxx>
 
+#if defined( UNX )
+#include <prex.h>
+#include "GL/glxew.h"
+#include <postx.h>
+#endif
+
 #if defined( _WIN32 )
 #include "prewin.h"
 #include "windows.h"
@@ -24,25 +30,22 @@
 #include <vcl/sysdata.hxx>
 
 #if defined( _WIN32 )
-    #include <GL/glu.h>
-    #include <GL/glext.h>
-    #include <GL/wglext.h>
+#include <GL/glu.h>
+#include <GL/glext.h>
+#include <GL/wglext.h>
 #elif defined( MACOSX )
-    #include "premac.h"
-    #include <Cocoa/Cocoa.h>
-    #include "postmac.h"
+#include "premac.h"
+#include <Cocoa/Cocoa.h>
+#include "postmac.h"
 #elif defined( UNX )
-    #include <GL/glu.h>
-    #include <GL/glext.h>
 
-namespace unx
-{
-    #include <X11/keysym.h>
-    #include <X11/X.h>
-    #define GLX_GLXEXT_PROTOTYPES 1
-    #include <GL/glx.h>
-    #include <GL/glxext.h>
-}
+#include <GL/glu.h>
+#include <GL/glext.h>
+
+#define GLX_GLXEXT_PROTOTYPES 1
+#include <GL/glx.h>
+#include <GL/glxext.h>
+
 #endif
 
 // Include GLM
@@ -110,14 +113,14 @@ struct GLWindow
     HGLRC                   hRC;
 #elif defined( MACOSX )
 #elif defined( UNX )
-    unx::Display*           dpy;
+    Display*           dpy;
     int                     screen;
-    unx::Window             win;
+    XLIB_Window             win;
 #if defined( GLX_VERSION_1_3 ) && defined( GLX_EXT_texture_from_pixmap )
-    unx::GLXFBConfig        fbc;
+    GLXFBConfig        fbc;
 #endif
-    unx::XVisualInfo*       vi;
-    unx::GLXContext         ctx;
+    XVisualInfo*       vi;
+    GLXContext         ctx;
 
     bool HasGLXExtension( const char* name ) { return gluCheckExtension( (const GLubyte*) name, (const GLubyte*) GLXExtensions ); }
     const char*             GLXExtensions;
commit efee96a201235a4ea14c4f3c3d8d2fe12b5b9edc
Author: Markus Mohrhard <markus.mohrhard at collabora.co.uk>
Date:   Wed Jan 15 22:43:56 2014 +0100

    even the baseline supports glx 1.3
    
    We won't support glx < 1.3!!!!
    
    Change-Id: Icc5d15d682223b1fab3165d279b596446c920e9b

diff --git a/chart2/source/view/main/DummyXShape.cxx b/chart2/source/view/main/DummyXShape.cxx
index 917136d..39a1306 100644
--- a/chart2/source/view/main/DummyXShape.cxx
+++ b/chart2/source/view/main/DummyXShape.cxx
@@ -841,7 +841,7 @@ bool DummyChart::initWindow()
     GLWin.screen = XScreenNumberOfScreen( xattr.screen );
 
     unx::XVisualInfo* vi( NULL );
-#if defined( GLX_VERSION_1_3 ) && defined( GLX_EXT_texture_from_pixmap )
+#if defined( GLX_EXT_texture_from_pixmap )
     unx::XVisualInfo* visinfo;
     unx::XVisualInfo* firstVisual( NULL );
 #endif
@@ -897,7 +897,7 @@ bool DummyChart::initWindow()
     const SystemEnvData* pChildSysData = NULL;
     pWindow.reset();
 
-#if defined( GLX_VERSION_1_3 ) && defined( GLX_EXT_texture_from_pixmap )
+#if defined( GLX_EXT_texture_from_pixmap )
     unx::GLXFBConfig* fbconfigs = NULL;
     int nfbconfigs, value, i = 0;
 #endif
@@ -909,7 +909,7 @@ bool DummyChart::initWindow()
                 GLWin.screen,
                 *pAttributeTable );
 
-#if defined( GLX_VERSION_1_3 ) && defined( GLX_EXT_texture_from_pixmap )
+#if defined( GLX_EXT_texture_from_pixmap )
         if( vi ) {
             if( !firstVisual )
                 firstVisual = vi;
@@ -976,7 +976,7 @@ bool DummyChart::initWindow()
                         pWindow.reset();
                     }
                 }
-#if defined( GLX_VERSION_1_3 ) && defined( GLX_EXT_texture_from_pixmap )
+#if defined( GLX_EXT_texture_from_pixmap )
             }
 #endif
 
@@ -1004,7 +1004,7 @@ bool DummyChart::initWindow()
 #elif defined( UNX )
             GLWin.dpy = reinterpret_cast<unx::Display*>(pChildSysData->pDisplay);
             GLWin.win = pChildSysData->aWindow;
-#if defined( GLX_VERSION_1_3 ) && defined( GLX_EXT_texture_from_pixmap )
+#if defined( GLX_EXT_texture_from_pixmap )
             //TODO: moggi
             /*
             if( mbHasTFPVisual )


More information about the Libreoffice-commits mailing list