git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@47195 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
		
			
				
	
	
		
			163 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			163 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| ///////////////////////////////////////////////////////////////////////////////
 | |
| // Name:        wx/unix/glx11.h
 | |
| // Purpose:     class common for all X11-based wxGLCanvas implementations
 | |
| // Author:      Vadim Zeitlin
 | |
| // Created:     2007-04-15
 | |
| // RCS-ID:      $Id$
 | |
| // Copyright:   (c) 2007 Vadim Zeitlin <vadim@wxwindows.org>
 | |
| // Licence:     wxWindows licence
 | |
| ///////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| #ifndef _WX_UNIX_GLX11_H_
 | |
| #define _WX_UNIX_GLX11_H_
 | |
| 
 | |
| #include <GL/glx.h>
 | |
| 
 | |
| // ----------------------------------------------------------------------------
 | |
| // wxGLContext
 | |
| // ----------------------------------------------------------------------------
 | |
| 
 | |
| class WXDLLIMPEXP_GL wxGLContext : public wxGLContextBase
 | |
| {
 | |
| public:
 | |
|     wxGLContext(wxGLCanvas *win, const wxGLContext *other = NULL);
 | |
|     virtual ~wxGLContext();
 | |
| 
 | |
|     virtual void SetCurrent(const wxGLCanvas& win) const;
 | |
| 
 | |
| private:
 | |
|     // attach context to the drawable or unset it (if NULL)
 | |
|     static void MakeCurrent(GLXDrawable drawable, GLXContext context);
 | |
| 
 | |
|     GLXContext m_glContext;
 | |
| 
 | |
|     DECLARE_CLASS(wxGLContext)
 | |
| };
 | |
| 
 | |
| // ----------------------------------------------------------------------------
 | |
| // wxGLCanvasX11
 | |
| // ----------------------------------------------------------------------------
 | |
| 
 | |
| class WXDLLIMPEXP_GL wxGLCanvasX11 : public wxGLCanvasBase
 | |
| {
 | |
| public:
 | |
|     // initialization and dtor
 | |
|     // -----------------------
 | |
| 
 | |
|     // default ctor doesn't do anything, InitVisual() must be called
 | |
|     wxGLCanvasX11();
 | |
| 
 | |
|     // initializes the XVisualInfo corresponding to the given attributes
 | |
|     bool InitVisual(const int *attribList);
 | |
| 
 | |
|     // frees XVisualInfo info
 | |
|     virtual ~wxGLCanvasX11();
 | |
| 
 | |
| 
 | |
|     // implement wxGLCanvasBase methods
 | |
|     // --------------------------------
 | |
| 
 | |
|     virtual void SwapBuffers();
 | |
| 
 | |
| 
 | |
|     // X11-specific methods
 | |
|     // --------------------
 | |
| 
 | |
|     // return GLX version: 13 means 1.3 &c
 | |
|     static int GetGLXVersion();
 | |
| 
 | |
|     // get the X11 handle of this window
 | |
|     virtual Window GetXWindow() const = 0;
 | |
| 
 | |
| 
 | |
|     // override some wxWindow methods
 | |
|     // ------------------------------
 | |
| 
 | |
|     // return true only if the window is realized: OpenGL context can't be
 | |
|     // created until we are
 | |
|     virtual bool IsShownOnScreen() const;
 | |
| 
 | |
| 
 | |
|     // implementation only from now on
 | |
|     // -------------------------------
 | |
| 
 | |
|     // get the GLXFBConfig/XVisualInfo we use
 | |
|     GLXFBConfig *GetGLXFBConfig() const { return m_fbc; }
 | |
|     XVisualInfo *GetXVisualInfo() const { return m_vi; }
 | |
| 
 | |
|     // initialize the global default GL visual, return false if matching visual
 | |
|     // not found
 | |
|     static bool InitDefaultVisualInfo(const int *attribList);
 | |
| 
 | |
|     // get the default GL X11 visual (may be NULL, shouldn't be freed by caller)
 | |
|     static XVisualInfo *GetDefaultXVisualInfo() { return ms_glVisualInfo; }
 | |
| 
 | |
|     // free the global GL visual, called by wxGLApp
 | |
|     static void FreeDefaultVisualInfo();
 | |
| 
 | |
| private:
 | |
|     // fills in glattrs with attributes defined by wxattrs which must be
 | |
|     // 0-terminated if it is non-NULL
 | |
|     //
 | |
|     // n is the max size of glattrs, false is returned if we overflow it, it
 | |
|     // should be at least 16 to accommodate the default attributes
 | |
|     static bool ConvertWXAttrsToGL(const int *wxattrs, int *glattrs, size_t n);
 | |
| 
 | |
|     // initializes XVisualInfo (in any case) and, if supported, GLXFBConfig
 | |
|     //
 | |
|     // returns false if XVisualInfo couldn't be initialized, otherwise caller
 | |
|     // is responsible for freeing the pointers
 | |
|     static bool InitXVisualInfo(const int *attribList,
 | |
|                                 GLXFBConfig **pFBC, XVisualInfo **pXVisual);
 | |
| 
 | |
| 
 | |
|     // this is only used if it's supported i.e. if GL >= 1.3
 | |
|     GLXFBConfig *m_fbc;
 | |
| 
 | |
|     // used for all GL versions, obtained from GLXFBConfig for GL >= 1.3
 | |
|     XVisualInfo *m_vi;
 | |
| 
 | |
|     // the global/default versions of the above
 | |
|     static GLXFBConfig *ms_glFBCInfo;
 | |
|     static XVisualInfo *ms_glVisualInfo;
 | |
| };
 | |
| 
 | |
| // ----------------------------------------------------------------------------
 | |
| // wxGLApp
 | |
| // ----------------------------------------------------------------------------
 | |
| 
 | |
| // this is used in wx/glcanvas.h, prevent it from defining a generic wxGLApp
 | |
| #define wxGL_APP_DEFINED
 | |
| 
 | |
| class WXDLLIMPEXP_GL wxGLApp : public wxGLAppBase
 | |
| {
 | |
| public:
 | |
|     wxGLApp();
 | |
| 
 | |
|     // implement wxGLAppBase method
 | |
|     virtual bool InitGLVisual(const int *attribList)
 | |
|     {
 | |
|         return wxGLCanvasX11::InitDefaultVisualInfo(attribList);
 | |
|     }
 | |
| 
 | |
|     // and implement this wxGTK::wxApp method too
 | |
|     virtual void *GetXVisualInfo()
 | |
|     {
 | |
|         return wxGLCanvasX11::GetDefaultXVisualInfo();
 | |
|     }
 | |
| 
 | |
|     // and override this wxApp method to clean up
 | |
|     virtual int OnExit()
 | |
|     {
 | |
|         wxGLCanvasX11::FreeDefaultVisualInfo();
 | |
| 
 | |
|         return wxGLAppBase::OnExit();
 | |
|     }
 | |
| 
 | |
| private:
 | |
|     DECLARE_DYNAMIC_CLASS(wxGLApp)
 | |
| };
 | |
| 
 | |
| #endif // _WX_UNIX_GLX11_H_
 | |
| 
 |