1 ///////////////////////////////////////////////////////////////////////////// 
   2 // Name:        wx/msw/glcanvas.h 
   3 // Purpose:     wxGLCanvas, for using OpenGL with wxWindows under Windows 
   4 // Author:      Julian Smart 
   8 // Copyright:   (c) Julian Smart 
   9 // Licence:     wxWindows licence 
  10 ///////////////////////////////////////////////////////////////////////////// 
  13 #pragma interface "glcanvas.h" 
  16 #ifndef _WX_GLCANVAS_H_ 
  17 #define _WX_GLCANVAS_H_ 
  19 #include "wx/palette.h" 
  20 #include "wx/scrolwin.h" 
  23 #include "wx/msw/winundef.h" 
  27 //--------------------------------------------------------------------------- 
  28 // Constants for attriblist 
  29 //--------------------------------------------------------------------------- 
  31 // The generic GL implementation doesn't support most of these options, 
  32 // such as stereo, auxiliary buffers, alpha channel, and accum buffer. 
  33 // Other implementations may actually support them. 
  37   WX_GL_RGBA
=1,          /* use true color palette */ 
  38   WX_GL_BUFFER_SIZE
,     /* bits for buffer if not WX_GL_RGBA */ 
  39   WX_GL_LEVEL
,           /* 0 for main buffer, >0 for overlay, <0 for underlay */ 
  40   WX_GL_DOUBLEBUFFER
,    /* use doublebuffer */ 
  41   WX_GL_STEREO
,          /* use stereoscopic display */ 
  42   WX_GL_AUX_BUFFERS
,     /* number of auxiliary buffers */ 
  43   WX_GL_MIN_RED
,         /* use red buffer with most bits (> MIN_RED bits) */ 
  44   WX_GL_MIN_GREEN
,       /* use green buffer with most bits (> MIN_GREEN bits) */ 
  45   WX_GL_MIN_BLUE
,        /* use blue buffer with most bits (> MIN_BLUE bits) */ 
  46   WX_GL_MIN_ALPHA
,       /* use blue buffer with most bits (> MIN_ALPHA bits) */ 
  47   WX_GL_DEPTH_SIZE
,      /* bits for Z-buffer (0,16,32) */ 
  48   WX_GL_STENCIL_SIZE
,    /* bits for stencil buffer */ 
  49   WX_GL_MIN_ACCUM_RED
,   /* use red accum buffer with most bits (> MIN_ACCUM_RED bits) */ 
  50   WX_GL_MIN_ACCUM_GREEN
, /* use green buffer with most bits (> MIN_ACCUM_GREEN bits) */ 
  51   WX_GL_MIN_ACCUM_BLUE
,  /* use blue buffer with most bits (> MIN_ACCUM_BLUE bits) */ 
  52   WX_GL_MIN_ACCUM_ALPHA  
/* use blue buffer with most bits (> MIN_ACCUM_ALPHA bits) */ 
  55 class WXDLLIMPEXP_GL wxGLCanvas
;     /* forward reference */ 
  57 class WXDLLIMPEXP_GL wxGLContext
: public wxObject
 
  60    wxGLContext(bool isRGB
, wxGLCanvas 
*win
, const wxPalette
& palette 
= wxNullPalette
); 
  62                bool isRGB
, wxGLCanvas 
*win
, 
  63                const wxPalette
& WXUNUSED(palette
), 
  64                const wxGLContext 
*other        
/* for sharing display lists */ 
  69    void SetColour(const wxChar 
*colour
); 
  73    inline wxWindow
* GetWindow() const { return m_window
; } 
  74    inline WXHDC 
GetHDC() const { return m_hDC
; } 
  75    inline HGLRC 
GetGLRC() const { return m_glContext
; } 
  83 class WXDLLIMPEXP_GL wxGLCanvas
: public wxWindow
 
  85    DECLARE_CLASS(wxGLCanvas
) 
  87    wxGLCanvas(wxWindow 
*parent
, wxWindowID id 
= -1, const wxPoint
& pos 
= wxDefaultPosition
, 
  88         const wxSize
& size 
= wxDefaultSize
, long style 
= 0, 
  89         const wxString
& name 
= wxGLCanvasName
, int *attribList 
= 0, const wxPalette
& palette 
= wxNullPalette
); 
  90    wxGLCanvas( wxWindow 
*parent
, const wxGLContext 
*shared 
= (wxGLContext 
*)NULL
, 
  91         wxWindowID id 
= -1, const wxPoint
& pos 
= wxDefaultPosition
, 
  92         const wxSize
& size 
= wxDefaultSize
, long style 
= 0, const wxString
& 
  93         name 
= wxGLCanvasName
, 
  94         int *attribList 
= (int*) NULL
, const wxPalette
& palette 
= wxNullPalette 
); 
  96    wxGLCanvas( wxWindow 
*parent
, const wxGLCanvas 
*shared 
= (wxGLCanvas 
*)NULL
, wxWindowID id 
= -1, 
  97         const wxPoint
& pos 
= wxDefaultPosition
, const wxSize
& size 
= wxDefaultSize
, long style 
= 0, 
  98         const wxString
& name 
= wxGLCanvasName
, int *attribList 
= 0, const wxPalette
& palette 
= wxNullPalette 
); 
 102    // Replaces wxWindow::Create functionality, since we need to use a different window class 
 103    bool Create(wxWindow 
*parent
, wxWindowID id
, 
 104           const wxPoint
& pos
, const wxSize
& size
, long style
, const wxString
& name
); 
 107    void SetColour(const wxChar 
*colour
); 
 110    void OnSize(wxSizeEvent
& event
); 
 112    void OnQueryNewPalette(wxQueryNewPaletteEvent
& event
); 
 113    void OnPaletteChanged(wxPaletteChangedEvent
& event
); 
 115    inline wxGLContext
* GetContext() const { return m_glContext
; } 
 117    inline WXHDC 
GetHDC() const { return m_hDC
; } 
 118    void SetupPixelFormat(int *attribList 
= (int*) NULL
); 
 119    void SetupPalette(const wxPalette
& palette
); 
 120    wxPalette 
CreateDefaultPalette(); 
 122    inline wxPalette
* GetPalette() const { return (wxPalette
*) & m_palette
; } 
 125     wxGLContext
*   m_glContext
;  // this is typedef-ed ptr, in fact 
 129     DECLARE_EVENT_TABLE()