Name IMG_texture_compression_pvrtc Name Strings GL_IMG_texture_compression_pvrtc Notice Copyright Imagination Technologies Limited, 2005. Contact Graham Connor, Imagination Technologies (graham 'dot' connor 'at' imgtec 'dot' com) Status Complete Version 1.0, 30 April 2009 Number OpenGL ES Extension #54 Dependencies This extension is written against the OpenGL ES 1.0 Specification, (which in turn is derived from OpenGL 1.3). Thus this spec is effectively written against OpenGL 1.3 but does not address sections explicitly removed or reduced by OpenGL-ES 1.0. It can be implemented against OpenGL ES 2.0. Overview This extension provides additional texture compression functionality specific to Imagination Technologies PowerVR Texture compression format (called PVRTC) subject to all the requirements and limitations described by the OpenGL 1.3 specifications. This extension supports 4 and 2 bit per pixel texture compression formats. Because the compression of PVRTC is very 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) Different versions of PowerVR hardware may interpret the compression formats differently. Resolution: If this situation arises, or could potentially arise in the field, then further extensions would be defined to add tokens for these compression formats. 2) Future revisions of PowerVR hardware might allow custom (non-square) texture dimensions to be used. How will this be dealt with? Resolution: As with Issue 1, further extensions would be defined to add tokens for extra compression formats. 3) PVRTC can encode alpha and opaque data in the same image and this is handled seamlessly by the hardware decode. Why then are there separate tokens for RGB and RGBA compressed textures? Resolution: OpenGL needs to know whether a texture contains alpha data so that the blend modes can be set up correctly. If this information is not encoded in the image format token then some blends will be unobtainable. Note that the driver scanning the data is not a viable solution as it would restrict a texture to being used in one mode only. 4) If this extension does not support driver compression of data, how is data compressed? Resolution: Textures should be compressed using the PVRTextureTool available from PowerVR Developer Relations (devrel 'at' powervr 'dot' com) 5) Is sub-texturing supported? Resolution: Only for the reloading of complete images. Sub-images are not supportable because the PVRTC algorithm uses significant adjacency information, so there is no discrete block of texels that can be decoded as a standalone sub-unit, and so it follows that no stand alone sub-unit of data can be loaded without changing the decoding of surrounding texels. 6) How is the imageSize argument calculated for the CompressedTexImage2D and CompressedTexSubImage2D functions. Resolution: For PVRTC 4BPP formats the imageSize is calculated as: ( max(width, 8) * max(height, 8) * 4 + 7) / 8 For PVRTC 2BPP formats the imageSize is calculated as: ( max(width, 16) * max(height, 8) * 2 + 7) / 8 New Procedures and Functions None. New Tokens Accepted by the parameter of CompressedTexImage2DARB and the parameter of CompressedTexSubImage2DARB: COMPRESSED_RGB_PVRTC_4BPPV1_IMG 0x8C00 COMPRESSED_RGB_PVRTC_2BPPV1_IMG 0x8C01 COMPRESSED_RGBA_PVRTC_4BPPV1_IMG 0x8C02 COMPRESSED_RGBA_PVRTC_2BPPV1_IMG 0x8C03 Additions to Chapter 2 of the OpenGL 1.3 Specification (OpenGL Operation) None. Additions to Chapter 3 of the OpenGL 1.3 Specification (Rasterization) Add to Table 3.16.1: Specific Compressed Internal Formats Compressed Internal Format Base Internal Format ========================== ==================== COMPRESSED_RGB_PVRTC_4BPPV1_IMG RGB COMPRESSED_RGB_PVRTC_2BPPV1_IMG RGB COMPRESSED_RGBA_PVRTC_4BPPV1_IMG RGBA COMPRESSED_RGBA_PVRTC_2BPPV1_IMG RGBA Modify Section 3.8.3, Compressed Texture Images Add to Section 3.8.3, Compressed Texture Images (adding to the end of the CompressedTexImage section) If is COMPRESSED_RGB_PVRTC_4BPPV1_IMG, COMPRESSED_RGB_PVRTC_2BPPV1_IMG, COMPRESSED_RGBA_PVRTC_4BPPV1_IMG, or COMPRESSED_RGBA_PVRTC_2BPPV1_IMG, the compressed texture is stored using one of several PVRTC compressed texture image formats. The PVRTC texture compression algorithm supports only 2D images without borders, that are of a 1:1 aspect ratio. CompressedTexImage2DARB will produce an INVALID_OPERATION if is non-zero, or does not equal . Add to Section 3.8.3, Compressed Texture Images (adding to the end of the CompressedTexSubImage section) If the internal format of the texture image being modified is COMPRESSED_RGB_PVRTC_4BPPV1_IMG, COMPRESSED_RGB_PVRTC_2BPPV1_IMG, COMPRESSED_RGBA_PVRTC_4BPPV1_IMG, or COMPRESSED_RGBA_PVRTC_2BPPV1_IMG the texture is stored using one of the several PVRTC compressed texture image formats. CompressedTexSubImage2D result in an INVALID_OPERATION error only if one of the following conditions occurs: * is not equal to TEXTURE_WIDTH. * is not equal to TEXTURE_HEIGHT. * or is not zero. Additions to Chapter 4 of the OpenGL 1.3 Specification (Per-Fragment Operations and the Frame Buffer) None. Additions to Chapter 5 of the OpenGL 1.3 Specification (Special Functions) None. Additions to Chapter 6 of the OpenGL 1.3 Specification (State and State Requests) None. Additions to Appendix A of the OpenGL 1.3 Specification (Invariance) None. Additions to the AGL/GLX/WGL Specifications None. GLX Protocol None. Errors INVALID_OPERATION is generated by CompressedTexImage2DARB if is COMPRESSED_RGB_PVRTC_4BPPV1_IMG, COMPRESSED_RGB_PVRTC_2BPPV1_IMG, COMPRESSED_RGBA_PVRTC_4BPPV1_IMG, or COMPRESSED_RGBA_PVRTC_2BPPV1_IMG and is not equal to zero; or does not equal . INVALID_OPERATION is generated by CompressedTexSubImage2D if INTERNAL_FORMAT is COMPRESSED_RGB_PVRTC_4BPPV1_IMG, COMPRESSED_RGB_PVRTC_2BPPV1_IMG, COMPRESSED_RGBA_PVRTC_4BPPV1_IMG, or COMPRESSED_RGBA_PVRTC_2BPPV1_IMG and any of the following apply: is not equal to TEXTURE_WIDTH; is not equal to TEXTURE_HEIGHT; and are not zero. New State None. Revision History 0.1, 18/12/2003 gdc: Initial revision. 0.2, 13/01/2004 gdc: Formatting changes. 0.3, 24/08/2004 gdc: Mini-mip behaviour. 0.4, 25/01/2005 nt: Removed sections about CompressedTex[Sub]Image[1|3]D and rewrote specs based on OpenGL 1.3. 1.0, 30/04/2009 bcb: Final cleanup for publish to the registry