15bd8deadSopenharmony_ciName 25bd8deadSopenharmony_ci 35bd8deadSopenharmony_ci EXT_texture_compression_s3tc 45bd8deadSopenharmony_ci 55bd8deadSopenharmony_ciName Strings 65bd8deadSopenharmony_ci 75bd8deadSopenharmony_ci GL_EXT_texture_compression_s3tc 85bd8deadSopenharmony_ci 95bd8deadSopenharmony_ciContributors 105bd8deadSopenharmony_ci 115bd8deadSopenharmony_ci Pat Brown, NVIDIA Corporation (pbrown 'at' nvidia.com) 125bd8deadSopenharmony_ci Ian Stewart, NVIDIA Corporation (istewart 'at' nvidia.com) 135bd8deadSopenharmony_ci Nicholas Haemel, NVIDIA Corporation 145bd8deadSopenharmony_ci Acorn Pooley, NVIDIA Corporation 155bd8deadSopenharmony_ci Antti Rasmus, NVIDIA Corporation 165bd8deadSopenharmony_ci Musawir Shah, NVIDIA Corporation 175bd8deadSopenharmony_ci 185bd8deadSopenharmony_ciContact 195bd8deadSopenharmony_ci 205bd8deadSopenharmony_ci Pat Brown, NVIDIA Corporation (pbrown 'at' nvidia.com) 215bd8deadSopenharmony_ci Slawomir Grajewski, INTEL (slawomir.grajewski 'at' intel.com) 225bd8deadSopenharmony_ci 235bd8deadSopenharmony_ciStatus 245bd8deadSopenharmony_ci 255bd8deadSopenharmony_ci FINAL 265bd8deadSopenharmony_ci 275bd8deadSopenharmony_ciVersion 285bd8deadSopenharmony_ci 295bd8deadSopenharmony_ci 1.6, 15 July 2013 305bd8deadSopenharmony_ci 315bd8deadSopenharmony_ciNumber 325bd8deadSopenharmony_ci 335bd8deadSopenharmony_ci OpenGL Extension #198 345bd8deadSopenharmony_ci OpenGL ES Extension #154 355bd8deadSopenharmony_ci 365bd8deadSopenharmony_ciDependencies 375bd8deadSopenharmony_ci 385bd8deadSopenharmony_ci OpenGL dependencies: 395bd8deadSopenharmony_ci 405bd8deadSopenharmony_ci OpenGL 1.1 is required. 415bd8deadSopenharmony_ci 425bd8deadSopenharmony_ci GL_ARB_texture_compression is required. 435bd8deadSopenharmony_ci 445bd8deadSopenharmony_ci This extension is written against the OpenGL 1.2.1 Specification. 455bd8deadSopenharmony_ci 465bd8deadSopenharmony_ci This extension interacts with OpenGL 2.0 and 475bd8deadSopenharmony_ci ARB_texture_non_power_of_two. 485bd8deadSopenharmony_ci 495bd8deadSopenharmony_ci OpenGL ES dependencies: 505bd8deadSopenharmony_ci 515bd8deadSopenharmony_ci This extension is written against the OpenGL ES 2.0.25 Specification 525bd8deadSopenharmony_ci and OpenGL ES 3.0.2 Specification. 535bd8deadSopenharmony_ci 545bd8deadSopenharmony_ci This extension applied to OpenGL ES 2.0.25 Specification interacts with 555bd8deadSopenharmony_ci NV_texture_array. 565bd8deadSopenharmony_ci 575bd8deadSopenharmony_ciOverview 585bd8deadSopenharmony_ci 595bd8deadSopenharmony_ci This extension provides additional texture compression functionality 605bd8deadSopenharmony_ci specific to S3's S3TC format (called DXTC in Microsoft's DirectX API), 615bd8deadSopenharmony_ci subject to all the requirements and limitations described by the extension 625bd8deadSopenharmony_ci GL_ARB_texture_compression. 635bd8deadSopenharmony_ci 645bd8deadSopenharmony_ci This extension supports DXT1, DXT3, and DXT5 texture compression formats. 655bd8deadSopenharmony_ci For the DXT1 image format, this specification supports an RGB-only mode 665bd8deadSopenharmony_ci and a special RGBA mode with single-bit "transparent" alpha. 675bd8deadSopenharmony_ci 685bd8deadSopenharmony_ciIP Status 695bd8deadSopenharmony_ci 705bd8deadSopenharmony_ci Contact S3 Incorporated (http://www.s3.com) regarding any intellectual 715bd8deadSopenharmony_ci property issues associated with implementing this extension. 725bd8deadSopenharmony_ci 735bd8deadSopenharmony_ci WARNING: Vendors able to support S3TC texture compression in Direct3D 745bd8deadSopenharmony_ci drivers do not necessarily have the right to use the same functionality in 755bd8deadSopenharmony_ci OpenGL. 765bd8deadSopenharmony_ci 775bd8deadSopenharmony_ciIssues 785bd8deadSopenharmony_ci 795bd8deadSopenharmony_ci (1) Should DXT2 and DXT4 (premultiplied alpha) formats be supported? 805bd8deadSopenharmony_ci 815bd8deadSopenharmony_ci RESOLVED: No -- insufficient interest. Supporting DXT2 and DXT4 825bd8deadSopenharmony_ci would require some rework to the TexEnv definition (maybe add a new 835bd8deadSopenharmony_ci base internal format RGBA_PREMULTIPLIED_ALPHA) for these formats. 845bd8deadSopenharmony_ci Note that the EXT_texture_env_combine extension (which extends normal 855bd8deadSopenharmony_ci TexEnv modes) can be used to support textures with premultipled alpha. 865bd8deadSopenharmony_ci 875bd8deadSopenharmony_ci (2) Should generic "RGB_S3TC_EXT" and "RGBA_S3TC_EXT" enums be supported 885bd8deadSopenharmony_ci or should we use only the DXT<n> enums? 895bd8deadSopenharmony_ci 905bd8deadSopenharmony_ci RESOLVED: No. A generic RGBA_S3TC_EXT is problematic because DXT3 915bd8deadSopenharmony_ci and DXT5 are both nominally RGBA (and DXT1 with the 1-bit alpha is 925bd8deadSopenharmony_ci also) yet one format must be chosen up front. 935bd8deadSopenharmony_ci 945bd8deadSopenharmony_ci (3) Should TexSubImage support all block-aligned edits or just the minimal 955bd8deadSopenharmony_ci functionality required by the ARB_texture_compression extension? 965bd8deadSopenharmony_ci 975bd8deadSopenharmony_ci RESOLVED: Allow all valid block-aligned edits. 985bd8deadSopenharmony_ci 995bd8deadSopenharmony_ci (4) A pre-compressed image with a DXT1 format can be used as either an 1005bd8deadSopenharmony_ci RGB_S3TC_DXT1 or an RGBA_S3TC_DXT1 image. If the image has 1015bd8deadSopenharmony_ci transparent texels, how are they treated in each format? 1025bd8deadSopenharmony_ci 1035bd8deadSopenharmony_ci RESOLVED: The renderer has to make sure that an RGB_S3TC_DXT1 format 1045bd8deadSopenharmony_ci is decoded as RGB (where alpha is effectively one for all texels), 1055bd8deadSopenharmony_ci while RGBA_S3TC_DXT1 is decoded as RGBA (where alpha is zero for all 1065bd8deadSopenharmony_ci texels with "transparent" encodings). Otherwise, the formats are 1075bd8deadSopenharmony_ci identical. 1085bd8deadSopenharmony_ci 1095bd8deadSopenharmony_ci (5) Is the encoding of the RGB components for DXT1 formats correct in this 1105bd8deadSopenharmony_ci spec? MSDN documentation does not specify an RGB color for the 1115bd8deadSopenharmony_ci "transparent" encoding. Is it really black? 1125bd8deadSopenharmony_ci 1135bd8deadSopenharmony_ci RESOLVED: Yes. The specification for the DXT1 format initially 1145bd8deadSopenharmony_ci required black, but later changed that requirement to a 1155bd8deadSopenharmony_ci recommendation. All vendors involved in the definition of this 1165bd8deadSopenharmony_ci specification support black. In addition, specifying black has a 1175bd8deadSopenharmony_ci useful behavior. 1185bd8deadSopenharmony_ci 1195bd8deadSopenharmony_ci When blending multiple texels (GL_LINEAR filtering), mixing opaque and 1205bd8deadSopenharmony_ci transparent samples is problematic. Defining a black color on 1215bd8deadSopenharmony_ci transparent texels achieves a sensible result that works like a 1225bd8deadSopenharmony_ci texture with premultiplied alpha. For example, if three opaque white 1235bd8deadSopenharmony_ci and one transparent sample is being averaged, the result would be a 1245bd8deadSopenharmony_ci 75% intensity gray (with an alpha of 75%). This is the same result on 1255bd8deadSopenharmony_ci the color channels as would be obtained using a white color, 75% 1265bd8deadSopenharmony_ci alpha, and a SRC_ALPHA blend factor. 1275bd8deadSopenharmony_ci 1285bd8deadSopenharmony_ci (6) Is the encoding of the RGB components for DXT3 and DXT5 formats 1295bd8deadSopenharmony_ci correct in this spec? MSDN documentation suggests that the RGB blocks 1305bd8deadSopenharmony_ci for DXT3 and DXT5 are decoded as described by the DXT1 format. 1315bd8deadSopenharmony_ci 1325bd8deadSopenharmony_ci RESOLVED: Yes -- this appears to be a bug in the MSDN documentation. 1335bd8deadSopenharmony_ci The specification for the DXT2-DXT5 formats require decoding using the 1345bd8deadSopenharmony_ci opaque block encoding, regardless of the relative values of "color0" 1355bd8deadSopenharmony_ci and "color1". 1365bd8deadSopenharmony_ci 1375bd8deadSopenharmony_ciNew Procedures and Functions 1385bd8deadSopenharmony_ci 1395bd8deadSopenharmony_ci None. 1405bd8deadSopenharmony_ci 1415bd8deadSopenharmony_ciNew Tokens 1425bd8deadSopenharmony_ci 1435bd8deadSopenharmony_ci This extension introduces new tokens: 1445bd8deadSopenharmony_ci 1455bd8deadSopenharmony_ci COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0 1465bd8deadSopenharmony_ci COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1 1475bd8deadSopenharmony_ci COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2 1485bd8deadSopenharmony_ci COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3 1495bd8deadSopenharmony_ci 1505bd8deadSopenharmony_ci In OpenGL 1.2.1 these tokens are accepted by the <internalformat> parameter 1515bd8deadSopenharmony_ci of TexImage2D, CopyTexImage2D, and CompressedTexImage2D and the <format> 1525bd8deadSopenharmony_ci parameter of CompressedTexSubImage2D. 1535bd8deadSopenharmony_ci 1545bd8deadSopenharmony_ci In extended OpenGL ES 2.0.25 these new tokens are accepted by the 1555bd8deadSopenharmony_ci <internalformat> parameter of TexImage2D, CompressedTexImage2D and the <format> 1565bd8deadSopenharmony_ci parameter of CompressedTexSubImage2D. 1575bd8deadSopenharmony_ci 1585bd8deadSopenharmony_ci In extended OpenGL ES 3.0.2 these new tokens are also accepted by the 1595bd8deadSopenharmony_ci <internalformat> parameter of TexImage3D, CompressedTexImage3D, 1605bd8deadSopenharmony_ci TexStorage2D, TexStorage3D and the <format> parameter of 1615bd8deadSopenharmony_ci CompressedTexSubImage3D. 1625bd8deadSopenharmony_ci 1635bd8deadSopenharmony_ciAdditions to Chapter 2 of the OpenGL 1.2.1 Specification (OpenGL Operation) 1645bd8deadSopenharmony_ci 1655bd8deadSopenharmony_ci None. 1665bd8deadSopenharmony_ci 1675bd8deadSopenharmony_ciAdditions to Chapter 3 of the OpenGL 1.2.1 Specification (Rasterization) 1685bd8deadSopenharmony_ci 1695bd8deadSopenharmony_ci Add to Table 3.16.1: Specific Compressed Internal Formats 1705bd8deadSopenharmony_ci 1715bd8deadSopenharmony_ci Compressed Internal Format Base Internal Format 1725bd8deadSopenharmony_ci ========================== ==================== 1735bd8deadSopenharmony_ci COMPRESSED_RGB_S3TC_DXT1_EXT RGB 1745bd8deadSopenharmony_ci COMPRESSED_RGBA_S3TC_DXT1_EXT RGBA 1755bd8deadSopenharmony_ci COMPRESSED_RGBA_S3TC_DXT3_EXT RGBA 1765bd8deadSopenharmony_ci COMPRESSED_RGBA_S3TC_DXT5_EXT RGBA 1775bd8deadSopenharmony_ci 1785bd8deadSopenharmony_ci 1795bd8deadSopenharmony_ci Modify Section 3.8.2, Alternate Image Specification 1805bd8deadSopenharmony_ci 1815bd8deadSopenharmony_ci (add to end of TexSubImage discussion, p.123 -- after edit from the 1825bd8deadSopenharmony_ci ARB_texture_compression spec) 1835bd8deadSopenharmony_ci 1845bd8deadSopenharmony_ci If the internal format of the texture image being modified is 1855bd8deadSopenharmony_ci COMPRESSED_RGB_S3TC_DXT1_EXT, COMPRESSED_RGBA_S3TC_DXT1_EXT, 1865bd8deadSopenharmony_ci COMPRESSED_RGBA_S3TC_DXT3_EXT, or COMPRESSED_RGBA_S3TC_DXT5_EXT, the 1875bd8deadSopenharmony_ci texture is stored using one of the several S3TC compressed texture image 1885bd8deadSopenharmony_ci formats. Such images are easily edited along 4x4 texel boundaries, so the 1895bd8deadSopenharmony_ci limitations on TexSubImage2D or CopyTexSubImage2D parameters are relaxed. 1905bd8deadSopenharmony_ci TexSubImage2D and CopyTexSubImage2D will result in an INVALID_OPERATION 1915bd8deadSopenharmony_ci error only if one of the following conditions occurs: 1925bd8deadSopenharmony_ci 1935bd8deadSopenharmony_ci * <width> is not a multiple of four, <width> plus <xoffset> is not 1945bd8deadSopenharmony_ci equal to TEXTURE_WIDTH, and either <xoffset> or <yoffset> is 1955bd8deadSopenharmony_ci non-zero; 1965bd8deadSopenharmony_ci 1975bd8deadSopenharmony_ci * <height> is not a multiple of four, <height> plus <yoffset> is not 1985bd8deadSopenharmony_ci equal to TEXTURE_HEIGHT, and either <xoffset> or <yoffset> is 1995bd8deadSopenharmony_ci non-zero; or 2005bd8deadSopenharmony_ci 2015bd8deadSopenharmony_ci * <xoffset> or <yoffset> is not a multiple of four. 2025bd8deadSopenharmony_ci 2035bd8deadSopenharmony_ci The contents of any 4x4 block of texels of an S3TC compressed texture 2045bd8deadSopenharmony_ci image that does not intersect the area being modified are preserved during 2055bd8deadSopenharmony_ci valid TexSubImage2D and CopyTexSubImage2D calls. 2065bd8deadSopenharmony_ci 2075bd8deadSopenharmony_ci 2085bd8deadSopenharmony_ci Add to Section 3.8.2, Alternate Image Specification (adding to the end of 2095bd8deadSopenharmony_ci the CompressedTexImage section introduced by the ARB_texture_compression 2105bd8deadSopenharmony_ci spec) 2115bd8deadSopenharmony_ci 2125bd8deadSopenharmony_ci If <internalformat> is COMPRESSED_RGB_S3TC_DXT1_EXT, 2135bd8deadSopenharmony_ci COMPRESSED_RGBA_S3TC_DXT1_EXT, COMPRESSED_RGBA_S3TC_DXT3_EXT, or 2145bd8deadSopenharmony_ci COMPRESSED_RGBA_S3TC_DXT5_EXT, the compressed texture is stored using one 2155bd8deadSopenharmony_ci of several S3TC compressed texture image formats. The S3TC texture 2165bd8deadSopenharmony_ci compression algorithm supports only 2D images without borders. 2175bd8deadSopenharmony_ci CompressedTexImage1DARB and CompressedTexImage3DARB produce an 2185bd8deadSopenharmony_ci INVALID_ENUM error if <internalformat> is an S3TC format. 2195bd8deadSopenharmony_ci CompressedTexImage2DARB will produce an INVALID_OPERATION error if 2205bd8deadSopenharmony_ci <border> is non-zero. 2215bd8deadSopenharmony_ci 2225bd8deadSopenharmony_ci 2235bd8deadSopenharmony_ci Add to Section 3.8.2, Alternate Image Specification (adding to the end of 2245bd8deadSopenharmony_ci the CompressedTexSubImage section introduced by the 2255bd8deadSopenharmony_ci ARB_texture_compression spec) 2265bd8deadSopenharmony_ci 2275bd8deadSopenharmony_ci If the internal format of the texture image being modified is 2285bd8deadSopenharmony_ci COMPRESSED_RGB_S3TC_DXT1_EXT, COMPRESSED_RGBA_S3TC_DXT1_EXT, 2295bd8deadSopenharmony_ci COMPRESSED_RGBA_S3TC_DXT3_EXT, or COMPRESSED_RGBA_S3TC_DXT5_EXT, the 2305bd8deadSopenharmony_ci texture is stored using one of the several S3TC compressed texture image 2315bd8deadSopenharmony_ci formats. Since the S3TC texture compression algorithm supports only 2D 2325bd8deadSopenharmony_ci images, CompressedTexSubImage1DARB and CompressedTexSubImage3DARB produce 2335bd8deadSopenharmony_ci an INVALID_ENUM error if <format> is an S3TC format. Since S3TC images 2345bd8deadSopenharmony_ci are easily edited along 4x4 texel boundaries, the limitations on 2355bd8deadSopenharmony_ci CompressedTexSubImage2D are relaxed. CompressedTexSubImage2D will result 2365bd8deadSopenharmony_ci in an INVALID_OPERATION error only if one of the following conditions 2375bd8deadSopenharmony_ci occurs: 2385bd8deadSopenharmony_ci 2395bd8deadSopenharmony_ci * <width> is not a multiple of four, and <width> plus <xoffset> is not 2405bd8deadSopenharmony_ci equal to TEXTURE_WIDTH; 2415bd8deadSopenharmony_ci 2425bd8deadSopenharmony_ci * <height> is not a multiple of four, and <height> plus <yoffset> is 2435bd8deadSopenharmony_ci not equal to TEXTURE_HEIGHT; or 2445bd8deadSopenharmony_ci 2455bd8deadSopenharmony_ci * <xoffset> or <yoffset> is not a multiple of four. 2465bd8deadSopenharmony_ci 2475bd8deadSopenharmony_ci The contents of any 4x4 block of texels of an S3TC compressed texture 2485bd8deadSopenharmony_ci image that does not intersect the area being modified are preserved during 2495bd8deadSopenharmony_ci valid TexSubImage2D and CopyTexSubImage2D calls. 2505bd8deadSopenharmony_ci 2515bd8deadSopenharmony_ciAdditions to Chapter 4 of the OpenGL 1.2.1 Specification (Per-Fragment 2525bd8deadSopenharmony_ciOperations and the Frame Buffer) 2535bd8deadSopenharmony_ci 2545bd8deadSopenharmony_ci None. 2555bd8deadSopenharmony_ci 2565bd8deadSopenharmony_ciAdditions to Chapter 5 of the OpenGL 1.2.1 Specification (Special Functions) 2575bd8deadSopenharmony_ci 2585bd8deadSopenharmony_ci None. 2595bd8deadSopenharmony_ci 2605bd8deadSopenharmony_ciAdditions to Chapter 6 of the OpenGL 1.2.1 Specification (State and 2615bd8deadSopenharmony_ciState Requests) 2625bd8deadSopenharmony_ci 2635bd8deadSopenharmony_ci None. 2645bd8deadSopenharmony_ci 2655bd8deadSopenharmony_ciAdditions to Appendix A of the OpenGL 1.2.1 Specification (Invariance) 2665bd8deadSopenharmony_ci 2675bd8deadSopenharmony_ci None. 2685bd8deadSopenharmony_ci 2695bd8deadSopenharmony_ciAdditions to Chapter 3 of the OpenGL ES 2.0.25 Specification 2705bd8deadSopenharmony_ci 2715bd8deadSopenharmony_ci Modify Section 3.7.1, Texture Image Specification 2725bd8deadSopenharmony_ci 2735bd8deadSopenharmony_ci (change last paragraph on Page 67 as follows) 2745bd8deadSopenharmony_ci 2755bd8deadSopenharmony_ci Components are then selected from the resulting R, G, B, or A values 2765bd8deadSopenharmony_ci to obtain a texture with the base internal format specified by 2775bd8deadSopenharmony_ci <internalformat>, which must match <format> except when <target> is 2785bd8deadSopenharmony_ci TEXTURE_2D and <internalformat> is one of the following compressed 2795bd8deadSopenharmony_ci formats: COMPRESSED_RGB_S3TC_DXT1_EXT, 2805bd8deadSopenharmony_ci COMPRESSED_RGBA_S3TC_DXT1_EXT, COMPRESSED_RGBA_S3TC_DXT3_EXT, or 2815bd8deadSopenharmony_ci COMPRESSED_RGBA_S3TC_DXT5_EXT. In this case, conversion from only 2825bd8deadSopenharmony_ci RGB and RGBA formats are supported during texture image processing. 2835bd8deadSopenharmony_ci <format> values other than RBA or RGBA will result in the 2845bd8deadSopenharmony_ci INVALID_OPERATION error. In all other cases where <internalformat> 2855bd8deadSopenharmony_ci does not match <format>, the error INVALID_OPERATION is generated. 2865bd8deadSopenharmony_ci Table 3.8 summarizes the mapping of R, G, B, and A values to texture 2875bd8deadSopenharmony_ci components, as a function of the base internal format of the texture 2885bd8deadSopenharmony_ci image. <internalformat> may be one of the five internal format 2895bd8deadSopenharmony_ci symbolic constants listed in table 3.8 or the four compressed 2905bd8deadSopenharmony_ci formats: COMPRESSED_RGB_S3TC_DXT1_EXT, 2915bd8deadSopenharmony_ci COMPRESSED_RGBA_S3TC_DXT1_EXT, COMPRESSED_RGBA_S3TC_DXT3_EXT, or 2925bd8deadSopenharmony_ci COMPRESSED_RGBA_S3TC_DXT5_EXT. Specifying a value for 2935bd8deadSopenharmony_ci <internalformat> that is not one of the above values generates the 2945bd8deadSopenharmony_ci error INVALID_VALUE. When a compressed <internalformat> is specified, 2955bd8deadSopenharmony_ci a compressed texture is created and all the associated restrictions 2965bd8deadSopenharmony_ci mentioned in Section 3.7.3 are imposed. 2975bd8deadSopenharmony_ci 2985bd8deadSopenharmony_ci Note that when encoding an RGBA image into a format using 1-bit 2995bd8deadSopenharmony_ci alpha, any texels with an alpha component less than 0.5 end up 3005bd8deadSopenharmony_ci with an alpha of 0.0 and any texels with an alpha component 3015bd8deadSopenharmony_ci greater than or equal to 0.5 end up with an alpha of 1.0. When 3025bd8deadSopenharmony_ci encoding an RGBA image into the COMPRESSED_RGBA_S3TC_DXT1_EXT 3035bd8deadSopenharmony_ci format, the resulting red, green, and blue components of any 3045bd8deadSopenharmony_ci texels with a final alpha of 0.0 will automatically be zero 3055bd8deadSopenharmony_ci (black). If this behavior is not desired by an application, it 3065bd8deadSopenharmony_ci should not use COMPRESSED_RGBA_S3TC_DXT1_EXT. 3075bd8deadSopenharmony_ci 3085bd8deadSopenharmony_ci Modify Section 3.7.2, Alternate Texture Image Specification Commands 3095bd8deadSopenharmony_ci 3105bd8deadSopenharmony_ci (add to the end of section) 3115bd8deadSopenharmony_ci 3125bd8deadSopenharmony_ci When the internal format of the texture object is 3135bd8deadSopenharmony_ci COMPRESSED_RGB_S3TC_DXT1_EXT, COMPRESSED_RGBA_S3TC_DXT1_EXT, 3145bd8deadSopenharmony_ci COMPRESSED_RGBA_S3TC_DXT3_EXT, or COMPRESSED_RGBA_S3TC_DXT5_EXT, the 3155bd8deadSopenharmony_ci update region specified in TexSubImage2D must be aligned to 4x4 3165bd8deadSopenharmony_ci pixel blocks. If <xoffset> or <yoffset> are not multiples of 4 an 3175bd8deadSopenharmony_ci INVALID_OPERATION error is generated. If <width> is not a multiple 3185bd8deadSopenharmony_ci of 4 and <xoffset> + <width> is not equal to the width of the LOD 3195bd8deadSopenharmony_ci then an INVALID_OPERATION error is generated. If <height> is not 3205bd8deadSopenharmony_ci a multiple of 4 and <yoffset> + <height> is not equal to the 3215bd8deadSopenharmony_ci height of the LOD then an INVALID_OPERATION error is generated. 3225bd8deadSopenharmony_ci 3235bd8deadSopenharmony_ci Modify Section 3.7.3, "Compressed Texture Images" 3245bd8deadSopenharmony_ci 3255bd8deadSopenharmony_ci (Replace first two sentences with) 3265bd8deadSopenharmony_ci 3275bd8deadSopenharmony_ci Texture images may also be specified or modified using image data 3285bd8deadSopenharmony_ci already stored in a known compressed image format. The GL defines 3295bd8deadSopenharmony_ci some specific compressed formats, and others may be defined by GL 3305bd8deadSopenharmony_ci extensions. 3315bd8deadSopenharmony_ci 3325bd8deadSopenharmony_ci (Insert after section describing CompressedTexImage2D) 3335bd8deadSopenharmony_ci 3345bd8deadSopenharmony_ci The specific compressed texture formats supported by 3355bd8deadSopenharmony_ci CompressedTexImage2D, and the corresponding base internal format 3365bd8deadSopenharmony_ci for each specific format, are defined in table 3.X. 3375bd8deadSopenharmony_ci 3385bd8deadSopenharmony_ci Table 3.X: "Specific compressed texture formats" 3395bd8deadSopenharmony_ci 3405bd8deadSopenharmony_ci Compressed Internal Formats Base Internal Format 3415bd8deadSopenharmony_ci =========================== ==================== 3425bd8deadSopenharmony_ci COMPRESSED_RGB_S3TC_DXT1_EXT RGB 3435bd8deadSopenharmony_ci COMPRESSED_RGBA_S3TC_DXT1_EXT RGBA 3445bd8deadSopenharmony_ci COMPRESSED_RGBA_S3TC_DXT3_EXT RGBA 3455bd8deadSopenharmony_ci COMPRESSED_RGBA_S3TC_DXT5_EXT RGBA 3465bd8deadSopenharmony_ci 3475bd8deadSopenharmony_ci (Replace last paragraph with) 3485bd8deadSopenharmony_ci 3495bd8deadSopenharmony_ci If the internal format is one of COMPRESSED_RGB_S3TC_DXT1_EXT, 3505bd8deadSopenharmony_ci COMPRESSED_RGBA_S3TC_DXT1_EXT, COMPRESSED_RGBA_S3TC_DXT3_EXT, or 3515bd8deadSopenharmony_ci COMPRESSED_RGBA_S3TC_DXT5_EXT, the compressed texture is stored 3525bd8deadSopenharmony_ci using one of several S3TC compressed texture image formats and is 3535bd8deadSopenharmony_ci easily edited along 4x4 texel boundaries. In this case, 3545bd8deadSopenharmony_ci CompressedTexSubImage2D will result in an INVALID_OPERATION error 3555bd8deadSopenharmony_ci if one of the following conditions occurs: 3565bd8deadSopenharmony_ci 3575bd8deadSopenharmony_ci * <width> is not a multiple of four, and <width> plus 3585bd8deadSopenharmony_ci <xoffset> is not equal to texture width; 3595bd8deadSopenharmony_ci 3605bd8deadSopenharmony_ci * <height> is not a multiple of four, and <height> plus 3615bd8deadSopenharmony_ci <yoffset> is not equal to texture height; or 3625bd8deadSopenharmony_ci 3635bd8deadSopenharmony_ci * <xoffset> or <yoffset> is not a multiple of four. 3645bd8deadSopenharmony_ci 3655bd8deadSopenharmony_ci For any other formats, calling CompressedTexSubImage2D will result 3665bd8deadSopenharmony_ci in an INVALID_OPERATION error if <xoffset> or <yoffset> is not 3675bd8deadSopenharmony_ci equal to zero, or if <width> and <height> do not match the width 3685bd8deadSopenharmony_ci and height of the texture, respectively. The contents of any texel 3695bd8deadSopenharmony_ci outside the region modified by the call are undefined. These 3705bd8deadSopenharmony_ci restrictions may be relaxed for other specific compressed internal 3715bd8deadSopenharmony_ci formats whose images are easily modified. 3725bd8deadSopenharmony_ci 3735bd8deadSopenharmony_ciAdditions to Chapter 4 of the OpenGL ES 2.0.25 Specification (Per-Fragment 3745bd8deadSopenharmony_ciOperations and the Framebuffer) 3755bd8deadSopenharmony_ci 3765bd8deadSopenharmony_ci Modify Section 4.4.3, Attaching Texture Images to a Framebuffer 3775bd8deadSopenharmony_ci 3785bd8deadSopenharmony_ci (add after last paragraph on Page 113) 3795bd8deadSopenharmony_ci 3805bd8deadSopenharmony_ci If <texture> is not zero and the internal format of the 3815bd8deadSopenharmony_ci corresponding texture object is a compressed format, an 3825bd8deadSopenharmony_ci INVALID_OPERATION error is generated. 3835bd8deadSopenharmony_ci 3845bd8deadSopenharmony_ciInteractions of extended OpenGL ES 2.0.25 with NV_texture_array 3855bd8deadSopenharmony_ci 3865bd8deadSopenharmony_ci If NV_texture_array is supported, the S3TC compressed formats may 3875bd8deadSopenharmony_ci also be used as the internal formats given to 3885bd8deadSopenharmony_ci CompressedTexImage3DNV and CompressedTexSubImage3DNV. The 3895bd8deadSopenharmony_ci restrictions for the <width>, <height>, <xoffset>, and <yoffset> 3905bd8deadSopenharmony_ci parameters of the CompressedTexSubImage2D function when used with 3915bd8deadSopenharmony_ci S3TC compressed texture formats, described in this extension, also 3925bd8deadSopenharmony_ci apply to the identically named parameters of 3935bd8deadSopenharmony_ci CompressedTexSubImage3DNV. 3945bd8deadSopenharmony_ci 3955bd8deadSopenharmony_ciAdditions to Chapter 3 of the OpenGL ES 3.0.2 Specification 3965bd8deadSopenharmony_ci 3975bd8deadSopenharmony_ci Modify Section 3.8.3, "Texture Image Specification" 3985bd8deadSopenharmony_ci 3995bd8deadSopenharmony_ci (Modify paragraph starting with "Components are then selected") 4005bd8deadSopenharmony_ci 4015bd8deadSopenharmony_ci Components are then selected from the resulting R, G, B, A, depth, or 4025bd8deadSopenharmony_ci stencil values to obtain a texture with the base internal format specified 4035bd8deadSopenharmony_ci by (or derived from) internalformat. Table 3.11 summarizes the mapping of 4045bd8deadSopenharmony_ci R, G, B, A, depth, or stencil values to texture components, as a function 4055bd8deadSopenharmony_ci of the base internal format of the texture image. 4065bd8deadSopenharmony_ci 4075bd8deadSopenharmony_ci For internalformat different than COMPRESSED_RGB_S3TC_DXT1_EXT, 4085bd8deadSopenharmony_ci COMPRESSED_RGBA_S3TC_DXT1_EXT, COMPRESSED_RGBA_S3TC_DXT3_EXT, or 4095bd8deadSopenharmony_ci COMPRESSED_RGBA_S3TC_DXT5_EX specifying a combination of values for format, 4105bd8deadSopenharmony_ci type, and internalformat that is not listed as a valid combination in 4115bd8deadSopenharmony_ci tables 3.2 or 3.3 generates the error INVALID_OPERATION. 4125bd8deadSopenharmony_ci 4135bd8deadSopenharmony_ci For internalformat equal COMPRESSED_RGB_S3TC_DXT1_EXT, 4145bd8deadSopenharmony_ci COMPRESSED_RGBA_S3TC_DXT1_EXT, COMPRESSED_RGBA_S3TC_DXT3_EXT, or 4155bd8deadSopenharmony_ci COMPRESSED_RGBA_S3TC_DXT5_EXT only RGB and RGBA formats are supported 4165bd8deadSopenharmony_ci during texture image processing and for these internalformat values 4175bd8deadSopenharmony_ci <format> values other than RBA or RGBA will result in the INVALID_OPERATION 4185bd8deadSopenharmony_ci error. 4195bd8deadSopenharmony_ci 4205bd8deadSopenharmony_ci Modify Section 3.8.6, "Compressed Texture Images" 4215bd8deadSopenharmony_ci 4225bd8deadSopenharmony_ci (extend Table 3.16 with the following rows) 4235bd8deadSopenharmony_ci 4245bd8deadSopenharmony_ci Compressed Internal Formats Base Internal Format 4255bd8deadSopenharmony_ci =========================== ==================== 4265bd8deadSopenharmony_ci COMPRESSED_RGB_S3TC_DXT1_EXT RGB 4275bd8deadSopenharmony_ci COMPRESSED_RGBA_S3TC_DXT1_EXT RGBA 4285bd8deadSopenharmony_ci COMPRESSED_RGBA_S3TC_DXT3_EXT RGBA 4295bd8deadSopenharmony_ci COMPRESSED_RGBA_S3TC_DXT5_EXT RGBA 4305bd8deadSopenharmony_ci 4315bd8deadSopenharmony_ci (Replace the first paragraph) 4325bd8deadSopenharmony_ci 4335bd8deadSopenharmony_ci Texture images may also be specified or modified using image data already 4345bd8deadSopenharmony_ci stored in a known compressed image format, such as the 4355bd8deadSopenharmony_ci ETC2/EAC/DXT1/DXT3/DXT5 formats defined in appendix C, or additional 4365bd8deadSopenharmony_ci formats defined by GL extensions. 4375bd8deadSopenharmony_ci 4385bd8deadSopenharmony_ci (Replace paragraph starting with: If internalformat is one of the ETC2/EAC 4395bd8deadSopenharmony_ci formats described) 4405bd8deadSopenharmony_ci 4415bd8deadSopenharmony_ci If internalformat is one of the ETC2/EAC/DXT1/DXT3/DXT5 formats described 4425bd8deadSopenharmony_ci in table 3.16, the compressed image data is stored using one of the 4435bd8deadSopenharmony_ci ETC2/EAC/DXT1/DXT3/DXT5 compressed texture image encodings (see appendix 4445bd8deadSopenharmony_ci C). The ETC2/EAC/DXT1/DXT3/DXT5 texture compression algorithm supports only 4455bd8deadSopenharmony_ci two-dimensional images. If internalformat is an ETC2/EAC/DXT1/DXT3/DXT5 4465bd8deadSopenharmony_ci format, CompressedTexImage3D will generate an INVALID_OPERATION error if 4475bd8deadSopenharmony_ci target is not TEXTURE_2D_ARRAY. 4485bd8deadSopenharmony_ci 4495bd8deadSopenharmony_ci (Add at the end of the chapter) 4505bd8deadSopenharmony_ci 4515bd8deadSopenharmony_ci If the internal format is one of COMPRESSED_RGB_S3TC_DXT1_EXT, 4525bd8deadSopenharmony_ci COMPRESSED_RGBA_S3TC_DXT1_EXT, COMPRESSED_RGBA_S3TC_DXT3_EXT, or 4535bd8deadSopenharmony_ci COMPRESSED_RGBA_S3TC_DXT5_EXT, the compressed texture is stored using one 4545bd8deadSopenharmony_ci of several S3TC compressed texture image formats and is easily edited along 4555bd8deadSopenharmony_ci 4x4 texel boundaries. In this case, 4565bd8deadSopenharmony_ci CompressedTexSubImage2D/CompressedTexSubImage3D will result in an 4575bd8deadSopenharmony_ci INVALID_OPERATION error if one of the following conditions occurs: 4585bd8deadSopenharmony_ci 4595bd8deadSopenharmony_ci * <width> is not a multiple of four, and <width> plus 4605bd8deadSopenharmony_ci <xoffset> is not equal to texture width; 4615bd8deadSopenharmony_ci 4625bd8deadSopenharmony_ci * <height> is not a multiple of four, and <height> plus 4635bd8deadSopenharmony_ci <yoffset> is not equal to texture height; or 4645bd8deadSopenharmony_ci 4655bd8deadSopenharmony_ci * <xoffset> or <yoffset> is not a multiple of four. 4665bd8deadSopenharmony_ci 4675bd8deadSopenharmony_ci For any other formats, calling CompressedTexSubImage2D/CompressedTexSubImage3D 4685bd8deadSopenharmony_ci will result in an INVALID_OPERATION error if <xoffset> or <yoffset> is not 4695bd8deadSopenharmony_ci equal to zero, or if <width> and <height> do not match the width and height 4705bd8deadSopenharmony_ci of the texture, respectively. The contents of any texel outside the region 4715bd8deadSopenharmony_ci modified by the call are undefined. These restrictions may be relaxed for 4725bd8deadSopenharmony_ci other specific compressed internal formats whose images are easily 4735bd8deadSopenharmony_ci modified. 4745bd8deadSopenharmony_ci 4755bd8deadSopenharmony_ciAdditions to the AGL/GLX/WGL Specifications 4765bd8deadSopenharmony_ci 4775bd8deadSopenharmony_ci None. 4785bd8deadSopenharmony_ci 4795bd8deadSopenharmony_ciGLX Protocol 4805bd8deadSopenharmony_ci 4815bd8deadSopenharmony_ci None. 4825bd8deadSopenharmony_ci 4835bd8deadSopenharmony_ciDependencies on OpenGL 2.0 or ARB_texture_non_power_of_two 4845bd8deadSopenharmony_ci 4855bd8deadSopenharmony_ci If OpenGL 2.0 or ARB_texture_non_power_of_two is supported, compressed 4865bd8deadSopenharmony_ci texture images can have sizes that are neither multiples of four nor small 4875bd8deadSopenharmony_ci values like one or two. The original version of this specification didn't 4885bd8deadSopenharmony_ci allow TexSubImage2D and CompressedTexSubImage2D to update only a portion 4895bd8deadSopenharmony_ci of such images. The spec has been updated to allow such edits in the 4905bd8deadSopenharmony_ci spirit of the resolution of issue (3). See the "Implementation Note" 4915bd8deadSopenharmony_ci section for more details. 4925bd8deadSopenharmony_ci 4935bd8deadSopenharmony_ciErrors for OpenGL 1.2.1 Specification 4945bd8deadSopenharmony_ci 4955bd8deadSopenharmony_ci INVALID_ENUM is generated by CompressedTexImage1D or CompressedTexImage3D 4965bd8deadSopenharmony_ci if <internalformat> is COMPRESSED_RGB_S3TC_DXT1_EXT, 4975bd8deadSopenharmony_ci COMPRESSED_RGBA_S3TC_DXT1_EXT, COMPRESSED_RGBA_S3TC_DXT3_EXT, or 4985bd8deadSopenharmony_ci COMPRESSED_RGBA_S3TC_DXT5_EXT. 4995bd8deadSopenharmony_ci 5005bd8deadSopenharmony_ci INVALID_OPERATION is generated by CompressedTexImage2D if 5015bd8deadSopenharmony_ci <internalformat> is COMPRESSED_RGB_S3TC_DXT1_EXT, 5025bd8deadSopenharmony_ci COMPRESSED_RGBA_S3TC_DXT1_EXT, COMPRESSED_RGBA_S3TC_DXT3_EXT, or 5035bd8deadSopenharmony_ci COMPRESSED_RGBA_S3TC_DXT5_EXT and <border> is not equal to zero. 5045bd8deadSopenharmony_ci 5055bd8deadSopenharmony_ci INVALID_ENUM is generated by CompressedTexSubImage1D or 5065bd8deadSopenharmony_ci CompressedTexSubImage3D if <format> is COMPRESSED_RGB_S3TC_DXT1_EXT, 5075bd8deadSopenharmony_ci COMPRESSED_RGBA_S3TC_DXT1_EXT, COMPRESSED_RGBA_S3TC_DXT3_EXT, or 5085bd8deadSopenharmony_ci COMPRESSED_RGBA_S3TC_DXT5_EXT. 5095bd8deadSopenharmony_ci 5105bd8deadSopenharmony_ci INVALID_OPERATION is generated by TexSubImage2D or CopyTexSubImage2D if 5115bd8deadSopenharmony_ci TEXTURE_INTERNAL_FORMAT is COMPRESSED_RGB_S3TC_DXT1_EXT, 5125bd8deadSopenharmony_ci COMPRESSED_RGBA_S3TC_DXT1_EXT, COMPRESSED_RGBA_S3TC_DXT3_EXT, or 5135bd8deadSopenharmony_ci COMPRESSED_RGBA_S3TC_DXT5_EXT and any of the following apply: 5145bd8deadSopenharmony_ci 5155bd8deadSopenharmony_ci * <width> is not a multiple of four, <width> plus <xoffset> is not 5165bd8deadSopenharmony_ci equal to TEXTURE_WIDTH, and either <xoffset> or <yoffset> is 5175bd8deadSopenharmony_ci non-zero; 5185bd8deadSopenharmony_ci 5195bd8deadSopenharmony_ci * <height> is not a multiple of four, <height> plus <yoffset> is not 5205bd8deadSopenharmony_ci equal to TEXTURE_HEIGHT, and either <xoffset> or <yoffset> is 5215bd8deadSopenharmony_ci non-zero; or 5225bd8deadSopenharmony_ci 5235bd8deadSopenharmony_ci * <xoffset> or <yoffset> is not a multiple of four. 5245bd8deadSopenharmony_ci 5255bd8deadSopenharmony_ci INVALID_OPERATION is generated by CompressedTexSubImage2D if 5265bd8deadSopenharmony_ci TEXTURE_INTERNAL_FORMAT is COMPRESSED_RGB_S3TC_DXT1_EXT, 5275bd8deadSopenharmony_ci COMPRESSED_RGBA_S3TC_DXT1_EXT, COMPRESSED_RGBA_S3TC_DXT3_EXT, or 5285bd8deadSopenharmony_ci COMPRESSED_RGBA_S3TC_DXT5_EXT and any of the following apply: 5295bd8deadSopenharmony_ci 5305bd8deadSopenharmony_ci * <width> is not a multiple of four, and <width> plus <xoffset> is not 5315bd8deadSopenharmony_ci equal to TEXTURE_WIDTH; 5325bd8deadSopenharmony_ci 5335bd8deadSopenharmony_ci * <height> is not a multiple of four, and <height> plus <yoffset> is 5345bd8deadSopenharmony_ci not equal to TEXTURE_HEIGHT; or 5355bd8deadSopenharmony_ci 5365bd8deadSopenharmony_ci * <xoffset> or <yoffset> is not a multiple of four. 5375bd8deadSopenharmony_ci 5385bd8deadSopenharmony_ci 5395bd8deadSopenharmony_ci The following restrictions from the ARB_texture_compression specification 5405bd8deadSopenharmony_ci do not apply to S3TC texture formats, since subimage modification is 5415bd8deadSopenharmony_ci straightforward as long as the subimage is properly aligned. 5425bd8deadSopenharmony_ci 5435bd8deadSopenharmony_ci DELETE: INVALID_OPERATION is generated by TexSubImage1D, TexSubImage2D, 5445bd8deadSopenharmony_ci DELETE: TexSubImage3D, CopyTexSubImage1D, CopyTexSubImage2D, or 5455bd8deadSopenharmony_ci DELETE: CopyTexSubImage3D if the internal format of the texture image is 5465bd8deadSopenharmony_ci DELETE: compressed and <xoffset>, <yoffset>, or <zoffset> does not equal 5475bd8deadSopenharmony_ci DELETE: -b, where b is value of TEXTURE_BORDER. 5485bd8deadSopenharmony_ci 5495bd8deadSopenharmony_ci DELETE: INVALID_VALUE is generated by CompressedTexSubImage1DARB, 5505bd8deadSopenharmony_ci DELETE: CompressedTexSubImage2DARB, or CompressedTexSubImage3DARB if the 5515bd8deadSopenharmony_ci DELETE: entire texture image is not being edited: if <xoffset>, 5525bd8deadSopenharmony_ci DELETE: <yoffset>, or <zoffset> is greater than -b, <xoffset> + <width> is 5535bd8deadSopenharmony_ci DELETE: less than w+b, <yoffset> + <height> is less than h+b, or <zoffset> 5545bd8deadSopenharmony_ci DELETE: + <depth> is less than d+b, where b is the value of 5555bd8deadSopenharmony_ci DELETE: TEXTURE_BORDER, w is the value of TEXTURE_WIDTH, h is the value of 5565bd8deadSopenharmony_ci DELETE: TEXTURE_HEIGHT, and d is the value of TEXTURE_DEPTH. 5575bd8deadSopenharmony_ci 5585bd8deadSopenharmony_ci See also errors in the GL_ARB_texture_compression specification. 5595bd8deadSopenharmony_ci 5605bd8deadSopenharmony_ciErrors for OpenGL ES 2.0.25 Specification 5615bd8deadSopenharmony_ci 5625bd8deadSopenharmony_ci INVALID_OPERATION is generated by CopyTexSubImage2D if the texture 5635bd8deadSopenharmony_ci image <level> bound to <target> has internal format 5645bd8deadSopenharmony_ci COMPRESSED_RGB_S3TC_DXT1_EXT, COMPRESSED_RGBA_S3TC_DXT1_EXT, 5655bd8deadSopenharmony_ci COMPRESSED_RGBA_S3TC_DXT3_EXT, or COMPRESSED_RGBA_S3TC_DXT5_EXT. 5665bd8deadSopenharmony_ci 5675bd8deadSopenharmony_ci INVALID_OPERATION is generated by CompressedTexSubImage2D if 5685bd8deadSopenharmony_ci <format> is COMPRESSED_RGB_S3TC_DXT1_EXT, 5695bd8deadSopenharmony_ci COMPRESSED_RGBA_S3TC_DXT1_EXT, COMPRESSED_RGBA_S3TC_DXT3_EXT, or 5705bd8deadSopenharmony_ci COMPRESSED_RGBA_S3TC_DXT5_EXT and any of the following apply: 5715bd8deadSopenharmony_ci 5725bd8deadSopenharmony_ci * <width> is not a multiple of four, and <width> plus 5735bd8deadSopenharmony_ci <xoffset> is not equal to the texture width; 5745bd8deadSopenharmony_ci 5755bd8deadSopenharmony_ci * <height> is not a multiple of four, and <height> plus 5765bd8deadSopenharmony_ci <yoffset> is not equal to the texture height; or 5775bd8deadSopenharmony_ci 5785bd8deadSopenharmony_ci * <xoffset> or <yoffset> is not a multiple of four. 5795bd8deadSopenharmony_ci 5805bd8deadSopenharmony_ci INVALID_OPERATION is generated by TexImage2D and TexSubImage2D if 5815bd8deadSopenharmony_ci texture has internal format COMPRESSED_RGB_S3TC_DXT1_EXT, 5825bd8deadSopenharmony_ci COMPRESSED_RGBA_S3TC_DXT1_EXT, COMPRESSED_RGBA_S3TC_DXT3_EXT, or 5835bd8deadSopenharmony_ci COMPRESSED_RGBA_S3TC_DXT5_EXT and any of the following apply: 5845bd8deadSopenharmony_ci 5855bd8deadSopenharmony_ci * <xoffset> or <yoffset> are not multiples of 4 5865bd8deadSopenharmony_ci 5875bd8deadSopenharmony_ci * <width> is not a multiple of 4 and <xoffset> + <width> is not equal 5885bd8deadSopenharmony_ci to the width of the LOD 5895bd8deadSopenharmony_ci 5905bd8deadSopenharmony_ci * if <height> is not a multiple of 4 and <yoffset> + <height> is not 5915bd8deadSopenharmony_ci equal to the height of the LOD 5925bd8deadSopenharmony_ci 5935bd8deadSopenharmony_ciErrors for OpenGL ES 3.0.2 Specification 5945bd8deadSopenharmony_ci 5955bd8deadSopenharmony_ci INVALID_OPERATION is generated by CopyTexSubImage2D / CopyTexSubImage3D if 5965bd8deadSopenharmony_ci the texture image <level> bound to <target> has internal format 5975bd8deadSopenharmony_ci COMPRESSED_RGB_S3TC_DXT1_EXT, COMPRESSED_RGBA_S3TC_DXT1_EXT, 5985bd8deadSopenharmony_ci COMPRESSED_RGBA_S3TC_DXT3_EXT, or COMPRESSED_RGBA_S3TC_DXT5_EXT. 5995bd8deadSopenharmony_ci 6005bd8deadSopenharmony_ci INVALID_OPERATION is generated by CompressedTexSubImage2D / 6015bd8deadSopenharmony_ci CopressedTexSubImage3D if <format> is COMPRESSED_RGB_S3TC_DXT1_EXT, 6025bd8deadSopenharmony_ci COMPRESSED_RGBA_S3TC_DXT1_EXT, COMPRESSED_RGBA_S3TC_DXT3_EXT, or 6035bd8deadSopenharmony_ci COMPRESSED_RGBA_S3TC_DXT5_EXT and any of the following apply: 6045bd8deadSopenharmony_ci 6055bd8deadSopenharmony_ci * <width> is not a multiple of four, and <width> plus 6065bd8deadSopenharmony_ci <xoffset> is not equal to the texture width; 6075bd8deadSopenharmony_ci 6085bd8deadSopenharmony_ci * <height> is not a multiple of four, and <height> plus 6095bd8deadSopenharmony_ci <yoffset> is not equal to the texture height; or 6105bd8deadSopenharmony_ci 6115bd8deadSopenharmony_ci * <xoffset> or <yoffset> is not a multiple of four. 6125bd8deadSopenharmony_ci 6135bd8deadSopenharmony_ci INVALID_OPERATION is generated by TexImage2D/TexImage3D and 6145bd8deadSopenharmony_ci TexSubImage2D/TexSubimage3D if texture has internal format 6155bd8deadSopenharmony_ci COMPRESSED_RGB_S3TC_DXT1_EXT, COMPRESSED_RGBA_S3TC_DXT1_EXT, 6165bd8deadSopenharmony_ci COMPRESSED_RGBA_S3TC_DXT3_ETX, or COMPRESSED_RGBA_S3TC_DXT5_EXT and 6175bd8deadSopenharmony_ci <format> is not RGB or RGBA, or any of the following apply: 6185bd8deadSopenharmony_ci 6195bd8deadSopenharmony_ci * <xoffset> or <yoffset> are not multiples of 4 6205bd8deadSopenharmony_ci 6215bd8deadSopenharmony_ci * <width> is not a multiple of 4 and <xoffset> + <width> is not equal 6225bd8deadSopenharmony_ci to the width of the LOD 6235bd8deadSopenharmony_ci 6245bd8deadSopenharmony_ci * if <height> is not a multiple of 4 and <yoffset> + <height> is not 6255bd8deadSopenharmony_ci equal to the height of the LOD 6265bd8deadSopenharmony_ci 6275bd8deadSopenharmony_ciNew State for OpenGL 1.2.1 Specification 6285bd8deadSopenharmony_ci 6295bd8deadSopenharmony_ci In the "Textures" state table, increment the TEXTURE_INTERNAL_FORMAT 6305bd8deadSopenharmony_ci subscript for Z by 4 in the "Type" row. 6315bd8deadSopenharmony_ci 6325bd8deadSopenharmony_ciNew State for OpenGL ES 2.0.25 and 3.0.2 Specifications 6335bd8deadSopenharmony_ci 6345bd8deadSopenharmony_ci The queries for NUM_COMPRESSED_TEXTURE_FORMATS and 6355bd8deadSopenharmony_ci COMPRESSED_TEXTURE_FORMATS include COMPRESSED_RGB_S3TC_DXT1_EXT, 6365bd8deadSopenharmony_ci COMPRESSED_RGBA_S3TC_DXT1_EXT, COMPRESSED_RGBA_S3TC_DXT3_EXT, and 6375bd8deadSopenharmony_ci COMPRESSED_RGBA_S3TC_DXT5_EXT. 6385bd8deadSopenharmony_ci 6395bd8deadSopenharmony_ciNew Implementation Dependent State 6405bd8deadSopenharmony_ci 6415bd8deadSopenharmony_ci None 6425bd8deadSopenharmony_ci 6435bd8deadSopenharmony_ciAppendix in OpenGL 1.2.1 6445bd8deadSopenharmony_ciAppendix C.2 in OpenGL ES 3.0.2 6455bd8deadSopenharmony_ci 6465bd8deadSopenharmony_ci S3TC Compressed Texture Image Formats 6475bd8deadSopenharmony_ci 6485bd8deadSopenharmony_ci Compressed texture images stored using the S3TC compressed image formats 6495bd8deadSopenharmony_ci are represented as a collection of 4x4 texel blocks, where each block 6505bd8deadSopenharmony_ci contains 64 or 128 bits of texel data. The image is encoded as a normal 6515bd8deadSopenharmony_ci 2D raster image in which each 4x4 block is treated as a single pixel. If 6525bd8deadSopenharmony_ci an S3TC image has a width or height that is not a multiple of four, the 6535bd8deadSopenharmony_ci data corresponding to texels outside the image are irrelevant and 6545bd8deadSopenharmony_ci undefined. 6555bd8deadSopenharmony_ci 6565bd8deadSopenharmony_ci When an S3TC image with a width of <w>, height of <h>, and block size of 6575bd8deadSopenharmony_ci <blocksize> (8 or 16 bytes) is decoded, the corresponding image size (in 6585bd8deadSopenharmony_ci bytes) is: 6595bd8deadSopenharmony_ci 6605bd8deadSopenharmony_ci ceil(<w>/4) * ceil(<h>/4) * blocksize. 6615bd8deadSopenharmony_ci 6625bd8deadSopenharmony_ci When decoding an S3TC image, the block containing the texel at offset 6635bd8deadSopenharmony_ci (<x>, <y>) begins at an offset (in bytes) relative to the base of the 6645bd8deadSopenharmony_ci image of: 6655bd8deadSopenharmony_ci 6665bd8deadSopenharmony_ci blocksize * (ceil(<w>/4) * floor(<y>/4) + floor(<x>/4)). 6675bd8deadSopenharmony_ci 6685bd8deadSopenharmony_ci The data corresponding to a specific texel (<x>, <y>) are extracted from a 6695bd8deadSopenharmony_ci 4x4 texel block using a relative (x,y) value of 6705bd8deadSopenharmony_ci 6715bd8deadSopenharmony_ci (<x> modulo 4, <y> modulo 4). 6725bd8deadSopenharmony_ci 6735bd8deadSopenharmony_ci There are four distinct S3TC image formats: 6745bd8deadSopenharmony_ci 6755bd8deadSopenharmony_ci COMPRESSED_RGB_S3TC_DXT1_EXT: Each 4x4 block of texels consists of 64 6765bd8deadSopenharmony_ci bits of RGB image data. 6775bd8deadSopenharmony_ci 6785bd8deadSopenharmony_ci Each RGB image data block is encoded as a sequence of 8 bytes, called (in 6795bd8deadSopenharmony_ci order of increasing address): 6805bd8deadSopenharmony_ci 6815bd8deadSopenharmony_ci c0_lo, c0_hi, c1_lo, c1_hi, bits_0, bits_1, bits_2, bits_3 6825bd8deadSopenharmony_ci 6835bd8deadSopenharmony_ci The 8 bytes of the block are decoded into three quantities: 6845bd8deadSopenharmony_ci 6855bd8deadSopenharmony_ci color0 = c0_lo + c0_hi * 256 6865bd8deadSopenharmony_ci color1 = c1_lo + c1_hi * 256 6875bd8deadSopenharmony_ci bits = bits_0 + 256 * (bits_1 + 256 * (bits_2 + 256 * bits_3)) 6885bd8deadSopenharmony_ci 6895bd8deadSopenharmony_ci color0 and color1 are 16-bit unsigned integers that are unpacked to 6905bd8deadSopenharmony_ci RGB colors RGB0 and RGB1 as though they were 16-bit packed pixels with 6915bd8deadSopenharmony_ci a <format> of RGB and a type of UNSIGNED_SHORT_5_6_5. 6925bd8deadSopenharmony_ci 6935bd8deadSopenharmony_ci bits is a 32-bit unsigned integer, from which a two-bit control code 6945bd8deadSopenharmony_ci is extracted for a texel at location (x,y) in the block using: 6955bd8deadSopenharmony_ci 6965bd8deadSopenharmony_ci code(x,y) = bits[2*(4*y+x)+1 .. 2*(4*y+x)+0] 6975bd8deadSopenharmony_ci 6985bd8deadSopenharmony_ci where bit 31 is the most significant and bit 0 is the least 6995bd8deadSopenharmony_ci significant bit. 7005bd8deadSopenharmony_ci 7015bd8deadSopenharmony_ci The RGB color for a texel at location (x,y) in the block is given by: 7025bd8deadSopenharmony_ci 7035bd8deadSopenharmony_ci RGB0, if color0 > color1 and code(x,y) == 0 7045bd8deadSopenharmony_ci RGB1, if color0 > color1 and code(x,y) == 1 7055bd8deadSopenharmony_ci (2*RGB0+RGB1)/3, if color0 > color1 and code(x,y) == 2 7065bd8deadSopenharmony_ci (RGB0+2*RGB1)/3, if color0 > color1 and code(x,y) == 3 7075bd8deadSopenharmony_ci 7085bd8deadSopenharmony_ci RGB0, if color0 <= color1 and code(x,y) == 0 7095bd8deadSopenharmony_ci RGB1, if color0 <= color1 and code(x,y) == 1 7105bd8deadSopenharmony_ci (RGB0+RGB1)/2, if color0 <= color1 and code(x,y) == 2 7115bd8deadSopenharmony_ci BLACK, if color0 <= color1 and code(x,y) == 3 7125bd8deadSopenharmony_ci 7135bd8deadSopenharmony_ci Arithmetic operations are done per component, and BLACK refers to an 7145bd8deadSopenharmony_ci RGB color where red, green, and blue are all zero. 7155bd8deadSopenharmony_ci 7165bd8deadSopenharmony_ci Since this image has an RGB format, there is no alpha component and the 7175bd8deadSopenharmony_ci image is considered fully opaque. 7185bd8deadSopenharmony_ci 7195bd8deadSopenharmony_ci 7205bd8deadSopenharmony_ci COMPRESSED_RGBA_S3TC_DXT1_EXT: Each 4x4 block of texels consists of 64 7215bd8deadSopenharmony_ci bits of RGB image data and minimal alpha information. The RGB components 7225bd8deadSopenharmony_ci of a texel are extracted in the same way as COMPRESSED_RGB_S3TC_DXT1_EXT. 7235bd8deadSopenharmony_ci 7245bd8deadSopenharmony_ci The alpha component for a texel at location (x,y) in the block is 7255bd8deadSopenharmony_ci given by: 7265bd8deadSopenharmony_ci 7275bd8deadSopenharmony_ci 0.0, if color0 <= color1 and code(x,y) == 3 7285bd8deadSopenharmony_ci 1.0, otherwise 7295bd8deadSopenharmony_ci 7305bd8deadSopenharmony_ci IMPORTANT: When encoding an RGBA image into a format using 1-bit 7315bd8deadSopenharmony_ci alpha, any texels with an alpha component less than 0.5 end up with an 7325bd8deadSopenharmony_ci alpha of 0.0 and any texels with an alpha component greater than or 7335bd8deadSopenharmony_ci equal to 0.5 end up with an alpha of 1.0. When encoding an RGBA image 7345bd8deadSopenharmony_ci into the COMPRESSED_RGBA_S3TC_DXT1_EXT format, the resulting red, 7355bd8deadSopenharmony_ci green, and blue components of any texels with a final alpha of 0.0 7365bd8deadSopenharmony_ci will automatically be zero (black). If this behavior is not desired 7375bd8deadSopenharmony_ci by an application, it should not use COMPRESSED_RGBA_S3TC_DXT1_EXT. 7385bd8deadSopenharmony_ci This format will never be used when a generic compressed internal 7395bd8deadSopenharmony_ci format (Table 3.16.2) is specified, although the nearly identical 7405bd8deadSopenharmony_ci format COMPRESSED_RGB_S3TC_DXT1_EXT (above) may be. 7415bd8deadSopenharmony_ci 7425bd8deadSopenharmony_ci 7435bd8deadSopenharmony_ci COMPRESSED_RGBA_S3TC_DXT3_EXT: Each 4x4 block of texels consists of 64 7445bd8deadSopenharmony_ci bits of uncompressed alpha image data followed by 64 bits of RGB image 7455bd8deadSopenharmony_ci data. 7465bd8deadSopenharmony_ci 7475bd8deadSopenharmony_ci Each RGB image data block is encoded according to the 7485bd8deadSopenharmony_ci COMPRESSED_RGB_S3TC_DXT1_EXT format, with the exception that the two code 7495bd8deadSopenharmony_ci bits always use the non-transparent encodings. In other words, they are 7505bd8deadSopenharmony_ci treated as though color0 > color1, regardless of the actual values of 7515bd8deadSopenharmony_ci color0 and color1. 7525bd8deadSopenharmony_ci 7535bd8deadSopenharmony_ci Each alpha image data block is encoded as a sequence of 8 bytes, called 7545bd8deadSopenharmony_ci (in order of increasing address): 7555bd8deadSopenharmony_ci 7565bd8deadSopenharmony_ci a0, a1, a2, a3, a4, a5, a6, a7 7575bd8deadSopenharmony_ci 7585bd8deadSopenharmony_ci The 8 bytes of the block are decoded into one 64-bit integer: 7595bd8deadSopenharmony_ci 7605bd8deadSopenharmony_ci alpha = a0 + 256 * (a1 + 256 * (a2 + 256 * (a3 + 256 * (a4 + 7615bd8deadSopenharmony_ci 256 * (a5 + 256 * (a6 + 256 * a7)))))) 7625bd8deadSopenharmony_ci 7635bd8deadSopenharmony_ci alpha is a 64-bit unsigned integer, from which a four-bit alpha value 7645bd8deadSopenharmony_ci is extracted for a texel at location (x,y) in the block using: 7655bd8deadSopenharmony_ci 7665bd8deadSopenharmony_ci alpha(x,y) = bits[4*(4*y+x)+3 .. 4*(4*y+x)+0] 7675bd8deadSopenharmony_ci 7685bd8deadSopenharmony_ci where bit 63 is the most significant and bit 0 is the least 7695bd8deadSopenharmony_ci significant bit. 7705bd8deadSopenharmony_ci 7715bd8deadSopenharmony_ci The alpha component for a texel at location (x,y) in the block is 7725bd8deadSopenharmony_ci given by alpha(x,y) / 15. 7735bd8deadSopenharmony_ci 7745bd8deadSopenharmony_ci 7755bd8deadSopenharmony_ci COMPRESSED_RGBA_S3TC_DXT5_EXT: Each 4x4 block of texels consists of 64 7765bd8deadSopenharmony_ci bits of compressed alpha image data followed by 64 bits of RGB image data. 7775bd8deadSopenharmony_ci 7785bd8deadSopenharmony_ci Each RGB image data block is encoded according to the 7795bd8deadSopenharmony_ci COMPRESSED_RGB_S3TC_DXT1_EXT format, with the exception that the two code 7805bd8deadSopenharmony_ci bits always use the non-transparent encodings. In other words, they are 7815bd8deadSopenharmony_ci treated as though color0 > color1, regardless of the actual values of 7825bd8deadSopenharmony_ci color0 and color1. 7835bd8deadSopenharmony_ci 7845bd8deadSopenharmony_ci Each alpha image data block is encoded as a sequence of 8 bytes, called 7855bd8deadSopenharmony_ci (in order of increasing address): 7865bd8deadSopenharmony_ci 7875bd8deadSopenharmony_ci alpha0, alpha1, bits_0, bits_1, bits_2, bits_3, bits_4, bits_5 7885bd8deadSopenharmony_ci 7895bd8deadSopenharmony_ci The alpha0 and alpha1 are 8-bit unsigned bytes converted to alpha 7905bd8deadSopenharmony_ci components by multiplying by 1/255. 7915bd8deadSopenharmony_ci 7925bd8deadSopenharmony_ci The 6 "bits" bytes of the block are decoded into one 48-bit integer: 7935bd8deadSopenharmony_ci 7945bd8deadSopenharmony_ci bits = bits_0 + 256 * (bits_1 + 256 * (bits_2 + 256 * (bits_3 + 7955bd8deadSopenharmony_ci 256 * (bits_4 + 256 * bits_5)))) 7965bd8deadSopenharmony_ci 7975bd8deadSopenharmony_ci bits is a 48-bit unsigned integer, from which a three-bit control code 7985bd8deadSopenharmony_ci is extracted for a texel at location (x,y) in the block using: 7995bd8deadSopenharmony_ci 8005bd8deadSopenharmony_ci code(x,y) = bits[3*(4*y+x)+2 .. 3*(4*y+x)+0] 8015bd8deadSopenharmony_ci 8025bd8deadSopenharmony_ci where bit 47 is the most significant and bit 0 is the least 8035bd8deadSopenharmony_ci significant bit. 8045bd8deadSopenharmony_ci 8055bd8deadSopenharmony_ci The alpha component for a texel at location (x,y) in the block is 8065bd8deadSopenharmony_ci given by: 8075bd8deadSopenharmony_ci 8085bd8deadSopenharmony_ci alpha0, code(x,y) == 0 8095bd8deadSopenharmony_ci alpha1, code(x,y) == 1 8105bd8deadSopenharmony_ci 8115bd8deadSopenharmony_ci (6*alpha0 + 1*alpha1)/7, alpha0 > alpha1 and code(x,y) == 2 8125bd8deadSopenharmony_ci (5*alpha0 + 2*alpha1)/7, alpha0 > alpha1 and code(x,y) == 3 8135bd8deadSopenharmony_ci (4*alpha0 + 3*alpha1)/7, alpha0 > alpha1 and code(x,y) == 4 8145bd8deadSopenharmony_ci (3*alpha0 + 4*alpha1)/7, alpha0 > alpha1 and code(x,y) == 5 8155bd8deadSopenharmony_ci (2*alpha0 + 5*alpha1)/7, alpha0 > alpha1 and code(x,y) == 6 8165bd8deadSopenharmony_ci (1*alpha0 + 6*alpha1)/7, alpha0 > alpha1 and code(x,y) == 7 8175bd8deadSopenharmony_ci 8185bd8deadSopenharmony_ci (4*alpha0 + 1*alpha1)/5, alpha0 <= alpha1 and code(x,y) == 2 8195bd8deadSopenharmony_ci (3*alpha0 + 2*alpha1)/5, alpha0 <= alpha1 and code(x,y) == 3 8205bd8deadSopenharmony_ci (2*alpha0 + 3*alpha1)/5, alpha0 <= alpha1 and code(x,y) == 4 8215bd8deadSopenharmony_ci (1*alpha0 + 4*alpha1)/5, alpha0 <= alpha1 and code(x,y) == 5 8225bd8deadSopenharmony_ci 0.0, alpha0 <= alpha1 and code(x,y) == 6 8235bd8deadSopenharmony_ci 1.0, alpha0 <= alpha1 and code(x,y) == 7 8245bd8deadSopenharmony_ci 8255bd8deadSopenharmony_ci 8265bd8deadSopenharmony_ciImplementation Note 8275bd8deadSopenharmony_ci 8285bd8deadSopenharmony_ci This extension allows TexSubImage2D and CompressedTexSubImage2D to perform 8295bd8deadSopenharmony_ci partial updates to compressed images, but generally requires that the 8305bd8deadSopenharmony_ci updated area be aligned to 4x4 block boundaries. If the width or height 8315bd8deadSopenharmony_ci is not a multiple of four, there will be 4x4 blocks at the edge of the 8325bd8deadSopenharmony_ci image that contain "extra" texels that are not part of the image. This 8335bd8deadSopenharmony_ci spec has an exception allowing edits that partially cover such blocks as 8345bd8deadSopenharmony_ci long as the edit covers all texels in the block belonging to the image. 8355bd8deadSopenharmony_ci For example, in a 2D texture of size 70x50, it is legal to update the 8365bd8deadSopenharmony_ci single partial block covering the four texels from (68,48) to (69,49) by 8375bd8deadSopenharmony_ci setting (<xoffset>, <yoffset>) to (68,48) and <width> and <height> to 2. 8385bd8deadSopenharmony_ci 8395bd8deadSopenharmony_ci When this extension was originally written, non-bordered textures were 8405bd8deadSopenharmony_ci required to have widths and heights that were powers of two. Therefore, 8415bd8deadSopenharmony_ci the only cases where partial blocks could occur were if the width or 8425bd8deadSopenharmony_ci height of the texture image was one or two. The original spec language 8435bd8deadSopenharmony_ci allowed partial block edits only if the width or height of the region 8445bd8deadSopenharmony_ci edited was equal to the full texture size. That language didn't handle 8455bd8deadSopenharmony_ci cases such as the 70x50 example above. 8465bd8deadSopenharmony_ci 8475bd8deadSopenharmony_ci This specification was updated in April, 2009 to allow such edits. 8485bd8deadSopenharmony_ci Multiple OpenGL implementers correctly implemented the original 8495bd8deadSopenharmony_ci restriction, and partial edits that include partially covered tiles will 8505bd8deadSopenharmony_ci result in INVALID_OPERATION errors on older drivers. 8515bd8deadSopenharmony_ci 8525bd8deadSopenharmony_ci 8535bd8deadSopenharmony_ciNVIDIA Implementation Note 8545bd8deadSopenharmony_ci 8555bd8deadSopenharmony_ci NVIDIA GeForce 6 and 7 Series of GPUs (NV4x- and G7x-based GPUs) 8565bd8deadSopenharmony_ci and their Quadro counterparts (Quadro FX 4000, 4400, 4500; Quadro 8575bd8deadSopenharmony_ci NVS 440; etc.) do not ignore the order of the 16-bit RGB values 8585bd8deadSopenharmony_ci color0 and color1 when decoding DXT3 and DXT5 texture formats (i.e., 8595bd8deadSopenharmony_ci COMPRESSED_RGBA_S3TC_DXT5_EXT and COMPRESSED_RGBA_S3TC_DXT5_EXT). 8605bd8deadSopenharmony_ci This is at variance with the specification language saying: 8615bd8deadSopenharmony_ci 8625bd8deadSopenharmony_ci Each RGB image data block is encoded according to the 8635bd8deadSopenharmony_ci COMPRESSED_RGB_S3TC_DXT1_EXT format, with the exception that 8645bd8deadSopenharmony_ci the two code bits always use the non-transparent encodings. 8655bd8deadSopenharmony_ci In other words, they are treated as though color0 > color1, 8665bd8deadSopenharmony_ci regardless of the actual values of color0 and color1. 8675bd8deadSopenharmony_ci 8685bd8deadSopenharmony_ci With these NV4x and G7x GPUs, when decoding the DXT3 and DXT5 formats, 8695bd8deadSopenharmony_ci if color0 <= color1 then the code(x,y) values of 2 and 3 encode 8705bd8deadSopenharmony_ci (RGB0+RGB1)/2 and BLACK respectively (as is the case for DXT1). 8715bd8deadSopenharmony_ci 8725bd8deadSopenharmony_ci All other NVIDIA GPUs (those based on GPU designs other than NV4x 8735bd8deadSopenharmony_ci and G7x) implement DXT3 and DXT5 decoding strictly according to the 8745bd8deadSopenharmony_ci specification. Specifically, the order of color0 and color1 does 8755bd8deadSopenharmony_ci not affect the decoding of the DXT3 and DXT5 format, consistent with 8765bd8deadSopenharmony_ci the specification paragraph cited above. 8775bd8deadSopenharmony_ci 8785bd8deadSopenharmony_ci To ensure reliable decoding of DXT3 and DXT5 textures, please avoid 8795bd8deadSopenharmony_ci encoding an RGB image data block with color0 <= color1 when the 8805bd8deadSopenharmony_ci block also uses code(x,y) values of 2 and 3. 8815bd8deadSopenharmony_ci 8825bd8deadSopenharmony_ciRevision History 8835bd8deadSopenharmony_ci 8845bd8deadSopenharmony_ci 1.6 07/15/13 sgrajewski Added OpenGL ES 2.0.25 and 3.0.2 dependencies. 8855bd8deadSopenharmony_ci 8865bd8deadSopenharmony_ci 1.5 11/03/09 pbrown Fix typo in the encoding description of the 8875bd8deadSopenharmony_ci 3-bit "bits" fields in DXT5. 8885bd8deadSopenharmony_ci 8895bd8deadSopenharmony_ci 1.4 04/13/09 pbrown Add interaction with non-power-of-two textures 8905bd8deadSopenharmony_ci from OpenGL 2.0 / ARB_texture_non_power_of_two. 8915bd8deadSopenharmony_ci Allow CompressedTexSubImage2D to perform edits 8925bd8deadSopenharmony_ci that include partial tiles at the edge of the 8935bd8deadSopenharmony_ci image as long as the specified width/height 8945bd8deadSopenharmony_ci parameters line up with the edge. Thanks to 8955bd8deadSopenharmony_ci Emil Persson for finding this issue. 8965bd8deadSopenharmony_ci 8975bd8deadSopenharmony_ci 1.3 07/07/07 mjk Correct NVIDIA note about DXT3/5 decoding issue. 8985bd8deadSopenharmony_ci 8995bd8deadSopenharmony_ci 1.2 01/26/06 mjk Add NVIDIA note about DXT3/5 decoding issue. 9005bd8deadSopenharmony_ci 9015bd8deadSopenharmony_ci 1.1, 11/16/01 pbrown: Updated contact info, clarified where texels 9025bd8deadSopenharmony_ci fall within a single block. 9035bd8deadSopenharmony_ci 9045bd8deadSopenharmony_ci 1.0, 07/07/00 prbrown1: Published final version agreed to by working 9055bd8deadSopenharmony_ci group members. 9065bd8deadSopenharmony_ci 9075bd8deadSopenharmony_ci 0.9, 06/24/00 prbrown1: Documented that block-aligned TexSubImage calls 9085bd8deadSopenharmony_ci do not modify existing texels outside the 9095bd8deadSopenharmony_ci modified blocks. Added caveat to allow for a 9105bd8deadSopenharmony_ci (0,0)-anchored TexSubImage operation of 9115bd8deadSopenharmony_ci arbitrary size. 9125bd8deadSopenharmony_ci 9135bd8deadSopenharmony_ci 0.7, 04/11/00 prbrown1: Added issues on DXT1, DXT3, and DXT5 encodings 9145bd8deadSopenharmony_ci where the MSDN documentation doesn't match what 9155bd8deadSopenharmony_ci is really done. Added enum values from the 9165bd8deadSopenharmony_ci extension registry. 9175bd8deadSopenharmony_ci 9185bd8deadSopenharmony_ci 0.4, 03/28/00 prbrown1: Updated to reflect final version of the 9195bd8deadSopenharmony_ci ARB_texture_compression extension. Allowed 9205bd8deadSopenharmony_ci block-aligned TexSubImage calls. 9215bd8deadSopenharmony_ci 9225bd8deadSopenharmony_ci 0.3, 03/07/00 prbrown1: Resolved issues pertaining to the format of RGB 9235bd8deadSopenharmony_ci blocks in the DXT3 and DXT5 formats (they don't 9245bd8deadSopenharmony_ci ever use the "transparent" encoding). Fixed 9255bd8deadSopenharmony_ci decoding of DXT1 blocks. Pointed out issue of 9265bd8deadSopenharmony_ci "transparent" texels in DXT1 encodings having 9275bd8deadSopenharmony_ci different behaviors for RGB and RGBA internal 9285bd8deadSopenharmony_ci formats. 9295bd8deadSopenharmony_ci 9305bd8deadSopenharmony_ci 0.2, 02/23/00 prbrown1: Minor revisions; added several issues. 9315bd8deadSopenharmony_ci 9325bd8deadSopenharmony_ci 0.11, 02/17/00 prbrown1: Slight modification to error semantics 9335bd8deadSopenharmony_ci (INVALID_ENUM instead of INVALID_OPERATION). 9345bd8deadSopenharmony_ci 9355bd8deadSopenharmony_ci 0.1, 02/15/00 prbrown1: Initial revision. 936