Combined patch with the following changes: - Don't add wxGLAttributes::Defaults() when the attributes-list is NULL. - Add display default attributes used in wx versions before 3.1 when the attributes-list is NULL. These attributes are different for each platform. - Fix wxMSW PixelFormatDescriptor initialization. - Don't set color buffers when RGBA() is used. - Fix setting colour sizes in OS X and a few other fixes. - Make documentation more clear about these subjects. Closes #17425.
		
			
				
	
	
		
			919 lines
		
	
	
		
			30 KiB
		
	
	
	
		
			Objective-C
		
	
	
	
	
	
			
		
		
	
	
			919 lines
		
	
	
		
			30 KiB
		
	
	
	
		
			Objective-C
		
	
	
	
	
	
| /////////////////////////////////////////////////////////////////////////////
 | |
| // Name:        glcanvas.h
 | |
| // Purpose:     interface of wxGLContext and wxGLCanvas
 | |
| // Author:      wxWidgets team
 | |
| // Licence:     wxWindows licence
 | |
| /////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| /**
 | |
|     @class wxGLAttribsBase
 | |
| 
 | |
|     This is the base class for wxGLAttributes and wxGLContextAttrs.
 | |
|     It stores internally the list required by OS and OpenGL driver for setting
 | |
|     display and rendering context attributes.
 | |
| 
 | |
|     Normally this class is not used directly. But there's a case where it its
 | |
|     member functions are useful: setting attributes not handled by wxWidgets.
 | |
|     Suppose the OpenGL Board sets a new functionality of the context, by adding
 | |
