[Libreoffice-commits] core.git: 3 commits - chart2/Library_chartopengl.mk chart2/Module_chart2.mk chart2/opengl chart2/Package_opengl.mk chart2/source include/sal include/vcl Repository.mk vcl/Library_vclopengl.mk vcl/Module_vcl.mk vcl/Package_opengl.mk vcl/source

Zolnai Tamás tamas.zolnai at collabora.com
Fri Mar 14 21:03:36 CET 2014


 Repository.mk                                           |    1 
 chart2/Library_chartopengl.mk                           |   22 
 chart2/Module_chart2.mk                                 |    1 
 chart2/Package_opengl.mk                                |   25 
 chart2/opengl/backgroundFragmentShader.glsl             |   17 
 chart2/opengl/backgroundVertexShader.glsl               |   21 
 chart2/opengl/commonFragmentShader.glsl                 |   17 
 chart2/opengl/commonVertexShader.glsl                   |   21 
 chart2/opengl/debugFragmentShader.glsl                  |   17 
 chart2/opengl/debugVertexShader.glsl                    |   19 
 chart2/opengl/symbolFragmentShader.glsl                 |  101 
 chart2/opengl/symbolVertexShader.glsl                   |   23 
 chart2/opengl/textFragmentShader.glsl                   |   17 
 chart2/opengl/textVertexShader.glsl                     |   20 
 chart2/source/view/inc/DummyXShape.hxx                  |   39 
 chart2/source/view/main/DummyXShape.cxx                 |  407 ---
 chart2/source/view/main/OpenGLRender.cxx                | 1688 ----------------
 chart2/source/view/main/OpenGLRender.hxx                |  298 --
 include/sal/log-areas.dox                               |    1 
 include/vcl/OpenGLContext.hxx                           |   31 
 include/vcl/OpenGLRender.hxx                            |  303 ++
 vcl/Library_vclopengl.mk                                |   59 
 vcl/Module_vcl.mk                                       |    4 
 vcl/Package_opengl.mk                                   |   25 
 vcl/source/opengl/OpenGLContext.cxx                     |  417 +++
 vcl/source/opengl/OpenGLRender.cxx                      | 1687 +++++++++++++++
 vcl/source/opengl/shaders/backgroundFragmentShader.glsl |   17 
 vcl/source/opengl/shaders/backgroundVertexShader.glsl   |   21 
 vcl/source/opengl/shaders/commonFragmentShader.glsl     |   17 
 vcl/source/opengl/shaders/commonVertexShader.glsl       |   21 
 vcl/source/opengl/shaders/debugFragmentShader.glsl      |   17 
 vcl/source/opengl/shaders/debugVertexShader.glsl        |   19 
 vcl/source/opengl/shaders/symbolFragmentShader.glsl     |  101 
 vcl/source/opengl/shaders/symbolVertexShader.glsl       |   23 
 vcl/source/opengl/shaders/textFragmentShader.glsl       |   17 
 vcl/source/opengl/shaders/textVertexShader.glsl         |   20 
 36 files changed, 2809 insertions(+), 2745 deletions(-)

New commits:
commit 62c2fa48de6e2a77f42568b6378c4cc9aa4605a7
Author: Zolnai Tamás <tamas.zolnai at collabora.com>
Date:   Fri Mar 14 18:52:30 2014 +0100

    Remove unused include
    
    Change-Id: I029b43b29a7fba500cfe2c74e3e66274612f3524

