]>
git.saurik.com Git - wxWidgets.git/blob - interface/wx/glcanvas.h
   1 ///////////////////////////////////////////////////////////////////////////// 
   3 // Purpose:     interface of wxGLContext and wxGLCanvas 
   4 // Author:      wxWidgets team 
   6 // Licence:     wxWindows license 
   7 ///////////////////////////////////////////////////////////////////////////// 
  12     An instance of a wxGLContext represents the state of an OpenGL state 
  13     machine and the connection between OpenGL and the system. 
  15     The OpenGL state includes everything that can be set with the OpenGL API: 
  16     colors, rendering variables, display lists, texture objects, etc. Although 
  17     it is possible to have multiple rendering contexts share display lists in 
  18     order to save resources, this method is hardly used today any more, because 
  19     display lists are only a tiny fraction of the overall state. 
  21     Therefore, one rendering context is usually used with or bound to multiple 
  22     output windows in turn, so that the application has access to the complete 
  23     and identical state while rendering into each window. 
  25     Binding (making current) a rendering context with another instance of a 
  26     wxGLCanvas however works only if the other wxGLCanvas was created with the 
  27     same attributes as the wxGLCanvas from which the wxGLContext was 
  28     initialized. (This applies to sharing display lists among contexts 
  31     Note that some wxGLContext features are extremely platform-specific - its 
  32     best to check your native platform's glcanvas header (on windows 
  33     include/wx/msw/glcanvas.h) to see what features your native platform 
  41 class wxGLContext 
: public wxObject
 
  48             The canvas that is used to initialize this context. This parameter 
  49             is needed only temporarily, and the caller may do anything with it 
  50             (e.g. destroy the window) after the constructor returned. @n 
  51             It will be possible to bind (make current) this context to any 
  52             other wxGLCanvas that has been created with equivalent attributes 
  55             Context to share display lists with or @NULL (the default) for no 
  58     wxGLContext(wxGLCanvas
* win
, const wxGLContext
* other 
= NULL
); 
  61         Makes the OpenGL state that is represented by this rendering context 
  62         current with the wxGLCanvas @e win. 
  64         @note @a win can be a different wxGLCanvas window than the one that was 
  65               passed to the constructor of this rendering context. If @e RC is 
  66               an object of type wxGLContext, the statements 
  67               @e "RC.SetCurrent(win);" and @e "win.SetCurrent(RC);" are 
  68               equivalent, see wxGLCanvas::SetCurrent(). 
  70     virtual bool SetCurrent(const wxGLCanvas
& win
) const; 
  76     Constants for use with wxGLCanvas. 
  78     @note Not all implementations support options such as stereo, auxiliary 
  79           buffers, alpha channel, and accumulator buffer, use 
  80           wxGLCanvas::IsDisplaySupported() to check for individual attributes 
  85     /// Use true color palette (on if no attributes at all specified). 
  88     /// Specifies the number of bits for buffer if not WX_GL_RGBA. 
  91     /// Must be followed by 0 for main buffer, >0 for overlay, <0 for underlay. 
  94     /// Use double buffering if present (on if no attributes specified). 
  97     /// Use stereoscopic display. 
 100     /// Specifies number of auxiliary buffers. 
 103     /// Use red buffer with most bits (> MIN_RED bits) 
 106     /// Use green buffer with most bits (> MIN_GREEN bits) 
 109     /// Use blue buffer with most bits (> MIN_BLUE bits) 
 112     /// Use alpha buffer with most bits (> MIN_ALPHA bits) 
 115     /// Specifies number of bits for Z-buffer (typically 0, 16 or 32). 
 118     /// Specifies number of bits for stencil buffer. 
 121     /// Specifies minimal number of red accumulator bits. 
 124     /// Specifies minimal number of green accumulator bits. 
 125     WX_GL_MIN_ACCUM_GREEN
, 
 127     /// Specifies minimal number of blue accumulator bits. 
 128     WX_GL_MIN_ACCUM_BLUE
, 
 130     /// Specifies minimal number of alpha accumulator bits. 
 131     WX_GL_MIN_ACCUM_ALPHA
, 
 133     /// 1 for multisampling support (antialiasing) 
 134     WX_GL_SAMPLE_BUFFERS
