]>
Commit | Line | Data |
---|---|---|
8b089c5e JS |
1 | \section{\class{wxGLCanvas}}\label{wxglcanvas} |
2 | ||
dc3065a5 VZ |
3 | wxGLCanvas is a class for displaying OpenGL graphics. It is always used in |
4 | conjunction with \helpref{wxGLContext}{wxglcontext} as the context can only be | |
5 | be made current (i.e. active for the OpenGL commands) when it is associated to | |
6 | a wxGLCanvas. | |
7 | ||
8 | More precisely, you first need to create a wxGLCanvas window and then create an | |
9 | instance of a \helpref{wxGLContext}{wxglcontext} that is initialized with this | |
10 | wxGLCanvas and then later use either \helpref{wxGLCanvas::SetCurrent}{wxglcanvassetcurrentrc} | |
11 | with the instance of the \helpref{wxGLContext}{wxglcontext} or | |
12 | \helpref{wxGLContext::SetCurrent}{wxglcontextsetcurrent} with the instance of | |
13 | the \helpref{wxGLCanvas}{wxglcanvas} (which might be not the same as was used | |
14 | for the creation of the context) to bind the OpenGL state that is represented | |
15 | by the rendering context to the canvas, and then finally call | |
16 | \helpref{wxGLCanvas::SwapBuffers}{wxglcanvasswapbuffers} to swap the buffers of | |
17 | the OpenGL canvas and thus show your current output. | |
18 | ||
19 | Notice that previous versions of wxWidgets used to implicitly create a | |
20 | wxGLContext inside wxGLCanvas itself. This is still supported in the current | |
21 | version but is deprecated now and will be removed in the future, please update | |
22 | your code to create the rendering contexts explicitly. | |
b7ea712c RR |
23 | |
24 | To set up the attributes for the canvas (number of bits for the depth buffer, | |
dd27a3bd JS |
25 | number of bits for the stencil buffer and so on) you should set up the correct values of |
26 | the {\it attribList} parameter. The values that should be set up and their meanings will be described below. | |
27 | ||
dc3065a5 VZ |
28 | Notice that OpenGL is not enabled by default. To switch it on, you need to edit |
29 | setup.h under Windows and set {\tt wxUSE\_GLCANVAS} to $1$ (you may also need | |
30 | to have to add {\tt opengl32.lib} and {\tt glu32.lib} to the list of libraries | |
31 | your program is linked with). On Unix, pass \verb=--with-opengl= to configure. | |
8b089c5e JS |
32 | |
33 | \wxheading{Derived from} | |
34 | ||
8b089c5e JS |
35 | \helpref{wxWindow}{wxwindow}\\ |
36 | \helpref{wxEvtHandler}{wxevthandler}\\ | |
37 | \helpref{wxObject}{wxobject} | |
38 | ||
39 | \wxheading{Include files} | |
40 | ||
41 | <wx/glcanvas.h> | |
42 | ||
43 | \wxheading{Window styles} | |
44 | ||
45 | There are no specific window styles for this class. | |
46 | ||
47 | See also \helpref{window styles overview}{windowstyles}. | |
48 | ||
dd27a3bd JS |
49 | \wxheading{Constants} |
50 | ||
51 | The generic GL implementation doesn't support many of these options, such as stereo, auxiliary buffers, | |
52 | alpha channel, and accum buffer. Other implementations may support them. | |
53 | ||
54 | \twocolwidtha{5cm} | |
55 | \begin{twocollist}\itemsep=0pt | |
56 | \twocolitem{\windowstyle{WX\_GL\_RGBA}}{Use true colour} | |
57 | \twocolitem{\windowstyle{WX\_GL\_BUFFER\_SIZE}}{Bits for buffer if not WX\_GL\_RGBA} | |
58 | \twocolitem{\windowstyle{WX\_GL\_LEVEL}}{0 for main buffer, >0 for overlay, <0 for underlay} | |
59 | \twocolitem{\windowstyle{WX\_GL\_DOUBLEBUFFER}}{Use doublebuffer} | |
60 | \twocolitem{\windowstyle{WX\_GL\_STEREO}}{Use stereoscopic display} | |
61 | \twocolitem{\windowstyle{WX\_GL\_AUX\_BUFFERS}}{Number of auxiliary buffers (not all implementation support this option)} | |
62 | \twocolitem{\windowstyle{WX\_GL\_MIN\_RED}}{Use red buffer with most bits (> MIN\_RED bits)} | |
63 | \twocolitem{\windowstyle{WX\_GL\_MIN\_GREEN}}{Use green buffer with most bits (> MIN\_GREEN bits) } | |
64 | \twocolitem{\windowstyle{WX\_GL\_MIN\_BLUE}}{Use blue buffer with most bits (> MIN\_BLUE bits) } | |
65 | \twocolitem{\windowstyle{WX\_GL\_MIN\_ALPHA}}{Use alpha buffer with most bits (> MIN\_ALPHA bits)} | |
66 | \twocolitem{\windowstyle{WX\_GL\_DEPTH\_SIZE}}{Bits for Z-buffer (0,16,32)} | |
67 | \twocolitem{\windowstyle{WX\_GL\_STENCIL\_SIZE}}{Bits for stencil buffer} | |
68 | \twocolitem{\windowstyle{WX\_GL\_MIN\_ACCUM\_RED}}{Use red accum buffer with most bits (> MIN\_ACCUM\_RED bits)} | |
69 | \twocolitem{\windowstyle{WX\_GL\_MIN\_ACCUM\_GREEN}}{Use green buffer with most bits (> MIN\_ACCUM\_GREEN bits)} | |
70 | \twocolitem{\windowstyle{WX\_GL\_MIN\_ACCUM\_BLUE}}{Use blue buffer with most bits (> MIN\_ACCUM\_BLUE bits)} | |
71 | \twocolitem{\windowstyle{WX\_GL\_MIN\_ACCUM\_ALPHA}}{Use blue buffer with most bits (> MIN\_ACCUM\_ALPHA bits)} | |
72 | \end{twocollist} | |
73 | ||
f2ac0386 | 74 | \wxheading{See also} |
38fc80ae RN |
75 | |
76 | \helpref{wxGLContext}{wxglcontext} | |
77 | ||
8b089c5e JS |
78 | \latexignore{\rtfignore{\wxheading{Members}}} |
79 | ||
2d918775 | 80 | |
8b089c5e JS |
81 | \membersection{wxGLCanvas::wxGLCanvas}\label{wxglcanvasconstr} |
82 | ||
418ab1e7 | 83 | \func{void}{wxGLCanvas}{\param{wxWindow* }{parent}, \param{wxWindowID}{ id = wxID\_ANY}, |
dc3065a5 | 84 | \param{const int*}{ attribList = NULL}, |
b7ea712c RR |
85 | \param{const wxPoint\&}{ pos = wxDefaultPosition}, \param{const wxSize\&}{ size = wxDefaultSize}, |
86 | \param{long}{ style=0}, \param{const wxString\& }{name="GLCanvas"}, | |
87 | \param{const wxPalette\&}{ palette = wxNullPalette}} | |
88 | ||
dc3065a5 VZ |
89 | Creates a window with the given parameters. Notice that you need to create and |
90 | use a \helpref{wxGLContext}{wxglcontext} to output to this window. | |
b7ea712c | 91 | |
dc3065a5 | 92 | If \arg{attribList} is not specified, double buffered RGBA mode is used. |
8b089c5e | 93 | |
dd27a3bd JS |
94 | \docparam{parent}{Pointer to a parent window.} |
95 | ||
96 | \docparam{id}{Window identifier. If -1, will automatically create an identifier.} | |
97 | ||
fc2171bd | 98 | \docparam{pos}{Window position. wxDefaultPosition is (-1, -1) which indicates that wxWidgets |
dd27a3bd JS |
99 | should generate a default position for the window.} |
100 | ||
fc2171bd | 101 | \docparam{size}{Window size. wxDefaultSize is (-1, -1) which indicates that wxWidgets should |
dd27a3bd JS |
102 | generate a default size for the window. If no suitable size can be found, the window will be sized to 20x20 pixels so that the window is visible but obviously not correctly sized.} |
103 | ||
104 | \docparam{style}{Window style.} | |
105 | ||
106 | \docparam{name}{Window name.} | |
107 | ||
dc3065a5 | 108 | \docparam{attribList}{Array of integers. With this parameter you can set the device context attributes associated to this window. |
dd27a3bd JS |
109 | This array is zero-terminated: it should be set up with constants described in the table above. |
110 | If a constant should be followed by a value, put it in the next array position. | |
111 | For example, the WX\_GL\_DEPTH\_SIZE should be followed by the value that indicates the number of | |
e119d049 | 112 | bits for the depth buffer, so:} |
dd27a3bd JS |
113 | |
114 | \begin{verbatim} | |
dc3065a5 VZ |
115 | attribList[index] = WX_GL_DEPTH_SIZE; |
116 | attribList[index+1] = 32; | |
dd27a3bd JS |
117 | and so on. |
118 | \end{verbatim} | |
dd27a3bd | 119 | |
dc3065a5 VZ |
120 | \docparam{palette}{Palette for indexed colour (i.e. non WX\_GL\_RGBA) mode. |
121 | Ignored under most platforms.} | |
01168e95 | 122 | |
2d918775 | 123 | |
8b089c5e JS |
124 | \membersection{wxGLCanvas::SetCurrent}\label{wxglcanvassetcurrent} |
125 | ||
dc3065a5 | 126 | \func{void}{SetCurrent}{ \param{const wxGLContext&}{ context} } |
b7ea712c | 127 | |
dc3065a5 VZ |
128 | Makes the OpenGL state that is represented by the OpenGL rendering context |
129 | \arg{context} current, i.e. it will be used by all subsequent OpenGL calls. | |
b7ea712c | 130 | |
dc3065a5 VZ |
131 | This is equivalent to \helpref{wxGLContext::SetCurrent}{wxglcontextsetcurrent} |
132 | called with this window as parameter. | |
b7ea712c | 133 | |
dc3065a5 VZ |
134 | Note that this function may only be called when the window is shown on screen, |
135 | in particular it can't usually be called from the constructor as the window | |
136 | isn't yet shown at this moment. | |
2d918775 VZ |
137 | |
138 | ||
8b089c5e JS |
139 | \membersection{wxGLCanvas::SetColour}\label{wxglcanvassetcolour} |
140 | ||
141 | \func{void}{SetColour}{\param{const char*}{ colour}} | |
142 | ||
dc3065a5 VZ |
143 | Sets the current colour for this window (using \texttt{glcolor3f()}), using the |
144 | wxWidgets colour database to find a named colour. | |
8b089c5e | 145 | |
2d918775 | 146 | |
8b089c5e JS |
147 | \membersection{wxGLCanvas::SwapBuffers}\label{wxglcanvasswapbuffers} |
148 | ||
149 | \func{void}{SwapBuffers}{\void} | |
150 | ||
b7ea712c RR |
151 | Swaps the double-buffer of this window, making the back-buffer the front-buffer and vice versa, |
152 | so that the output of the previous OpenGL commands is displayed on the window. | |
b67a86d5 | 153 |