]> git.saurik.com Git - wxWidgets.git/blob - include/wx/unix/glx11.h
A number of focus handling improvements:
[wxWidgets.git] / include / wx / unix / glx11.h
1 ///////////////////////////////////////////////////////////////////////////////
2 // Name: wx/unix/glx11.h
3 // Purpose: class common for all X11-based wxGLCanvas implementations
4 // Author: Vadim Zeitlin
5 // Created: 2007-04-15
6 // RCS-ID: $Id$
7 // Copyright: (c) 2007 Vadim Zeitlin <vadim@wxwindows.org>
8 // Licence: wxWindows licence
9 ///////////////////////////////////////////////////////////////////////////////
10
11 #ifndef _WX_UNIX_GLX11_H_
12 #define _WX_UNIX_GLX11_H_
13
14 #include <GL/glx.h>
15
16 // ----------------------------------------------------------------------------
17 // wxGLContext
18 // ----------------------------------------------------------------------------
19
20 class WXDLLIMPEXP_GL wxGLContext : public wxGLContextBase
21 {
22 public:
23 wxGLContext(wxGLCanvas *win, const wxGLContext *other = NULL);
24 virtual ~wxGLContext();
25
26 virtual void SetCurrent(const wxGLCanvas& win) const;
27
28 private:
29 // attach context to the drawable or unset it (if NULL)
30 static void MakeCurrent(GLXDrawable drawable, GLXContext context);
31
32 GLXContext m_glContext;
33
34 DECLARE_CLASS(wxGLContext)
35 };
36
37 // ----------------------------------------------------------------------------
38 // wxGLCanvasX11
39 // ----------------------------------------------------------------------------
40
41 class WXDLLIMPEXP_GL wxGLCanvasX11 : public wxGLCanvasBase
42 {
43 public:
44 // initialization and dtor
45 // -----------------------
46
47 // default ctor doesn't do anything, InitVisual() must be called
48 wxGLCanvasX11();
49
50 // initializes the XVisualInfo corresponding to the given attributes
51 bool InitVisual(const int *attribList);
52
53 // frees XVisualInfo info
54 virtual ~wxGLCanvasX11();
55
56
57 // implement wxGLCanvasBase methods
58 // --------------------------------
59
60 virtual void SwapBuffers();
61
62
63 // X11-specific methods
64 // --------------------
65
66 // return GLX version: 13 means 1.3 &c
67 static int GetGLXVersion();
68
69 // get the X11 handle of this window
70 virtual Window GetXWindow() const = 0;
71
72
73 // override some wxWindow methods
74 // ------------------------------
75
76 // return true only if the window is realized: OpenGL context can't be
77 // created until we are
78 virtual bool IsShownOnScreen() const;
79
80
81 // implementation only from now on
82 // -------------------------------
83
84 // get the GLXFBConfig/XVisualInfo we use
85 GLXFBConfig *GetGLXFBConfig() const { return m_fbc; }
86 XVisualInfo *GetXVisualInfo() const { return m_vi; }
87
88 // initialize the global default GL visual, return false if matching visual
89 // not found
90 static bool InitDefaultVisualInfo(const int *attribList);
91
92 // get the default GL X11 visual (may be NULL, shouldn't be freed by caller)
93 static XVisualInfo *GetDefaultXVisualInfo() { return ms_glVisualInfo; }
94
95 // free the global GL visual, called by wxGLApp
96 static void FreeDefaultVisualInfo();
97
98 private:
99 // fills in glattrs with attributes defined by wxattrs which must be
100 // 0-terminated if it is non-NULL
101 //
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);
105
106 // initializes XVisualInfo (in any case) and, if supported, GLXFBConfig
107 //
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);
112
113
114 // this is only used if it's supported i.e. if GL >= 1.3
115 GLXFBConfig *m_fbc;
116
117 // used for all GL versions, obtained from GLXFBConfig for GL >= 1.3
118 XVisualInfo *m_vi;
119
120 // the global/default versions of the above
121 static GLXFBConfig *ms_glFBCInfo;
122 static XVisualInfo *ms_glVisualInfo;
123 };
124
125 // ----------------------------------------------------------------------------
126 // wxGLApp
127 // ----------------------------------------------------------------------------
128
129 // this is used in wx/glcanvas.h, prevent it from defining a generic wxGLApp
130 #define wxGL_APP_DEFINED
131
132 class WXDLLIMPEXP_GL wxGLApp : public wxGLAppBase
133 {
134 public:
135 wxGLApp();
136
137 // implement wxGLAppBase method
138 virtual bool InitGLVisual(const int *attribList)
139 {
140 return wxGLCanvasX11::InitDefaultVisualInfo(attribList);
141 }
142
143 // and implement this wxGTK::wxApp method too
144 virtual void *GetXVisualInfo()
145 {
146 return wxGLCanvasX11::GetDefaultXVisualInfo();
147 }
148
149 // and override this wxApp method to clean up
150 virtual int OnExit()
151 {
152 wxGLCanvasX11::FreeDefaultVisualInfo();
153
154 return wxGLAppBase::OnExit();
155 }
156
157 private:
158 DECLARE_DYNAMIC_CLASS(wxGLApp)
159 };
160
161 #endif // _WX_UNIX_GLX11_H_
162