| Name |
| |
| IMG_texture_compression_pvrtc2 |
| |
| Name Strings |
| |
| GL_IMG_texture_compression_pvrtc2 |
| |
| Notice |
| |
| Copyright Imagination Technologies Limited, 2011. |
| |
| Contact |
| |
| Ben Bowman, Imagination Technologies (benji 'dot' bowman 'at' |
| imgtec 'dot' com) |
| |
| Status |
| |
| Complete |
| |
| Version |
| |
| 1.0, 19th December 2012 |
| |
| Number |
| |
| OpenGL ES Extension #140 |
| |
| Dependencies |
| |
| This extension is written against the OpenGL ES 2.0 Specification. |
| OpenGL ES 2.0 with OES_texture_npot is required. |
| |
| Overview |
| |
| This extension provides additional texture compression functionality |
| specific to Imagination Technologies PowerVR Texture compression format |
| (called PVRTC2) subject to all the requirements and limitations |
| described by the OpenGL ES 2.0 specification. |
| |
| This extension supports 4 and 2 bit per pixel texture compression |
| formats. Because the compression of PVRTC2 is CPU intensive, |
| it is not appropriate to carry out compression on the target |
| platform. Therefore this extension only supports the loading of |
| compressed texture data. |
| |
| IP Status |
| |
| Imagination Technologies Proprietary |
| |
| Issues |
| |
| 1) If this extension does not support driver compression of data, |
| how is data compressed? |
| |
| Resolution: Textures should be compressed using the |
| PVRTexTool available from PowerVR Developer Technology |
| (devtech 'at' imgtec 'dot' com) |
| |
| 2) Is sub-texturing supported? |
| |
| Resolution: Yes, at block boundaries. This is 4x4 texels for |
| the 4bpp format and 8x4 for the 2bpp format. Note it is up to |
| the user to ensure the compressor tool is used in the mode which |
| removes block edge artefacts if subdata is going to be used for |
| eg. a texture atlas. |
| |
| 3) Are non-power of two textures supported? |
| |
| Resolution: Yes. |
| |
| 4) How is the imageSize argument calculated for the CompressedTexImage2D |
| and CompressedTexSubImage2D functions. |
| |
| Resolution: For PVRTC2 4BPP format the imageSize is calculated as: |
| ceil(width/4.0) * ceil(height/4.0) * 8.0 |
| For PVRTC2 2BPP format the imageSize is calculated as: |
| ceil(width/8.0) * ceil(height/4.0) * 8.0 |
| |
| 5) Note some early 1.9 SGX drivers will return INVALID_VALUE if the width |
| or height is not a multiple of the block size. |
| |
| New Procedures and Functions |
| |
| None. |
| |
| New Tokens |
| |
| Accepted by the <internalformat> parameter of CompressedTexImage2D |
| and the <format> parameter of CompressedTexSubImage2D: |
| |
| COMPRESSED_RGBA_PVRTC_2BPPV2_IMG 0x9137 |
| COMPRESSED_RGBA_PVRTC_4BPPV2_IMG 0x9138 |
| |
| Additions to Chapter 2 of the OpenGL ES 2.0 Specification (OpenGL Operation) |
| |
| None. |
| |
| Additions to Chapter 3 of the OpenGL ES 2.0 Specification (Rasterization) |
| |
| Add Table 3.8.1: Specific Compressed Internal Formats |
| |
| Compressed Internal Format Base Internal Format |
| ========================== ==================== |
| COMPRESSED_RGBA_PVRTC_2BPPV2_IMG RGBA |
| COMPRESSED_RGBA_PVRTC_4BPPV2_IMG RGBA |
| |
| |
| Modify Section 3.7.3, Compressed Texture Images |
| |
| Add to Section 3.7.3, Compressed Texture Images (adding to the end of |
| the CompressedTexImage section) |
| |
| If <internalformat> is COMPRESSED_RGBA_PVRTC_2BPPV2_IMG or |
| COMPRESSED_RGBA_PVRTC_4BPPV2_IMG, the compressed texture is stored using |
| one of the PVRTC2 compressed texture image formats. The PVRTC2 |
| texture compression algorithm supports only 2D images without borders. |
| CompressedTexImage2DARB will produce an INVALID_OPERATION if <border> is |
| non-zero. |
| |
| Add to Section 3.7.3, Compressed Texture Images (adding to the end of |
| the CompressedTexSubImage section) |
| |
| If the internal format of the texture image being modified is |
| COMPRESSED_RGBA_PVRTC_2BPPV2_IMG or COMPRESSED_RGBA_PVRTC_4BPPV2_IMG, the |
| texture is stored using one of the PVRTC2 compressed texture image |
| formats. CompressedTexSubImage2D results in an INVALID_OPERATION error |
| if internal format is COMPRESSED_RGBA_PVRTC_2BPPV2_IMG and one of the |
| following conditions occurs: |
| |
| * <xoffset> is not a multiple of eight. |
| * <yoffset> is not a multiple of four. |
| * <width> is not a multiple of eight, except when the sum of <width> |
| and <xoffset> is equal to TEXTURE_WIDTH. |
| * <height> is not a multiple of four, except when the sum of <height> |
| and <yoffset> is equal to TEXTURE_HEIGHT. |
| |
| or if internal format is COMPRESSED_RGBA_PVRTC_4BPPV2_IMG and one of the |
| following conditions occurs: |
| |
| * <xoffset> is not a multiple of four. |
| * <yoffset> is not a multiple of four. |
| * <width> is not a multiple of four, except when the sum of <width> |
| and <xoffset> is equal to TEXTURE_WIDTH. |
| * <height> is not a multiple of four, except when the sum of <height> |
| and <yoffset> is equal to TEXTURE_HEIGHT. |
| |
| Additions to Chapter 4 of the OpenGL ES 2.0 Specification (Per-Fragment |
| Operations and the Frame Buffer) |
| |
| None. |
| |
| Additions to Chapter 5 of the OpenGL ES 2.0 Specification (Special Functions) |
| |
| None. |
| |
| Additions to Chapter 6 of the OpenGL ES 2.0 Specification (State and |
| State Requests) |
| |
| The queries for NUM_COMPRESSED_TEXTURE_FORMATS and |
| COMPRESSED_TEXTURE_FORMATS include COMPRESSED_RGBA_PVRTC_2BPPV2_IMG |
| and COMPRESSED_RGBA_PVRTC_4BPPV2_IMG. |
| |
| Errors |
| |
| INVALID_OPERATION is generated by CompressedTexImage2D if |
| <internalformat> is COMPRESSED_RGBA_PVRTC_2BPPV2_IMG or |
| COMPRESSED_RGBA_PVRTC_4BPPV2_IMG, and <border> is not equal to zero. |
| |
| INVALID_OPERATION is generated by CompressedTexSubImage2D if |
| INTERNAL_FORMAT is COMPRESSED_RGBA_PVRTC_2BPPV2_IMG and |
| any of the following apply: |
| |
| * <xoffset> is not a multiple of eight. |
| * <yoffset> is not a multiple of four. |
| * <width> is not a multiple of eight, except when the sum of <width> |
| and <xoffset> is equal to TEXTURE_WIDTH. |
| * <height> is not a multiple of four, except when the sum of <height> |
| and <yoffset> is equal to TEXTURE_HEIGHT. |
| * <format> does not match the internal format of the texture image |
| being modified. |
| |
| INVALID_OPERATION is generated by CompressedTexSubImage2D if |
| INTERNAL_FORMAT is COMPRESSED_RGBA_PVRTC_4BPPV2_IMG and |
| any of the following apply: |
| |
| * <xoffset> is not a multiple of four. |
| * <yoffset> is not a multiple of four. |
| * <width> is not a multiple of four, except when the sum of <width> |
| and <xoffset> is equal to TEXTURE_WIDTH. |
| * <height> is not a multiple of four, except when the sum of <height> |
| and <yoffset> is equal to TEXTURE_HEIGHT. |
| * <format> does not match the internal format of the texture image |
| being modified. |
| |
| New State |
| |
| None. |
| |
| Revision History |
| |
| 0.9, 19/12/2012 tjh: Updated error conditions for subtexturing at the |
| edge of an NPOT texture. |
| 0.8, 08/08/2012 bcb: Final tidy up |
| 0.7, 24/11/2011 bcb: Added NPOT back. |
| 0.6, 03/08/2011 bcb: Added enumerants + further issues |
| 0.5, 03/08/2011 bcb: Update from DevTech feedback. |
| 0.4, 03/08/2011 bcb: Update issues list from GeorgK feedback. |
| 0.3, 02/08/2011 bcb: Update issues list from GrahamC feedback. |
| 0.2, 01/07/2011 bcb: Remove NPOT support. |
| 0.1, 30/06/2011 bcb: Initial revision. |
| |
| |