LCOV - code coverage report
Current view: top level - include/vcl/opengl - OpenGLContext.hxx (source / functions) Hit Total Coverage
Test: commit 10e77ab3ff6f4314137acd6e2702a6e5c1ce1fae Lines: 3 22 13.6 %
Date: 2014-11-03 Functions: 1 5 20.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * This file is part of the LibreOffice project.
       4             :  *
       5             :  * This Source Code Form is subject to the terms of the Mozilla Public
       6             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8             :  */
       9             : 
      10             : #ifndef INCLUDED_VCL_OPENGL_OPENGLCONTEXT_HXX
      11             : #define INCLUDED_VCL_OPENGL_OPENGLCONTEXT_HXX
      12             : 
      13             : #include <string.h>
      14             : 
      15             : #include <GL/glew.h>
      16             : 
      17             : #if defined( MACOSX )
      18             : #elif defined( IOS )
      19             : #elif defined( ANDROID )
      20             : #elif defined( UNX )
      21             : #  include <prex.h>
      22             : #  include "GL/glxew.h"
      23             : #  include <postx.h>
      24             : #elif defined( _WIN32 )
      25             : #  include "prewin.h"
      26             : #  include "postwin.h"
      27             : #endif
      28             : 
      29             : #if defined( _WIN32 )
      30             : #include <GL/glext.h>
      31             : #include <GL/wglext.h>
      32             : #elif defined( MACOSX )
      33             : #include <OpenGL/OpenGL.h>
      34             : #ifdef __OBJC__
      35             : @class NSOpenGLView;
      36             : #else
      37             : class NSOpenGLView;
      38             : #endif
      39             : #elif defined( IOS )
      40             : #elif defined( ANDROID )
      41             : #elif defined( UNX )
      42             : #include <GL/glext.h>
      43             : #define GLX_GLXEXT_PROTOTYPES 1
      44             : #include <GL/glx.h>
      45             : #include <GL/glxext.h>
      46             : #endif
      47             : 
      48             : #include <vcl/vclopengl_dllapi.hxx>
      49             : #include <boost/scoped_ptr.hpp>
      50             : #include <vcl/window.hxx>
      51             : #include <tools/gen.hxx>
      52             : #include <vcl/syschild.hxx>
      53             : 
      54             : /// Holds the information of our new child window
      55             : struct GLWindow
      56             : {
      57             :     // Copy of gluCheckExtension(), from the Apache-licensed
      58             :     // https://code.google.com/p/glues/source/browse/trunk/glues/source/glues_registry.c
      59           0 :     static GLboolean checkExtension(const GLubyte* extName, const GLubyte* extString)
      60             :     {
      61           0 :       GLboolean flag=GL_FALSE;
      62             :       char* word;
      63             :       char* lookHere;
      64             :       char* deleteThis;
      65             : 
      66           0 :       if (extString==NULL)
      67             :       {
      68           0 :          return GL_FALSE;
      69             :       }
      70             : 
      71           0 :       deleteThis=lookHere=(char*)malloc(strlen((const char*)extString)+1);
      72           0 :       if (lookHere==NULL)
      73             :       {
      74           0 :          return GL_FALSE;
      75             :       }
      76             : 
      77             :       /* strtok() will modify string, so copy it somewhere */
      78           0 :       strcpy(lookHere,(const char*)extString);
      79             : 
      80           0 :       while ((word=strtok(lookHere, " "))!=NULL)
      81             :       {
      82           0 :          if (strcmp(word,(const char*)extName)==0)
      83             :          {
      84           0 :             flag=GL_TRUE;
      85           0 :             break;
      86             :          }
      87           0 :          lookHere=NULL; /* get next token */
      88             :       }
      89           0 :       free((void*)deleteThis);
      90             : 
      91           0 :       return flag;
      92             :     }
      93             : 
      94             : #if defined( _WIN32 )
      95             :     HWND                    hWnd;
      96             :     HDC                     hDC;
      97             :     HGLRC                   hRC;
      98             : #elif defined( MACOSX )
      99             : #elif defined( IOS )
     100             : #elif defined( ANDROID )
     101             : #elif defined( UNX )
     102             :     Display*           dpy;
     103             :     int                screen;
     104             :     Window             win;
     105             : #if defined( GLX_EXT_texture_from_pixmap )
     106             :     GLXFBConfig        fbc;
     107             : #endif
     108             :     XVisualInfo*       vi;
     109             :     GLXContext         ctx;
     110             : 
     111           0 :     bool HasGLXExtension( const char* name ) { return checkExtension( (const GLubyte*) name, (const GLubyte*) GLXExtensions ); }
     112             :     const char*             GLXExtensions;
     113             : #endif
     114             :     unsigned int            bpp;
     115             :     unsigned int            Width;
     116             :     unsigned int            Height;
     117             :     const GLubyte*          GLExtensions;
     118             :     bool bMultiSampleSupported;
     119             : 
     120             :     bool HasGLExtension( const char* name ) { return checkExtension( (const GLubyte*) name, GLExtensions ); }
     121             : 
     122          34 :     GLWindow()
     123             :         :
     124             : #if defined( _WIN32 )
     125             : #elif defined( MACOSX )
     126             : #elif defined( IOS )
     127             : #elif defined( ANDROID )
     128             : #elif defined( UNX )
     129             :         dpy(NULL),
     130             :         screen(0),
     131             :         win(0),
     132             : #if defined( GLX_EXT_texture_from_pixmap )
     133             :         fbc(0),
     134             : #endif
     135             :         vi(NULL),
     136             :         ctx(0),
     137             :         GLXExtensions(NULL),
     138             : #endif
     139             :         bpp(0),
     140             :         Width(0),
     141             :         Height(0),
     142             :         GLExtensions(NULL),
     143          34 :         bMultiSampleSupported(false)
     144             :     {
     145          34 :     }
     146             : 
     147             :     ~GLWindow();
     148             : };
     149             : 
     150             : class VCLOPENGL_DLLPUBLIC OpenGLContext
     151             : {
     152             : public:
     153             :     OpenGLContext();
     154             :     ~OpenGLContext();
     155             : 
     156             :     void requestLegacyContext();
     157             : 
     158             :     bool init(vcl::Window* pParent = 0);
     159             :     bool init(SystemChildWindow* pChildWindow);
     160             : 
     161             :     void makeCurrent();
     162             :     void resetCurrent();
     163             :     void swapBuffers();
     164             :     void sync();
     165             :     void show();
     166             : 
     167             :     void setWinPosAndSize(const Point &rPos, const Size& rSize);
     168             :     void setWinSize(const Size& rSize);
     169           0 :     GLWindow& getOpenGLWindow() { return m_aGLWin;}
     170             : 
     171             :     SystemChildWindow* getChildWindow();
     172             :     const SystemChildWindow* getChildWindow() const;
     173             : 
     174             :     void renderToFile();
     175             : 
     176           0 :     bool isInitialized()
     177             :     {
     178           0 :         return mbInitialized;
     179             :     }
     180             : 
     181             :     bool supportMultiSampling() const;
     182             : 
     183             :     static SystemWindowData generateWinData(vcl::Window* pParent, bool bRequestLegacyContext);
     184             : 
     185             : private:
     186             :     SAL_DLLPRIVATE bool initWindow();
     187             :     SAL_DLLPRIVATE bool ImplInit();
     188             : 
     189             : #if defined(MACOSX)
     190             :     NSOpenGLView* getOpenGLView();
     191             : #endif
     192             : 
     193             :     GLWindow m_aGLWin;
     194             :     boost::scoped_ptr<vcl::Window> m_pWindow;
     195             :     vcl::Window* mpWindow; //points to m_pWindow or the parent window, don't delete it
     196             :     SystemChildWindow* m_pChildWindow;
     197             :     boost::scoped_ptr<SystemChildWindow> m_pChildWindowGC;
     198             :     bool mbInitialized;
     199             :     bool mbRequestLegacyContext;
     200             : };
     201             : 
     202             : #endif
     203             : 
     204             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10