diff --git a/vcl/Library_vclopengl.mk b/vcl/Library_vclopengl.mk
index f65f895..270cbd6 100644
--- a/vcl/Library_vclopengl.mk
+++ b/vcl/Library_vclopengl.mk
@@ -27,7 +27,6 @@ $(eval $(call gb_Library_use_libraries,vclopengl,\
     comphelper \
     cppu \
     cppuhelper \
-    editeng \
     sal \
     vcl \
     $(gb_UWINAPI) \
diff --git a/vcl/source/opengl/OpenGLRender.cxx b/vcl/source/opengl/OpenGLRender.cxx
index a4fb1b9..5a88e7a 100755
--- a/vcl/source/opengl/OpenGLRender.cxx
+++ b/vcl/source/opengl/OpenGLRender.cxx
@@ -32,7 +32,6 @@
 #include <com/sun/star/drawing/TextureProjectionMode.hpp>
 #include <com/sun/star/text/XText.hpp>
 #include <com/sun/star/uno/Any.hxx>
-#include <editeng/unoprnms.hxx>
 #include <vcl/virdev.hxx>
 #include <vcl/dibtools.hxx>
 
commit a5d178b424d55f61bb3502bb9cbc7ea96aee2cd7
Author: Zolnai Tamás <tamas.zolnai at collabora.com>
Date:   Fri Mar 14 18:51:06 2014 +0100

    Introduce OpenGLContext in vclopengl
    
    Move DummyChart::initOpengl() and
    DummyChart::initWindow into this class.
    
    Change-Id: If3c1bb52cb2819019f0dda626612a164709b17ac

diff --git a/chart2/Library_chartopengl.mk b/chart2/Library_chartopengl.mk
index db3dc29..15260d4 100644
--- a/chart2/Library_chartopengl.mk
+++ b/chart2/Library_chartopengl.mk
@@ -18,7 +18,6 @@ $(eval $(call gb_Library_set_include,chartopengl,\
 ))
 
 $(eval $(call gb_Library_use_externals,chartopengl,\
-	boost_headers \
 	mdds_headers \
 	glm_headers \
 	mesa_headers \
@@ -56,23 +55,4 @@ $(eval $(call gb_Library_add_exception_objects,chartopengl,\
     chart2/source/view/main/DummyXShape \
 ))
 
-ifeq ($(strip $(OS)),WNT)
-$(eval $(call gb_Library_use_system_win32_libs,chartopengl,\
-    opengl32 \
-	gdi32 \
-	glu32 \
-))
-else ifeq ($(OS),MACOSX)
-$(eval $(call gb_Library_use_system_darwin_frameworks,chartopengl,\
-	OpenGL \
-))
-else ifeq ($(OS),LINUX)
-$(eval $(call gb_Library_add_libs,chartopengl,\
-    -ldl \
-    -lGL \
-    -lGLU \
-    -lX11 \
-))
-endif
-
 # vim: set noet sw=4 ts=4:
diff --git a/chart2/source/view/inc/DummyXShape.hxx b/chart2/source/view/inc/DummyXShape.hxx
index 553b4e1..2862b23 100644
--- a/chart2/source/view/inc/DummyXShape.hxx
+++ b/chart2/source/view/inc/DummyXShape.hxx
@@ -13,6 +13,7 @@
 #include <cppuhelper/implbase6.hxx>
 
 #include <vcl/OpenGLRender.hxx>
+#include <vcl/OpenGLContext.hxx>
 
 #include <com/sun/star/drawing/XShape.hpp>
 #include <com/sun/star/drawing/XShapes.hpp>
@@ -59,34 +60,8 @@
 
 #include <vector>
 #include <map>
-#include <boost/scoped_ptr.hpp>
 #include <boost/unordered_map.hpp>
 
-#if defined( MACOSX )
-#include <OpenGL/gl.h>
-#include <OpenGL/glu.h>
-#else
-#include <GL/gl.h>
-#include <GL/glu.h>
-#endif
-
-#include <vcl/window.hxx>
-#include <vcl/syschild.hxx>
-#include <vcl/sysdata.hxx>
-
-#if defined( _WIN32 )
-    #include <GL/glu.h>
-    #include <GL/glext.h>
-    #include <GL/wglext.h>
-#elif defined( MACOSX )
-#elif defined( UNX )
-    #include <GL/glu.h>
-    #include <GL/glext.h>
-#endif
-
-class SystemWindow;
-class SystemChildWindow;
-
 using namespace com::sun::star;
 
 
@@ -431,15 +406,9 @@ public:
 
 private:
 
-    GLWindow GLWin;    /// Holds the information of our new child window
-
-    void createGLContext();
-
-    bool initWindow();
-    bool initOpengl();
-    boost::scoped_ptr<Window> mpWindow;
-    boost::scoped_ptr<SystemChildWindow> pWindow;
     TextCache maTextCache;
+    OpenGLContext m_aGLContext;
+
 public:
     OpenGLRender m_GLRender;
 };
diff --git a/chart2/source/view/main/DummyXShape.cxx b/chart2/source/view/main/DummyXShape.cxx
index 35716c3..0416ea9 100644
--- a/chart2/source/view/main/DummyXShape.cxx
+++ b/chart2/source/view/main/DummyXShape.cxx
@@ -1145,412 +1145,12 @@ void DummyXShapes::render()
     }
 }
 
-#if defined( WNT )
-
-bool DummyChart::initWindow()
-{
-    const SystemEnvData* sysData(mpWindow->GetSystemData());
-    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;
-    }
-
-    return true;
-}
-
-#elif defined( MACOSX )
-
-bool DummyChart::initWindow()
-{
-    return false;
-}
-
-#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());
-
-    GLWin.dpy = reinterpret_cast<Display*>(sysData->pDisplay);
-
-    if( !glXQueryExtension( GLWin.dpy, NULL, NULL ) )
-        return false;
-
-    GLWin.win = sysData->aWindow;
-
-    OSL_TRACE("parent window: %d", GLWin.win);
-
-    XWindowAttributes xattr;
-    XGetWindowAttributes( GLWin.dpy, GLWin.win, &xattr );
-
-    GLWin.screen = XScreenNumberOfScreen( xattr.screen );
-
-    static int visual_attribs[] =
-    {
-        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
-    };
-
-    const SystemEnvData* pChildSysData = NULL;
-    pWindow.reset();
-
-    initOpenGLFunctionPointers();
-
-    int fbCount = 0;
-    GLXFBConfig* pFBC = glXChooseFBConfig( GLWin.dpy,
-            GLWin.screen,
-            visual_attribs, &fbCount );
-
-    if(!pFBC)
-    {
-        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)
-        {
-            // 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;
-            }
-        }
-        XFree( pVi );
-    }
-
-    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, false));
-        pChildSysData = pWindow->GetSystemData();
-    }
-
-    if (!pWindow || !pChildSysData)
-        return false;
-
-    pWindow->SetMouseTransparent( true );
-    pWindow->SetParentClipMode( PARENTCLIPMODE_NOCLIP );
-    pWindow->EnableEraseBackground( false );
-    pWindow->SetControlForeground();
-    pWindow->SetControlBackground();
-
-    GLWin.dpy = reinterpret_cast<Display*>(pChildSysData->pDisplay);
-    GLWin.win = pChildSysData->aWindow;
-    GLWin.vi = vi;
-    GLWin.GLXExtensions = glXQueryExtensionsString( GLWin.dpy, GLWin.screen );
-    OSL_TRACE("available GLX extensions: %s", GLWin.GLXExtensions);
-
-    return true;
-}
-
-namespace {
-
-static bool errorTriggered;
-int oglErrorHandler( Display* /*dpy*/, XErrorEvent* /*evnt*/ )
-{
-    errorTriggered = true;
-
-    return 0;
-}
-
-}
-
-#endif
-
-#ifdef DBG_UTIL
-
-namespace {
-
-const char* getSeverityString(GLenum severity)
-{
-    switch(severity)
-    {
-        case GL_DEBUG_SEVERITY_LOW:
-            return "low";
-        case GL_DEBUG_SEVERITY_MEDIUM:
-            return "medium";
-        case GL_DEBUG_SEVERITY_HIGH:
-            return "high";
-        default:
-            ;
-    }
-
-    return "unknown";
-}
-
-const char* getSourceString(GLenum source)
-{
-    switch(source)
-    {
-        case GL_DEBUG_SOURCE_API:
-            return "API";
-        case GL_DEBUG_SOURCE_SHADER_COMPILER:
-            return "shader compiler";
-        case GL_DEBUG_SOURCE_WINDOW_SYSTEM:
-            return "window system";
-        case GL_DEBUG_SOURCE_THIRD_PARTY:
-            return "third party";
-        case GL_DEBUG_SOURCE_APPLICATION:
-            return "Libreoffice";
-        case GL_DEBUG_SOURCE_OTHER:
-            return "unknown";
-        default:
-            ;
-    }
-
-    return "unknown";
-}
-
-const char* getTypeString(GLenum type)
-{
-    switch(type)
-    {
-        case GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR:
-            return "deprecated behavior";
-        case GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR:
-            return "undefined behavior";
-        case GL_DEBUG_TYPE_PERFORMANCE:
-            return "performance";
-        case GL_DEBUG_TYPE_PORTABILITY:
-            return "portability";
-        case GL_DEBUG_TYPE_MARKER:
-            return "marker";
-        case GL_DEBUG_TYPE_PUSH_GROUP:
-            return "push group";
-        case GL_DEBUG_TYPE_POP_GROUP:
-            return "pop group";
-        case GL_DEBUG_TYPE_OTHER:
-            return "other";
-        default:
-            ;
-    }
-
-    return "unkown";
-}
-
-extern "C" void
-#if defined _WIN32
-APIENTRY
-#endif
-debug_callback(GLenum source, GLenum type, GLuint id,
-        GLenum severity, GLsizei , const GLchar* message, GLvoid* )
-{
-    SAL_WARN("chart2.opengl", "OpenGL debug message: source: " << getSourceString(source) << ", type: "
-            << getTypeString(type) << ", id: " << id << ", severity: " << getSeverityString(severity) << " with message: " << message);
-}
-
-}
-
-#endif
-
-bool DummyChart::initOpengl()
-{
-    SAL_INFO("chart2.opengl", "DummyChart::initOpengl----start");
-    initWindow();
-    mpWindow->setPosSizePixel(0,0,0,0);
-    GLWin.Width = 0;
-    GLWin.Height = 0;
-
-#if defined( WNT )
-    GLWin.hDC = GetDC(GLWin.hWnd);
-#elif defined( MACOSX )
-
-#elif defined( UNX )
-    GLWin.ctx = glXCreateContext(GLWin.dpy,
-                                 GLWin.vi,
-                                 0,
-                                 GL_TRUE);
-    if( GLWin.ctx == NULL )
-    {
-        OSL_TRACE("unable to create GLX context");
-        return false;
-    }
-#endif
-
-#if defined( WNT )
-    PIXELFORMATDESCRIPTOR PixelFormatFront =                    // PixelFormat Tells Windows How We Want Things To Be
-    {
-        sizeof(PIXELFORMATDESCRIPTOR),
-        1,                              // Version Number
-        PFD_DRAW_TO_WINDOW |
-        PFD_SUPPORT_OPENGL |
-        PFD_DOUBLEBUFFER,
-        PFD_TYPE_RGBA,                  // Request An RGBA Format
-        (BYTE)32,                       // Select Our Color Depth
-        0, 0, 0, 0, 0, 0,               // Color Bits Ignored
-        0,                              // No Alpha Buffer
-        0,                              // Shift Bit Ignored
-        0,                              // No Accumulation Buffer
-        0, 0, 0, 0,                     // Accumulation Bits Ignored
-        64,                             // 32 bit Z-BUFFER
-        0,                              // 0 bit stencil buffer
-        0,                              // No Auxiliary Buffer
-        0,                              // now ignored
-        0,                              // Reserved
-        0, 0, 0                         // Layer Masks Ignored
-    };
-
-    //  we must check whether can set the MSAA
-    int WindowPix;
-    m_GLRender.InitMultisample(PixelFormatFront);
-    if (m_GLRender.GetMSAASupport())
-    {
-        WindowPix = m_GLRender.GetMSAAFormat();
-    }
-    else
-    {
-        WindowPix = ChoosePixelFormat(GLWin.hDC,&PixelFormatFront);
-    }
-    SetPixelFormat(GLWin.hDC,WindowPix,&PixelFormatFront);
-    GLWin.hRC  = wglCreateContext(GLWin.hDC);
-    wglMakeCurrent(GLWin.hDC,GLWin.hRC);
-
-#elif defined( MACOSX )
-
-#elif defined( UNX )
-    if( !glXMakeCurrent( GLWin.dpy, GLWin.win, GLWin.ctx ) )
-    {
-        OSL_TRACE("unable to select current GLX context");
-        return false;
-    }
-
-    int glxMinor, glxMajor;
-    double nGLXVersion = 0;
-    if( glXQueryVersion( GLWin.dpy, &glxMajor, &glxMinor ) )
-      nGLXVersion = glxMajor + 0.1*glxMinor;
-    OSL_TRACE("available GLX version: %f", nGLXVersion);
-
-    GLWin.GLExtensions = glGetString( GL_EXTENSIONS );
-    OSL_TRACE("available GL  extensions: %s", GLWin.GLExtensions);
-
-    if( GLWin.HasGLXExtension("GLX_SGI_swap_control" ) )
-    {
-        // enable vsync
-        typedef GLint (*glXSwapIntervalProc)(GLint);
-        glXSwapIntervalProc glXSwapInterval = (glXSwapIntervalProc) glXGetProcAddress( (const GLubyte*) "glXSwapIntervalSGI" );
-        if( glXSwapInterval ) {
-        int (*oldHandler)(Display* /*dpy*/, XErrorEvent* /*evnt*/);
-
-        // replace error handler temporarily
-        oldHandler = XSetErrorHandler( oglErrorHandler );
-
-        errorTriggered = false;
-
-        glXSwapInterval( 1 );
-
-        // sync so that we possibly get an XError
-        glXWaitGL();
-        XSync(GLWin.dpy, false);
-
-        if( errorTriggered )
-            OSL_TRACE("error when trying to set swap interval, NVIDIA or Mesa bug?");
-        else
-            OSL_TRACE("set swap interval to 1 (enable vsync)");
-
-        // restore the error handler
-        XSetErrorHandler( oldHandler );
-        }
-    }
-
-#endif
-
-    m_GLRender.InitOpenGL(GLWin);
-
-#ifdef DBG_UTIL
-    // only enable debug output in dbgutil build
-    if( GLEW_ARB_debug_output )
-    {
-        glEnable(GL_DEBUG_OUTPUT);
-        glDebugMessageCallback(&debug_callback, NULL);
-    }
-
-#endif
-
-    glEnable(GL_TEXTURE_2D);
-    glEnable(GL_CULL_FACE);
-    glCullFace(GL_BACK);
-    // Enable depth test
-    glEnable(GL_DEPTH_TEST);
-    // Accept fragment if it closer to the camera than the former one
-    glDepthFunc(GL_LESS);
-
-#if defined( WNT )
-    SwapBuffers(GLWin.hDC);
-    glFlush();
-#elif defined( MACOSX )
-
-#elif defined( UNX )
-    glXSwapBuffers(GLWin.dpy, GLWin.win);
-#endif
-    glEnable(GL_LIGHTING);
-    GLfloat light_direction[] = { 0.0 , 0.0 , 1.0 };
-    GLfloat materialDiffuse[] = { 1.0 , 1.0 , 1.0 , 1.0};
-    glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, light_direction);
-    glMaterialfv(GL_FRONT,GL_DIFFUSE,materialDiffuse);
-    glEnable(GL_LIGHT0);
-    glEnable(GL_NORMALIZE);
-    SAL_INFO("chart2.opengl", "DummyChart::initOpengl----end");
-    return true;
-}
-
-
 DummyChart::DummyChart(uno::Reference< drawing::XShape > xTarget):
