| Name |
| |
| KHR_create_context |
| |
| Name Strings |
| |
| EGL_KHR_create_context |
| |
| Contact |
| |
| Jon Leech (jon 'at' alumni.caltech.edu) |
| |
| Notice |
| |
| Copyright (c) 2010-2013 The Khronos Group Inc. Copyright terms at |
| http://www.khronos.org/registry/speccopyright.html |
| |
| IP Status |
| |
| No known IP claims. |
| |
| Status |
| |
| Approved by the Khronos Board of Promoters on February 3, 2012 |
| Updated in version 14 to add ES3 context creation bit - see Issue 8 |
| |
| Version |
| |
| Version 16, 2015/01/15 |
| |
| Number |
| |
| EGL Extension #39 |
| |
| Dependencies |
| |
| EGL 1.4 is required. |
| |
| Some of the capabilities of these extensions are only available when |
| OpenGL and OpenGL ES contexts supporting specific versions, specific |
| profiles, or specific extensions can be created. All such restrictions |
| are documented in the body of this extension specification. |
| |
| 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. |
| This extension adds a new context creation routine with attributes |
| specifying the OpenGL version, context properties, and profile requested |
| for the context. It also allows making an OpenGL 3.0 or later context |
| (or other client API context supporting the ability) current without |
| providing a default framebuffer. The new context creation attributes |
| are also defined to work for OpenGL ES context creation when that |
| makes sense, and the extension has been augmented to allow configs to |
| advertise support for creating OpenGL ES 3.0 contexts. |
| |
| |
| New Procedures and Functions |
| |
| None. |
| |
| New Tokens |
| |
| Accepted as an attribute name in the <*attrib_list> argument of |
| eglCreateContext: |
| |
| EGL_CONTEXT_MAJOR_VERSION_KHR 0x3098 |
| (this token is an alias for EGL_CONTEXT_CLIENT_VERSION) |
| EGL_CONTEXT_MINOR_VERSION_KHR 0x30FB |
| EGL_CONTEXT_FLAGS_KHR 0x30FC |
| EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR 0x30FD |
| EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_KHR 0x31BD |
| |
| Accepted as a bitfield value in the EGL_RENDERABLE_TYPE config |
| attribute to eglChooseConfig: |
| |
| EGL_OPENGL_ES3_BIT_KHR 0x0040 |
| |
| Accepted as attribute values for |
| EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_KHR: |
| |
| EGL_NO_RESET_NOTIFICATION_KHR 0x31BE |
| EGL_LOSE_CONTEXT_ON_RESET_KHR 0x31BF |
| |
| Accepted as bits in the attribute value for EGL_CONTEXT_FLAGS_KHR in |
| <*attrib_list>: |
| |
| EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR 0x00000001 |
| EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR 0x00000002 |
| EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR 0x00000004 |
| |
| Accepted as bits in the attribute value for |
| EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR in <*attrib_list>: |
| |
| EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT_KHR 0x00000001 |
| EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT_KHR 0x00000002 |
| |
| Additions to the OpenGL / WGL / GLX Specifications |
| |
| None. This specification is written for EGL. |
| |
| Additions to the EGL 1.4 Specification |
| |
| Add to table 3.3 "Types of client APIs supported by an EGLConfig" |
| |
| "EGL Token Name Client API and Version Supported |
| ---------------------- -------------------------------- |
| EGL_OPENGL_ES3_BIT_KHR OpenGL ES 3.x" |
| |
| Modify the last sentence of section 3.5.2 "Creating Off-Screen |
| Rendering Surfaces" |
| |
| "Finally, an EGL_BAD_ATTRIBUTE error is generated if ... <config> does |
| not support OpenGL ES rendering (e.g. the EGL_RENDERABLE_TYPE |
| attribute does not include at least one of EGL_OPENGL_ES_BIT, |
| EGL_OPENGL_ES2_BIT, or EGL_OPENGL_ES3_BIT_KHR." |
| |
| Modify section 3.7 "Rendering Contexts" in the paragraph near |
| the top of page 42: |
| |
| "Only one OpenGL or OpenGL ES context may be current to a particular |
| thread, even if the implementation supports OpenGL and one or more |
| versions of OpenGL ES in the same runtime [fn12]." |
| |
| Replace section 3.7.1 "Creating Rendering Contexts" from the |
| sixth paragraph through the end of the subsection with: |
| |
| "<attrib_list> specifies a list of attributes for the context. The |
| list has the same structure as described for eglChooseConfig. If an |
| attribute is not specified in <attrib_list>, then the default value |
| specified below is used instead. Most attributes are only meaningful |
| for specific client APIs, and will generate an error when specified |
| to create for another client API context. |
| |
| OpenGL and OpenGL ES Context Versions |
| ------------------------------------- |
| |
| The values for attributes EGL_CONTEXT_MAJOR_VERSION_KHR and |
| EGL_CONTEXT_MINOR_VERSION_KHR specify the requested client API |
| version. They are only meaningful for OpenGL and OpenGL ES contexts, |
| and specifying them for other types of contexts will generate an |
| error. |
| |
| When the current rendering API is EGL_OPENGL_ES_API or |
| EGL_OPENGL_API, the values of EGL_CONTEXT_MAJOR_VERSION_KHR (the |
| <major version> and EGL_CONTEXT_MINOR_VERSION_KHR (the <minor |
| version>) request creation of an OpenGL ES or OpenGL context, |
| respectively, supporting the specified version (<major>.<minor>) of |
| that client API. |
| [fn: the EGL 1.4 token EGL_CONTEXT_CLIENT_VERSION is an alias for |
| EGL_CONTEXT_MAJOR_VERSION_KHR, and the tokens may be used |
| interchangeably.] |
| If successful, the context returned must be <backwards compatible> |
| with the requested version. Backwards compatibility is determined as |
| follows: |
| |
| If the current rendering API is EGL_OPENGL_ES_API, then: |
| |
| * If version 1.0 is requested, the context returned may implement |
| either OpenGL ES 1.0 or OpenGL ES 1.1. |
| |
| * If version 1.1 is requested, the context returned must implement |
| OpenGL ES 1.1. |
| |
| * If version 2.0, version 3.0, or a later version (when later |
| versions are defined by Khronos) is requested, the context |
| returned must implement the requested OpenGL ES version, or any |
| later version which is backwards compatible with the requested |
| version. |
| |
| If the current rendering API is EGL_OPENGL_API, then: |
| |
| * If a version less than or equal to OpenGL 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 OpenGL 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 OpenGL 3.2 or greater is requested, the context returned may |
| implement any of the following versions: |
| |
| * The requested profile (see |
| EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR below) 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. |
| |
| Typically, the implementation will return the most recent version of |
| OpenGL it supports which is backwards compatible with the requested |
| version. |
| |
| Querying the GL_VERSION string with glGetString in either OpenGL or |
| OpenGL ES (or the GL_MAJOR_VERSION and GL_MINOR_VERSION values with |
| glGetIntegerv, in an OpenGL 3.0 or later context) will return the |
| actual version supported by a context. |
| |
| The default values for EGL_CONTEXT_MAJOR_VERSION_KHR and |
| EGL_CONTEXT_MINOR_VERSION_KHR are 1 and 0 respectively. |
| |
| OpenGL Context Profiles |
| ----------------------- |
| |
| The value for attribute EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR |
| specifies a <profile> of the OpenGL API. This attribute is only |
| meaningful for OpenGL contexts, and specifying it for other types of |
| contexts, including OpenGL ES contexts, will generate an error. |
| |
| When the current rendering API is EGL_OPENGL_API, the value of |
| EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR requests an OpenGL context |
| supporting the corresponding profile. If the |
| EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT_KHR bit is set in the attribute |
| value, then a context implementing the <core> profile of OpenGL is |
| returned. If the EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT_KHR |
| bit is set, then a context implementing the <compatibility> profile |
| is returned. If the requested OpenGL version is less than 3.2, |
| EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR 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 EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR is |
| EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT_KHR. All OpenGL 3.2 and later |
| 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. |
| |
| OpenGL and OpenGL ES Context Flags |
| ---------------------------------- |
| |
| The value for attribute EGL_CONTEXT_FLAGS_KHR specifies a set of flag |
| bits affecting the context. Flag bits are only meaningful when creating |
| certain types of contexts, as described for each bit below, and |
| specifying such a flag bit when creating another type of context will |
| generate an error. |
| |
| If the EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR flag bit is set in |
| EGL_CONTEXT_FLAGS_KHR, then a <debug context> will be created. Debug |
| contexts are intended for use during application development, to |
| 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. This bit is supported for |
| OpenGL and OpenGL ES contexts. |
| [fn: Khronos is still defining the expected and required |
| features of debug contexts, so implementations are |
| currently free to implement "debug contexts" with little or |
| no debug functionality. However, OpenGL and OpenGL ES |
| implementations supporting the GL_KHR_debug extension |
| should enable it when this bit is set.] |
| [fn2: See issue 9 below for discussion of backwards |
| compatibility issues with the debug bit and OpenGL ES |
| contexts.] |
| |
| If the EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR flag bit is set |
| in EGL_CONTEXT_FLAGS_KHR, 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. This bit is supported for OpenGL |
| contexts, and requesting a forward-compatible context for OpenGL |
| versions less than 3.0 will generate an error. |
| |
| If the EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR bit is set in |
| EGL_CONTEXT_FLAGS_KHR, then a context supporting <robust buffer |
| access> will be created. Robust buffer access is defined in the |
| GL_ARB_robustness extension specification, and the resulting context |
| must also support either the GL_ARB_robustness extension, or a |
| version of OpenGL incorporating equivalent functionality. This bit |
| is supported for OpenGL contexts. |
| |
| The default value of EGL_CONTEXT_FLAGS_KHR is zero. |
| |
| OpenGL Context Reset Notification |
| --------------------------------- |
| |
| The attribute name |
| EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_KHR specifies the |
| <reset notification behavior> of the rendering context. This |
| attribute is only meaningful for OpenGL contexts, and specifying it |
| for other types of contexts, including OpenGL ES contexts, will |
| generate an error. |
| |
| Reset notification behavior is defined in the GL_ARB_robustness |
| extension specification, and the resulting context must also support |
| either the GL_ARB_robustness extension, or a version of OpenGL or |
| incorporating equivalent functionality. The attribute value may be |
| either EGL_NO_RESET_NOTIFICATION_KHR or |
| EGL_LOSE_CONTEXT_ON_RESET_KHR, which respectively result in reset |
| notification behavior of GL_NO_RESET_NOTIFICATION_ARB and |
| GL_LOSE_CONTEXT_ON_RESET_ARB, as described by GL_ARB_robustness. The |
| default value for EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_KHR |
| is EGL_NO_RESET_NOTIFICATION_KHR. |
| |
| Errors |
| ------ |
| |
| On failure eglCreateContext returns EGL_NO_CONTEXT and generates an |
| EGL error with extended error information. Conditions that cause |
| failure include: |
| |
| * If an attribute is specified that is not meaningful for the |
| client API type determined by the current rendering API, an |
| EGL_BAD_ATTRIBUTE error is generated. |
| |
| * If the current rendering api is EGL_NONE, then an EGL_BAD_MATCH |
| error is generated (this situation can only arise in an |
| implementation which does not support OpenGL ES 1.x, and prior to |
| the first call to eglBindAPI). |
| |
| * If share_context is neither EGL_NO_CONTEXT nor a valid context |
| of the same client API type as the newly created context, then |
| an EGL_BAD_CONTEXT error is generated. |
| |
| * If <config> is not a valid EGLConfig, or does not support the |
| requested client API, then an EGL_BAD_CONFIG error is generated |
| (this includes requesting creation of an OpenGL ES 1.x, 2.0, or |
| 3.0 context when the EGL_RENDERABLE_TYPE attribute of <config> |
| does not contain EGL_OPENGL_ES_BIT, EGL_OPENGL_ES2_BIT, or |
| EGL_OPENGL_ES3_BIT_KHR respectively). |
| |
| * If <config> does not support a client API context compatible |
| with the requested API major and minor version, context flags, |
| and context reset notification behavior (for client API types |
| where these attributes are supported), then an EGL_BAD_MATCH |
| error is generated. |
| |
| * If an OpenGL context is requested, the requested version is |
| greater than 3.2, and the value for attribute |
| EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR has no bits set; has any |
| bits set other than EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT_KHR and |
| EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT_KHR; has more than |
| one of these bits set; or if the implementation does not support |
| the requested profile, then an EGL_BAD_MATCH error is generated. |
| |
| * If an OpenGL or OpenGL ES context is requested and the server |
| context state for <share_context> exists in an address space |
| that cannot be shared with the newly created context, if |
| <share_context> was created on a different display than the one |
| referenced by <config>, if the reset notification behavior of |
| <share_context> and the newly created context are different, 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 an EGL_BAD_MATCH error is |
| generated. |
| |
| * If the server does not have enough resources to allocate the new |
| context, then an EGL_BAD_ALLOC error is generated. |
| |
| * If an OpenGL context is requested and the values for attributes |
| EGL_CONTEXT_MAJOR_VERSION_KHR and EGL_CONTEXT_MINOR_VERSION_KHR, |
| when considered together with the value for attribute |
| EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR, specify an OpenGL |
| version and feature set that are not defined, than an |
| EGL_BAD_MATCH error 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, 3.2, 4.0, 4.1, |
| 4.2, and 4.3. 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 > 4 |
| - Major version == 1 and minor version < 0 or > 5 |
| - Major version == 2 and minor version < 0 or > 1 |
| - Major version == 3 and minor version < 0 or > 2 |
| - Major version == 4 and minor version < 0 or > 3 |
| - 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 |
| EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR is set and the |
| context version returned cannot implement exactly the requested |
| version. |
| |
| * If an OpenGL ES context is requested and the values for |
| attributes EGL_CONTEXT_MAJOR_VERSION_KHR and |
| EGL_CONTEXT_MINOR_VERSION_KHR specify an OpenGL ES version that |
| is not defined, than an EGL_BAD_MATCH error is generated. |
| |
| The defined versions of OpenGL ES at the time of writing are |
| OpenGL ES 1.0, 1.1, 2.0, and 3.0. Examples of invalid |
| combinations of attributes include: |
| |
| - Major version < 1 or > 3 |
| - Major version == 1 and minor version < 0 or > 1 |
| - Major version == 2 and minor version != 0 |
| - Major version == 3 and minor version != 0 |
| |
| * If an attribute name or attribute value in <attrib_list> is not |
| recognized (including undefined or unsupported bits in bitmask |
| attributes), then an EGL_BAD_ATTRIBUTE error is generated." |
| |
| In section 3.7.3, replace the following two error conditions in the |
| list of eglMakeCurrent errors: |
| |
| " * If <ctx> is not a valid context, an EGL_BAD_CONTEXT error is |
| generated. |
| * If either <draw> or <read> are not valid EGL surfaces, an |
| EGL_BAD_SURFACE error is generated." |
| |
| with the following error conditions: |
| |
| " * If <ctx> is not a valid context and is not EGL_NO_CONTEXT, an |
| EGL_BAD_CONTEXT error is generated. |
| * If either <draw> or <read> are not valid EGL surfaces and are |
| not EGL_NO_SURFACE, an EGL_BAD_SURFACE error is generated. |
| * If <ctx> is EGL_NO_CONTEXT and either <draw> or <read> are not |
| EGL_NO_SURFACE, an EGL_BAD_MATCH error is generated. |
| * If either of <draw> or <read> is a valid surface and the other |
| is EGL_NO_SURFACE, an EGL_BAD_MATCH error is generated. |
| * If <ctx> does not support being bound without read and draw |
| surfaces, and both <draw> and <read> are EGL_NO_SURFACE, an |
| EGL_BAD_MATCH error is generated." |
| |
| Replace the paragraph starting "If <ctx> is EGL_NO_CONTEXT and |
| <draw> and <read> are not EGL_NO_SURFACE..." with |
| |
| "If both <draw> and <read> are EGL_NO_SURFACE, and <ctx> is an OpenGL |
| context supporting version 3.0 or later of the OpenGL API, then no |
| error is generated and the context is made current without a |
| <default framebuffer>. The meaning of this is defined in chapter 4 |
| of the OpenGL 3.0 Specification." |
| |
| Append to the paragraph starting "The first time an OpenGL or OpenGL |
| ES context is made current..." with |
| |
| "If the first time <ctx> is made current, it is without a default |
| framebuffer (e.g. both <draw> and <read> are EGL_NO_SURFACE), then |
| the viewport and scissor regions are set as though |
| glViewport(0,0,0,0) and glScissor(0,0,0,0) were called." |
| |
| |
| Errors |
| |
| EGL errors for eglCreateContext as described in the body of the |
| specification. |
| |
| eglMakeCurrent error behavior is relaxed to allow making an OpenGL |
| 3.0 or later context current without a default read or draw |
| framebuffer. |
| |
| Conformance Tests |
| |
| TBD |
| |
| Sample Code |
| |
| TBD |
| |
| Issues |
| |
| Non-window-system dependent issues described in the |
| WGL_ARB_create_context extension specification in the OpenGL |
| Registry apply to EGL_KHR_create_context. |
| |
| 1) Do enumerant values need to be shared with the equivalent WGL / GLX |
| extensions? |
| |
| Mostly not. The only case where it's fairly important that the |
| values be identical is the EGL_CONTEXT_FLAGS_KHR attribute bitmask |
| values, which are also exposed through an OpenGL query. |
| |
| 2) Why are some attribute values named EGL_CONTEXT_OPENGL_*? |
| |
| It is possible that context flags and profiles will eventually be |
| defined for client APIs other than OpenGL. To allow for this |
| possibility, the names of the corresponding attribute values are |
| distinguished. For example, EGL_CONTEXT_FLAGS_KHR currently only has |
| flags defined for OpenGL context creation, and those flags are named |
| EGL_CONTEXT_OPENGL_*_BIT_KHR, but in time OpenVG context creation |
| might allow flags as well. Such flags would be named |
| EGL_CONTEXT_OPENVG_*_BIT_KHR. |
| |
| 3) Why does EGL_CONTEXT_MAJOR_VERSION_KHR have a distinct numeric token |
| value when it is functionally equivalent to |
| EGL_CONTEXT_CLIENT_VERSION? |
| |
| It no longer has a distinct token value; see issue 1. |
| |
| 4) How will future versions of OpenGL ES interact with this extension? |
| |
| Later context versions which are backwards compatibile with the |
| requested version can be returned, just as with OpenGL contexts. |
| |
| 5) What happens when requesting a context requiring OpenGL functionality |
| that cannot be supported by the underlying GL implementation, such as |
| requesting lost context reset notification and/or robust buffer access |
| when the implementation does not support the functionality defined by |
| GL_ARB_robustness? |
| |
| Context creation will fail and an EGL_BAD_MATCH error will be |
| generated. This case is included under the general language of the |
| fifth bullet point under "Errors" but this issue is added to for |
| clarity. |
| |
| 6) How is robust buffer access and reset notification supported under |
| OpenGL ES? |
| |
| RESOLVED: It is an error to request robust buffer access and/or reset |
| notification for OpenGL ES contexts. Exposing robust buffer access and |
| reset notification for OpenGL ES contexts may be defined in a future EGL |
| extension. |
| |
| 7) Future support for OpenGL ES context creation. |
| |
| If and when features available for OpenGL context creation are defined |
| for OpenGL ES context creation in the future, debug contexts, forward |
| compatible contexts, and robust buffer access contexts may be specified |
| using separate attributes rather than bitmasks. The reset notification |
| behavior attribute may be extended to cover OpenGL ES as well as OpenGL. |
| |
| 8) Why was the EGL_OPENGL_ES3_BIT_KHR added in version 13 of the |
| extension? Doesn't this break backwards compatibility with older |
| versions of the extension? |
| |
| Applications need the functionality to be confident that context |
| creation of an OpenGL ES 3.0 context will succeed (rather than trying |
| it with different configs until one that succeeds is found). |
| |
| If this bit is passed into eglChooseConfig and the implementation |
| supports only an older version of the extension, an EGL_BAD_ATTIBUTE |
| error should be generated. Since no matching configs will be found, a |
| robustly-written application will fail (or fall back to an ES 2.0 |
| rendering path) at this point. This is the same application behavior |
| that should result from not finding a matching config on an |
| implementation supporting version 13 of the extension, even though the |
| failure mode is different (EGL error vs. returning no matching |
| configs). The EGL Working Group considers this sufficiently benign |
| behavior, and the functionality important enough, to make the change. |
| |
| 9) Why was OpenGL ES support for EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR added |
| in version 15 of the extension? Doesn't this break backwards |
| compatibility with older versions of the extension? |
| |
| Now that the GL_KHR_debug extension is ratified and available, |
| OpenGL ES implementers needed a way to enable debug functionality, |
| and wanted to use the same mechanism as OpenGL. There is no |
| discovery mechanism for this capability, so an application creating |
| a OpenGL ES context with the debug bit set and running against an |
| older EGL driver should generate an error. The OpenGL ES Working |
| Group considers this benign behavior. |
| |
| 10) Which error should be generated if robust buffer access or reset |
| notifications are requested under OpenGL ES? |
| |
| As per Issue 6, this extension does not support creating robust contexts |
| for OpenGL ES. This is only supported via the EGL_EXT_create_context_- |
| robustness extension. |
| |
| Attempting to use this extension to create robust OpenGL ES context |
| will generate an EGL_BAD_ATTRIBUTE error. This specific error is generated |
| because this extension does not define the EGL_CONTEXT_OPENGL_ROBUST_- |
| ACCESS_BIT_KHR and EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_KHR bits |
| for OpenGL ES contexts. Thus, use of these bits fall under condition |
| described by: "If an attribute is specified that is not meaningful for |
| the client API type.." in the above specification. |
| |
| Revision History |
| |
| Version 16, 2015/01/15 |
| - Add issue 10. |
| |
| Version 15, 2013/03/27 |
| - Add OpenGL ES support for debug contexts (Bug 10035). |
| |
| Version 14, 2012/09/19 |
| - Assign enum value to new bit and published updated extension. |
| |
| Version 13, 2012/07/29 |
| - Add EGL_OPENGL_ES3_BIT_KHR to table 3.3 and sections 3.5.2, 3.7, |
| and 3.7.1. Add issue 8 explaining the addition. |
| |
| Version 12, 2012/07/25 |
| - Explicitly describe new OpenGL 4.3 and OpenGL ES 3.0 versions. |
| This is not a behavior change (Khronos Bug 9136). |
| - Make spec consistent so that asking for a forward-compatible GL |
| context for versions less than 3.0 is an error (Bug 9314). |
| - Change nonexistent EGL_BAD_PROFILE_KHR error generated when |
| asking for an unsupported or nonexistent GL profile to an |
| EGL_BAD_MATCH error (Bug 9314). |
| - Fix typos in spec body for several new tokens of form |
| "EGL_CONTEXT_OPENGL_*" which were missing the "OPENGL_" part |
| (Bug 9314). |
| |
| Version 11, 2012/07/09 - change nonexistent EGL_BAD_VALUE error |
| to EGL_BAD_ATTRIBUTE (Khronos Bug 9269). |
| |
| Version 10, 2011/11/22 - fix typo. |
| |
| Version 9, 2011/11/09 - resolve issue 6 and add issue 7, limiting |
| various context creation attributes to apply only to OpenGL and not |
| to OpenGL ES. |
| |
| Version 8, 2011/10/20 - change spec body to match BAD_MATCH error |
| returned in issue 5 when specifying context version and attributes |
| that collectively cannot be satisfied. |
| |
| Version 7, 2011/10/19 - add issue 5 clarifying context creation |
| failures when requesting functionality that cannot be supported by a |
| GL or ES context, and issue 6 discussing the meaning of "equivalent |
| to GL_ARB_robustness". |
| |
| Version 6, 2011/10/19 - minor cleanup & clarification of OpenGL ES |
| version requests. |
| |
| Version 5, 2010/09/22 - add context reset notification strategy |
| attributes from GLX/WGL context creation extensions. |
| |
| Version 4, 2010/09/22 - fix typo. Assign enumerant values and update |
| issue 1 to match. Add caveat to errors section so that invalid |
| attribute values for EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR only raise |
| errors when requesting an OpenGL context of version 3.2 or greater |
| (bug 6374). Add issue 4 and allow ES 2.0 context creation requests |
| to return later versions that are backwards-compatible (bug 6374). |
| |
| Version 3, 2010/07/21 - remove surfaceless bit in favor of separate |
| per-client-API extensions which promise that contexts of a given |
| client API type can be bound without surfaces on that display. Add |
| robust buffer access bit from equivalent WGL/GLX context creation |
| extensions. Rename EGL_CONTEXT_FLAGS_KHR so it's not specific to |
| OpenGL. |
| |
| Version 2, 2010/06/29 - add EGL_CONTEXT_OPENGL_SURFACELESS_BIT_KHR |
| context flag bit (bug 6082). |
| |
| Version 1, 2010/06/29 - Initial version based on equivalent |
| WGL_ARB_create_context and GLX_ARB_create_context extensions. |