, 
 136     /// 4 for 2x2 antialising supersampling on most graphics cards 
 144     wxGLCanvas is a class for displaying OpenGL graphics. It is always used in 
 145     conjunction with wxGLContext as the context can only be made current (i.e. 
 146     active for the OpenGL commands) when it is associated to a wxGLCanvas. 
 148     More precisely, you first need to create a wxGLCanvas window and then 
 149     create an instance of a wxGLContext that is initialized with this 
 150     wxGLCanvas and then later use either SetCurrent() with the instance of the 
 151     wxGLContext or wxGLContext::SetCurrent() with the instance of the 
 152     wxGLCanvas (which might be not the same as was used for the creation of the 
 153     context) to bind the OpenGL state that is represented by the rendering 
 154     context to the canvas, and then finally call SwapBuffers() to swap the 
 155     buffers of the OpenGL canvas and thus show your current output. 
 157     Notice that previous versions of wxWidgets used to implicitly create a 
 158     wxGLContext inside wxGLCanvas itself. This is still supported in the 
 159     current version but is deprecated now and will be removed in the future, 
 160     please update your code to create the rendering contexts explicitly. 
 162     To set up the attributes for the canvas (number of bits for the depth 
 163     buffer, number of bits for the stencil buffer and so on) you should set up 
 164     the correct values of the @e attribList parameter. The values that should 
 165     be set up and their meanings will be described below. 
 167     @note OpenGL is not enabled by default. To switch it on, you need to edit 
 168           setup.h under Windows and set @c wxUSE_GLCANVAS to 1 (you may also 
 169           need to have to add @c opengl32.lib and @c glu32.lib to the list of 
 170           libraries your program is linked with). On Unix, pass 
 171           @c --with-opengl to configure. 
 178 class wxGLCanvas 
: public wxWindow
 
 182         Creates a window with the given parameters. Notice that you need to 
 183         create and use a wxGLContext to output to this window. 
 185         If @a attribList is not specified, double buffered RGBA mode is used. 
 188             Pointer to a parent window. 
 190             Window identifier. If -1, will automatically create an identifier. 
 192             Window position. wxDefaultPosition is (-1, -1) which indicates that 
 193             wxWidgets should generate a default position for the window. 
 195             Window size. wxDefaultSize is (-1, -1) which indicates that 
 196             wxWidgets should generate a default size for the window. If no 
 197             suitable size can be found, the window will be sized to 20x20 
 198             pixels so that the window is visible but obviously not correctly 
 205             Array of integers. With this parameter you can set the device 
 206             context attributes associated to this window. This array is 
 207             zero-terminated: it should be set up using @ref wxGL_FLAGS 
 208             constants. If a constant should be followed by a value, put it in 
 209             the next array position. For example, WX_GL_DEPTH_SIZE should be 
 210             followed by the value that indicates the number of bits for the 
 213             attribList[n++] = WX_GL_DEPTH_SIZE; 
 214             attribList[n++] = 32; 
 215             attribList[n] = 0; // terminate the list 
 217             If the attribute list is not specified at all, i.e. if this 
 218             parameter is @NULL, the default attributes including WX_GL_RGBA and 
 219             WX_GL_DOUBLEBUFFER are used. But notice that if you do specify some 
 220             attributes you also need to explicitly include these two default 
 221             attributes in the list if you need them. 
 223             Palette for indexed colour (i.e. non WX_GL_RGBA) mode. Ignored 
 224             under most platforms. 
 226     wxGLCanvas(wxWindow
* parent
, wxWindowID id 
= wxID_ANY
, 
 227                const int* attribList 
= NULL
, 
 228                const wxPoint
& pos 
= wxDefaultPosition
, 
 229                const wxSize
& size 
= wxDefaultSize
, 
 231                const wxString
& name 
= "GLCanvas", 
 232                const wxPalette
& palette 
= wxNullPalette
); 
 235         Determines if a canvas having the specified attributes is available. 
 238             See @a attribList for wxGLCanvas(). 
 240         @return @true if attributes are supported. 
 242     static bool IsDisplaySupported(const int* attribList 
= NULL
); 
 245         Sets the current colour for this window (using @c glcolor3f()), using 
 246         the wxWidgets colour database to find a named colour. 
 248     bool SetColour(const wxString
& colour
); 
 251         Makes the OpenGL state that is represented by the OpenGL rendering 
 252         context @a context current, i.e. it will be used by all subsequent 
 255         This is equivalent to wxGLContext::SetCurrent() called with this window 
 258         @note This function may only be called when the window is shown on 
 259               screen, in particular it can't usually be called from the 
 260               constructor as the window isn't yet shown at this moment. 
 262         @return @false if an error occurred. 
 264     bool SetCurrent(const wxGLContext
& context
) const; 
 267         Swaps the double-buffer of this window, making the back-buffer the 
 268         front-buffer and vice versa, so that the output of the previous OpenGL 
 269         commands is displayed on the window. 
 271         @return @false if an error occurred. 
 273     virtual bool SwapBuffers();