1/////////////////////////////////////////////////////////////////////////////
2// Name:        wx/msw/glcanvas.h
3// Purpose:     wxGLCanvas, for using OpenGL with wxWidgets under Windows
4// Author:      Julian Smart
5// Modified by:
6// Created:     04/01/98
7// RCS-ID:      $Id: glcanvas.h 53135 2008-04-12 02:31:04Z VZ $
8// Copyright:   (c) Julian Smart
9// Licence:     wxWindows licence
10/////////////////////////////////////////////////////////////////////////////
11
12#ifndef _WX_GLCANVAS_H_
13#define _WX_GLCANVAS_H_
14
15#include "wx/palette.h"
16#include "wx/scrolwin.h"
17
18#include "wx/msw/wrapwin.h"
19
20#include <GL/gl.h>
21
22class WXDLLIMPEXP_FWD_GL wxGLCanvas;     /* forward reference */
23
24class WXDLLIMPEXP_GL wxGLContext: public wxObject
25{
26public:
27    wxGLContext(wxGLCanvas *win, const wxGLContext* other=NULL /* for sharing display lists */ );
28    virtual ~wxGLContext();
29
30    void SetCurrent(const wxGLCanvas& win) const;
31    inline HGLRC GetGLRC() const { return m_glContext; }
32
33protected:
34    HGLRC m_glContext;
35
36private:
37    DECLARE_CLASS(wxGLContext)
38};
39
40class WXDLLIMPEXP_GL wxGLCanvas: public wxWindow
41{
42public:
43    // This ctor is identical to the next, except for the fact that it
44    // doesn't create an implicit wxGLContext.
45    // The attribList parameter has been moved to avoid overload clashes.
46    wxGLCanvas(wxWindow *parent, wxWindowID id = wxID_ANY,
47        int* attribList = 0,
48        const wxPoint& pos = wxDefaultPosition,
49        const wxSize& size = wxDefaultSize, long style = 0,
50        const wxString& name = wxGLCanvasName,
51        const wxPalette& palette = wxNullPalette);
52
53    wxGLCanvas(wxWindow *parent, wxWindowID id = wxID_ANY,
54        const wxPoint& pos = wxDefaultPosition,
55        const wxSize& size = wxDefaultSize, long style = 0,
56        const wxString& name = wxGLCanvasName, int *attribList = 0,
57        const wxPalette& palette = wxNullPalette);
58
59    wxGLCanvas(wxWindow *parent,
60        const wxGLContext *shared,
61        wxWindowID id = wxID_ANY,
62        const wxPoint& pos = wxDefaultPosition,
63        const wxSize& size = wxDefaultSize,
64        long style = 0,
65        const wxString& name = wxGLCanvasName,
66        int *attribList = (int *) NULL,
67        const wxPalette& palette = wxNullPalette);
68
69    wxGLCanvas(wxWindow *parent,
70        const wxGLCanvas *shared,
71        wxWindowID id = wxID_ANY,
72        const wxPoint& pos = wxDefaultPosition,
73        const wxSize& size = wxDefaultSize,
74        long style = 0,
75        const wxString& name = wxGLCanvasName,
76        int *attribList = 0,
77        const wxPalette& palette = wxNullPalette);
78
79    virtual ~wxGLCanvas();
80
81    // Replaces wxWindow::Create functionality, since
82    // we need to use a different window class
83    bool Create(wxWindow *parent, wxWindowID id,
84        const wxPoint& pos, const wxSize& size,
85        long style, const wxString& name);
86
87    void SetCurrent(const wxGLContext& RC) const;
88    void SetCurrent();
89
90#ifdef __WXUNIVERSAL__
91    virtual bool SetCurrent(bool doit) { return wxWindow::SetCurrent(doit); };
92#endif
93
94    void SetColour(const wxChar *colour);
95
96    void SwapBuffers();
97
98    void OnSize(wxSizeEvent& event);
99
100    void OnQueryNewPalette(wxQueryNewPaletteEvent& event);
101
102    void OnPaletteChanged(wxPaletteChangedEvent& event);
103
104    inline wxGLContext* GetContext() const { return m_glContext; }
105
106    inline WXHDC GetHDC() const { return m_hDC; }
107
108    void SetupPixelFormat(int *attribList = (int *) NULL);
109
110    void SetupPalette(const wxPalette& palette);
111
112    wxPalette CreateDefaultPalette();
113
114    inline wxPalette* GetPalette() const { return (wxPalette *) &m_palette; }
115
116protected:
117    wxGLContext*   m_glContext;  // this is typedef-ed ptr, in fact
118    wxPalette      m_palette;
119    WXHDC          m_hDC;
120
121private:
122    DECLARE_EVENT_TABLE()
123    DECLARE_CLASS(wxGLCanvas)
124};
125
126#endif
127    // _WX_GLCANVAS_H_
128
129