| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 |
- ///////////////////////////////////////////////////////////////////////////////
- // Name: wx/unix/glx11.h
- // Purpose: class common for all X11-based wxGLCanvas implementations
- // Author: Vadim Zeitlin
- // Created: 2007-04-15
- // 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 bool SetCurrent(const wxGLCanvas& win) const;
- private:
- // attach context to the drawable or unset it (if NULL)
- static bool 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 bool SwapBuffers();
- // X11-specific methods
- // --------------------
- // return GLX version: 13 means 1.3 &c
- static int GetGLXVersion();
- // return true if multisample extension is available
- static bool IsGLXMultiSampleAvailable();
- // 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();
- // 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);
- 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);
- // 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() : wxGLAppBase() { }
- // 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_
|