]>
git.saurik.com Git - wxWidgets.git/blob - wxPython/contrib/glcanvas/msw/myglcanvas.h
   1 ///////////////////////////////////////////////////////////////////////////// 
   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_ 
  21 #define wxUSE_GLCANVAS 1 
  23 #include <wx/palette.h> 
  24 #include <wx/scrolwin.h> 
  30 //--------------------------------------------------------------------------- 
  31 // Constants for attriblist 
  32 //--------------------------------------------------------------------------- 
  34 // The generic GL implementation doesn't support most of these options, 
  35 // such as stereo, auxiliary buffers, alpha channel, and accum buffer. 
  36 // Other implementations may actually support them. 
  40   WX_GL_RGBA
=1,          /* use true color palette */ 
  41   WX_GL_BUFFER_SIZE
,     /* bits for buffer if not WX_GL_RGBA */ 
  42   WX_GL_LEVEL
,           /* 0 for main buffer, >0 for overlay, <0 for underlay */ 
  43   WX_GL_DOUBLEBUFFER
,    /* use doublebuffer */ 
  44   WX_GL_STEREO
,          /* use stereoscopic display */ 
  45   WX_GL_AUX_BUFFERS
,     /* number of auxiliary buffers */ 
  46   WX_GL_MIN_RED
,         /* use red buffer with most bits (> MIN_RED bits) */ 
  47   WX_GL_MIN_GREEN
,       /* use green buffer with most bits (> MIN_GREEN bits) */ 
  48   WX_GL_MIN_BLUE
,        /* use blue buffer with most bits (> MIN_BLUE bits) */ 
  49   WX_GL_MIN_ALPHA
,       /* use blue buffer with most bits (> MIN_ALPHA bits) */ 
  50   WX_GL_DEPTH_SIZE
,      /* bits for Z-buffer (0,16,32) */ 
  51   WX_GL_STENCIL_SIZE
,    /* bits for stencil buffer */ 
  52   WX_GL_MIN_ACCUM_RED
,   /* use red accum buffer with most bits (> MIN_ACCUM_RED bits) */ 
  53   WX_GL_MIN_ACCUM_GREEN
, /* use green buffer with most bits (> MIN_ACCUM_GREEN bits) */ 
  54   WX_GL_MIN_ACCUM_BLUE
,  /* use blue buffer with most bits (> MIN_ACCUM_BLUE bits) */ 
  55   WX_GL_MIN_ACCUM_ALPHA  
/* use blue buffer with most bits (> MIN_ACCUM_ALPHA bits) */ 
  58 class wxGLCanvas
;     /* forward reference */ 
  60 class wxGLContext
: public wxObject
 
  63    wxGLContext(bool isRGB
, wxGLCanvas 
*win
, const wxPalette
& palette 
= wxNullPalette
); 
  65                bool isRGB
, wxGLCanvas 
*win
, 
  66                const wxPalette
& WXUNUSED(palette
), 
  67                const wxGLContext 
*other        
/* for sharing display lists */ 
  72    void SetColour(const char *colour
); 
  76    inline wxWindow
* GetWindow() const { return m_window
; } 
  77    inline WXHDC 
GetHDC() const { return m_hDC
; } 
  78    inline HGLRC 
GetGLRC() const { return m_glContext
; } 
  86 class wxGLCanvas
: public wxWindow
 
  88    DECLARE_CLASS(wxGLCanvas
) 
  90    wxGLCanvas(wxWindow 
*parent
, wxWindowID id 
= -1, const wxPoint
& pos 
= wxDefaultPosition
, 
  91         const wxSize
& size 
= wxDefaultSize
, long style 
= 0, 
  92         const wxString
& name 
= "GLCanvas", int *attribList 
= 0, const wxPalette
& palette 
= wxNullPalette
); 
  93    wxGLCanvas( wxWindow 
*parent
, const wxGLContext 
*shared 
= (wxGLContext 
*)NULL
, 
  94         wxWindowID id 
= -1, const wxPoint
& pos 
= wxDefaultPosition
, 
  95         const wxSize
& size 
= wxDefaultSize
, long style 
= 0, const wxString
& name 
= "GLCanvas", 
  96         int *attribList 
= (int*) NULL
, const wxPalette
& palette 
= wxNullPalette 
); 
  98    wxGLCanvas( wxWindow 
*parent
, const wxGLCanvas 
*shared 
= (wxGLCanvas 
*)NULL
, wxWindowID id 
= -1, 
  99         const wxPoint
& pos 
= wxDefaultPosition
, const wxSize
& size 
= wxDefaultSize
, long style 
= 0, 
 100         const wxString
& name 
= "GLCanvas", int *attribList 
= 0, const wxPalette
& palette 
= wxNullPalette 
); 
 104    // Replaces wxWindow::Create functionality, since we need to use a different window class 
 105    bool Create(wxWindow 
*parent
, wxWindowID id
, 
 106           const wxPoint
& pos
, const wxSize
& size
, long style
, const wxString
& name
); 
 109    void SetColour(const char *colour
); 
 112    void OnSize(wxSizeEvent
& event
); 
 114    void OnQueryNewPalette(wxQueryNewPaletteEvent
& event
); 
 115    void OnPaletteChanged(wxPaletteChangedEvent
& event
); 
 117    inline wxGLContext
* GetContext() const { return m_glContext
; } 
 119    inline WXHDC 
GetHDC() const { return m_hDC
; } 
 120    void SetupPixelFormat(int *attribList 
= (int*) NULL
); 
 121    void SetupPalette(const wxPalette
& palette
); 
 122    wxPalette 
CreateDefaultPalette(); 
 124    inline wxPalette
* GetPalette() const { return (wxPalette
*) & m_palette
; } 
 127     wxGLContext
*   m_glContext
;  // this is typedef-ed ptr, in fact 
 131     DECLARE_EVENT_TABLE() 
 136 class wxGLApp 
: public wxApp
 
 139     wxGLApp() : wxApp() { } 
 142     // use this in the constructor of the user-derived wxGLApp class to 
 143     // determine if an OpenGL rendering context with these attributes 
 144     // is available - returns TRUE if so, FALSE if not. 
 145     bool InitGLVisual(int *attribList
); 
 148     DECLARE_DYNAMIC_CLASS(wxGLApp
)