-    mpWindow(new Window(0, WB_NOBORDER|WB_NODIALOGCONTROL)),
     m_GLRender(xTarget)
 {
     SAL_INFO("chart2.opengl", "DummyXShape::DummyChart()-----test: ");
     setName("com.sun.star.chart2.shapes");
-    createGLContext();
-}
-
-void DummyChart::createGLContext()
-{
-    initOpengl();
+    m_aGLContext.init(m_GLRender);
 }
 
 void SAL_CALL DummyChart::setPosition( const awt::Point& aPosition )
@@ -1569,8 +1169,7 @@ void SAL_CALL DummyChart::setSize( const awt::Size& aSize )
     SAL_INFO("chart2.opengl", "DummyChart::setSize()---aSize.Width = " << aSize.Width << ", aSize.Height = " << aSize.Height);
     int width = aSize.Width / OPENGL_SCALE_VALUE;
     int height = aSize.Height / OPENGL_SCALE_VALUE;
-    mpWindow->SetSizePixel(Size(width, height));
-    pWindow->SetSizePixel(Size(width, height));
+    m_aGLContext.setWinSize(Size(width, height));
     DummyXShape::setSize(awt::Size(0,0));
     m_GLRender.SetSize(width, height);
     SAL_INFO("chart2.opengl", "DummyChart::GLRender.Width = " << width << ", GLRender.Height = " << height);
@@ -1586,7 +1185,7 @@ void DummyChart::render()
     DummyXShapes::render();
 #endif
     m_GLRender.renderToBitmap();
