| Name | 
 |  | 
 |     WGL_ARB_create_context | 
 |     WGL_ARB_create_context_profile | 
 |  | 
 | Name Strings | 
 |  | 
 |     WGL_ARB_create_context | 
 |     WGL_ARB_create_context_profile | 
 |  | 
 | Contact | 
 |  | 
 |     Jon Leech (jon 'at' alumni.caltech.edu) | 
 |     Michael Gold, NVIDIA (gold 'at' nvidia.com) | 
 |  | 
 | Notice | 
 |  | 
 |     Copyright (c) 2009-2013 The Khronos Group Inc. Copyright terms at | 
 |         http://www.khronos.org/registry/speccopyright.html | 
 |  | 
 | Specification Update Policy | 
 |  | 
 |     Khronos-approved extension specifications are updated in response to | 
 |     issues and bugs prioritized by the Khronos OpenGL Working Group. For | 
 |     extensions which have been promoted to a core Specification, fixes will | 
 |     first appear in the latest version of that core Specification, and will | 
 |     eventually be backported to the extension document. This policy is | 
 |     described in more detail at | 
 |         https://www.khronos.org/registry/OpenGL/docs/update_policy.php | 
 |  | 
 | IP Status | 
 |  | 
 |     No known IP claims. | 
 |  | 
 | Status | 
 |  | 
 |     Complete. Approved by the ARB on July 28, 2009. | 
 |     Approved by the Khronos Board of Promoters on August 28, 2009. | 
 |  | 
 | Version | 
 |  | 
 |     July 28, 2009 (version 20) | 
 |  | 
 | Number | 
 |  | 
 |     ARB Extension #55 (WGL_ARB_create_context) | 
 |     ARB Extension #74 (WGL_ARB_create_context_profile) | 
 |  | 
 | Dependencies | 
 |  | 
 |     WGL_ARB_extensions_string is required. | 
 |  | 
 |     The presence of an OpenGL 3.2 or later implementation determines | 
 |     whether or not WGL_ARB_create_context_profile is required. | 
 |  | 
 | Overview | 
 |  | 
 |     With the advent of new versions of OpenGL which deprecate features | 
 |     and/or break backward compatibility with older versions, there is a | 
 |     need and desire to indicate at context creation which interface will | 
 |     be used. These extensions add a new context creation routine with | 
 |     attributes specifying the GL version and context properties | 
 |     requested for the context, and additionally add an attribute | 
 |     specifying the GL profile requested for a context of OpenGL 3.2 or | 
 |     later. | 
 |  | 
 | New Procedures and Functions | 
 |  | 
 |     HGLRC wglCreateContextAttribsARB(HDC hDC, HGLRC hShareContext, | 
 |                                      const int *attribList) | 
 |  | 
 | New Tokens | 
 |  | 
 |     Accepted as an attribute name in <*attribList>: | 
 |  | 
 |         WGL_CONTEXT_MAJOR_VERSION_ARB           0x2091 | 
 |         WGL_CONTEXT_MINOR_VERSION_ARB           0x2092 | 
 |         WGL_CONTEXT_LAYER_PLANE_ARB             0x2093 | 
 |         WGL_CONTEXT_FLAGS_ARB                   0x2094 | 
 |         WGL_CONTEXT_PROFILE_MASK_ARB            0x9126 | 
 |  | 
 |     Accepted as bits in the attribute value for WGL_CONTEXT_FLAGS in | 
 |     <*attribList>: | 
 |  | 
 |         WGL_CONTEXT_DEBUG_BIT_ARB               0x0001 | 
 |         WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB  0x0002 | 
 |  | 
 |     Accepted as bits in the attribute value for | 
 |     WGL_CONTEXT_PROFILE_MASK_ARB in <*attribList>: | 
 |  | 
 |         WGL_CONTEXT_CORE_PROFILE_BIT_ARB        0x00000001 | 
 |         WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002 | 
 |  | 
 |     New errors returned by GetLastError: | 
 |  | 
 |         ERROR_INVALID_VERSION_ARB               0x2095 | 
 |         ERROR_INVALID_PROFILE_ARB               0x2096 | 
 |  | 
 | Additions to the OpenGL / GLX / GLX Protocol Specificaitons | 
 |  | 
 |     None. This specification is written for WGL. | 
 |  | 
 | Additions to the WGL specification | 
 |  | 
 |     Context Creation | 
 |     ---------------- | 
 |  | 
 |     To create an OpenGL rendering context, call | 
 |  | 
 |     HGLRC wglCreateContextAttribsARB(HDC hDC, HGLRC hshareContext, | 
 |                                      const int *attribList); | 
 |  | 
 |     If wglCreateContextAttribsARB succeeds, it initializes the context | 
 |     to the initial state defined by the OpenGL specification, and | 
 |     returns a handle to it. The handle can be used (via wglMakeCurrent | 
 |     or wglMakeContextCurrentARB) with any HDC sharing the same pixel | 
 |     format as <hDC>, and created on the same device, subject to | 
 |     constraints imposed by the API version. | 
 |  | 
 |     If <hshareContext> is not 0, then all shareable data (excluding | 
 |     OpenGL texture objects named 0) will be shared by <hshareContext>, | 
 |     all other contexts <hshareContext> already shares with, and the | 
 |     newly created context. An arbitrary number of contexts can share | 
 |     data in this fashion. | 
 |  | 
 |     <attribList> specifies a list of attributes for the context. The | 
 |     list consists of a sequence of <name,value> pairs terminated by the | 
 |     value 0. If an attribute is not specified in <attribList>, then the | 
 |     default value specified below is used instead. If an attribute is | 
 |     specified more than once, then the last value specified is used. | 
 |  | 
 |     <attribList> may be NULL or empty (first attribute is 0), in which | 
 |     case all attributes assume their default values as described below. | 
 |  | 
 |     The attribute names WGL_CONTEXT_MAJOR_VERSION_ARB and | 
 |     WGL_CONTEXT_MINOR_VERSION_ARB request an OpenGL context supporting | 
 |     the specified version of the API. If successful, the context | 
 |     returned must be backwards compatible with the context requested. | 
 |     Backwards compatibility is determined as follows: | 
 |  | 
 |     If a version less than or equal to 3.0 is requested, the context | 
 |     returned may implement any of the following versions: | 
 |  | 
 |       * Any version no less than that requested and no greater than 3.0. | 
 |       * Version 3.1, if the GL_ARB_compatibility extension is also | 
 |         implemented. | 
 |       * The compatibility profile of version 3.2 or greater. | 
 |  | 
 |     If version 3.1 is requested, the context returned may implement | 
 |     any of the following versions: | 
 |  | 
 |       * Version 3.1. The GL_ARB_compatibility extension may or may not | 
 |         be implemented, as determined by the implementation. | 
 |       * The core profile of version 3.2 or greater. | 
 |  | 
 |     If version 3.2 or greater is requested, the context returned may | 
 |     implement any of the following versions: | 
 |  | 
 |       * The requested profile of the requested version. | 
 |       * The requested profile of any later version, so long as no | 
 |         features have been removed from that later version and profile. | 
 |  | 
 |     Querying the GL_VERSION string with glGetString (or the | 
 |     GL_MAJOR_VERSION and GL_MINOR_VERSION values with glGetIntegerv, in | 
 |     a 3.0 or later context) will return the actual version supported by | 
 |     a context. | 
 |  | 
 |     The default values for WGL_CONTEXT_MAJOR_VERSION_ARB and | 
 |     WGL_CONTEXT_MINOR_VERSION_ARB are 1 and 0 respectively. In this | 
 |     case, implementations will typically return the most recent version | 
 |     of OpenGL they support which is backwards compatible with OpenGL 1.0 | 
 |     (e.g. 3.0, 3.1 + GL_ARB_compatibility, or 3.2 compatibility profile) | 
 |  | 
 |     The attribute name WGL_CONTEXT_PROFILE_MASK_ARB requests an OpenGL | 
 |     context supporting a specific <profile> of the API. If the | 
 |     WGL_CONTEXT_CORE_PROFILE_BIT_ARB bit is set in the attribute value, | 
 |     then a context implementing the <core> profile of OpenGL is | 
 |     returned. If the WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB bit is | 
 |     set, then a context implementing the <compatibility> profile is | 
 |     returned. If the requested OpenGL version is less than 3.2, | 
 |     WGL_CONTEXT_PROFILE_MASK_ARB is ignored and the functionality of the | 
 |     context is determined solely by the requested version. | 
 |  | 
 |     Querying the value of GL_CONTEXT_PROFILE_MASK with glGetIntegerv | 
 |     will return the profile mask used to create the context. This query | 
 |     is only supported in an OpenGL 3.2 or later context. | 
 |  | 
 |     The default value for WGL_CONTEXT_PROFILE_MASK_ARB is | 
 |     WGL_CONTEXT_CORE_PROFILE_BIT_ARB. All OpenGL 3.2 implementations are | 
 |     required to implement the core profile, but implementation of the | 
 |     compatibility profile is optional. | 
 |  | 
 |     If the core profile is requested, then the context returned cannot | 
 |     implement functionality defined only by the compatibility profile. | 
 |  | 
 |     The attribute name WGL_CONTEXT_LAYER_PLANE specifies the layer plane | 
 |     that the rendering context is bound to. The attribute value has the | 
 |     same meaning and allowed values as the <iLayerPlane> parameter of | 
 |     wglCreateLayerContext. The default value for WGL_CONTEXT_LAYER_PLANE | 
 |     is 0 (the main plane). | 
 |  | 
 |     The attribute name WGL_CONTEXT_FLAGS_ARB specifies a set of flag | 
 |     bits affecting the rendering context. | 
 |  | 
 |     If the WGL_CONTEXT_DEBUG_BIT_ARB flag bit is set in | 
 |     WGL_CONTEXT_FLAGS_ARB, then a <debug context> will be created. Debug | 
 |     contexts are intended for use during application development, and | 
 |     provide additional runtime checking, validation, and logging | 
 |     functionality while possibly incurring performance penalties. The | 
 |     additional functionality provided by debug contexts may vary | 
 |     according to the implementation(fn). In some cases a debug context | 
 |     may be identical to a non-debug context. | 
 |         [fn: The ARB Ecosystem TSG is still defining the expected and | 
 |         required features of debug contexts.] | 
 |  | 
 |     If the WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB is set in | 
 |     WGL_CONTEXT_FLAGS_ARB, then a <forward-compatible> context will be | 
 |     created. 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 API, while a | 
 |     non-forward-compatible context must support all functionality in | 
 |     that version, deprecated or not. | 
 |  | 
 |     The default value of WGL_CONTEXT_FLAGS_ARB is 0. | 
 |  | 
 |     On failure wglCreateContextAttribsARB returns NULL. Extended error | 
 |     information can be obtained with GetLastError. Conditions that cause | 
 |     failure include: | 
 |  | 
 |   * If attributes WGL_CONTEXT_MAJOR_VERSION_ARB and | 
 |     WGL_CONTEXT_MINOR_VERSION_ARB, when considered together with | 
 |     WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB, specify an OpenGL version | 
 |     and feature set that are not defined, then ERROR_INVALID_VERSION_ARB | 
 |     is generated. | 
 |  | 
 |     The defined versions of OpenGL at the time of writing are OpenGL | 
 |     1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 2.0, 2.1, 3.0, 3.1, and 3.2. Feature | 
 |     deprecation was introduced with OpenGL 3.0, so forward-compatible | 
 |     contexts may only be requested for OpenGL 3.0 and above. Thus, | 
 |     examples of invalid combinations of attributes include: | 
 |  | 
 |       - Major version < 1 or > 3 | 
 |       - Major version == 1 and minor version < 0 or > 5 | 
 |       - Major version == 2 and minor version < 0 or > 1 | 
 |       - Major version == 3 and minor version > 2 | 
 |       - Forward-compatible flag set and major version < 3 | 
 |  | 
 |     Because the purpose of forward-compatible contexts is to allow | 
 |     application development on a specific OpenGL version with the | 
 |     knowledge that the app will run on a future version, context | 
 |     creation will fail if WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB is set | 
 |     and the context version returned cannot implement exactly the | 
 |     requested version. | 
 |  | 
 |   * If attribute WGL_CONTEXT_PROFILE_MASK_ARB has no bits set; has any | 
 |     bits set other than WGL_CONTEXT_CORE_PROFILE_BIT_ARB and | 
 |     WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB; has more than one of | 
 |     these bits set; or if the implementation does not supported the | 
 |     requested profile, then ERROR_INVALID_PROFILE_ARB is generated. | 
 |  | 
 |   * If <hShareContext> is neither zero nor a valid context handle, then | 
 |     ERROR_INVALID_OPERATION is generated. | 
 |  | 
 |   * If <hDC> is not a valid device context handle, then | 
 |     ERROR_DC_NOT_FOUND is generated. | 
 |  | 
 |   * If the pixel format associated with <hDC> does not support OpenGL | 
 |     contexts providing the requested API major and minor version, | 
 |     forward-compatible flag, and/or debug context flag, then | 
 |     ERROR_INVALID_PIXEL_FORMAT is generated. | 
 |  | 
 |   * If the OpenGL server context state for <hShareContext> exists in an | 
 |     address space that cannot be shared with the newly created context, | 
 |     if <shareContext> was created on a different device context than the | 
 |     one referenced by <hDC>, or if the contexts are otherwise | 
 |     incompatible (for example, one context being associated with a | 
 |     hardware device driver and the other with a software renderer), then | 
 |     ERROR_INVALID_OPERATION is generated. | 
 |  | 
 |   * If the server does not have enough resources to allocate the new | 
 |     context, then ERROR_NO_SYSTEM_RESOURCES is generated. | 
 |  | 
 |   * If an unrecognized attribute is present in <attribList>, | 
 |     then ERROR_INVALID_PARAMETER is generated. | 
 |  | 
 |     Legacy Context Creation | 
 |     ----------------------- | 
 |  | 
 |     When this extension is supported, calling | 
 |  | 
 |         wglCreateContext(hdc) | 
 |  | 
 |     is equivalent to calling | 
 |  | 
 |         wglCreateContextAttribs(hdc,0,NULL). | 
 |  | 
 |     Calling | 
 |  | 
 |         wglCreateLayerContext(hdc,layer) | 
 |  | 
 |     is equivalent to calling | 
 |  | 
 |         wglCreateContextAttribs(hdc, 0, | 
 |                                 { WGL_CONTEXT_LAYER_PLANE, layer, 0 }) . | 
 |  | 
 |     The legacy context creation routines can only return OpenGL 3.1 | 
 |     contexts if the GL_ARB_compatibility extension is supported, and can | 
 |     only return OpenGL 3.2 or greater contexts implementing the | 
 |     compatibility profile. This ensures compatibility for existing | 
 |     applications. However, 3.0-aware applications are encouraged to use | 
 |     wglCreateContextAttribsARB instead of the legacy routines. | 
 |  | 
 |     Binding a Context to a Surface | 
 |     ------------------------------ | 
 |  | 
 |     (add to the description of wglMakeCurrent and | 
 |     wglMakeContextCurrentARB) | 
 |  | 
 |    "If the OpenGL context version of <hglrc> is 3.0 or above, and if | 
 |     either the <hdc> parameter of wglMakeCurrent is NULL, or both of the | 
 |     <hDrawDC> and <hReadDC> parameters of wglMakeContextCurrentARB are | 
 |     NULL, then the context is made current, but with no default | 
 |     framebuffer defined. The effects of having no default framebuffer on | 
 |     the GL are defined in Chapter 4 of the OpenGL 3.0 Specification. | 
 |  | 
 |     The first time <ctx> is made current, the viewport and scissor | 
 |     dimensions are set to the size of the draw drawable (as though | 
 |     glViewport(0,0,w,h) and glScissor(0,0,w,h) were called, where <w> | 
 |     and <h> are the width and height of the drawable, respectively). If | 
 |     the first time <ctx> is made current, it is without a default | 
 |     framebuffer, then the viewport and scissor regions are set as though | 
 |     glViewport(0,0,0,0) and glScissor(0,0,0,0) were called." | 
 |     However, the viewport and scissor dimensions are not modified when | 
 |     <ctx> is subsequently made current; it is the client's | 
 |     responsibility to reset the viewport and scissor in this case." | 
 |  | 
 |     Sharing Objects Between Contexts | 
 |     -------------------------------- | 
 |  | 
 |     (add to the description of wglShareLists) | 
 |  | 
 |     Future versions of OpenGL may only support being added to a share | 
 |     group at context creation time. Specifying such a version of a | 
 |     context as either the <hglrc1> or <hglrc2> arguments to | 
 |     wglShareLists will fail. wglShareLists will return FALSE, and | 
 |     GetLastError will return ERROR_INCOMPATIBLE_DEVICE_CONTEXTS_ARB. | 
 |  | 
 | Dependencies on WGL_ARB_extensions_string | 
 |  | 
 |     Because there is no way to extend wgl, these calls are defined in | 
 |     the ICD and can be called by obtaining the address with | 
 |     wglGetProcAddress. Because this extension is a WGL extension, it is | 
 |     not included in the GL_EXTENSIONS string. Its existence can be | 
 |     determined with the WGL_ARB_extensions_string extension. | 
 |  | 
 | Dependencies on WGL_ARB_create_context | 
 |  | 
 |     If WGL_ARB_create_context_profile is supported, then | 
 |     WGL_ARB_create_context must also be supported. | 
 |  | 
 | Dependencies on OpenGL 3.2 and later OpenGL versions | 
 |  | 
 |     If WGL_ARB_create_context is supported, and if the OpenGL | 
 |     implementation supports OpenGL 3.2 or later, then | 
 |     WGL_ARB_create_context_profile must also be supported. If the OpenGL | 
 |     implementation does not support OpenGL 3.2 or later, then | 
 |     WGL_ARB_create_context_profile may or may not be supported. | 
 |  | 
 |     If WGL_ARB_create_context_profile is not supported, then the | 
 |     WGL_CONTEXT_PROFILE_MASK_ARB attribute, the | 
 |     WGL_CONTEXT_CORE_PROFILE_BIT_ARB and | 
 |     WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB bits in that attribute, | 
 |     and the ERROR_INVALID_PROFILE_ARB error are not defined, and | 
 |     specifying the attribute in <attribList> attribute will generate an | 
 |     error. | 
 |  | 
 | New State | 
 |  | 
 |     None | 
 |  | 
 | New Implementation Dependent State | 
 |  | 
 |    None | 
 |  | 
 | Conformance Tests | 
 |  | 
 |     TBD | 
 |  | 
 | Sample Code | 
 |  | 
 |     TBD | 
 |  | 
 | Issues | 
 |  | 
 |  1) Can different GL context versions share data? | 
 |  | 
 |     PROPOSED: Yes, with restrictions as defined by the supported feature | 
 |     sets. For example, program and shader objects cannot be shared with | 
 |     OpenGL 1.x contexts, which do not support them. | 
 |  | 
 |     NOTE: When the new object model is introduced, sharing must be | 
 |     established at creation time, since the object handle namespace is | 
 |     also shared. wglShareLists would therefore fail if either context | 
 |     parameter to it were to be a context supporting the new object | 
 |     model. | 
 |  | 
 |  2) Should we introduce a token WGL_NONE to terminate attribute lists, | 
 |     instead of using the value 0, by analogy to GLX and EGL? | 
 |  | 
 |     RESOLVED: No. | 
 |  | 
 |  3) Should all GL context versions be able to bind to all the same pixel | 
 |     formats? | 
 |  | 
 |     RESOLVED: unlike EGL, we don't expose the version restriction in the | 
 |     pixel format. Instead, wglMakeCurrent may fail when binding contexts | 
 |     to surfaces if the surface type is unrecognized by that context | 
 |     version. No specific examples exist at present, but in a | 
 |     hypothetical future version of the API supporting only the new | 
 |     object model, such an API probably could not bind to pbuffer | 
 |     surfaces. | 
 |  | 
 |  4) Should there be a way to make a context current without binding | 
 |     it to a window system drawable at the same time? | 
 |  | 
 |     RESOLVED: Yes, but only in OpenGL 3.0 and later. This results in a | 
 |     context with an invalid default framebuffer, the meaning of which is | 
 |     defined in the OpenGL 3.0 specification. | 
 |  | 
 |     NOTE: Apparently on Windows, opengl32.dll makes use of the drawable | 
 |     argument to identify the namespace of the driver, so we may not be | 
 |     able to work around it. | 
 |  | 
 |  5) Should we add a token to the attrib list for pixel format selection | 
 |     to indicate the GL context version, instead of introducing a new | 
 |     entry point for context creation? | 
 |  | 
 |     RESOLVED: No. We want pixel formats to be portable between | 
 |     feature-incompatible context versions, so that drawables and GL | 
 |     objects that make sense to share, may be shared between such | 
 |     contexts. This is important for code migration and backward | 
 |     compatibility. | 
 |  | 
 |  6) Do we need a "can be shared" parameter at context creation time? | 
 |  | 
 |     RESOLVED: No. All contexts have potential to share objects (whether | 
 |     they actually can share depends on context version and feature sets, | 
 |     and the address space they're created in). Savings from saying a | 
 |     context cannot share objects are unclear but probably minimal. Such | 
 |     a parameter would default to TRUE if it existed. | 
 |  | 
 |  7) How are "debug contexts" created? | 
 |  | 
 |     RESOLVED: by specifying the WGL_CONTEXT_DEBUG_BIT_ARB flag in the | 
 |     WGL_CONTEXT_FLAGS_ARB attribute value. | 
 |  | 
 |     DISCUSSION: For the most part, the behavior of debug contexts is | 
 |     being determined by the ARB Ecosystem TSG. However, whatever their | 
 |     behavior, it's clear that "debug contexts" may differ at a basic | 
 |     level from regular contexts. Debug contexts might even go down a | 
 |     completely separate driver path. So it's essential to know at | 
 |     context creation time if a debug context is required. | 
 |  | 
 |  8) Is wglCreateContextVersion a good name? | 
 |  | 
 |     Ian Romanick suggests wglCreateContextAttribs instead. Changed in | 
 |     version 12. | 
 |  | 
 |  9) Should the context version be named with separate major and minor | 
 |     number attributes, or as a single (major*100 + minor*10) number as | 
 |     in GLSL (e.g. version == 220 <-> major = 2, minor = 2)? | 
 |  | 
 |     John Kessenich argues for consistency with the existing GLSL naming | 
 |     scheme. | 
 |  | 
 | 10) How are profiles specified? Why is the profile attribute a bitmask | 
 |     rather than an enum? | 
 |  | 
 |     RESOLVED: Profiles are specified as individual bits passed in a | 
 |     bitmask attribute. This attribute is ignored unless the OpenGL | 
 |     version requested defines profiles (OpenGL 3.2 and later). While | 
 |     only a single profile can be specified today, it is not unlikely | 
 |     that eventually there will be profiles defined than can be | 
 |     implemented in the same context. In that case we will need to be | 
 |     able to specify multiple profiles at context creation and in the GL | 
 |     context profile query, for which a bitmask is appropriate. | 
 |  | 
 | 11) Why is the value of WGL_CONTEXT_PROFILE_MASK_ARB in the GL | 
 |     core enumerant range? | 
 |  | 
 |     RESOLVED: The token value for the context profile mask and for the | 
 |     context profile bits should be shared by GL, GLX, and WGL to ease | 
 |     implementation and reduce programming errors. These values are drawn | 
 |     from the GL token ranges. | 
 |  | 
 | 12) What errors can result from requesting a profile? | 
 |  | 
 |     RESOLVED: Only a single profile can currently be requested. | 
 |     Requesting no profile, more than one profile, or an unrecognized | 
 |     profile are all errors. | 
 |  | 
 | 13) How does the profile request interact with older GL versions? | 
 |  | 
 |     RESOLVED: It does not. The profile mask is ignored unless the | 
 |     requested GL version is >= 3.2. | 
 |  | 
 |     DISCUSSION: Bruce had proposed using the profile mask to control | 
 |     whether or not GL_ARB_compatibility was provided in earlier GL | 
 |     versions, but general feeling was that apps had already had to sort | 
 |     this out, and it's difficult to see how to define a default value | 
 |     that can always be implemented (core profile) without changing the | 
 |     existing behavior of wglCreateContextAttribsARB on implementations | 
 |     which implement GL_ARB_compatibility by default when an OpenGL 3.1 | 
 |     context is requested. | 
 |  | 
 | 14) How does the profile request interact with the forward compatibility | 
 |     bit? | 
 |  | 
 |     RESOLVED: Nothing special need be done here. If the forward | 
 |     compatibility bit is set, the returned context must not implement | 
 |     deprecated functionality in that profile (nothing is deprecated | 
 |     from the OpenGL 3.2 compatibility profile, so a forward-compatible | 
 |     compatibility profile has exactly the same functionality as | 
 |     a non-forward-compatible compatibility profile, while a | 
 |     forward-compatible core profile would leave out only the handful | 
 |     of features - wide lines and two queries - deprecated from core | 
 |     OpenGL 3.2). | 
 |  | 
 | 15) How is context sharing between contexts of different versions | 
 |     handled? | 
 |  | 
 |     RESOLVED: It's up to the implementation whether or not to allow | 
 |     this, and to define behavior when shared objects include state or | 
 |     behaviors not described by one of the contexts sharing them (for | 
 |     example, textures with nonzero width borders shared by 3.2 core and | 
 |     compatibility profile contexts). | 
 |  | 
 | 16) Is the GL_ARB_compatibility extension equivalent to the | 
 |     compatibility profile? | 
 |  | 
 |     RESOLVED: No. The extension refers specifically to functionality | 
 |     removed from OpenGL 3.1 and restored by this extension. The | 
 |     compatibility profile also restores this functionality, but may | 
 |     define additional interactions between new features in version 3.N | 
 |     and the functionality removed in OpenGL 3.1. | 
 |  | 
 |     In other words, the extension is a subset of the compatibility | 
 |     profile. A context implementing the compatibility profile for OpenGL | 
 |     3.2 or greater may (and probably will) choose to export | 
 |     GL_ARB_compatibility, but this is not required. | 
 |  | 
 | 17) If the core profile is requested, what additional functionality | 
 |     can be provided? | 
 |  | 
 |     RESOLVED: Functionality defined only by the compatibility profile | 
 |     cannot be implemented by a context supporting the core profile. For | 
 |     example, if a 3.2 core profile is requested, that context cannot | 
 |     implement the GL_ARB_compatibility extension. However, any desired | 
 |     new functionality may be exposed via vendor or ARB extensions in the | 
 |     normal fashion. | 
 |  | 
 |  | 
 | Revision History | 
 |  | 
 |     Version 20, 2009/07/28 - Correct issue 14 to note that the 3.2 | 
 |     compatibility profile does not deprecated anything. | 
 |  | 
 |     Version 19, 2009/07/27 - Add profiled context creation functionality | 
 |     (WGL_CONTEXT_PROFILE_MASK_ARB and the associated bit tokens, error | 
 |     code, and issues 10-16). Clarify that if the core profile is | 
 |     requested, the returned context cannot restore functionality from | 
 |     the compatibility profile (issue 17 and corresponding spec | 
 |     language). Add ERROR_INVALID_PARAMETER error if an unrecognized | 
 |     attribute is specified. Specify the interdependencies between the | 
 |     two WGL extensions defined here and OpenGL 3.2, including the | 
 |     requirement that WGL_ARB_create_context_profile be supported if an | 
 |     OpenGL 3.2 or later implementation is supported. | 
 |  | 
 |     Version 18, 2009/07/24 - Specify that repeated attribute values | 
 |     always result in the last specified value being used. | 
 |  | 
 |     Version 17, 2009/07/23 - Update the extension to clarify | 
 |     interactions with OpenGL 3.1 and greater, allow returning 3.0 and | 
 |     greater contexts from the legacy context creation routines so long | 
 |     as they're backwards compatible, and mandate that requesting a | 
 |     forward-compatible context always return exactly the requested | 
 |     version (bugs 5112, 5349). | 
 |  | 
 |     Version 16, 2008/08/21 - Add initial viewport/scissor setting | 
 |     behavior (cloned from GLX, including the case when no default | 
 |     framebuffer is made current. | 
 |  | 
 |     Version 15, 2008/08/10 - Assign enumerant values and extension | 
 |     number. | 
 |  | 
 |     Version 14, 2008/07/10 - Add trailing zero to array attributes in | 
 |     wglCreateLayerContext example (Pat Brown). | 
 |  | 
 |     Version 13, 2008/07/03 - Update versioning behavior so asking for <= | 
 |     2.1 will return <= 2.1, asking for 3.0 will return 3.0, and noting | 
 |     that we must update interactions with GL once 3.1 is defined. | 
 |     Mandated behavior of legacy context creation APIs when this | 
 |     extension is supported (bug 3595). | 
 |  | 
 |     Version 12, 2008/07/02 - Rename WGL_PREVIEW_BIT to | 
 |     WGL_CONTEXT_FORWARD_COMPATIBLE_BIT and other replace "preview | 
 |     context" with "forward-compatible context". Rename | 
 |     wglCreateContextVersion to wglCreateContextAttribs. | 
 |  | 
 |     Version 11, 2008/06/12 - Use ARB suffix. Raise ERROR_INVALID_VERSION | 
 |     instead of ERROR_INVALID_DATA on a bad version/preview combination. | 
 |  | 
 |     Version 10, 2008/04/08 - Changed "lite" to "preview" (still open for | 
 |     discussion however), and changed version "2.2" to "3.0" following | 
 |     the marketing TSG recommendation. Changed definition of preview | 
 |     contexts so that deprecated functionality *must not* be supported. | 
 |     Added issue 10 about how to handle profiles. | 
 |  | 
 |     Version 9, 2008/02/07 - Added version naming issue 9. | 
 |  | 
 |     Version 8, 2008/02/07 - Added naming issue 8. Removed reference to | 
 |     GL version 3 in "Sharing Objects Between Contexts". | 
 |  | 
 |     Version 7, 2008/02/01 - Rewrote issues list in light of new API | 
 |     direction, and reopened some issues. Added separate major and minor | 
 |     version attributes and "lite" API flag. | 
 |  | 
 |     Version 6, 2007/05/22 - Resolve issue 4, although the exact | 
 |     mechanism is still unknown. | 
 |  | 
 |     Version 5, 2007/04/09 - Added WGL_CONTEXT_FLAGS attribute and | 
 |     WGL_CONTEXT_DEBUG_BIT flag, and a high-level description of the | 
 |     concept of "debug contexts". | 
 |  | 
 |     Version 4, 2007/02/06 - Removed CreateContextVersion error when GL2 | 
 |     and Longs Peak contexts are placed in the same share group, and | 
 |     referred to the GL_EXT_bind_image extension in issue 1. Added issues | 
 |     6 ("can be shared" attribute) and 7 (creation of debug contexts) per | 
 |     discussion at the Atlanta F2F ARB meeting. Added error condition for | 
 |     wglShareLists if passed a Longs Peak context handle. | 
 |  | 
 |     Version 3, 2007/01/22 - added issue 5. | 
 |  | 
 |     Version 2, 2007/01/17 - change to the same style as | 
 |     eglCreateContext, using an attribute list. Add wglMakeCurrent | 
 |     language disallowing current 3.x contexts bound to pbuffers, and | 
 |     allowing current 3.x context without a window-system provided | 
 |     framebuffer. | 
 |  | 
 |     Version 1, 2007/1/17 - First draft |