| Name |
| |
| OES_required_internalformat |
| |
| Name Strings |
| |
| GL_OES_required_internalformat |
| |
| Contributors |
| |
| Aaftab Munshi |
| Jeremy Sandmel |
| Members of the Khronos OpenGL ES working group |
| |
| Contact |
| |
| Benj Lipchak, Apple, Inc. (lipchak 'at' apple.com) |
| |
| Notice |
| |
| Copyright (c) 2007-2013 The Khronos Group Inc. Copyright terms at |
| http://www.khronos.org/registry/speccopyright.html |
| |
| Status |
| |
| Complete. |
| Approved by the Khronos Promoters on April 26, 2012. |
| |
| Version |
| |
| Last Modified Date: January 29, 2010 |
| Author Revision: 0.19 |
| |
| Number |
| |
| XXX TBD |
| |
| Dependencies |
| |
| OpenGL ES 1.0 is required. |
| |
| This extension is written against the OpenGL ES 1.1 specification. |
| |
| OpenGL ES 2.0 affects the definition of this extension. |
| |
| OES_framebuffer_object affects the definition of this extension. |
| |
| OES_depth_texture affects the definition of this extension. |
| |
| OES_depth24 and OES_depth32 affect the definition of this extension. |
| |
| OES_packed_depth_stencil affects the definition of this extension. |
| |
| OES_rgb8_rgba8 affects the definition of this extension. |
| |
| OES_stencil1, OES_stencil4, and OES_stencil8 affect the definition of this |
| extension. |
| |
| OES_texture_3D affects the definition of this extension. |
| |
| EXT_texture_type_2_10_10_10_REV affects the definition of this extension. |
| |
| Overview |
| |
| The ES 1.1 API allows an implementation to store texture data internally |
| with arbitrary precision, regardless of the format and type of the data |
| supplied by the application. Similarly, ES allows an implementation to |
| choose an arbitrary precision for the internal storage of image data |
| allocated by glRenderbufferStorageOES. |
| |
| While this allows flexibility for implementations, it does mean that an |
| application does not have a reliable means to request the implementation |
| maintain a specific precision or to find out what precision the |
| implementation will maintain for a given texture or renderbuffer image. |
| |
| For reference, "Desktop" OpenGL uses the <internalformat> argument to |
| glTexImage*, glCopyTexImage* and glRenderbufferStorageEXT as a hint, |
| defining the particular base format and precision that the application wants |
| the implementation to maintain when storing the image data. Further, the |
| application can choose an <internalformat> with a different base internal |
| format than the source format specified by <format>. The implementation is |
| not required to exactly match the precision specified by <internalformat> |
| when choosing an internal storage precision, but it is required to match the |
| base internal format of <internalformat>. |
| |
| In addition, ES 1.1 does not allow an implementation to fail a request to |
| glTexImage2D for any of the legal <format> and <type> combinations listed in |
| Table 3.4, even if the implementation does not natively support data stored |
| in that external <format> and <type>. However, there are no additional |
| requirements placed on the implementation. The ES implementation is free to |
| store the texture data with lower precision than originally specified, for |
| instance. Further, since ES removes the ability to query the texture object |
| to find out what internal format it chose, there is no way for the |
| application to find out that this has happened. |
| |
| This extension addresses the situation in two ways: |
| |
| 1) This extension introduces the ability for an application to specify |
| the desired "sized" internal formats for texture image allocation. |
| |
| 2) This extension guarantees to maintain at least the specified |
| precision of all available sized internal formats. |
| |
| An implementation that exports this extension is committing to support all |
| of the legal values for <internalformat> in Tables 3.4, 3.4.x, and 3.4.y, |
| subject to the extension dependencies described herein. That is to say, the |
| implementation is guaranteeing that choosing an <internalformat> argument |
| with a value from these tables will not cause an image allocation request to |
| fail. Furthermore, it is guaranteeing that for any sized internal format, |
| the renderbuffer or texture data will be stored with at least the precision |
| prescribed by the sized internal format. |
| |
| Issues |
| |
| 1. What API should we use to allow an application to indicate it wants |
| storage of at least a certain precision for a particular source format/ |
| type combination? |
| |
| RESOLVED |
| |
| We use the "sized" <internalformat> enums to indicate that an |
| application desires some minimum precision for internal storage and |
| that the GL should not use less than the specified precision. |
| |
| We originally had considered using a new "UNPACK" parameter for |
| glPixelStorei that indicated the external <format> and <type> arguments |
| must be supported with no "downsampling" of the precision. |
| |
| However, this latter approach ran into the problem that glCopyTexImage2D |
| and glRenderbufferStorageOES don't use the pixel store "UNPACK" state |
| nor do they have external <format> or <type> arguments to indicate the |
| application's requested precision. |
| |
| Another option was to create a new set of glTexImage*, glCopyTexImage*, |
| and glRenderbufferStorageOES entry points that implied a minimum |
| required precision. |
| |
| However, it seems the simplest thing to do is to just use the |
| <internalformat> argument for this purpose and keep the existing entry |
| points. It's also the most compatible with desktop OpenGL code. |
| |
| 2. Should this specification make any mention of "optionally supported" |
| <internalformat> values at all? Or should we just move all of those to |
| separate defined extensions? |
| |
| RESOLVED, all the values for <internalformat> in Tables 3.4, 3.4.x, and |
| 3.4.y in this extension must be accepted by their respective commands. |
| All sized formats in these tables must be stored with at least the |
| corresponding minimum precision. |
| |
| Other extensions may introduce new values for <internalformat>. If they |
| do, they should modify Tables 3.4, 3.4.x, and 3.4.y. If an |
| implementation can support the new <internalformat> values, it will |
| export the extension. |
| |
| The primary motivation for moving "optionally supported" formats to |
| their own extensions is so that a well-behaved application never gets |
| the idea that it is supposed to check for errors in order to query for |
| available functionality. Well-behaved applications should always query |
| for extension strings and other implementation-dependent state to check |
| for available functionality on a particular implementation. |
| |
| 3. What should be the recommended way to add new formats in the future? |
| |
| RESOLVED |
| |
| Just like before, new extensions can add new values for <internalformat> |
| for *TexImage* and RenderbufferStorageOES. Unless otherwise stated by |
| future extensions, new sized internal formats will provide the same kind |
| of minimum precision guarantees as the formats described herein. |
| |
| 4. How should we handle render vs. texture buffers? |
| |
| RESOLVED |
| |
| We have three tables in the spec, one for textures specified with |
| TexImage*, one for textures specified with CopyTexImage2D, and one for |
| renderbuffers allocated with RenderbufferStorageOES. |
| |
| 5. Should this extension require RGBA8? For both texture and render? |
| |
| RESOLVED |
| |
| Yes, for both. OpenGL ES 2.0 implementations are very likely to have |
| this support anyway, and OpenGL ES 1.x implementations can choose to |
| export this extension or not, depending on whether they support 8 bit/ |
| component for textures and renderbuffers. |
| |
| Note, this extension does not require RGB8 for renderbuffers. |
| Availability of RGB8 renderbuffers is still based on presence of the |
| OES_rgb8_rgba8 extension. |
| |
| 6. What should this extension say, if anything, about depth and stencil |
| internal formats for RenderbufferStorageOES? |
| |
| RESOLVED |
| |
| Stencil and depth formats are listed in the Table 3.4.x. If an |
| implementation that supports this extension doesn't support one or more |
| of the stencil/depth format extensions then this extension behaves as if |
| those enums are NOT listed in Table 3.4.x. |
| |
| 7. Should we allow every combination of <format>, <type>, and |
| <internalformat>? |
| |
| RESOLVED |
| |
| No, we specifically disallow conversions between "base" formats (between |
| RGBA and LUMINANCE_ALPHA, for instance). Further, we also disallow |
| requested "expansions" to larger data types. That is, Table 3.4.x |
| allows the user to request that the GL use a lower precision than the |
| external <type> would require, but that table does not include any |
| entries that would require the GL to use more precision than the |
| external <type> would require. |
| |
| We intentionally don't include this feature here because the |
| <internalformat> represents a required minimum precision for the GL. We |
| don't want to allow an application to require more precision internally |
| than they provide externally because it would necessitate a format |
| conversion. If some implementation really wants to add this |
| functionality, it would need to create an additional extension, say |
| FOO_expanded_internalformat. |
| |
| Note that in the opposite situation where an application provides higher |
| precision source data and asks it to be stored at lower precision, an |
| implementation is still free to store at the higher precision, thereby |
| avoiding format conversion. |
| |
| 8. Should we split this extension into multiple extensions? |
| |
| RESOLVED |
| |
| No. No vendor has expressed interest in subsetting these 3 features: |
| |
| Feature 1: This extension allows an application to specify sized |
| <internalformats> enums for texture and render buffer image |
| allocation. |
| |
| Feature 2: This extension allows the implementation to export a |
| list of sized <internalformats> for which it will guarantee to |
| maintain the specified minimum precision when those formats are used |
| for texture or renderbuffer image allocation. |
| |
| Feature 3: This extension defines a minimum set of sized |
| <internalformat> enums that are required to be exported by the query |
| mechanism in #2 above. |
| |
| 9. Should we add a query that lets the implementation advertise which |
| sized internal formats it supports with minimum precision? |
| |
| RESOLVED |
| |
| No, we'll leave it to a future extension to add this mechanism if |
| necessary. Today all sized internal formats have guaranteed minimum |
| precision. For posterity, we were close to choosing query mechanism 'c' |
| from the list below before we dropped the query entirely: |
| |
| a) a query for a single format's support like this: |
| |
| boolean QuerySupportOES(enum param, int count, const enum* list); |
| |
| which takes a <list> of <count> sized internal format enums and |
| returns GL_FALSE if any of them, when used as a sized internal |
| format with the currently bound context, would result in an internal |
| format of lower precision than requested. The <param> could be |
| GL_SUPPORTED_TEXTURE_INTERNALFORMAT for querying supported texture |
| precisions and GL_SUPPORTED_RENDERBUFFER_INTERNALFORMAT for querying |
| supported renderbuffer precisions. |
| |
| b) a query for all supported formats that the implementation can |
| guarantee minimum precision, like this: |
| |
| void GetSupportedInternalFormatsOES(enum param, |
| int* count, |
| enum* list); |
| |
| where <param> must be TEXTURE_INTERNALFORMAT or |
| RENDERBUFFER_INTERNALFORMAT. On input <count> is the maximum |
| number of internal formats to return, and on output <count> |
| is the number of internal formats in <list>. On output, <list> |
| contains all the values of <internalformat> for which the |
| implementation will guarantee specified precision. <list> will |
| contain <count> entries. |
| |
| c) a query of a single internalformat providing a yes/no answer: |
| |
| boolean IsPreciseInternalformatOES(enum param, enum internalformat); |
| |
| where <param> must be TEXTURE or RENDERBUFFER_OES, and |
| <internalformat> is the internal format for which the app is |
| checking the minimum precision storage guarantee. |
| |
| 10. What is the OES_framebuffer_object interaction? Are FBOs a |
| prerequisite (even on ES 1.1), or should we strike mention of |
| renderbuffers if FBOs aren't available? |
| |
| RESOLVED |
| |
| Sized format hints and minimum precision guarantees for textures are |
| useful even on implementations where FBOs aren't supported. We won't |
| make FBOs a prerequisite. |
| |
| 11. Should we add retroactive support for EXT_texture_type_2_10_10_10_REV? |
| |
| RESOLVED |
| |
| Yes. We introduced two new sized internal formats, RGB10_A2_EXT and |
| RGB10_EXT. This format continues to be unrenderable, consistent with |
| the EXT_texture_type_2_10_10_10_REV spec. These formats join the rest |
| of existing sized internal formats on the required list of formats for |
| which precision is guaranteed. |
| |
| 12. Do we need different token values from OpenGL? |
| |
| RESOLVED |
| |
| No. Initially some new tokens (such as ALPHA8_OES) were given new |
| values, which was due to a difference in the meaning relative to |
| OpenGL: in OpenGL 2.1, sized internal formats were purely hints, |
| whereas in this extension they are lower bounds. However, OpenGL |
| now specifies a number of formats as being "required" in the |
| same sense of a lower bound on precision, and the token values |
| are not changed. |
| |
| New Procedures and Functions |
| |
| None. |
| |
| New Types |
| |
| None. |
| |
| New Tokens |
| |
| Accepted by the <internalformat> argument of TexImage2D, TexImage3DOES, and |
| CopyTexImage2D: |
| |
| ALPHA8_OES 0x803C |
| LUMINANCE8_OES 0x8040 |
| LUMINANCE8_ALPHA8_OES 0x8045 |
| LUMINANCE4_ALPHA4_OES 0x8043 |
| RGB565_OES 0x8D62 |
| RGB8_OES 0x8051 |
| RGBA4_OES 0x8056 |
| RGB5_A1_OES 0x8057 |
| RGBA8_OES 0x8058 |
| DEPTH_COMPONENT16_OES 0x81A5 |
| DEPTH_COMPONENT24_OES 0x81A6 |
| DEPTH_COMPONENT32_OES 0x81A7 |
| DEPTH24_STENCIL8_OES 0x88F0 |
| RGB10_EXT 0x8052 |
| RGB10_A2_EXT 0x8059 |
| |
| Accepted by the <internalformat> argument of RenderbufferStorageOES: |
| |
| RGBA8_OES 0x8058 |
| |
| Additions to Chapter 2 of the OpenGL ES 1.1 Specification (OpenGL ES Operation) |
| |
| None. |
| |
| Additions to Chapter 3 of the OpenGL ES 1.1 Specification (Rasterization) |
| |
| In section 3.6.2 ("Unpacking"), p.69 (p. 60/61 of ES 2.0 spec), modify |
| Table 3.4 and replace the preceding paragraph as follows: |
| |
| |
| Format Type External Bytes per Pixel Internal format |
| ------ ---- ------------------------ --------------- |
| RGBA UNSIGNED_INT_2_10_10_10_REV_EXT 4 RGBA, RGB10_A2_EXT, RGB5_A1 |
| RGBA UNSIGNED_BYTE 4 RGBA, RGBA8, RGB5_A1, RGBA4 |
| RGB UNSIGNED_INT_2_10_10_10_REV_EXT 4 RGB, RGB10_EXT, RGB8, RGB565 |
| RGB UNSIGNED_BYTE 3 RGB, RGB8, RGB565 |
| RGBA UNSIGNED_SHORT_4_4_4_4 2 RGBA, RGBA4 |
| RGBA UNSIGNED_SHORT_5_5_5_1 2 RGBA, RGB5_A1 |
| RGB UNSIGNED_SHORT_5_6_5 2 RGB, RGB565 |
| LUMINANCE_ALPHA UNSIGNED_BYTE 2 LUMINANCE_ALPHA, LUMINANCE8_ALPHA8, LUMINANCE4_ALPHA4 |
| LUMINANCE UNSIGNED_BYTE 1 LUMINANCE, LUMINANCE8 |
| ALPHA UNSIGNED_BYTE 1 ALPHA, ALPHA8 |
| DEPTH_COMPONENT UNSIGNED_SHORT 2 DEPTH_COMPONENT, DEPTH_COMPONENT16_OES |
| DEPTH_COMPONENT UNSIGNED_INT 4 DEPTH_COMPONENT, DEPTH_COMPONENT32_OES, DEPTH_COMPONENT24_OES, DEPTH_COMPONENT16_OES |
| DEPTH_STENCIL_OES UNSIGNED_INT_24_8_OES 4 DEPTH_STENCIL_OES, DEPTH24_STENCIL8_OES |
| |
| Table 3.4: Valid combinations of <format>, <type>, and |
| <internalformat> for TexImage2D and TexImage3DOES |
| |
| When calling TexImage2D or TexImage3DOES, not all combinations of |
| <format>, <type>, and <internalformat> are valid. The valid |
| combinations accepted by the GL are defined in Table 3.4. If TexImage2D |
| or TexImage3DOES is called with a combination of <format>, <type>, and |
| <internalformat> not listed in Table 3.4, then INVALID_OPERATION is |
| generated. |
| |
| In addition, only certain values for <internalformat> are valid when |
| calling RenderbufferStorageOES and CopyTexImage2D. The valid values of |
| <internalformat> are listed in Tables 3.4.x and 3.4.y. If |
| RenderbufferStorageOES is called with a value of <internalformat> not |
| listed in Table 3.4.x then INVALID_ENUM is generated. Similarly, if |
| CopyTexImage2D is called with a value of <internalformat> not listed in |
| Table 3.4.y, then INVALID_ENUM is generated. |
| |
| Internal format |
| --------------- |
| RGBA4_OES |
| RGB5_A1_OES |
| RGBA8_OES |
| RGB565_OES |
| RGB8_OES |
| STENCIL_INDEX1_OES |
| STENCIL_INDEX4_OES |
| STENCIL_INDEX8_OES |
| DEPTH_COMPONENT16_OES |
| DEPTH_COMPONENT24_OES |
| DEPTH_COMPONENT32_OES |
| DEPTH24_STENCIL8_OES |
| |
| Table 3.4.x: Legal values of <internalformat> for |
| RenderbufferStorageOES |
| |
| Internal format |
| --------------- |
| RGBA |
| RGBA4_OES |
| RGB5_A1_OES |
| RGBA8_OES |
| RGB10_A2_EXT |
| RGB |
| RGB565_OES |
| RGB8_OES |
| RGB10_EXT |
| LUMINANCE_ALPHA |
| LUMINANCE4_ALPHA4_OES |
| LUMINANCE8_ALPHA8_OES |
| LUMINANCE |
| LUMINANCE8_OES |
| ALPHA |
| ALPHA8_OES |
| |
| Table 3.4.y: Legal values of <internalformat> for CopyTexImage2D |
| |
| An implementation must accept all of the values for <internalformat> |
| specified in Tables 3.4, 3.4.x, 3.4.y. Furthermore, an implementation |
| must respect the minimum precision requirements of sized internal |
| formats -- those with explicit component resolutions -- by storing each |
| component with at least the number of bits prescribed. |
| |
| If one of the base "unsized" formats (RGBA, RGB, LUMINANCE_ALPHA, |
| LUMINANCE, ALPHA, DEPTH_COMPONENT, or DEPTH_STENCIL_OES) is specified |
| for <internalformat> to TexImage2D, TexImage3DOES, or CopyTexImage2D, |
| the GL is free to choose the precision that it will maintain for the |
| texture. ES implementations are still encouraged, however, to maintain |
| as much precision as possible, given the source arguments to those |
| commands. |
| |
| In section 3.7.9 (3.7.10 for ES 2.0), update the definition of texture |
| completeness (and cube completeness for ES 2.0 or in the presence of |
| OES_texture_cube_map) to read: |
| |
| "... were each specified with the same format, type, and internal |
| format." |
| |
| Additions to Chapter 4 of the OpenGL ES 1.1 Specification (Per-Fragment |
| Operations and the Frame Buffer) |
| |
| None. |
| |
| Additions to Chapter 5 of the OpenGL ES 1.1 Specification (Special Functions) |
| |
| None. |
| |
| Additions to Chapter 6 of the OpenGL ES 1.1 Specification (State and State |
| Requests) |
| |
| None. |
| |
| Additions to Appendix A of the OpenGL ES 1.1 Specification (Invariance) |
| |
| None. |
| |
| Additions to the AGL/EGL/GLX/WGL Specifications |
| |
| None. |
| |
| GLX Protocol |
| |
| XXX TBD |
| |
| Errors |
| |
| If TexImage2D or TexImage3DOES is called with a combination of <format>, |
| <type>, and <internalformat> not listed in Table 3.4, then INVALID_OPERATION |
| is generated. |
| |
| If RenderbufferStorageOES or CopyTexImage2D is called with a value of |
| <internalformat> not listed in Table 3.4.x or 3.4.y, respectively, then |
| INVALID_ENUM is generated. |
| |
| New State |
| |
| None. |
| |
| New Implementation Dependent State |
| |
| None. |
| |
| Dependencies on OpenGL ES 2.0 |
| |
| If OpenGL ES 2.0 is supported, the following tokens do not have the |
| "_OES" suffix: RGB565, RGBA4, RGB5_A1, DEPTH_COMPONENT16, STENCIL_INDEX8, |
| and RENDERBUFFER. Also, RenderbufferStorage does not have the "OES" suffix. |
| |
| Dependencies on OES_depth_texture |
| |
| If OES_depth_texture is not supported, then all references to |
| DEPTH_COMPONENT as a legal value for <format> when calling TexImage2D and |
| TexImage3DOES should be deleted. |
| |
| Dependencies on OES_depth24 and OES_depth32 |
| |
| If OES_depth24 is not supported, then all references to |
| DEPTH_COMPONENT24_OES should be deleted. |
| |
| If OES_depth32 is not supported, then all references to |
| DEPTH_COMPONENT32_OES should be deleted. |
| |
| Dependencies on OES_framebuffer_object |
| |
| If OES_framebuffer_object is not supported and OpenGL ES 2.0 is not |
| supported, then all references to RENDERBUFFER_OES and renderbuffers should |
| be deleted, including Table 3.4.x. |
| |
| Dependencies on OES_packed_depth_stencil |
| |
| If OES_packed_depth_stencil is not supported, then all references to |
| DEPTH_STENCIL_OES, DEPTH24_STENCIL8_OES, and UNSIGNED_INT_24_8_OES should be |
| deleted. |
| |
| Dependencies on OES_rgb8_rgba8 |
| |
| If OES_rgb8_rgba8 is not supported, then references to RGB8_OES as a |
| renderbuffer format in Table 3.4.x should be deleted. |
| |
| Dependencies on OES_stencil1, OES_stencil4, and OES_stencil8 |
| |
| If OES_stencil1 is not supported, then all references to STENCIL_INDEX1_OES |
| should be deleted. |
| |
| If OES_stencil4 is not supported, then all references to STENCIL_INDEX4_OES |
| should be deleted. |
| |
| If OES_stencil8 is not supported and OpenGL ES 2.0 is not supported, then |
| all references to STENCIL_INDEX8_OES should be deleted. |
| |
| Dependencies on OES_texture_3D |
| |
| If OES_texture_3D is not supported, then all references to TexImage3DOES |
| should be deleted. |
| |
| Dependencies on EXT_texture_type_2_10_10_10_REV |
| |
| If EXT_texture_type_2_10_10_10_REV is not supported, then all references to |
| RGB10_A2_EXT, RGB10_EXT, and UNSIGNED_INT_2_10_10_10_REV_EXT should be |
| deleted. |
| |
| Sample Code |
| |
| // ==================================================================== |
| // Example 1: |
| // An application that requires support for RGBA with >= 8888 storage |
| // can indicate so by simply checking for the OES_required_internalformat |
| // extension string, since RGBA8_OES availability is a prerequisite. |
| // ==================================================================== |
| |
| // First, check for presence of this extension. |
| bool reqSupportAvailable = |
| MyExtensionQuery("GL_OES_required_internalformat"); |
| if (!reqSupportAvailable) |
| { |
| printf("No support for GL_OES_required_internalformat!\n"); |
| exit(1); |
| } |
| |
| // This texture is guaranteed to be stored with at least 8-bit per component |
| glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8_OES, 32, 32, 0, |
| GL_RGBA, GL_UNSIGNED_BYTE, myTexelData); |
| |
| // ==================================================================== |
| // Example 2: |
| // An application that requires support for DEPTH_COMPONENT with >= 32 bit |
| // storage can indicate so by checking for both OES_required_internalformat |
| // and OES_depth32 extension strings. That will guarantee minimum precision |
| // for 32-bit depth values stored in renderbuffers. If the application also |
| // needs 32-bit depth stored in textures, it can check for the |
| // OES_depth_texture extension, too. |
| // ==================================================================== |
| |
| // First, check for presence of this extension. |
| bool reqSupportAvailable = CheckExtension("GL_OES_required_internalformat"); |
| if (!reqSupportAvailable) |
| { |
| printf("No support for GL_OES_required_internalformat.\n"); |
| printf("Minimum precision guarantees cannot be made!\n"); |
| exit(1); |
| } |
| |
| // Now check for the presence of the depth32 extension. |
| bool depth32_available = CheckExtension("GL_OES_depth32"); |
| if (!depth32_available) |
| { |
| printf("No support for OES_depth32.\n"); |
| printf("32-bit depth renderbuffers not available!\n"); |
| exit(1); |
| } |
| |
| // We're now guaranteed minimum 32-bit depth renderbuffers |
| glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_DEPTH_COMPONENT32_OES, |
| 32, 32); |
| |
| // Now check for the presence of the depth texture extension. |
| bool depth_texture_available = CheckExtension("GL_OES_depth_texture"); |
| if (!depth_texture_available) |
| { |
| printf("No support for OES_depth_texture.\n"); |
| printf("32-bit depth textures not available!\n"); |
| exit(1); |
| } |
| |
| // We're now guaranteed minimum 32-bit depth textures |
| glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT32_OES, 32, 32, 0, |
| GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, myD32TexelData); |
| |
| Revision History |
| |
| 0.19, 01/29/2010, bmerry |
| - changed token values for six formats where they were different |
| from equivalent OpenGL tokens, and added issue 12 |
| |
| 0.18, 11/26/2008, benj |
| - RGBA8 is mandated as a renderbuffer format, while RGB8 is only available |
| if OES_rgb8_rgba8 is present. |
| |
| 0.17, 11/19/2008, benj |
| - treat OES_rgb8_rgba8 as optional like other renderbuffer format extensions |
| - update Dependencies section |
| - assign enum values for new tokens |
| - fix minor typos |
| |
| 0.16, 11/03/2008, benj |
| - remove query mechanism since all sized internal formats have guaranteed |
| minimum precision today |
| - mention OES_rgb8_rgba8 requirement under Dependencies section |
| - remove more tokens introduced by other extensions from New Tokens |
| - update overview, issues list, and sample code |
| |
| 0.15, 10/29/2008, benj |
| - fix sample code bugs reported by Acorn |
| - firm up the definition of texture completeness, requested by Acorn |
| |
| 0.14, 10/29/2008, benj |
| - fix spec bug reported by Ben in New Tokens section: split up token list |
| - remove unrenderable RGB10_A2_EXT and RGB10_EXT formats from Table 3.4.x |
| - get rid of gl, GL, and GL_ prefixes |
| - switch query mechanism to new glIsRespectedInternalFormat |
| - update issues list and sample code |
| |
| 0.13, 10/28/2008, benj |
| - major overhaul |
| - remove double pointer from query command |
| - fix extension names for depth and stencil extensions |
| - sync up with latest 10/10/10/2 texture and depth texture extensions |
| - don't allow RGBA8 or RGBA4 internal formats for 10/10/10/2 textures |
| since that would require expanding the alpha channel |
| - add OES suffix to most tokens, EXT for 10/10/10/2 tokens |
| - remove tokens that aren't introduced by this extension from New Tokens |
| - add missing ALPHA8_OES and DEPTH_COMPONENT16_OES to New Tokens |
| - remove unsized formats from Table 3.4.x, add missing DEPTH_COMPONENT16 |
| - remove L, A, and LA formats from Table 3.4.x and Table 3.6.x |
| RENDERBUFFER_OES section |
| - add interactions with ES 2.0 and OES_framebuffer_object |
| - change error for invalid combination of format/type/internalformat from |
| INVALID_ENUM to INVALID_OPERATION |
| - reformat for 80 columns |
| - update issues list and sample code |
| |
| 0.12, 02/27/2008, jsandmel |
| - added glGetSupportedInternalFormatsOES to new procedures section |
| - fixed typo in argument name for <internalformatlist> |
| |
| 0.11, 02/05/2008, jsandmel |
| - reworked API after the Portland F2F |
| - added query for supported internal formats |
| - updated section 3.6.2.1 on how the required list works |
| - added table 3.6.x for the list of required <internalformats> |
| - added a sample code example of the query for supported <internalformats> |
| - added dependency on packed depth stencil |
| |
| 0.10, 10/16/2007, jsandmel |
| - fixed several typos and non-ascii characters, no functional changes |
| |
| 0.9, 10/15/2007, jsandmel |
| - added issues 12 and 13 |
| - included Acorn's suggestion for a query for supported formats that |
| respect the minimum precision guarantee |
| |
| 0.8, 05/27/2007, jsandmel |
| - added contributors section |
| - updated spec with recent group decisions |
| - added explicit dependencies on OES_stencil, OES_depth extensions |
| - split table 3.4.x into two tables: one for RenderbufferStorageOES |
| and one for CopyTexImage since you can create a depth/stencil |
| renderbuffer but not texture. |
| |
| 0.7, 05/21/2007, jsandmel |
| - updated spec with recent group decisions |
| - removed concept of "optionally supported" extensions |
| - added second table for RenderBuffer storage |
| |
| 0.6, 05/03/2007, jsandmel |
| - fixed some typos refering to OpenGL 1.5 spec that should be ES 1.1 spec |
| |
| 0.5, 4/28/2007, jsandmel |
| - changed a few more references to LUMINANCE/ALPHA instead of L/A |
| - also clarified overview wrt to required <internalformat> semantics |
| |
| 0.4, 4/25/2007, jsandmel |
| - corrected table 3.4 and 3.4x to use LUMINANCE/ALPHA instead of L/A |
| |
| 0.3, 4/24/2007, jsandmel |
| - added issue 5 to discuss whether we should move all the "optionally |
| supported" <internalformat> values to their own extensions |
| |
| 0.2, 4/24/2007, jsandmel |
| - fixed up a few typos and lingering references to UNPACK state |
| |
| 0.1, 4/23/2007, jsandmel |
| - switch to start using <internalformat> instead of adding a new |
| UNPACK parameter. |
| |
| 0.0, 4/17/2007, jsandmel |
| - initial revision |