-}
+ }
 
 void DummyChart::clear()
 {
diff --git a/include/vcl/OpenGLContext.hxx b/include/vcl/OpenGLContext.hxx
new file mode 100644
index 0000000..cc7a3e7
--- /dev/null
+++ b/include/vcl/OpenGLContext.hxx
@@ -0,0 +1,31 @@
+/* -*- 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 VCL_OPENGL_CONTEXT_HXX
+#define VCL_OPENGL_CONTEXT_HXX
+
+#include <vcl/OpenGLRender.hxx>
+
+class VCL_DLLPUBLIC OpenGLContext
+{
+public:
+    bool init(OpenGLRender& rGLRender);
+    void setWinSize(const Size& rSize);
+
+private:
+    SAL_DLLPRIVATE bool initWindow();
+
+    GLWindow m_aGLWin;
+    boost::scoped_ptr<Window> m_pWindow;
+    boost::scoped_ptr<SystemChildWindow> m_pChildWindow;
+};
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/Library_vclopengl.mk b/vcl/Library_vclopengl.mk
index 5c52add..f65f895 100644
--- a/vcl/Library_vclopengl.mk
+++ b/vcl/Library_vclopengl.mk
@@ -35,13 +35,14 @@ $(eval $(call gb_Library_use_libraries,vclopengl,\
 
 $(eval $(call gb_Library_add_exception_objects,vclopengl,\
     vcl/source/opengl/OpenGLRender \
+    vcl/source/opengl/OpenGLContext \
 ))
 
 ifeq ($(strip $(OS)),WNT)
 $(eval $(call gb_Library_use_system_win32_libs,vclopengl,\
     opengl32 \
-	gdi32 \
-	glu32 \
+    gdi32 \
+    glu32 \
 ))
 else ifeq ($(OS),MACOSX)
 $(eval $(call gb_Library_use_system_darwin_frameworks,vclopengl,\
diff --git a/vcl/source/opengl/OpenGLContext.cxx b/vcl/source/opengl/OpenGLContext.cxx
new file mode 100644
index 0000000..70ec988
--- /dev/null
+++ b/vcl/source/opengl/OpenGLContext.cxx
@@ -0,0 +1,417 @@
+/* -*- 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 <vcl/OpenGLContext.hxx>
+
+
+using namespace com::sun::star;
+
+namespace {
+
+#ifdef DBG_UTIL
+
+namespace {
+
+const char* getSeverityString(GLenum severity)
+{
+    switch(severity)
+    {
+        case GL_DEBUG_SEVERITY_LOW:
+            return "low";
+        case GL_DEBUG_SEVERITY_MEDIUM:
+            return "medium";
+        case GL_DEBUG_SEVERITY_HIGH:
+            return "high";
+        default:
+            ;
+    }
+
+    return "unknown";
+}
+
+const char* getSourceString(GLenum source)
+{
+    switch(source)
+    {
+        case GL_DEBUG_SOURCE_API:
+            return "API";
+        case GL_DEBUG_SOURCE_SHADER_COMPILER:
+            return "shader compiler";
+        case GL_DEBUG_SOURCE_WINDOW_SYSTEM:
+            return "window system";
+        case GL_DEBUG_SOURCE_THIRD_PARTY:
+            return "third party";
+        case GL_DEBUG_SOURCE_APPLICATION:
+            return "Libreoffice";
+        case GL_DEBUG_SOURCE_OTHER:
+            return "unknown";
+        default:
+            ;
+    }
+
+    return "unknown";
+}
+
+const char* getTypeString(GLenum type)
+{
+    switch(type)
+    {
+        case GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR:
+            return "deprecated behavior";
+        case GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR:
+            return "undefined behavior";
+        case GL_DEBUG_TYPE_PERFORMANCE:
+            return "performance";
+        case GL_DEBUG_TYPE_PORTABILITY:
+            return "portability";
+        case GL_DEBUG_TYPE_MARKER:
+            return "marker";
+        case GL_DEBUG_TYPE_PUSH_GROUP:
+            return "push group";
+        case GL_DEBUG_TYPE_POP_GROUP:
+            return "pop group";
+        case GL_DEBUG_TYPE_OTHER:
+            return "other";
+        default:
+            ;
+    }
+
+    return "unkown";
+}
+
+extern "C" void
+#if defined _WIN32
+APIENTRY
+#endif
+debug_callback(GLenum source, GLenum type, GLuint id,
+        GLenum severity, GLsizei , const GLchar* message, GLvoid* )
+{
+    SAL_WARN("vcl.opengl", "OpenGL debug message: source: " << getSourceString(source) << ", type: "
+            << getTypeString(type) << ", id: " << id << ", severity: " << getSeverityString(severity) << " with message: " << message);
+}
+
+}
+
+#endif
+
+#if defined( UNX )
+static bool errorTriggered;
+int oglErrorHandler( Display* /*dpy*/, XErrorEvent* /*evnt*/ )
+{
+    errorTriggered = true;
+
+    return 0;
+}
+
+}
+#endif
+
+bool OpenGLContext::init(OpenGLRender& rGLRender)
+{
+    m_pWindow.reset(new Window(0, WB_NOBORDER|WB_NODIALOGCONTROL));
+    SAL_INFO("vcl.opengl", "OpenGLContext::OpenGLContext----start");
+    initWindow();
+    m_pWindow->setPosSizePixel(0,0,0,0);
+    m_aGLWin.Width = 0;
+    m_aGLWin.Height = 0;
+
+#if defined( WNT )
+    m_aGLWin.hDC = GetDC(m_aGLWin.hWnd);
+#elif defined( MACOSX )
+
+#elif defined( UNX )
+    m_aGLWin.ctx = glXCreateContext(m_aGLWin.dpy,
+                                 m_aGLWin.vi,
+                                 0,
+                                 GL_TRUE);
+    if( m_aGLWin.ctx == NULL )
+    {
+        OSL_TRACE("unable to create GLX context");
+        return false;
+    }
+#endif
+
+#if defined( WNT )
+    PIXELFORMATDESCRIPTOR PixelFormatFront =                    // PixelFormat Tells Windows How We Want Things To Be
+    {
+        sizeof(PIXELFORMATDESCRIPTOR),
+        1,                              // Version Number
+        PFD_DRAW_TO_WINDOW |
+        PFD_SUPPORT_OPENGL |
+        PFD_DOUBLEBUFFER,
+        PFD_TYPE_RGBA,                  // Request An RGBA Format
+        (BYTE)32,                       // Select Our Color Depth
+        0, 0, 0, 0, 0, 0,               // Color Bits Ignored
+        0,                              // No Alpha Buffer
+        0,                              // Shift Bit Ignored
+        0,                              // No Accumulation Buffer
+        0, 0, 0, 0,                     // Accumulation Bits Ignored
+        64,                             // 32 bit Z-BUFFER
+        0,                              // 0 bit stencil buffer
+        0,                              // No Auxiliary Buffer
+        0,                              // now ignored
+        0,                              // Reserved
+        0, 0, 0                         // Layer Masks Ignored
+    };
+
+    //  we must check whether can set the MSAA
+    int WindowPix;
+    rGLRender.InitMultisample(PixelFormatFront);
+    if (rGLRender.GetMSAASupport())
+    {
+        WindowPix = rGLRender.GetMSAAFormat();
+    }
+    else
+    {
+        WindowPix = ChoosePixelFormat(m_aGLWin.hDC,&PixelFormatFront);
+    }
+    SetPixelFormat(m_aGLWin.hDC,WindowPix,&PixelFormatFront);
+    m_aGLWin.hRC  = wglCreateContext(m_aGLWin.hDC);
+    wglMakeCurrent(m_aGLWin.hDC,m_aGLWin.hRC);
+
+#elif defined( MACOSX )
+
+#elif defined( UNX )
+    if( !glXMakeCurrent( m_aGLWin.dpy, m_aGLWin.win, m_aGLWin.ctx ) )
+    {
+        OSL_TRACE("unable to select current GLX context");
+        return false;
+    }
+
+    int glxMinor, glxMajor;
+    double nGLXVersion = 0;
+    if( glXQueryVersion( m_aGLWin.dpy, &glxMajor, &glxMinor ) )
+      nGLXVersion = glxMajor + 0.1*glxMinor;
+    OSL_TRACE("available GLX version: %f", nGLXVersion);
+
+    m_aGLWin.GLExtensions = glGetString( GL_EXTENSIONS );
+    OSL_TRACE("available GL  extensions: %s", m_aGLWin.GLExtensions);
+
+    if( m_aGLWin.HasGLXExtension("GLX_SGI_swap_control" ) )
+    {
+        // enable vsync
+        typedef GLint (*glXSwapIntervalProc)(GLint);
+        glXSwapIntervalProc glXSwapInterval = (glXSwapIntervalProc) glXGetProcAddress( (const GLubyte*) "glXSwapIntervalSGI" );
+        if( glXSwapInterval ) {
+        int (*oldHandler)(Display* /*dpy*/, XErrorEvent* /*evnt*/);
+
+        // replace error handler temporarily
+        oldHandler = XSetErrorHandler( oglErrorHandler );
+
+        errorTriggered = false;
+
+        glXSwapInterval( 1 );
+
+        // sync so that we possibly get an XError
+        glXWaitGL();
+        XSync(m_aGLWin.dpy, false);
+
+        if( errorTriggered )
+            OSL_TRACE("error when trying to set swap interval, NVIDIA or Mesa bug?");
+        else
+            OSL_TRACE("set swap interval to 1 (enable vsync)");
+
+        // restore the error handler
+        XSetErrorHandler( oldHandler );
+        }
+    }
+
+#endif
+
+    rGLRender.InitOpenGL(m_aGLWin);
+
+#ifdef DBG_UTIL
+    // only enable debug output in dbgutil build
+    if( GLEW_ARB_debug_output )
+    {
+        glEnable(GL_DEBUG_OUTPUT);
+        glDebugMessageCallback(&debug_callback, NULL);
+    }
+
+#endif
+
+    glEnable(GL_TEXTURE_2D);
+    glEnable(GL_CULL_FACE);
+    glCullFace(GL_BACK);
+    // Enable depth test
+    glEnable(GL_DEPTH_TEST);
+    // Accept fragment if it closer to the camera than the former one
+    glDepthFunc(GL_LESS);
+
+#if defined( WNT )
+    SwapBuffers(m_aGLWin.hDC);
+    glFlush();
+#elif defined( MACOSX )
+
+#elif defined( UNX )
+    glXSwapBuffers(m_aGLWin.dpy, m_aGLWin.win);
+#endif
+    glEnable(GL_LIGHTING);
+    GLfloat light_direction[] = { 0.0 , 0.0 , 1.0 };
+    GLfloat materialDiffuse[] = { 1.0 , 1.0 , 1.0 , 1.0};
+    glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, light_direction);
+    glMaterialfv(GL_FRONT,GL_DIFFUSE,materialDiffuse);
+    glEnable(GL_LIGHT0);
+    glEnable(GL_NORMALIZE);
+    SAL_INFO("vcl.opengl", "OpenGLContext::init----end");
+    return true;
+}
+
+void OpenGLContext::setWinSize(const Size& rSize)
+{
+    m_pWindow->SetSizePixel(rSize);
+    m_pChildWindow->SetSizePixel(rSize);
+}
+
+#if defined( WNT )
+
+bool OpenGLContext::initWindow()
+{
+    const SystemEnvData* sysData(m_pWindow->GetSystemData());
+    m_aGLWin.hWnd = sysData->hWnd;
+    SystemWindowData winData;
+    winData.nSize = sizeof(winData);
+    m_pChildWindow.reset(new SystemChildWindow(m_pWindow.get(), 0, &winData, sal_False));
+
+
+    if( m_pChildWindow )
+    {
+        m_pChildWindow->SetMouseTransparent( sal_True );
+        m_pChildWindow->SetParentClipMode( PARENTCLIPMODE_NOCLIP );
+        m_pChildWindow->EnableEraseBackground( sal_False );
+        m_pChildWindow->SetControlForeground();
+        m_pChildWindow->SetControlBackground();
+        m_pChildWindow->EnablePaint(sal_False);
+        m_aGLWin.hWnd = sysData->hWnd;
+    }
+
+    return true;
+}
+
+#elif defined( MACOSX )
+
+bool OpenGLContext::initWindow()
+{
+    return false;
+}
+
+#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 OpenGLContext::initWindow()
+{
+    const SystemEnvData* sysData(m_pWindow->GetSystemData());
+
+    m_aGLWin.dpy = reinterpret_cast<Display*>(sysData->pDisplay);
+
+    if( !glXQueryExtension( m_aGLWin.dpy, NULL, NULL ) )
+        return false;
+
+    m_aGLWin.win = sysData->aWindow;
+
+    OSL_TRACE("parent window: %d", m_aGLWin.win);
+
+    XWindowAttributes xattr;
+    XGetWindowAttributes( m_aGLWin.dpy, m_aGLWin.win, &xattr );
+
+    m_aGLWin.screen = XScreenNumberOfScreen( xattr.screen );
+
+    static int visual_attribs[] =
+    {
+        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
+    };
+
+    const SystemEnvData* pChildSysData = NULL;
+    m_pChildWindow.reset();
+
+    initOpenGLFunctionPointers();
+
+    int fbCount = 0;
+    GLXFBConfig* pFBC = glXChooseFBConfig( m_aGLWin.dpy,
+            m_aGLWin.screen,
+            visual_attribs, &fbCount );
+
+    if(!pFBC)
+    {
+        SAL_WARN("vcl.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( m_aGLWin.dpy, pFBC[i] );
+        if(pVi)
+        {
+            // pick the one with the most samples per pixel
+            int nSampleBuf = 0;
+            int nSamples = 0;
+            glXGetFBConfigAttrib( m_aGLWin.dpy, pFBC[i], GLX_SAMPLE_BUFFERS, &nSampleBuf );
+            glXGetFBConfigAttrib( m_aGLWin.dpy, pFBC[i], GLX_SAMPLES       , &nSamples  );
+
+            if ( best_fbc < 0 || (nSampleBuf && ( nSamples > best_num_samp )) )
+            {
+                best_fbc = i;
+                best_num_samp = nSamples;
+            }
+        }
+        XFree( pVi );
+    }
+
+    XVisualInfo* vi = glXGetVisualFromFBConfig( m_aGLWin.dpy, pFBC[best_fbc] );
+    if( vi )
+    {
+        SystemWindowData winData;
+        winData.nSize = sizeof(winData);
+        OSL_TRACE("using VisualID %08X", vi->visualid);
+        winData.pVisual = (void*)(vi->visual);
+        m_pChildWindow.reset(new SystemChildWindow(m_pWindow.get(), 0, &winData, false));
+        pChildSysData = m_pChildWindow->GetSystemData();
+    }
+
+    if (!m_pChildWindow || !pChildSysData)
+        return false;
+
+    m_pChildWindow->SetMouseTransparent( true );
+    m_pChildWindow->SetParentClipMode( PARENTCLIPMODE_NOCLIP );
+    m_pChildWindow->EnableEraseBackground( false );
+    m_pChildWindow->SetControlForeground();
+    m_pChildWindow->SetControlBackground();
+
+    m_aGLWin.dpy = reinterpret_cast<Display*>(pChildSysData->pDisplay);
+    m_aGLWin.win = pChildSysData->aWindow;
+    m_aGLWin.vi = vi;
+    m_aGLWin.GLXExtensions = glXQueryExtensionsString( m_aGLWin.dpy, m_aGLWin.screen );
+    OSL_TRACE("available GLX extensions: %s", m_aGLWin.GLXExtensions);
+
+    return true;
+}
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
commit 04b70c682e2cdc52b144961a83d05fd203de6884
Author: Zolnai Tamás <tamas.zolnai at collabora.com>
Date:   Thu Mar 13 14:22:59 2014 +0100

    Move OpenGLRender to vcl
    
    Change-Id: I6383ae3f94fc18aec92596b9d857d3fde5869dd6

diff --git a/Repository.mk b/Repository.mk
index ab60094..eb7a55f 100644
--- a/Repository.mk
+++ b/Repository.mk
@@ -356,6 +356,7 @@ $(eval $(call gb_Helper_register_libraries_for_install,OOOLIBS,ooo, \
 	$(if $(DISABLE_SCRIPTING),,vbahelper) \
 	vcl \
 	vclcanvas \
+	$(if $(filter FREEBSD LINUX MACOSX WNT,$(OS)),vclopengl) \
 	$(if $(and $(filter unx,$(GUIBASE)),$(filter-out MACOSX,$(OS))), \
 		vclplug_gen \
 		$(if $(ENABLE_TDE),vclplug_tde) \
diff --git a/chart2/Library_chartopengl.mk b/chart2/Library_chartopengl.mk
index 0aa6340..db3dc29 100644
--- a/chart2/Library_chartopengl.mk
+++ b/chart2/Library_chartopengl.mk
@@ -47,13 +47,13 @@ $(eval $(call gb_Library_use_libraries,chartopengl,\
     ucbhelper \
     utl \
     vcl \
+    vclopengl \
     $(gb_UWINAPI) \
 ))
 
 $(eval $(call gb_Library_add_exception_objects,chartopengl,\
     chart2/source/view/main/OpenglShapeFactory \
     chart2/source/view/main/DummyXShape \
-    chart2/source/view/main/OpenGLRender \
 ))
 
 ifeq ($(strip $(OS)),WNT)
diff --git a/chart2/Module_chart2.mk b/chart2/Module_chart2.mk
index 611e699..6c4d193 100644
--- a/chart2/Module_chart2.mk
+++ b/chart2/Module_chart2.mk
@@ -14,7 +14,6 @@ $(eval $(call gb_Module_add_targets,chart2,\
     Library_chartcore \
 	$(if $(filter FREEBSD LINUX MACOSX WNT,$(OS)), \
 		Library_chartopengl \
-		Package_opengl \
 	) \
 ))
 
diff --git a/chart2/source/view/inc/DummyXShape.hxx b/chart2/source/view/inc/DummyXShape.hxx
index cf19ff5..553b4e1 100644
--- a/chart2/source/view/inc/DummyXShape.hxx
+++ b/chart2/source/view/inc/DummyXShape.hxx
@@ -12,7 +12,7 @@
 
 #include <cppuhelper/implbase6.hxx>
 
-#include "OpenGLRender.hxx"
+#include <vcl/OpenGLRender.hxx>
 
 #include <com/sun/star/drawing/XShape.hpp>
 #include <com/sun/star/drawing/XShapes.hpp>
diff --git a/include/sal/log-areas.dox b/include/sal/log-areas.dox
index 41ef580..018e4c6 100644
--- a/include/sal/log-areas.dox
+++ b/include/sal/log-areas.dox
@@ -362,6 +362,7 @@ certain functionality.
 @li @c vcl.kde - KDE
 @li @c vcl.kde4 - KDE4
 @li @c vcl.layout - Widget layout
+ at li @c vcl.opengl - OpenGL rendering
 @li @c vcl.plugadapt - the Unix/X11 backend plugin mechanism
 @li @c vcl.osx
 @li @c vcl.osx.print
diff --git a/chart2/source/view/main/OpenGLRender.hxx b/include/vcl/OpenGLRender.hxx
similarity index 91%
rename from chart2/source/view/main/OpenGLRender.hxx
rename to include/vcl/OpenGLRender.hxx
index 8e5314d..2f7903a 100755
--- a/chart2/source/view/main/OpenGLRender.hxx
+++ b/include/vcl/OpenGLRender.hxx
@@ -7,6 +7,9 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
+#ifndef VCL_OPENGL_RENDER_HXX
+#define VCL_OPENGL_RENDER_HXX
+
 #if defined( MACOSX )
 #elif defined( UNX )
 #  include <prex.h>
@@ -90,7 +93,7 @@ typedef std::vector<GLfloat> PieSegment2DPointList;
 typedef std::vector<GLfloat> PointList;
 
 /// Holds the information of our new child window
-struct GLWindow
+struct VCL_DLLPUBLIC GLWindow
 {
 #if defined( _WIN32 )
     HWND                    hWnd;
@@ -140,7 +143,7 @@ struct GLWindow
     }
 };
 
-class OpenGLRender
+class VCL_DLLPUBLIC OpenGLRender
 {
 public:
     OpenGLRender(com::sun::star::uno::Reference<
@@ -192,16 +195,16 @@ public:
 
     void SetBackGroundColor(sal_uInt32 color1, sal_uInt32 color2, sal_uInt8 nAlpha);
 private:
-    GLint LoadShaders(const OUString& rVertexShaderName, const OUString& rFragmentShaderName);
-    int CreateTextureObj(int width, int height);
-    int CreateRenderObj(int width, int height);
-    int CreateFrameBufferObj();
+    SAL_DLLPRIVATE GLint LoadShaders(const OUString& rVertexShaderName, const OUString& rFragmentShaderName);
+    SAL_DLLPRIVATE int CreateTextureObj(int width, int height);
+    SAL_DLLPRIVATE int CreateRenderObj(int width, int height);
+    SAL_DLLPRIVATE int CreateFrameBufferObj();
 #if defined( _WIN32 )
-    int InitTempWindow(HWND *hwnd, int width, int height, PIXELFORMATDESCRIPTOR inPfd);
-    bool WGLisExtensionSupported(const char *extension);
+    SAL_DLLPRIVATE int InitTempWindow(HWND *hwnd, int width, int height, PIXELFORMATDESCRIPTOR inPfd);
+    SAL_DLLPRIVATE bool WGLisExtensionSupported(const char *extension);
 #endif
-    int CreateMultiSampleFrameBufObj();
-    int Create2DCircle(int detail);
+    SAL_DLLPRIVATE int CreateMultiSampleFrameBufObj();
+    SAL_DLLPRIVATE int Create2DCircle(int detail);
 
 private:
     // Projection matrix : default 45 degree Field of View, 4:3 ratio, display range : 0.1 unit <-> 100 units
@@ -295,4 +298,6 @@ private:
 #endif
 };
 
+#endif
+
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/Library_vclopengl.mk b/vcl/Library_vclopengl.mk
new file mode 100644
index 0000000..5c52add
--- /dev/null
+++ b/vcl/Library_vclopengl.mk
@@ -0,0 +1,59 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+#
+# 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/.
+#
+
+$(eval $(call gb_Library_Library,vclopengl))
+
+$(eval $(call gb_Library_set_include,vclopengl,\
+    $$(INCLUDE) \
+))
+
+$(eval $(call gb_Library_use_externals,vclopengl,\
+	boost_headers \
+	mdds_headers \
+	glm_headers \
+	mesa_headers \
+	glew \
+))
+
+$(eval $(call gb_Library_use_sdk_api,vclopengl))
+
+$(eval $(call gb_Library_use_libraries,vclopengl,\
+    comphelper \
+    cppu \
+    cppuhelper \
+    editeng \
+    sal \
+    vcl \
+    $(gb_UWINAPI) \
+))
+
+$(eval $(call gb_Library_add_exception_objects,vclopengl,\
+    vcl/source/opengl/OpenGLRender \
+))
+
+ifeq ($(strip $(OS)),WNT)
+$(eval $(call gb_Library_use_system_win32_libs,vclopengl,\
+    opengl32 \
+	gdi32 \
+	glu32 \
+))
+else ifeq ($(OS),MACOSX)
+$(eval $(call gb_Library_use_system_darwin_frameworks,vclopengl,\
+	OpenGL \
+))
+else ifeq ($(OS),LINUX)
+$(eval $(call gb_Library_add_libs,vclopengl,\
+    -ldl \
+    -lGL \
+    -lGLU \
+    -lX11 \
+))
+endif
+
+# vim: set noet sw=4 ts=4:
diff --git a/vcl/Module_vcl.mk b/vcl/Module_vcl.mk
index 1f3c8e2..50d847c 100644
--- a/vcl/Module_vcl.mk
+++ b/vcl/Module_vcl.mk
@@ -25,6 +25,10 @@ $(eval $(call gb_Module_add_targets,vcl,\
     $(if $(filter DESKTOP,$(BUILD_TYPE)), \
 		StaticLibrary_vclmain \
 		Executable_ui-previewer) \
+	$(if $(filter FREEBSD LINUX MACOSX WNT,$(OS)), \
+		Library_vclopengl \
+		Package_opengl \
+	) \
 ))
 
 $(eval $(call gb_Module_add_l10n_targets,vcl,\
diff --git a/chart2/Package_opengl.mk b/vcl/Package_opengl.mk
similarity index 78%
rename from chart2/Package_opengl.mk
rename to vcl/Package_opengl.mk
index ef33ebb..6eb2463 100644
--- a/chart2/Package_opengl.mk
+++ b/vcl/Package_opengl.mk
@@ -7,9 +7,9 @@
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 #
 
-$(eval $(call gb_Package_Package,chart2_opengl_shader,$(SRCDIR)/chart2/opengl))
+$(eval $(call gb_Package_Package,vcl_opengl_shader,$(SRCDIR)/vcl/source/opengl/shaders))
 
-$(eval $(call gb_Package_add_files,chart2_opengl_shader,$(LIBO_BIN_FOLDER)/opengl,\
+$(eval $(call gb_Package_add_files,vcl_opengl_shader,$(LIBO_BIN_FOLDER)/opengl,\
 	backgroundFragmentShader.glsl \
 	backgroundVertexShader.glsl \
 	commonFragmentShader.glsl \
diff --git a/chart2/source/view/main/OpenGLRender.cxx b/vcl/source/opengl/OpenGLRender.cxx
similarity index 96%
rename from chart2/source/view/main/OpenGLRender.cxx
rename to vcl/source/opengl/OpenGLRender.cxx
index 3b81db2..a4fb1b9 100755
--- a/chart2/source/view/main/OpenGLRender.cxx
+++ b/vcl/source/opengl/OpenGLRender.cxx
@@ -9,7 +9,7 @@
 
 #include <GL/glew.h>
 #include <vector>
-#include "OpenGLRender.hxx"
+#include <vcl/OpenGLRender.hxx>
 #include <vcl/bmpacc.hxx>
 #include <vcl/graph.hxx>
 #include <com/sun/star/awt/XBitmap.hpp>
@@ -74,9 +74,9 @@ int static checkGLError(const char *file, int line)
         const GLubyte* sError = gluErrorString(glErr);
 
         if (sError)
-            SAL_WARN("chart2.opengl", "GL Error #" << glErr << "(" << gluErrorString(glErr) << ") " << " in File " << file << " at line: " << line);
+            SAL_WARN("vcl.opengl", "GL Error #" << glErr << "(" << gluErrorString(glErr) << ") " << " in File " << file << " at line: " << line);
         else
-            SAL_WARN("chart2.opengl", "GL Error #" << glErr << " (no message available)" << " in File " << file << " at line: " << line);
+            SAL_WARN("vcl.opengl", "GL Error #" << glErr << " (no message available)" << " in File " << file << " at line: " << line);
 
         retCode = -1;
         return retCode;
@@ -91,7 +91,7 @@ static bool bGlewInit = false;
 #define CHECK_GL_FRAME_BUFFER_STATUS() \
     status = glCheckFramebufferStatus(GL_FRAMEBUFFER);\
     if( status != GL_FRAMEBUFFER_COMPLETE ) {\
-        SAL_WARN("chart2.opengl", "OpenGL error: " << status );\
+        SAL_WARN("vcl.opengl", "OpenGL error: " << status );\
         return -1;\
     }
 
@@ -126,7 +126,7 @@ OString loadShader(const OUString& rFilename)
     }
     else
     {
-        SAL_WARN("chart2.opengl", "could not load the file: " << aFileURL);
+        SAL_WARN("vcl.opengl", "could not load the file: " << aFileURL);
     }
 
     return OString();
@@ -159,10 +159,10 @@ GLint OpenGLRender::LoadShaders(const OUString& rVertexShaderName,const OUString
             std::vector<char> VertexShaderErrorMessage(InfoLogLength+1);
             glGetShaderInfoLog(VertexShaderID, InfoLogLength, NULL, &VertexShaderErrorMessage[0]);
             VertexShaderErrorMessage.push_back('\0');
-            SAL_WARN("chart2.opengl", "vertex shader compile failed : " << &VertexShaderErrorMessage[0]);
+            SAL_WARN("vcl.opengl", "vertex shader compile failed : " << &VertexShaderErrorMessage[0]);
         }
         else
-            SAL_WARN("chart2.opengl", "vertex shader compile failed without error log");
+            SAL_WARN("vcl.opengl", "vertex shader compile failed without error log");
 
         return 0;
     }
@@ -183,10 +183,10 @@ GLint OpenGLRender::LoadShaders(const OUString& rVertexShaderName,const OUString
             std::vector<char> FragmentShaderErrorMessage(InfoLogLength+1);
             glGetShaderInfoLog(FragmentShaderID, InfoLogLength, NULL, &FragmentShaderErrorMessage[0]);
             FragmentShaderErrorMessage.push_back('\0');
-            SAL_WARN("chart2.opengl", "fragment shader compile failed : " << &FragmentShaderErrorMessage[0]);
+            SAL_WARN("vcl.opengl", "fragment shader compile failed : " << &FragmentShaderErrorMessage[0]);
         }
         else
-            SAL_WARN("chart2.opengl", "fragment shader compile failed without error log");
+            SAL_WARN("vcl.opengl", "fragment shader compile failed without error log");
 
 
         return 0;
@@ -208,10 +208,10 @@ GLint OpenGLRender::LoadShaders(const OUString& rVertexShaderName,const OUString
             std::vector<char> ProgramErrorMessage(InfoLogLength+1);
             glGetProgramInfoLog(ProgramID, InfoLogLength, NULL, &ProgramErrorMessage[0]);
             ProgramErrorMessage.push_back('\0');
-            SAL_WARN("chart2.opengl", "Shader Program failed : " << &ProgramErrorMessage[0]);
+            SAL_WARN("vcl.opengl", "Shader Program failed : " << &ProgramErrorMessage[0]);
         }
         else
-            SAL_WARN("chart2.opengl", "shader program link failed without error log");
+            SAL_WARN("vcl.opengl", "shader program link failed without error log");
 
         return 0;
     }
@@ -241,7 +241,7 @@ int OpenGLRender::InitOpenGL(GLWindow aWindow)
         glewExperimental = GL_TRUE;
         if (glewInit() != GLEW_OK)
         {
-            SAL_WARN("chart2.opengl", "Failed to initialize GLEW");
+            SAL_WARN("vcl.opengl", "Failed to initialize GLEW");
             return -1;
         }
         else
@@ -251,7 +251,7 @@ int OpenGLRender::InitOpenGL(GLWindow aWindow)
     // These guys don't just check support but setup the vtables.
     if (glewIsSupported("framebuffer_object") != GLEW_OK)
     {
-        SAL_WARN("chart2.opengl", "GL stack has no framebuffer support");
+        SAL_WARN("vcl.opengl", "GL stack has no framebuffer support");
         return -1;
     }
 
@@ -385,7 +385,7 @@ BitmapEx OpenGLRender::GetAsBitmap()
         aWriter.Write( sOutput );
         sOutput.Close();
     } catch (...) {
-        SAL_WARN("chart2.opengl", "Error writing png to " << aName);
+        SAL_WARN("vcl.opengl", "Error writing png to " << aName);
     }
 #endif
 
@@ -535,13 +535,13 @@ void OpenGLRender::renderToBitmap()
         status = glCheckFramebufferStatus(GL_READ_FRAMEBUFFER);
         if (status != GL_FRAMEBUFFER_COMPLETE)
         {
-            SAL_INFO("chart2.opengl", "The frame buffer status is not complete!");
+            SAL_INFO("vcl.opengl", "The frame buffer status is not complete!");
         }
         glBindFramebuffer(GL_DRAW_FRAMEBUFFER, m_FboID);
         status = glCheckFramebufferStatus(GL_DRAW_FRAMEBUFFER);
         if (status != GL_FRAMEBUFFER_COMPLETE)
         {
-            SAL_INFO("chart2.opengl", "The frame buffer status is not complete!");
+            SAL_INFO("vcl.opengl", "The frame buffer status is not complete!");
         }
         glBlitFramebuffer(0, 0 ,m_iWidth, m_iHeight, 0, 0,m_iWidth ,m_iHeight, GL_COLOR_BUFFER_BIT, GL_LINEAR);
         glBindFramebuffer(GL_READ_FRAMEBUFFER,0);
@@ -659,7 +659,7 @@ void OpenGLRender::Release()
 
     glXMakeCurrent(glWin.dpy, None, NULL);
     if( glGetError() != GL_NO_ERROR ) {
-        SAL_INFO("chart2.opengl", "glError: " << (char *)gluErrorString(glGetError()));
+        SAL_INFO("vcl.opengl", "glError: " << (char *)gluErrorString(glGetError()));
     }
     glXDestroyContext(glWin.dpy, glWin.ctx);
     glWin.ctx = NULL;
@@ -805,7 +805,7 @@ bool OpenGLRender::InitMultisample(PIXELFORMATDESCRIPTOR pfd)
     //create a temp windwo to check whether support multi-sample, if support, get the format
     if (InitTempWindow(&hWnd, m_iWidth, m_iHeight, pfd) < 0)
     {
-        SAL_WARN("chart2.opengl", "Can't create temp window to test");
+        SAL_WARN("vcl.opengl", "Can't create temp window to test");
         return false;
     }
 
@@ -813,7 +813,7 @@ bool OpenGLRender::InitMultisample(PIXELFORMATDESCRIPTOR pfd)
     if (!WGLisExtensionSupported("WGL_ARB_multisample"))
     {
         mbArbMultisampleSupported = false;
-        SAL_WARN("chart2.opengl", "Device doesn't support multi sample");
+        SAL_WARN("vcl.opengl", "Device doesn't support multi sample");
         return false;
     }
     // Get Our Pixel Format
@@ -1112,7 +1112,7 @@ int OpenGLRender::RenderBubble2FBO(int)
     GLenum fbResult = glCheckFramebufferStatus(GL_FRAMEBUFFER);
     if( fbResult != GL_FRAMEBUFFER_COMPLETE )
     {
-        SAL_WARN("chart2.opengl", "error");
+        SAL_WARN("vcl.opengl", "error");
         return -1;
     }
     CHECK_GL_ERROR();
@@ -1270,7 +1270,7 @@ int OpenGLRender::CreateTextTexture(const BitmapEx& rBitmapEx, const awt::Point&
         aWriter.Write( sOutput );
         sOutput.Close();
     } catch (...) {
-        SAL_WARN("chart2.opengl", "Error writing png to " << aName);
+        SAL_WARN("vcl.opengl", "Error writing png to " << aName);
     }
 #endif
 
@@ -1533,7 +1533,7 @@ void OpenGLRender::SetBackGroundColor(sal_uInt32 color1, sal_uInt32 color2, sal_
     m_BackgroundColor[13] = (float)g / 255.0f;
     m_BackgroundColor[14] = (float)b / 255.0f;
     m_BackgroundColor[15] = nAlpha / 255.0f;
-    SAL_INFO("chart2.opengl", "color1 = " << color1 << ", color2 = " << color2);
+    SAL_INFO("vcl.opengl", "color1 = " << color1 << ", color2 = " << color2);
 
 }
 
diff --git a/chart2/opengl/backgroundFragmentShader.glsl b/vcl/source/opengl/shaders/backgroundFragmentShader.glsl
similarity index 100%
rename from chart2/opengl/backgroundFragmentShader.glsl
rename to vcl/source/opengl/shaders/backgroundFragmentShader.glsl
diff --git a/chart2/opengl/backgroundVertexShader.glsl b/vcl/source/opengl/shaders/backgroundVertexShader.glsl
similarity index 100%
rename from chart2/opengl/backgroundVertexShader.glsl
rename to vcl/source/opengl/shaders/backgroundVertexShader.glsl
diff --git a/chart2/opengl/commonFragmentShader.glsl b/vcl/source/opengl/shaders/commonFragmentShader.glsl
similarity index 100%
rename from chart2/opengl/commonFragmentShader.glsl
rename to vcl/source/opengl/shaders/commonFragmentShader.glsl
diff --git a/chart2/opengl/commonVertexShader.glsl b/vcl/source/opengl/shaders/commonVertexShader.glsl
similarity index 100%
rename from chart2/opengl/commonVertexShader.glsl
rename to vcl/source/opengl/shaders/commonVertexShader.glsl
diff --git a/chart2/opengl/debugFragmentShader.glsl b/vcl/source/opengl/shaders/debugFragmentShader.glsl
similarity index 100%
rename from chart2/opengl/debugFragmentShader.glsl
rename to vcl/source/opengl/shaders/debugFragmentShader.glsl
diff --git a/chart2/opengl/debugVertexShader.glsl b/vcl/source/opengl/shaders/debugVertexShader.glsl
similarity index 100%
rename from chart2/opengl/debugVertexShader.glsl
rename to vcl/source/opengl/shaders/debugVertexShader.glsl
diff --git a/chart2/opengl/symbolFragmentShader.glsl b/vcl/source/opengl/shaders/symbolFragmentShader.glsl
similarity index 100%
rename from chart2/opengl/symbolFragmentShader.glsl
rename to vcl/source/opengl/shaders/symbolFragmentShader.glsl
diff --git a/chart2/opengl/symbolVertexShader.glsl b/vcl/source/opengl/shaders/symbolVertexShader.glsl
similarity index 100%
rename from chart2/opengl/symbolVertexShader.glsl
rename to vcl/source/opengl/shaders/symbolVertexShader.glsl
diff --git a/chart2/opengl/textFragmentShader.glsl b/vcl/source/opengl/shaders/textFragmentShader.glsl
similarity index 100%
rename from chart2/opengl/textFragmentShader.glsl
rename to vcl/source/opengl/shaders/textFragmentShader.glsl
diff --git a/chart2/opengl/textVertexShader.glsl b/vcl/source/opengl/shaders/textVertexShader.glsl
similarity index 100%
rename from chart2/opengl/textVertexShader.glsl
rename to vcl/source/opengl/shaders/textVertexShader.glsl


More information about the Libreoffice-commits mailing list