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 bool SetCurrent(const wxGLCanvas
& win
) const;
29 // attach context to the drawable or unset it (if NULL)
30 static bool 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 bool SwapBuffers();
63 // X11-specific methods
64 // --------------------
66 // return GLX version: 13 means 1.3 &c
67 static int GetGLXVersion();
69 // return true if multisample extension is available
70 static bool IsGLXMultiSampleAvailable();
72 // get the X11 handle of this window
73 virtual Window
GetXWindow() const = 0;
76 // override some wxWindow methods
77 // ------------------------------
79 // return true only if the window is realized: OpenGL context can't be
80 // created until we are
81 virtual bool IsShownOnScreen() const;
84 // implementation only from now on
85 // -------------------------------
87 // get the GLXFBConfig/XVisualInfo we use
88 GLXFBConfig
*GetGLXFBConfig() const { return m_fbc
; }
89 XVisualInfo
*GetXVisualInfo() const { return m_vi
; }
91 // initialize the global default GL visual, return false if matching visual
93 static bool InitDefaultVisualInfo(const int *attribList
);
95 // get the default GL X11 visual (may be NULL, shouldn't be freed by caller)
96 static XVisualInfo
*GetDefaultXVisualInfo() { return ms_glVisualInfo
; }
98 // free the global GL visual, called by wxGLApp
99 static void FreeDefaultVisualInfo();
101 // initializes XVisualInfo (in any case) and, if supported, GLXFBConfig
103 // returns false if XVisualInfo couldn't be initialized, otherwise caller
104 // is responsible for freeing the pointers
105 static bool InitXVisualInfo(const int *attribList
,
106 GLXFBConfig
**pFBC
, XVisualInfo
**pXVisual
);
109 // fills in glattrs with attributes defined by wxattrs which must be
110 // 0-terminated if it is non-NULL
112 // n is the max size of glattrs, false is returned if we overflow it, it
113 // should be at least 16 to accommodate the default attributes
114 static bool ConvertWXAttrsToGL(const int *wxattrs
, int *glattrs
, size_t n
);
117 // this is only used if it's supported i.e. if GL >= 1.3
120 // used for all GL versions, obtained from GLXFBConfig for GL >= 1.3
123 // the global/default versions of the above
124 static GLXFBConfig
*ms_glFBCInfo
;
125 static XVisualInfo
*ms_glVisualInfo
;
128 // ----------------------------------------------------------------------------
130 // ----------------------------------------------------------------------------
132 // this is used in wx/glcanvas.h, prevent it from defining a generic wxGLApp
133 #define wxGL_APP_DEFINED
135 class WXDLLIMPEXP_GL wxGLApp
: public wxGLAppBase
138 wxGLApp() : wxGLAppBase() { }
140 // implement wxGLAppBase method
141 virtual bool InitGLVisual(const int *attribList
)
143 return wxGLCanvasX11::InitDefaultVisualInfo(attribList
);
146 // and implement this wxGTK::wxApp method too
147 virtual void *GetXVisualInfo()
149 return wxGLCanvasX11::GetDefaultXVisualInfo();
152 // and override this wxApp method to clean up
155 wxGLCanvasX11::FreeDefaultVisualInfo();
157 return wxGLAppBase::OnExit();
161 DECLARE_DYNAMIC_CLASS(wxGLApp
)
164 #endif // _WX_UNIX_GLX11_H_