|     a new attribute (let's call it NEW_CTX_F) and also a new type of context by
 | |
|     allowing a new bit value (let's call it NEW_BITS) for the CONTEXT_PROFILE_MASK_ARB
 | |
|     value. These new values can be added to the list using code like this:
 | |
| 
 | |
|     @code
 | |
|     wxGLContextAttrs cxtAttrs;
 | |
|     // Some values
 | |
|     cxtAttrs.CoreProfile().OGLVersion(5, 0); // OGL 5.0, whenever available
 | |
|     cxtAttrs.PlatformDefaults();
 | |
|     // Values usually are platform-dependant named (even value assigned!)
 | |
|     #if defined(__WXMSW__)
 | |
|         cxtAttrs.AddAttribute(WGL_NEW_CTX_F);
 | |
|         cxtAttrs.AddAttribBits(WGL_CONTEXT_PROFILE_MASK_ARB, WGL_NEW_BITS);
 | |
|     #elif defined(__WXX11__)
 | |
|         cxtAttrs.AddAttribute(GLX_NEW_CTX_F);
 | |
|         cxtAttrs.AddAttribBits(GLX_CONTEXT_PROFILE_MASK_ARB, GLX_NEW_BITS);
 | |
|     #else
 | |
|         // Other platforms
 | |
|     #endif
 | |
|     cxtAttrs.EndList(); // Don't forget this
 | |
|     cxtAttrs.SetNeedsARB(true); // Context attributes are set by an ARB-function
 | |
|     @endcode
 | |
| 
 | |
|     @since 3.1.0
 | |
| 
 | |
|     @library{wxgl}
 | |
|     @category{gl}
 | |
| 
 | |
|     @see wxGLCanvas, wxGLContext, wxGLContextAttrs, wxGLAttributes
 | |
| */
 | |
| class WXDLLIMPEXP_GL wxGLAttribsBase
 | |
| {
 | |
| public:
 | |
|     /// Constructor.
 | |
|     wxGLAttribsBase();
 | |
| 
 | |
|     /**
 | |
|         Adds an integer value to the list of attributes.
 | |
| 
 | |
|         @param attribute
 | |
|         The value to add.
 | |
|     */
 | |
|     void AddAttribute(int attribute);
 | |
| 
 | |
|     /**
 | |
|         Combine (bitwise OR) a given value with the existing one, if any.
 | |
|         This function first searches for an identifier and then combines the
 | |
|         given value with the value right after the identifier.
 | |
|         If the identifier is not found, two new values (i.e. the identifier and
 | |
|         the given value) are added to the list.
 | |
| 
 | |
|         @param searchVal
 | |
|         The identifier to search for.
 | |
|         @param combineVal
 | |
|         The value to combine with the existing one.
 | |
|     */
 | |
|     void AddAttribBits(int searchVal, int combineVal);
 | |
| 
 | |
|     /**
 | |
|         Sets the necessity of using special ARB-functions
 | |
|         (e.g. wglCreateContextAttribsARB in MSW) for some of the attributes of
 | |
|         the list.
 | |
|         Multi-sampling and modern context require these ARB-functions.
 | |
| 
 | |
|         @param needsARB
 | |
|         @true  if an ARB-function is needed for any of the attributes.
 | |
| 
 | |
|         @see NeedsARB
 | |
|     */
 | |
|     void SetNeedsARB(bool needsARB = true);
 | |
| 
 | |
|     /// Delete contents and sets ARB-flag to false.
 | |
|     void Reset();
 | |
| 
 | |
|     /**
 | |
|         Returns a pointer to the internal list of attributes. It's very unlikely
 | |
|         you need this function.
 | |
|         If the list is empty the returned value is @NULL.
 | |
|     */
 | |
|     const int* GetGLAttrs() const;
 | |
| 
 | |
|     /** Returns the size of the internal list of attributes.
 | |
|         Remember that the last value in the list must be a '0' (zero). So, a
 | |
|         minimal list is of size = 2, the first value is meaningful and the last is '0'.
 | |
|     */
 | |
|     int GetSize();
 | |
| 
 | |
|     /**
 | |
|         Returns the current value of the ARB-flag.
 | |
| 
 | |
|         @see SetNeedsARB
 | |
|     */
 | |
|     bool NeedsARB() const;
 | |
| };
 | |
| 
 | |
| /**
 | |
|     @class wxGLAttributes
 | |
| 
 | |
|     This class is used for setting display attributes when drawing through
 | |
|     OpenGL ("Pixel format" in MSW and OSX parlance, "Configs" in X11).
 | |
|     While framebuffer depth and samplers are still common, attributes
 | |
|     like layers overlay or not using true colour are rarely used nowadays.
 | |
| 
 | |
|     Attributes can be chained. For example:
 | |
|     @code
 | |
|     wxGLAttributes dispAttrs;
 | |
|     dispAttrs.PlatformDefaults().MinRGBA(8, 8, 8, 8).DoubleBuffer().Depth(32).EndList();
 | |
|     @endcode
 | |
| 
 | |
|     Notice that EndList() must be used as the last attribute. Not adding it will
 | |
|     likely result in nothing displayed at all.
 | |
| 
 | |
|     @note Not all of platform-dependant available attributes are implemented in
 | |
|           wxWidgets. You can set other attributes by using AddAttribute() and
 | |
|           AddAttribBits() functions inherited from the base wxGLAttribsBase class.
 | |
|           While WGL_/GLX_/NS attributes can be added, PFD_ (for MSW) can not.
 | |
| 
 | |
|     @since 3.1.0
 | |
| 
 | |
|     @library{wxgl}
 | |
|     @category{gl}
 | |
| 
 | |
|     @see wxGLCanvas, wxGLContext, wxGLAttribsBase, wxGLContextAttrs
 | |
| */
 | |
| class wxGLAttributes : public wxGLAttribsBase
 | |
| {
 | |
| public:
 | |
|     /**
 | |
|         Use true colour instead of colour index rendering for each pixel.
 | |
|         It makes no effect for OS X.
 | |
|     */
 | |
|     wxGLAttributes& RGBA();
 | |
| 
 | |
|     /**
 | |
|         Specifies the number of bits for colour buffer. For RGBA it's
 | |
|         normally the sum of the bits per each component.
 | |
| 
 | |
|         @param val
 | |
|         The number of bits.
 | |
|     */
 | |
|     wxGLAttributes& BufferSize(int val);
 | |
| 
 | |
|     /**
 | |
|         Specifies the framebuffer level. It makes no effect for OS X.
 | |
| 
 | |
|         @param val
 | |
|         0 for main buffer, >0 for overlay, <0 for underlay.
 | |
|     */
 | |
|     wxGLAttributes& Level(int val);
 | |
| 
 | |
|     /**
 | |
|         Requests using double buffering.
 | |
|     */
 | |
|     wxGLAttributes& DoubleBuffer();
 | |
| 
 | |
|     /**
 | |
|         Use stereoscopic display.
 | |
|     */
 | |
|     wxGLAttributes& Stereo();
 | |
| 
 | |
|     /**
 | |
|         Specifies the number of auxiliary buffers.
 | |
| 
 | |
|         @param val
 | |
|         The number of auxiliary buffers.
 | |
|     */
 | |
|     wxGLAttributes& AuxBuffers(int val);
 | |
| 
 | |
|     /**
 | |
|         Specifies the minimal number of bits for each colour and alpha.
 | |
|         On MSW and OSX this function also sets the size of the colour buffer.
 | |
| 
 | |
|         @param mRed
 | |
|         The minimal number of bits for colour red.
 | |
|         @param mGreen
 | |
|         The minimal number of bits for colour green.
 | |
|         @param mBlue
 | |
|         The minimal number of bits for colour blue.
 | |
|         @param mAlpha
 | |
|         The minimal number of bits for alpha channel.
 | |
|     */
 | |
|     wxGLAttributes& MinRGBA(int mRed, int mGreen, int mBlue, int mAlpha);
 | |
| 
 | |
|     /**
 | |
|         Specifies number of bits for Z-buffer.
 | |
| 
 | |
|         @param val
 | |
|         Number of bits for Z-buffer (typically 0, 16 or 32).
 | |
|     */
 | |
|     wxGLAttributes& Depth(int val);
 | |
| 
 | |
|     /**
 | |
|         Specifies number of bits for stencil buffer.
 | |
| 
 | |
|         @param val
 | |
|         Number of bits.
 | |
|     */
 | |
|     wxGLAttributes& Stencil(int val);
 | |
| 
 | |
|     /**
 | |
|         Specifies the minimal number of bits for each accumulator channel.
 | |
|         On MSW and OSX this function also sets the size of the accumulation buffer.
 | |
| 
 | |
|         @param mRed
 | |
|         The minimal number of bits for red accumulator.
 | |
|         @param mGreen
 | |
|         The minimal number of bits for green accumulator.
 | |
|         @param mBlue
 | |
|         The minimal number of bits for blue accumulator.
 | |
|         @param mAlpha
 | |
|         The minimal number of bits for alpha accumulator.
 | |
|     */
 | |
|     wxGLAttributes& MinAcumRGBA(int mRed, int mGreen, int mBlue, int mAlpha);
 | |
| 
 | |
|     /**
 | |
|         Use multi-sampling support (antialiasing).
 | |
| 
 | |
|         @param val
 | |
|         Number of sample buffers, usually 1.
 | |
|     */
 | |
|     wxGLAttributes& SampleBuffers(int val);
 | |
| 
 | |
|     /**
 | |
|         Specifies the number of samplers per pixel.
 | |
| 
 | |
|         @param val
 | |
|         Number of samplers, e.g. 4 for 2x2 antialiasing.
 | |
|     */
 | |
|     wxGLAttributes& Samplers(int val);
 | |
| 
 | |
|     /**
 | |
|         Used to request a frame buffer sRGB capable. It makes no effect for OS X.
 | |
|     */
 | |
|     wxGLAttributes& FrameBuffersRGB();
 | |
| 
 | |
|     /**
 | |
|         Set some typically needed attributes. E.g. full-acceleration on MSW.
 | |
| 
 | |
|         @see Defaults()
 | |
|     */
 | |
|     wxGLAttributes& PlatformDefaults();
 | |
| 
 | |
|     /**
 | |
|         wxWidgets defaults:
 | |
|         RGBA, Z-depth 16 bits, double buffering, 1 sample buffer, 4 samplers.
 | |
| 
 | |
|         @see PlatformDefaults()
 | |
|     */
 | |
|     wxGLAttributes& Defaults();
 | |
| 
 | |
|     /**
 | |
|         The set of attributes must end with this one; otherwise, the GPU may
 | |
|         display nothing at all.
 | |
|     */
 | |
|     void EndList();
 | |
| };
 | |
| 
 | |
| /**
 | |
|     @class wxGLContextAttrs
 | |
| 
 | |
|     This class is used for setting context attributes.
 | |
|     Since OpenGL version 3.0 the ARB adds attributes time to time to the rendering
 | |
|     context functionality. wxWidgets implements attributes up to OGL 4.5, but
 | |
|     you can set new attributes by using AddAttribute() and AddAttribBits()
 | |
|     functions inherited from the base wxGLAttribsBase class.
 | |
| 
 | |
|     Attributes can be chained. For example:
 | |
|     @code
 | |
|     wxGLContextAttrs cxtAttrs;
 | |
|     cxtAttrs.CoreProfile().OGLVersion(4, 5).Robust().ResetIsolation().EndList();
 | |
|     @endcode
 | |
| 
 | |
|     Notice that EndList() must be used as the last attribute. Not adding it will
 | |
|     likely result in nothing displayed at all.
 | |
| 
 | |
|     @since 3.1.0
 | |
| 
 | |
|     @library{wxgl}
 | |
|     @category{gl}
 | |
| 
 | |
|     @see wxGLCanvas, wxGLContext, wxGLAttribsBase, wxGLAttributes
 | |
| */
 | |
| class wxGLContextAttrs : public wxGLAttribsBase
 | |
| {
 | |
| public:
 | |
|     /**
 | |
|         Request an OpenGL core profile for the context.
 | |
| 
 | |
|         If the requested OpenGL version is less than 3.2, this attribute is
 | |
|         ignored and the functionality of the context is determined solely by
 | |
|         the requested version.
 | |
|     */
 | |
|     wxGLContextAttrs& CoreProfile();
 | |
| 
 | |
|     /**
 | |
|         Request specific OpenGL core major version number (>= 3).
 | |
| 
 | |
|         @param val
 | |
|         The major version number requested.
 | |
| 
 | |
|         It has no effect under OS X where specifying CoreProfile() will
 | |
|         result in using OpenGL version at least 3.2.
 | |
|     */
 | |
|     wxGLContextAttrs& MajorVersion(int val);
 | |
| 
 | |
|     /**
 | |
|         Request specific OpenGL core minor version number.
 | |
| 
 | |
|         @param val
 | |
|         The minor version number requested, e.g. 2 if OpenGL 3.2 is requested.
 | |
| 
 | |
|         It has no effect under OS X where specifying CoreProfile() will
 | |
|         result in using OpenGL version at least 3.2.
 | |
|     */
 | |
|     wxGLContextAttrs& MinorVersion(int val);
 | |
| 
 | |
|     /**
 | |
|         An easy way of requesting an OpenGL version.
 | |
| 
 | |
|         @param vmayor
 | |
|         The major version number requested, e.g. 4 if OpenGL 4.5 is requested.
 | |
| 
 | |
|         @param vminor
 | |
|         The minor version number requested, e.g. 5 if OpenGL 4.5 is requested.
 | |
| 
 | |
|         It has no effect under OS X where specifying CoreProfile() will
 | |
|         result in using OpenGL version at least 3.2.
 | |
|     */
 | |
|     wxGLContextAttrs& OGLVersion(int vmayor, int vminor);
 | |
| 
 | |
|     /**
 | |
|         Request a type of context with all OpenGL features from version 1.0 to
 | |
|         the newest available by the GPU driver. In this mode the GPU may be some
 | |
|         slower than it would be without this compatibility attribute.
 | |
|     */
 | |
|     wxGLContextAttrs& CompatibilityProfile();
 | |
| 
 | |
|     /**
 | |
|         Request a forward-compatible context.
 | |
|         Forward-compatible contexts are defined only for OpenGL versions 3.0 and
 | |
|         later. They must not support functionality marked as deprecated or
 | |
|         removed by the requested version of the OpenGL API.
 | |
| 
 | |
|         It has no effect under OS X.
 | |
|     */
 | |
|     wxGLContextAttrs& ForwardCompatible();
 | |
| 
 | |
|     /**
 | |
|         Request an ES or ES2 ("Embedded Subsystem") context. These are special
 | |
|         subsets of OpenGL, lacking some features of the full specification.
 | |
|         Used mainly in embedded devices such as mobile phones.
 | |
| 
 | |
|         It has no effect under OS X.
 | |
|     */
 | |
|     wxGLContextAttrs& ES2();
 | |
| 
 | |
|     /**
 | |
|         Request debugging functionality. This tells OpenGL to prepare a set where
 | |
|         some logs are enabled and also allows OGL to send debug messages through
 | |
|         a callback function.
 | |
| 
 | |
|         It has no effect under OS X.
 | |
|     */
 | |
|     wxGLContextAttrs& DebugCtx();
 | |
| 
 | |
|     /**
 | |
|         Request robustness, or how OpenGL handles out-of-bounds buffer object
 | |
|         accesses and graphics reset notification behaviours.
 | |
| 
 | |
|         It has no effect under OS X.
 | |
|     */
 | |
|     wxGLContextAttrs& Robust();
 | |
| 
 | |
|     /**
 | |
|         With robustness enabled, never deliver notification of reset events.
 | |
| 
 | |
|         It has no effect under OS X.
 | |
|     */
 | |
|     wxGLContextAttrs& NoResetNotify();
 | |
| 
 | |
|     /**
 | |
|         With robustness enabled, if graphics reset happens, all context state is
 | |
|         lost.
 | |
| 
 | |
|         It has no effect under OS X.
 | |
|     */
 | |
|     wxGLContextAttrs& LoseOnReset();
 | |
| 
 | |
|     /**
 | |
|         Request OpenGL to protect other applications or shared contexts from reset
 | |
|         side-effects.
 | |
| 
 | |
|         It has no effect under OS X.
 | |
|     */
 | |
|     wxGLContextAttrs& ResetIsolation();
 | |
| 
 | |
|     /**
 | |
|         Request OpenGL to avoid or not flushing pending commands when the context
 | |
|         is made no longer current (released). If you don't specify this attribute,
 | |
|         the GPU driver default is 'flushing'.
 | |
| 
 | |
|         @param val
 | |
|         0 for not flushing, 1 (wxWidgets default) for flushing pending commands.
 | |
| 
 | |
|         It has no effect under OS X.
 | |
|     */
 | |
|     wxGLContextAttrs& ReleaseFlush(int val = 1);
 | |
| 
 | |
|     /**
 | |
|         Set platform specific defaults. Currently only Unix defaults are
 | |
|         implemented: use X11 direct rendering and use X11 RGBA type.
 | |
|     */
 | |
|     wxGLContextAttrs& PlatformDefaults();
 | |
| 
 | |
|     /**
 | |
|         The set of attributes must end with this one; otherwise, the GPU may
 | |
|         display nothing at all.
 | |
|     */
 | |
|     void EndList();
 | |
| };
 | |
| 
 | |
| /**
 | |
|     @class wxGLContext
 | |
| 
 | |
|     An instance of a wxGLContext represents the state of an OpenGL state
 | |
|     machine and the connection between OpenGL and the system.
 | |
| 
 | |
|     The OpenGL state includes everything that can be set with the OpenGL API:
 | |
|     colors, rendering variables, buffer data ids, texture objects, etc. It is
 | |
|     possible to have multiple rendering contexts share buffer data and textures.
 | |
|     This feature is specially useful when the application use multiple threads
 | |
|     for updating data into the memory of the graphics card.
 | |
| 
 | |
|     Whether one only rendering context is used with or bound to multiple output
 | |
|     windows or if each window has its own bound context is a developer decision.
 | |
|     It is important to take into account that GPU makers may set different pointers
 | |
|     to the same OGL function for different contexts. The way these pointers are
 | |
|     retrieved from the OGL driver should be used again for each new context.
 | |
| 
 | |
|     Binding (making current) a rendering context with another instance of a
 | |
|     wxGLCanvas however works only if the both wxGLCanvas instances were created
 | |
|     with the same attributes.
 | |
| 
 | |
|     OpenGL version 3 introduced a new type of specification profile, the modern
 | |
|     core profile. The old compatibility profile maintains all legacy features.
 | |
|     Since wxWidgets 3.1.0 you can choose the type of context and even ask for a
 | |
|     specified OGL version number. However, its advised to use only core profile
 | |
|     as the compatibility profile may run a bit slower.
 | |
| 
 | |
|     OpenGL core profile specification defines several flags at context creation
 | |
|     that determine not only the type of context but also some features. Some of
 | |
|     these flags can be set in the list of attributes used at wxGLCanvas ctor.
 | |
|     But since wxWidgets 3.1.0 it is strongly encouraged to use the new mechanism:
 | |
|     setting the context attributes with a wxGLContextAttrs object and the canvas
 | |
|     attributes with a wxGLAttributes object.
 | |
| 
 | |
|     The best way of knowing if your OpenGL environment supports a specific type
 | |
|     of context is creating a wxGLContext instance and checking wxGLContext::IsOK().
 | |
|     If it returns false, then simply delete that instance and create a new one
 | |
|     with other attributes.
 | |
| 
 | |
|     wxHAS_OPENGL_ES is defined on platforms that only have this implementation
 | |
|     available (e.g. the iPhone) and don't support the full specification.
 | |
| 
 | |
|     @library{wxgl}
 | |
|     @category{gl}
 | |
| 
 | |
|     @see wxGLCanvas, wxGLContextAttrs, wxGLAttributes
 | |
| */
 | |
| class wxGLContext : public wxObject
 | |
| {
 | |
| public:
 | |
|     /**
 | |
|         Constructor.
 | |
| 
 | |
|         @param win
 | |
|             The canvas that is used to initialize this context. This parameter
 | |
|             is needed only temporarily, and the caller may do anything with it
 | |
|             (e.g. destroy the window) after the constructor returned. @n
 | |
|             It will be possible to bind (make current) this context to any
 | |
|             other wxGLCanvas that has been created with equivalent attributes
 | |
|             as win.
 | |
|         @param other
 | |
|             Context to share some data with or @NULL (the default) for no
 | |
|             sharing.
 | |
|         @param ctxAttrs
 | |
|             A wxGLContextAttrs pointer to the attributes used for defining the
 | |
|             flags when OGL >= 3.2 is requested. This is the preferred method
 | |
|             since wxWidgets 3.1.0. The previous method (still available for
 | |
|             backwards compatibility) is to define the attributes at wxGLCanvas
 | |
|             ctor. If this parameter is @NULL (the default) then that previous
 | |
|             method is taken.
 | |
|             If no attributes are defined at all, then those provided by the GPU
 | |
|             driver defaults will be used.
 | |
|     */
 | |
|     wxGLContext(wxGLCanvas* win,
 | |
|                 const wxGLContext* other = NULL,
 | |
|                 const wxGLContextAttrs* ctxAttrs = NULL);
 | |
| 
 | |
|     /**
 | |
|         Checks if the underlying OpenGL rendering context was correctly created
 | |
|         by the system with the requested attributes. If this function returns
 | |
|         @false then the wxGLContext object is useless and should be deleted and
 | |
|         recreated with different attributes.
 | |
| 
 | |
|         @since 3.1.0
 | |
|     */
 | |
|     bool IsOK();
 | |
| 
 | |
|     /**
 | |
|         Makes the OpenGL state that is represented by this rendering context
 | |
|         current with the wxGLCanvas @e win.
 | |
| 
 | |
|         @note @a win can be a different wxGLCanvas window than the one that was
 | |
|               passed to the constructor of this rendering context. If @e RC is
 | |
|               an object of type wxGLContext, the statements
 | |
|               @e "RC.SetCurrent(win);" and @e "win.SetCurrent(RC);" are
 | |
|               equivalent, see wxGLCanvas::SetCurrent().
 | |
|     */
 | |
|     virtual bool SetCurrent(const wxGLCanvas& win) const;
 | |
| };
 | |
| 
 | |
| /**
 | |
|     @anchor wxGL_FLAGS
 | |
| 
 | |
|     Constants for use with wxGLCanvas. Most of the constants must be followed
 | |
|     by a value. This is indicated by "(F)".
 | |
|     Instead of these flags, the use of wxGLAttributes and wxGLContextAttrs is
 | |
|     preferred since wxWidgets 3.1.0.
 | |
| 
 | |
|     @note Not all implementations support options such as stereo, auxiliary
 | |
|           buffers, alpha channel, and accumulator buffer, use
 | |
|           wxGLCanvas::IsDisplaySupported() to check for individual visual
 | |
|           attributes support.
 | |
| */
 | |
| enum
 | |
| {
 | |
|     /// Use true color (the default if no attributes at all are specified);
 | |
|     /// do not use a palette.
 | |
|     WX_GL_RGBA = 1,
 | |
| 
 | |
|     /// (F) Specifies the number of bits for colour buffer.
 | |
|     WX_GL_BUFFER_SIZE,
 | |
| 
 | |
|     /// (F) 0 for main buffer, >0 for overlay, <0 for underlay.
 | |
|     WX_GL_LEVEL,
 | |
| 
 | |
|     /// Use double buffering if present ("on" if no attributes specified).
 | |
|     WX_GL_DOUBLEBUFFER,
 | |
| 
 | |
|     /// Use stereoscopic display.
 | |
|     WX_GL_STEREO,
 | |
| 
 | |
|     /// (F) The number of auxiliary buffers.
 | |
|     WX_GL_AUX_BUFFERS,
 | |
| 
 | |
|     /// (F) Use red buffer with most bits (> MIN_RED bits)
 | |
|     WX_GL_MIN_RED,
 | |
| 
 | |
|     /// (F) Use green buffer with most bits (> MIN_GREEN bits)
 | |
|     WX_GL_MIN_GREEN,
 | |
| 
 | |
|     /// (F) Use blue buffer with most bits (> MIN_BLUE bits)
 | |
|     WX_GL_MIN_BLUE,
 | |
| 
 | |
|     /// (F) Use alpha buffer with most bits (> MIN_ALPHA bits)
 | |
|     WX_GL_MIN_ALPHA,
 | |
| 
 | |
|     /// (F) Specifies number of bits for Z-buffer (typically 0, 16 or 32).
 | |
|     WX_GL_DEPTH_SIZE,
 | |
| 
 | |
|     /// (F) Specifies number of bits for stencil buffer.
 | |
|     WX_GL_STENCIL_SIZE,
 | |
| 
 | |
|     /// (F) Specifies minimal number of red accumulator bits.
 | |
|     WX_GL_MIN_ACCUM_RED,
 | |
| 
 | |
|     /// (F) Specifies minimal number of green accumulator bits.
 | |
|     WX_GL_MIN_ACCUM_GREEN,
 | |
| 
 | |
|     /// (F) Specifies minimal number of blue accumulator bits.
 | |
|     WX_GL_MIN_ACCUM_BLUE,
 | |
| 
 | |
|     /// (F) Specifies minimal number of alpha accumulator bits.
 | |
|     WX_GL_MIN_ACCUM_ALPHA,
 | |
| 
 | |
|     /// (F) 1 for multi-sampling support (antialiasing)
 | |
|     WX_GL_SAMPLE_BUFFERS,
 | |
| 
 | |
|     /// (F) 4 for 2x2 antialiasing supersampling on most graphics cards
 | |
|     WX_GL_SAMPLES,
 | |
| 
 | |
|     /**
 | |
|         Used to request a frame buffer sRGB capable
 | |
| 
 | |
|         @since 3.1.0
 | |
|     */
 | |
|     WX_GL_FRAMEBUFFER_SRGB,
 | |
| 
 | |
|     /**
 | |
|         (F) Request specific OpenGL core major version number (>= 3).
 | |
| 
 | |
|         This attribute should be followed by the major version number
 | |
|         requested.
 | |
| 
 | |
|         It has no effect under OS X where specifying ::WX_GL_CORE_PROFILE will
 | |
|         result in using OpenGL version at least 3.2 but can still be used
 | |
|         there for portability.
 | |
| 
 | |
|         @since 3.0.3
 | |
|     */
 | |
|     WX_GL_MAJOR_VERSION,
 | |
| 
 | |
|     /**
 | |
|         (F) Request specific OpenGL core minor version number.
 | |
| 
 | |
|         This attribute has the same semantics as ::WX_GL_MAJOR_VERSION but is
 | |
|         for the minor OpenGL version, e.g. 2 if OpenGL 3.2 is requested.
 | |
| 
 | |
|         @since 3.0.3
 | |
|     */
 | |
|     WX_GL_MINOR_VERSION,
 | |
| 
 | |
|     /**
 | |
|         Request an OpenGL core profile for the context.
 | |
| 
 | |
|         If the requested OpenGL version is less than 3.2, this attribute is
 | |
|         ignored and the functionality of the context is determined solely by
 | |
|         the requested version.
 | |
| 
 | |
|         @since 3.0.3
 | |
|     */
 | |
|     WX_GL_CORE_PROFILE,
 | |
| 
 | |
|     /**
 | |
|         Request a type of context with all OpenGL features from version 1.0 to
 | |
|         the newest available by the GPU driver. In this mode the GPU may be some
 | |
|         slower than it would be without this compatibility attribute.
 | |
| 
 | |
|         @since 3.1.0
 | |
|     */
 | |
|     wx_GL_COMPAT_PROFILE,
 | |
| 
 | |
|     /**
 | |
|         Request a forward-compatible context.
 | |
|         Forward-compatible contexts are defined only for OpenGL versions 3.0 and
 | |
|         later. They must not support functionality marked as deprecated by that
 | |
|         version of the OpenGL API.
 | |
| 
 | |
|         @since 3.1.0
 | |
|     */
 | |
|     WX_GL_FORWARD_COMPAT,
 | |
| 
 | |
|     /**
 | |
|         Request an ES or ES2 ("Embedded Subsystem") context. These are special
 | |
|         subsets of OpenGL, lacking some features of the full specification.
 | |
|         Used mainly in embedded devices such as mobile phones.
 | |
| 
 | |
|         @since 3.1.0
 | |
|     */
 | |
|     WX_GL_ES2,
 | |
| 
 | |
|     /**
 | |
|         Request debugging functionality. This tells OpenGL to prepare a set where
 | |
|         some logs are enabled and also allows OGL to send debug messages through
 | |
|         a callback function.
 | |
| 
 | |
|         @since 3.1.0
 | |
|     */
 | |
|     WX_GL_DEBUG,
 | |
| 
 | |
|     /**
 | |
|         Request robustness, or how OpenGL handles out-of-bounds buffer object
 | |
|         accesses and graphics reset notification behaviours.
 | |
| 
 | |
|         @since 3.1.0
 | |
|     */
 | |
|     WX_GL_ROBUST_ACCESS,
 | |
| 
 | |
|     /**
 | |
|         With robustness enabled, never deliver notification of reset events.
 | |
| 
 | |
|         @since 3.1.0
 | |
|     */
 | |
|     WX_GL_NO_RESET_NOTIFY,
 | |
| 
 | |
|     /**
 | |
|         With robustness enabled, if graphics reset happens, all context state is
 | |
|         lost.
 | |
| 
 | |
|         @since 3.1.0
 | |
|     */
 | |
|     WX_GL_LOSE_ON_RESET,
 | |
| 
 | |
|     /**
 | |
|         Request OpenGL to protect other apps or shared contexts from reset
 | |
|         side-effects.
 | |
| 
 | |
|         @since 3.1.0
 | |
|     */
 | |
|     WX_GL_RESET_ISOLATION,
 | |
| 
 | |
|     /**
 | |
|         Request OpenGL to flush pending commands when the context is released.
 | |
| 
 | |
|         @since 3.1.0
 | |
|     */
 | |
|     WX_GL_RELEASE_FLUSH,
 | |
| 
 | |
|     /**
 | |
|         Request OpenGL to avoid flushing pending commands when the context is released.
 | |
| 
 | |
|         @since 3.1.0
 | |
|     */
 | |
|     WX_GL_RELEASE_NONE
 | |
| };
 | |
| 
 | |
| /**
 | |
|     @class wxGLCanvas
 | |
| 
 | |
|     wxGLCanvas is a class for displaying OpenGL graphics. It is always used in
 | |
|     conjunction with wxGLContext as the context can only be made current (i.e.
 | |
|     active for the OpenGL commands) when it is associated to a wxGLCanvas.
 | |
| 
 | |
|     More precisely, you first need to create a wxGLCanvas window and then
 | |
|     create an instance of a wxGLContext that is initialized with this
 | |
|     wxGLCanvas and then later use either SetCurrent() with the instance of the
 | |
|     wxGLContext or wxGLContext::SetCurrent() with the instance of the
 | |
|     wxGLCanvas (which might be not the same as was used for the creation of the
 | |
|     context) to bind the OpenGL state that is represented by the rendering
 | |
|     context to the canvas, and then finally call SwapBuffers() to swap the
 | |
|     buffers of the OpenGL canvas and thus show your current output.
 | |
| 
 | |
|     Notice that versions of wxWidgets previous to 2.9 used to implicitly create a
 | |
|     wxGLContext inside wxGLCanvas itself. This is still supported in the
 | |
|     current version but is deprecated now and will be removed in the future,
 | |
|     please update your code to create the rendering contexts explicitly.
 | |
| 
 | |
|     To set up the attributes for the canvas (number of bits for the depth
 | |
|     buffer, number of bits for the stencil buffer and so on) you pass them
 | |
|     in the constructor using a wxGLAttributes instance. You can still use
 | |
|     the way before 3.1.0 (setting up the correct values of the @e attribList
 | |
|     parameter) but it's discouraged.
 | |
| 
 | |
|     @note
 | |
|         On those platforms which use a configure script (e.g. Linux and OS X)
 | |
|         OpenGL support is automatically enabled if the relative headers and
 | |
|         libraries are found.
 | |
|         To switch it on under the other platforms (e.g. Windows), you need to edit
 | |
|         the @c setup.h file and set @c wxUSE_GLCANVAS to @c 1 and then also pass
 | |
|         @c USE_OPENGL=1 to the make utility. You may also need to add @c opengl32.lib
 | |
|         (and @c glu32.lib for old OpenGL versions) to the list of the libraries
 | |
|         your program is linked with.
 | |
| 
 | |
|     @library{wxgl}
 | |
|     @category{gl}
 | |
| 
 | |
|     @see wxGLContext, wxGLAttributes, wxGLContextAttrs
 | |
| */
 | |
| class wxGLCanvas : public wxWindow
 | |
| {
 | |
| public:
 | |
|     /**
 | |
|         Creates a window with the given parameters. Notice that you need to
 | |
|         create and use a wxGLContext to output to this window.
 | |
| 
 | |
|         @param parent
 | |
|             Pointer to a parent window.
 | |
|         @param dispAttrs
 | |
|             The wxGLAttributes used for setting display attributes (not for
 | |
|             rendering context attributes).
 | |
|         @param id
 | |
|             Window identifier. If -1, will automatically create an identifier.
 | |
|         @param pos
 | |
|             Window position. wxDefaultPosition is (-1, -1) which indicates that
 | |
|             wxWidgets should generate a default position for the window.
 | |
|         @param size
 | |
|             Window size. wxDefaultSize is (-1, -1) which indicates that
 | |
|             wxWidgets should 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.
 | |
|         @param style
 | |
|             Window style.
 | |
|         @param name
 | |
|             Window name.
 | |
|         @param palette
 | |
|             Palette for indexed colour (i.e. non WX_GL_RGBA) mode. Ignored
 | |
|             under most platforms.
 | |
| 
 | |
|         @since 3.1.0
 | |
|     */
 | |
|     wxGLCanvas(wxWindow *parent,
 | |
|                const wxGLAttributes& dispAttrs,
 | |
|                wxWindowID id = wxID_ANY,
 | |
|                const wxPoint& pos = wxDefaultPosition,
 | |
|                const wxSize& size = wxDefaultSize,
 | |
|                long style = 0,
 | |
|                const wxString& name = wxGLCanvasName,
 | |
|                const wxPalette& palette = wxNullPalette);
 | |
| 
 | |
|     /**
 | |
|         This constructor is still available only for compatibility reasons.
 | |
|         Please use the constructor with wxGLAttributes instead.
 | |
| 
 | |
|         If @a attribList is not specified, wxGLAttributes::PlatformDefaults()
 | |
|         is used, plus some other attributes (see below).
 | |
| 
 | |
|         @param attribList
 | |
|             Array of integers. With this parameter you can set the device
 | |
|             context attributes associated to this window. This array is
 | |
|             zero-terminated: it should be set up using @ref wxGL_FLAGS
 | |
|             constants. If a constant should be followed by a value, put it in
 | |
|             the next array position. For example, WX_GL_DEPTH_SIZE should be
 | |
|             followed by the value that indicates the number of bits for the
 | |
|             depth buffer, e.g.:
 | |
|             @code
 | |
|             attribList[n++] = WX_GL_DEPTH_SIZE;
 | |
|             attribList[n++] = 32;
 | |
|             attribList[n] = 0; // terminate the list
 | |
|             @endcode
 | |
|             If the attribute list is not specified at all, i.e. if this
 | |
|             parameter is @NULL, the default attributes including WX_GL_RGBA and
 | |
|             WX_GL_DOUBLEBUFFER are used. But notice that if you do specify some
 | |
|             attributes you also need to explicitly include these two default
 | |
|             attributes in the list if you need them.
 | |
|     */
 | |
|     wxGLCanvas(wxWindow* parent, wxWindowID id = wxID_ANY,
 | |
|                const int* attribList = NULL,
 | |
|                const wxPoint& pos = wxDefaultPosition,
 | |
|                const wxSize& size = wxDefaultSize,
 | |
|                long style = 0,
 | |
|                const wxString& name = "GLCanvas",
 | |
|                const wxPalette& palette = wxNullPalette);
 | |
| 
 | |
|     /**
 | |
|         Determines if a canvas having the specified attributes is available.
 | |
|         This only applies for visual attributes, not rendering context attributes.
 | |
| 
 | |
|         @param dispAttrs
 | |
|             The requested attributes.
 | |
| 
 | |
|         @return @true if attributes are supported.
 | |
| 
 | |
|         @since 3.1.0
 | |
|     */
 | |
|     static bool IsDisplaySupported(const wxGLAttributes& dispAttrs);
 | |
| 
 | |
|     /**
 | |
|         Determines if a canvas having the specified attributes is available.
 | |
|         This only applies for visual attributes, not rendering context attributes.
 | |
|         Please, use the new form of this method, using wxGLAttributes.
 | |
| 
 | |
|         @param attribList
 | |
|             See @a attribList for wxGLCanvas().
 | |
| 
 | |
|         @return @true if attributes are supported.
 | |
|     */
 | |
|     static bool IsDisplaySupported(const int* attribList);
 | |
| 
 | |
|     /**
 | |
|         Returns true if the extension with given name is supported.
 | |
| 
 | |
|         Notice that while this function is implemented for all of GLX, WGL and
 | |
|         NSOpenGL the extensions names are usually not the same for different
 | |
|         platforms and so the code using it still usually uses conditional
 | |
|         compilation.
 | |
|     */
 | |
|     static bool IsExtensionSupported(const char *extension);
 | |
| 
 | |
|     /**
 | |
|         Sets the current colour for this window (using @c glcolor3f()), using
 | |
|         the wxWidgets colour database to find a named colour.
 | |
|     */
 | |
|     bool SetColour(const wxString& colour);
 | |
| 
 | |
|     /**
 | |
|         Makes the OpenGL state that is represented by the OpenGL rendering
 | |
|         context @a context current, i.e. it will be used by all subsequent
 | |
|         OpenGL calls.
 | |
| 
 | |
|         This is equivalent to wxGLContext::SetCurrent() called with this window
 | |
|         as parameter.
 | |
| 
 | |
|         @note This function may only be called when the window is shown on
 | |
|               screen, in particular it can't usually be called from the
 | |
|               constructor as the window isn't yet shown at this moment.
 | |
| 
 | |
|         @return @false if an error occurred.
 | |
|     */
 | |
|     bool SetCurrent(const wxGLContext& context) const;
 | |
| 
 | |
|     /**
 | |
|         Swaps the double-buffer of this window, making the back-buffer the
 | |
|         front-buffer and vice versa, so that the output of the previous OpenGL
 | |
|         commands is displayed on the window.
 | |
| 
 | |
|         @return @false if an error occurred.
 | |
|     */
 | |
|     virtual bool SwapBuffers();
 | |
| };
 |