Name EXT_EGL_image_external_wrap_modes Name Strings GL_EXT_EGL_image_external_wrap_modes Contributors Jeff Leger, Qualcomm Rob VanReenen, Qualcomm Jonathan Wicks, Qualcomm John Carmack, Oculus Cass Everitt, Oculus Graeme Leese, Broadcom Contacts Jeff Leger, Qualcomm (jleger 'at' qti.qualcomm.com) Status Complete Version Last Modified Date: Feb 06, 2018 Revision: #4 Number OpenGL ES Extension #298 Dependencies Requires OES_EGL_image_external. Interacts with OES_EGL_image_external_essl3. OES_texture_border_clamp affects the definition of this extension. The portions of this extension that modify/extend OES_EGL_image_external are written against OpenGL ES 2.0. The portions of this extension that modify/extend OES_texture_border_clamp are written against OpenGL ES 3.0. The portions of this extension that modify/extend OES_EGL_image_external_essl3 are written against OpenGL ES 3.0. Overview This extension builds on OES_EGL_image_external, which only allows a external images to use a single clamping wrap mode: CLAMP_TO_EDGE. This extension relaxes that restriction, allowing wrap modes REPEAT and MIRRORED_REPEAT. If OES_texture_border_clamp is supported, then CLAMP_TO_BORDER is also allowed. This extension similarly adds to the capabilities of OES_EGL_image_external_essl3, allowing the same additional wrap modes. Since external images can be non-RGB, this extension clarifies how border color values are specified for non-RGB external images. IP Status No known IP claims. New Procedures and Functions None. New Types None. New Tokens None. Changes to Chapter 3 of the OpenGL ES 2.0 Specification Modify the fourth sentence of the first paragraph of Section 3.7.14, as added by OES_EGL_image_external from: "The default s and t wrap modes are CLAMP_TO_EDGE and it is an INVALID_ENUM error to set the wrap mode to any other value." to: [[ The following applies if OES_texture_border_clamp is not supported. ]] "The default s and t wrap modes are CLAMP_TO_EDGE and it is an INVALID_ENUM error to set the wrap mode to any value other than CLAMP_TO_EDGE, REPEAT, or MIRRORED_REPEAT." [[ The following applies if OES_texture_border_clamp is supported. ]] "The default s and t wrap modes are CLAMP_TO_EDGE and it is an INVALID_ENUM error to set the wrap mode to any value other than CLAMP_TO_EDGE, REPEAT, MIRRORED_REPEAT, or CLAMP_TO_BORDER." [[ The following applies if OES_texture_border_clamp is supported. ]] Add the following paragraph to the end of Section 3.7.14, as added by OES_EGL_image_external: The state TEXTURE_BORDER_COLOR_OES is specified as an RGBA color in linear color space. For example, if the original image is stored in(non-linear) ITU-R Rec. 601 YV12, the TEXTURE_BORDER_COLOR_OES must still be specified as an RGBA color in linear color space. Changes to section "3.7.4 Texture Parameters" of the OpenGL ES 2.0 Specification Modify the paragraph as added by OES_EGL_image_external from: "When is TEXTURE_EXTERNAL_OES only NEAREST and LINEAR are accepted as TEXTURE_MIN_FILTER and only CLAMP_TO_EDGE is accepted as TEXTURE_WRAP_S and TEXTURE_WRAP_T." to: [[ The following applies if OES_texture_border_clamp is not supported. ]] "When is TEXTURE_EXTERNAL_OES only NEAREST and LINEAR are accepted as TEXTURE_MIN_FILTER and only CLAMP_TO_EDGE, REPEAT, or MIRRORED_REPEAT are accepted as TEXTURE_WRAP_S and TEXTURE_WRAP_T." [[ The following applies if OES_texture_border_clamp is supported. ]] "When is TEXTURE_EXTERNAL_OES only NEAREST and LINEAR are accepted as TEXTURE_MIN_FILTER and only CLAMP_TO_EDGE, REPEAT, MIRRORED_REPEAT, or CLAMP_TO_BORDER are accepted as TEXTURE_WRAP_S and TEXTURE_WRAP_T." [[ The following applies if OES_texture_border_clamp is supported. ]] Changes to section 3.8.10 "Texture Minification" of the OpenGL ES 3.0 Specification Modify the sentence added by OES_texture_border_clamp From: "If the texture contains color components, the values of TEXTURE_BORDER_COLOR_OES are interpreted as an RGBA color to match the texture's internal format in a manner consistent with table 3.11." To: "If the texture contains color components, the values of TEXTURE_BORDER_COLOR_OES are interpreted as an RGBA color in linear color space to match the texture's internal format in a manner consistent with table 3.11, except that if an external texture stores YUV values then the linear RGBA border value is first converted into a YUVA value in the colorspace of the texture." [[ The following applies if OES_EGL_image_external_essl3 is supported. ]] Changes to section 3.8.2 "Sampler Objects" of the OpenGL ES 3.0.2 Specification Modify the the following sentence added by OES_EGL_image_external_essl3 From: "For example, if TEXTURE_WRAP_S or TEXTURE_WRAP_T is set to anything but CLAMP_TO_EDGE on the sampler object bound to a texture unit and the texture bound to that unit is an external texture, the texture will be considered incomplete." To: [[ The following applies if OES_texture_border_clamp is not supported. ]] "For example, if TEXTURE_WRAP_S or TEXTURE_WRAP_T is set to anything but CLAMP_TO_EDGE, REPEAT, or MIRRORED_REPEAT on the sampler object bound to a texture unit and the texture bound to that unit is an external texture, the texture will be considered incomplete." [[ The following applies if OES_texture_border_clamp is supported. ]] "For example, if TEXTURE_WRAP_S or TEXTURE_WRAP_T is set to anything but CLAMP_TO_EDGE, REPEAT, MIRRORED_REPEAT, or CLAMP_TO_BORDER on the sampler object bound to a texture unit and the texture bound to that unit is an external texture, the texture will be considered incomplete." Issues 1) For YUV texture formats, should the should the border color be specified as RGBA or YUVA ? Resolved: The border color should be specified as linear RGBA since the application may not know the underlying texture format/colorspace. The color should be converted by the implementation to a colorspace (e.g., ITU-R Rec. 601) matching the texture's internal format. Revision History Rev. Date Author Changes ---- -------- -------- ---------------------------------------------- 1 12/19/17 jwicks Initial spec 2. 01/03/18 jleger Updates and cleanup. 3. 01/05/18 jleger Allow additional wrap modes. Rename the extension. 4. 02/06/18 jleger Added interactions with OES_EGL_image_external_essl3.