]> git.saurik.com Git - wxWidgets.git/blame_incremental - include/wx/unix/glx11.h
set eol-style
[wxWidgets.git] / include / wx / unix / glx11.h
... / ...
CommitLineData
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
20class WXDLLIMPEXP_GL wxGLContext : public wxGLContextBase
21{
22public:
23 wxGLContext(wxGLCanvas *win, const wxGLContext *other = NULL);
24 virtual ~wxGLContext();
25
26 virtual void SetCurrent(const wxGLCanvas& win) const;
27
28private:
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
41class WXDLLIMPEXP_GL wxGLCanvasX11 : public wxGLCanvasBase
42{
43public:
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
98private:
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
132class WXDLLIMPEXP_GL wxGLApp : public wxGLAppBase
133{
134public:
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
157private:
158 DECLARE_DYNAMIC_CLASS(wxGLApp)
159};
160
161#endif // _WX_UNIX_GLX11_H_
162