1 ///////////////////////////////////////////////////////////////////////////////
2 // Name: wx/unix/glx11.h
3 // Purpose: class common for all X11-based wxGLCanvas implementations
4 // Author: Vadim Zeitlin
7 // Copyright: (c) 2007 Vadim Zeitlin <vadim@wxwindows.org>
8 // Licence: wxWindows licence
9 ///////////////////////////////////////////////////////////////////////////////
11 #ifndef _WX_UNIX_GLX11_H_
12 #define _WX_UNIX_GLX11_H_
16 // ----------------------------------------------------------------------------
18 // ----------------------------------------------------------------------------
20 class WXDLLIMPEXP_GL wxGLContext
: public wxGLContextBase
23 wxGLContext(wxGLCanvas
*win
, const wxGLContext
*other
= NULL
);
24 virtual ~wxGLContext();
26 virtual void SetCurrent(const wxGLCanvas
& win
) const;
29 // attach context to the drawable or unset it (if NULL)
30 static void MakeCurrent(GLXDrawable drawable
, GLXContext context
);
32 GLXContext m_glContext
;
34 DECLARE_CLASS(wxGLContext
)
37 // ----------------------------------------------------------------------------
39 // ----------------------------------------------------------------------------
41 class WXDLLIMPEXP_GL wxGLCanvasX11
: public wxGLCanvasBase
44 // initialization and dtor
45 // -----------------------
47 // default ctor doesn't do anything, InitVisual() must be called
50 // initializes the XVisualInfo corresponding to the given attributes
51 bool InitVisual(const int *attribList
);
53 // frees XVisualInfo info
54 virtual ~wxGLCanvasX11();
57 // implement wxGLCanvasBase methods
58 // --------------------------------
60 virtual void SwapBuffers();
63 // X11-specific methods
64 // --------------------
66 // return GLX version: 13 means 1.3 &c
67 static int GetGLXVersion();
69 // get the X11 handle of this window
70 virtual Window
GetXWindow() const = 0;
73 // override some wxWindow methods
74 // ------------------------------
76 // return true only if the window is realized: OpenGL context can't be
77 // created until we are
78 virtual bool IsShownOnScreen() const;
81 // implementation only from now on
82 // -------------------------------
84 // get the GLXFBConfig/XVisualInfo we use
85 GLXFBConfig
*GetGLXFBConfig() const { return m_fbc
; }
86 XVisualInfo
*GetXVisualInfo() const { return m_vi
; }
88 // initialize the global default GL visual, return false if matching visual
90 static bool InitDefaultVisualInfo(const int *attribList
);
92 // get the default GL X11 visual (may be NULL, shouldn't be freed by caller)
93 static XVisualInfo
*GetDefaultXVisualInfo() { return ms_glVisualInfo
; }
95 // free the global GL visual, called by wxGLApp
96 static void FreeDefaultVisualInfo();
99 // fills in glattrs with attributes defined by wxattrs which must be
100 // 0-terminated if it is non-NULL
102 // n is the max size of glattrs, false is returned if we overflow it, it
103 // should be at least 16 to accommodate the default attributes
104 static bool ConvertWXAttrsToGL(const int *wxattrs
, int *glattrs
, size_t n
);
106 // initializes XVisualInfo (in any case) and, if supported, GLXFBConfig
108 // returns false if XVisualInfo couldn't be initialized, otherwise caller
109 // is responsible for freeing the pointers
110 static bool InitXVisualInfo(const int *attribList
,
111 GLXFBConfig
**pFBC
, XVisualInfo
**pXVisual
);
114 // this is only used if it's supported i.e. if GL >= 1.3
117 // used for all GL versions, obtained from GLXFBConfig for GL >= 1.3
120 // the global/default versions of the above
121 static GLXFBConfig
*ms_glFBCInfo
;
122 static XVisualInfo
*ms_glVisualInfo
;
125 // ----------------------------------------------------------------------------
127 // ----------------------------------------------------------------------------
129 // this is used in wx/glcanvas.h, prevent it from defining a generic wxGLApp
130 #define wxGL_APP_DEFINED
132 class WXDLLIMPEXP_GL wxGLApp
: public wxGLAppBase
137 // implement wxGLAppBase method
138 virtual bool InitGLVisual(const int *attribList
)
140 return wxGLCanvasX11::InitDefaultVisualInfo(attribList
);
143 // and implement this wxGTK::wxApp method too
144 virtual void *GetXVisualInfo()
146 return wxGLCanvasX11::GetDefaultXVisualInfo();
149 // and override this wxApp method to clean up
152 wxGLCanvasX11::FreeDefaultVisualInfo();
154 return wxGLAppBase::OnExit();
158 DECLARE_DYNAMIC_CLASS(wxGLApp
)
161 #endif // _WX_UNIX_GLX11_H_