15bd8deadSopenharmony_ciName 25bd8deadSopenharmony_ci 35bd8deadSopenharmony_ci OES_compressed_ETC1_RGB8_texture: 45bd8deadSopenharmony_ci 55bd8deadSopenharmony_ciName Strings 65bd8deadSopenharmony_ci 75bd8deadSopenharmony_ci GL_OES_compressed_ETC1_RGB8_texture 85bd8deadSopenharmony_ci 95bd8deadSopenharmony_ciContact 105bd8deadSopenharmony_ci 115bd8deadSopenharmony_ci Jacob Strom (jacob.strom 'at' ericsson.com) 125bd8deadSopenharmony_ci 135bd8deadSopenharmony_ciNotice 145bd8deadSopenharmony_ci 155bd8deadSopenharmony_ci Copyright (c) 2005-2013 The Khronos Group Inc. Copyright terms at 165bd8deadSopenharmony_ci http://www.khronos.org/registry/speccopyright.html 175bd8deadSopenharmony_ci 185bd8deadSopenharmony_ciSpecification Update Policy 195bd8deadSopenharmony_ci 205bd8deadSopenharmony_ci Khronos-approved extension specifications are updated in response to 215bd8deadSopenharmony_ci issues and bugs prioritized by the Khronos OpenGL ES Working Group. For 225bd8deadSopenharmony_ci extensions which have been promoted to a core Specification, fixes will 235bd8deadSopenharmony_ci first appear in the latest version of that core Specification, and will 245bd8deadSopenharmony_ci eventually be backported to the extension document. This policy is 255bd8deadSopenharmony_ci described in more detail at 265bd8deadSopenharmony_ci https://www.khronos.org/registry/OpenGL/docs/update_policy.php 275bd8deadSopenharmony_ci 285bd8deadSopenharmony_ciIP Status 295bd8deadSopenharmony_ci 305bd8deadSopenharmony_ci See Ericsson's "IP Statement" 315bd8deadSopenharmony_ci 325bd8deadSopenharmony_ciStatus 335bd8deadSopenharmony_ci 345bd8deadSopenharmony_ci Ratified by the Khronos BOP, July 22, 2005. 355bd8deadSopenharmony_ci 365bd8deadSopenharmony_ciVersion 375bd8deadSopenharmony_ci 385bd8deadSopenharmony_ci Last Modified Date: April 24, 2008 395bd8deadSopenharmony_ci 405bd8deadSopenharmony_ciNumber 415bd8deadSopenharmony_ci 425bd8deadSopenharmony_ci OpenGL ES Extension #5 435bd8deadSopenharmony_ci 445bd8deadSopenharmony_ciDependencies 455bd8deadSopenharmony_ci 465bd8deadSopenharmony_ci Written based on the wording of the OpenGL ES 1.0 specification 475bd8deadSopenharmony_ci 485bd8deadSopenharmony_ciOverview 495bd8deadSopenharmony_ci 505bd8deadSopenharmony_ci The goal of this extension is to allow direct support of 515bd8deadSopenharmony_ci compressed textures in the Ericsson Texture Compression (ETC) 525bd8deadSopenharmony_ci formats in OpenGL ES. 535bd8deadSopenharmony_ci 545bd8deadSopenharmony_ci ETC-compressed textures are handled in OpenGL ES using the 555bd8deadSopenharmony_ci CompressedTexImage2D call. 565bd8deadSopenharmony_ci 575bd8deadSopenharmony_ci The definition of the "internalformat" parameter in the 585bd8deadSopenharmony_ci CompressedTexImage2D call has been extended to support 595bd8deadSopenharmony_ci ETC-compressed textures. 605bd8deadSopenharmony_ci 615bd8deadSopenharmony_ci 625bd8deadSopenharmony_ciIssues 635bd8deadSopenharmony_ci 645bd8deadSopenharmony_ci Question: "How does the data format correspond to compressed files 655bd8deadSopenharmony_ci created with tool etcpack?" 665bd8deadSopenharmony_ci 675bd8deadSopenharmony_ci If etcpack is used to convert a .ppm file to this format, the top 685bd8deadSopenharmony_ci left pixel in the .ppm image will end up in the first block, which 695bd8deadSopenharmony_ci in turn will end up at u=0, v=0 when sent to 705bd8deadSopenharmony_ci glCompressedTexImage2D. Thus it works exactly the same way as just 715bd8deadSopenharmony_ci sending the raw image data from the .ppm format directly to 725bd8deadSopenharmony_ci glTexImage2D. 735bd8deadSopenharmony_ci 745bd8deadSopenharmony_ciNew Procedures and Functions 755bd8deadSopenharmony_ci 765bd8deadSopenharmony_ci None 775bd8deadSopenharmony_ci 785bd8deadSopenharmony_ci 795bd8deadSopenharmony_ciNew Tokens 805bd8deadSopenharmony_ci 815bd8deadSopenharmony_ci Accepted by the <internalformat> parameter of CompressedTexImage2D 825bd8deadSopenharmony_ci 835bd8deadSopenharmony_ci ETC1_RGB8_OES 0x8D64 845bd8deadSopenharmony_ci 855bd8deadSopenharmony_ciAdditions to Chapter 2 of the OpenGL 1.3 Specification (OpenGL 865bd8deadSopenharmony_ciOperation) 875bd8deadSopenharmony_ci 885bd8deadSopenharmony_ci None 895bd8deadSopenharmony_ci 905bd8deadSopenharmony_ciAdditions to Chapter 3 of the OpenGL 1.3 Specification (Rasterization) 915bd8deadSopenharmony_ci 925bd8deadSopenharmony_ci Add to Table 3.17: Specific Compressed Internal Formats 935bd8deadSopenharmony_ci 945bd8deadSopenharmony_ci Compressed Internal Formats Base Internal Format 955bd8deadSopenharmony_ci =========================== ==================== 965bd8deadSopenharmony_ci ETC1_RGB8_OES RGB 975bd8deadSopenharmony_ci 985bd8deadSopenharmony_ci 995bd8deadSopenharmony_ci Add to Section 3.8.3, Alternate Image Specification 1005bd8deadSopenharmony_ci 1015bd8deadSopenharmony_ci ETC1_RGB8_OES: 1025bd8deadSopenharmony_ci ============== 1035bd8deadSopenharmony_ci 1045bd8deadSopenharmony_ci If <internalformat> is ETC1_RGB8_OES, the compressed texture is an 1055bd8deadSopenharmony_ci ETC1 compressed texture. 1065bd8deadSopenharmony_ci 1075bd8deadSopenharmony_ci The texture is described as a number of 4x4 pixel blocks. If the 1085bd8deadSopenharmony_ci texture (or a particular mip-level) is smaller than 4 pixels in 1095bd8deadSopenharmony_ci any dimension (such as a 2x2 or a 8x1 texture), the texture is 1105bd8deadSopenharmony_ci found in the upper left part of the block(s), and the rest of the 1115bd8deadSopenharmony_ci pixels are not used. For instance, a texture of size 4x2 will be 1125bd8deadSopenharmony_ci placed in the upper half of a 4x4 block, and the lower half of the 1135bd8deadSopenharmony_ci pixels in the block will not be accessed. 1145bd8deadSopenharmony_ci 1155bd8deadSopenharmony_ci Pixel a1 (see Figure 3.9.0) of the first block in memory will 1165bd8deadSopenharmony_ci represent the texture coordinate (u=0, v=0). Pixel a2 in the 1175bd8deadSopenharmony_ci second block in memory will be adjacent to pixel m1 in the first 1185bd8deadSopenharmony_ci block, etc until the width of the texture. Then pixel a3 in the 1195bd8deadSopenharmony_ci following block (third block in memory for a 8x8 texture) will be 1205bd8deadSopenharmony_ci adjacent to pixel d1 in the first block, etc until the height of 1215bd8deadSopenharmony_ci the texture. Calling glCompressedTexImage2D to get an 8x8 texture 1225bd8deadSopenharmony_ci using the first, second, third and fourth block shown in Figure 1235bd8deadSopenharmony_ci 3.9.0 would have the same effect as calling glTexImage2D where the 1245bd8deadSopenharmony_ci bytes describing the pixels would come in the following memory 1255bd8deadSopenharmony_ci order: a1 e1 i1 m1 a2 e2 i2 m2 b1 f1 j1 n1 b2 f2 j2 n2 c1 g1 k1 o1 1265bd8deadSopenharmony_ci c2 g2 k2 o2 d1 h1 l1 p1 d2 h2 l2 p2 a3 e3 i3 m3 a4 e4 i4 m4 b3 f3 1275bd8deadSopenharmony_ci j3 n3 b4 f4 j4 n4 c3 g3 k3 o3 c4 g4 k4 o4 d3 h3 l3 p3 d4 h4 l4 p4. 1285bd8deadSopenharmony_ci 1295bd8deadSopenharmony_ci The number of bits that represent a 4x4 texel block is 64 bits if 1305bd8deadSopenharmony_ci <internalformat> is given by ETC1_RGB8_OES. 1315bd8deadSopenharmony_ci 1325bd8deadSopenharmony_ci The data for a block is a number of bytes, 1335bd8deadSopenharmony_ci 1345bd8deadSopenharmony_ci {q0, q1, q2, q3, q4, q5, q6, q7} 1355bd8deadSopenharmony_ci 1365bd8deadSopenharmony_ci where byte q0 is located at the lowest memory address and q7 at 1375bd8deadSopenharmony_ci the highest. The 64 bits specifying the block is then represented 1385bd8deadSopenharmony_ci by the following 64 bit integer: 1395bd8deadSopenharmony_ci 1405bd8deadSopenharmony_ci int64bit = 256*(256*(256*(256*(256*(256*(256*q0+q1)+q2)+q3)+q4)+q5)+q6)+q7; 1415bd8deadSopenharmony_ci 1425bd8deadSopenharmony_ci Each 64-bit word contains information about a 4x4 pixel block as 1435bd8deadSopenharmony_ci shown in Figure 3.9.1. There are two modes in ETC1; the 1445bd8deadSopenharmony_ci 'individual' mode and the 'differential' mode. Which mode is 1455bd8deadSopenharmony_ci active for a particular 4x4 block is controlled by bit 33, which 1465bd8deadSopenharmony_ci we call 'diffbit'. If diffbit = 0, the 'individual' mode is 1475bd8deadSopenharmony_ci chosen, and if diffbit = 1, then the 'differential' mode is 1485bd8deadSopenharmony_ci chosen. The bit layout for the two modes are different: The bit 1495bd8deadSopenharmony_ci layout for the individual mode is shown in Tables 3.17.1a and 1505bd8deadSopenharmony_ci 3.17.1c, and the bit layout for the differential mode is laid out 1515bd8deadSopenharmony_ci in Tables 3.17.1b and 3.17.1c. 1525bd8deadSopenharmony_ci 1535bd8deadSopenharmony_ci In both modes, the 4x4 block is divided into two subblocks of 1545bd8deadSopenharmony_ci either size 2x4 or 4x2. This is controlled by bit 32, which we 1555bd8deadSopenharmony_ci call 'flipbit'. If flipbit=0, the block is divided into two 2x4 1565bd8deadSopenharmony_ci subblocks side-by-side, as shown in Figure 3.9.2. If flipbit=1, 1575bd8deadSopenharmony_ci the block is divided into two 4x2 subblocks on top of each other, 1585bd8deadSopenharmony_ci as shown in Figure 3.9.3. 1595bd8deadSopenharmony_ci 1605bd8deadSopenharmony_ci In both individual and differential mode, a 'base color' for each 1615bd8deadSopenharmony_ci subblock is stored, but the way they are stored is different in 1625bd8deadSopenharmony_ci the two modes: 1635bd8deadSopenharmony_ci 1645bd8deadSopenharmony_ci In the 'individual' mode (diffbit = 0), the base color for 1655bd8deadSopenharmony_ci subblock 1 is derived from the codewords R1 (bit 63-60), G1 (bit 1665bd8deadSopenharmony_ci 55-52) and B1 (bit 47-44), see Table 3.17.1a. These four bit 1675bd8deadSopenharmony_ci values are extended to RGB888 by replicating the four higher order 1685bd8deadSopenharmony_ci bits in the four lower order bits. For instance, if R1 = 14 = 1695bd8deadSopenharmony_ci 1110b, G1 = 3 = 0011b and B1 = 8 = 1000b, then the red component 1705bd8deadSopenharmony_ci of the base color of subblock 1 becomes 11101110b = 238, and the 1715bd8deadSopenharmony_ci green and blue components become 00110011b = 51 and 10001000b = 1725bd8deadSopenharmony_ci 136. The base color for subblock 2 is decoded the same way, but 1735bd8deadSopenharmony_ci using the 4-bit codewords R2 (bit 59-56), G2 (bit 51-48)and B2 1745bd8deadSopenharmony_ci (bit 43-40) instead. In summary, the base colors for the subblocks 1755bd8deadSopenharmony_ci in the individual mode are: 1765bd8deadSopenharmony_ci 1775bd8deadSopenharmony_ci base col subblock1 = extend_4to8bits(R1, G1, B1) 1785bd8deadSopenharmony_ci base col subblock2 = extend_4to8bits(R2, G2, B2) 1795bd8deadSopenharmony_ci 1805bd8deadSopenharmony_ci In the 'differential' mode (diffbit = 1), the base color for 1815bd8deadSopenharmony_ci subblock 1 is derived from the five-bit codewords R1', G1' and 1825bd8deadSopenharmony_ci B1'. These five-bit codewords are extended to eight bits by 1835bd8deadSopenharmony_ci replicating the top three highest order bits to the three lowest 1845bd8deadSopenharmony_ci order bits. For instance, if R1' = 28 = 11100b, the resulting 1855bd8deadSopenharmony_ci eight-bit red color component becomes 11100111b = 231. Likewise, 1865bd8deadSopenharmony_ci if G1' = 4 = 00100b and B1' = 3 = 00011b, the green and blue 1875bd8deadSopenharmony_ci components become 00100001b = 33 and 00011000b = 24 1885bd8deadSopenharmony_ci respectively. Thus, in this example, the base color for subblock 1 1895bd8deadSopenharmony_ci is (231, 33, 24). The five bit representation for the base color 1905bd8deadSopenharmony_ci of subblock 2 is obtained by modifying the 5-bit codewords R1' G1' 1915bd8deadSopenharmony_ci and B1' by the codewords dR2, dG2 and dB2. Each of dR2, dG2 and 1925bd8deadSopenharmony_ci dB2 is a 3-bit two-complement number that can hold values between 1935bd8deadSopenharmony_ci -4 and +3. For instance, if R1' = 28 as above, and dR2 = 100b = 1945bd8deadSopenharmony_ci -4, then the five bit representation for the red color component 1955bd8deadSopenharmony_ci is 28+(-4)=24 = 11000b, which is then extended to eight bits to 1965bd8deadSopenharmony_ci 11000110b = 198. Likewise, if G1' = 4, dG2 = 2, B1' = 3 and dB2 = 1975bd8deadSopenharmony_ci 0, the base color of subblock 2 will be RGB = (198, 49, 24). In 1985bd8deadSopenharmony_ci summary, the base colors for the subblocks in the differential 1995bd8deadSopenharmony_ci mode are: 2005bd8deadSopenharmony_ci 2015bd8deadSopenharmony_ci base col subblock1 = extend_5to8bits(R1', G1', B1') 2025bd8deadSopenharmony_ci base col subblock2 = extend_5to8bits(R1'+dR2, G1'+dG2, B1'+dG2) 2035bd8deadSopenharmony_ci 2045bd8deadSopenharmony_ci Note that these additions are not allowed to under- or overflow 2055bd8deadSopenharmony_ci (go below zero or above 31). (The compression scheme can easily 2065bd8deadSopenharmony_ci make sure they don't.) For over- or underflowing values, the 2075bd8deadSopenharmony_ci behavior is undefined for all pixels in the 4x4 block. Note also 2085bd8deadSopenharmony_ci that the extension to eight bits is performed _after_ the 2095bd8deadSopenharmony_ci addition. 2105bd8deadSopenharmony_ci 2115bd8deadSopenharmony_ci After obtaining the base color, the operations are the same for 2125bd8deadSopenharmony_ci the two modes 'individual' and 'differential'. First a table is 2135bd8deadSopenharmony_ci chosen using the table codewords: For subblock 1, table codeword 1 2145bd8deadSopenharmony_ci is used (bits 39-37), and for subblock 2, table codeword 2 is used 2155bd8deadSopenharmony_ci (bits 36-34), see Table 3.17.1. The table codeword is used to 2165bd8deadSopenharmony_ci select one of eight modifier tables, see Table 3.17.2. For 2175bd8deadSopenharmony_ci instance, if the table code word is 010b = 2, then the modifier 2185bd8deadSopenharmony_ci table [-29, -9, 9 29] is selected. Note that the values in Table 2195bd8deadSopenharmony_ci 3.17.2 are valid for all textures and can therefore be hardcoded 2205bd8deadSopenharmony_ci into the decompression unit. 2215bd8deadSopenharmony_ci 2225bd8deadSopenharmony_ci Next, we identify which modifier value to use from the modifier 2235bd8deadSopenharmony_ci table using the two 'pixel index' bits. The pixel index bits are 2245bd8deadSopenharmony_ci unique for each pixel. For instance, the pixel index for pixel d 2255bd8deadSopenharmony_ci (see Figure 3.9.1) can be found in bits 19 (most significant bit, 2265bd8deadSopenharmony_ci MSB), and 3 (least significant bit, LSB), see Table 3.17.1c. Note 2275bd8deadSopenharmony_ci that the pixel index for a particular texel is always stored in 2285bd8deadSopenharmony_ci the same bit position, irrespectively of bits 'diffbit' and 2295bd8deadSopenharmony_ci 'flipbit'. The pixel index bits are decoded using table 2305bd8deadSopenharmony_ci 3.17.3. If, for instance, the pixel index bits are 01b = 1, and 2315bd8deadSopenharmony_ci the modifier table [-29, -9, 9, 29] is used, then the modifier 2325bd8deadSopenharmony_ci value selected for that pixel is 29 (see table 3.17.3). This 2335bd8deadSopenharmony_ci modifier value is now used to additively modify the base 2345bd8deadSopenharmony_ci color. For example, if we have the base color (231, 8, 16), we 2355bd8deadSopenharmony_ci should add the modifier value 29 to all three components: (231+29, 2365bd8deadSopenharmony_ci 8+29, 16+29) resulting in (260, 37, 45). These values are then 2375bd8deadSopenharmony_ci clamped to [0, 255], resulting in the color (255, 37, 45), and we 2385bd8deadSopenharmony_ci are finished decoding the texel. 2395bd8deadSopenharmony_ci 2405bd8deadSopenharmony_ci ETC1 compressed textures support only 2D images without 2415bd8deadSopenharmony_ci borders. CompressedTexture2D will produce an INVALID_OPERATION if 2425bd8deadSopenharmony_ci <border> is non-zero. 2435bd8deadSopenharmony_ci 2445bd8deadSopenharmony_ci 2455bd8deadSopenharmony_ci Add table 3.17.1: Texel Data format for ETC1 compressed 2465bd8deadSopenharmony_ci textures: 2475bd8deadSopenharmony_ci 2485bd8deadSopenharmony_ci ETC1_RGB8_OES: 2495bd8deadSopenharmony_ci 2505bd8deadSopenharmony_ci a) bit layout in bits 63 through 32 if diffbit = 0 2515bd8deadSopenharmony_ci 2525bd8deadSopenharmony_ci 63 62 61 60 59 58 57 56 55 54 53 52 51 50 49 48 2535bd8deadSopenharmony_ci ----------------------------------------------- 2545bd8deadSopenharmony_ci | base col1 | base col2 | base col1 | base col2 | 2555bd8deadSopenharmony_ci | R1 (4bits)| R2 (4bits)| G1 (4bits)| G2 (4bits)| 2565bd8deadSopenharmony_ci ----------------------------------------------- 2575bd8deadSopenharmony_ci 2585bd8deadSopenharmony_ci 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 2595bd8deadSopenharmony_ci --------------------------------------------------- 2605bd8deadSopenharmony_ci | base col1 | base col2 | table | table |diff|flip| 2615bd8deadSopenharmony_ci | B1 (4bits)| B2 (4bits)| cw 1 | cw 2 |bit |bit | 2625bd8deadSopenharmony_ci --------------------------------------------------- 2635bd8deadSopenharmony_ci 2645bd8deadSopenharmony_ci 2655bd8deadSopenharmony_ci b) bit layout in bits 63 through 32 if diffbit = 1 2665bd8deadSopenharmony_ci 2675bd8deadSopenharmony_ci 63 62 61 60 59 58 57 56 55 54 53 52 51 50 49 48 2685bd8deadSopenharmony_ci ----------------------------------------------- 2695bd8deadSopenharmony_ci | base col1 | dcol 2 | base col1 | dcol 2 | 2705bd8deadSopenharmony_ci | R1' (5 bits) | dR2 | G1' (5 bits) | dG2 | 2715bd8deadSopenharmony_ci ----------------------------------------------- 2725bd8deadSopenharmony_ci 2735bd8deadSopenharmony_ci 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 2745bd8deadSopenharmony_ci --------------------------------------------------- 2755bd8deadSopenharmony_ci | base col 1 | dcol 2 | table | table |diff|flip| 2765bd8deadSopenharmony_ci | B1' (5 bits) | dB2 | cw 1 | cw 2 |bit |bit | 2775bd8deadSopenharmony_ci --------------------------------------------------- 2785bd8deadSopenharmony_ci 2795bd8deadSopenharmony_ci 2805bd8deadSopenharmony_ci c) bit layout in bits 31 through 0 (in both cases) 2815bd8deadSopenharmony_ci 2825bd8deadSopenharmony_ci 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 2835bd8deadSopenharmony_ci ----------------------------------------------- 2845bd8deadSopenharmony_ci | most significant pixel index bits | 2855bd8deadSopenharmony_ci | p| o| n| m| l| k| j| i| h| g| f| e| d| c| b| a| 2865bd8deadSopenharmony_ci ----------------------------------------------- 2875bd8deadSopenharmony_ci 2885bd8deadSopenharmony_ci 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 2895bd8deadSopenharmony_ci -------------------------------------------------- 2905bd8deadSopenharmony_ci | least significant pixel index bits | 2915bd8deadSopenharmony_ci | p| o| n| m| l| k| j| i| h| g| f| e| d| c | b | a | 2925bd8deadSopenharmony_ci -------------------------------------------------- 2935bd8deadSopenharmony_ci 2945bd8deadSopenharmony_ci 2955bd8deadSopenharmony_ci Add table 3.17.2: Intensity modifier sets for ETC1 compressed textures: 2965bd8deadSopenharmony_ci 2975bd8deadSopenharmony_ci table codeword modifier table 2985bd8deadSopenharmony_ci ------------------ ---------------------- 2995bd8deadSopenharmony_ci 0 -8 -2 2 8 3005bd8deadSopenharmony_ci 1 -17 -5 5 17 3015bd8deadSopenharmony_ci 2 -29 -9 9 29 3025bd8deadSopenharmony_ci 3 -42 -13 13 42 3035bd8deadSopenharmony_ci 4 -60 -18 18 60 3045bd8deadSopenharmony_ci 5 -80 -24 24 80 3055bd8deadSopenharmony_ci 6 -106 -33 33 106 3065bd8deadSopenharmony_ci 7 -183 -47 47 183 3075bd8deadSopenharmony_ci 3085bd8deadSopenharmony_ci 3095bd8deadSopenharmony_ci Add table 3.17.3 Mapping from pixel index values to modifier values for 3105bd8deadSopenharmony_ci ETC1 compressed textures: 3115bd8deadSopenharmony_ci 3125bd8deadSopenharmony_ci pixel index value 3135bd8deadSopenharmony_ci --------------- 3145bd8deadSopenharmony_ci msb lsb resulting modifier value 3155bd8deadSopenharmony_ci ----- ----- ------------------------- 3165bd8deadSopenharmony_ci 1 1 -b (large negative value) 3175bd8deadSopenharmony_ci 1 0 -a (small negative value) 3185bd8deadSopenharmony_ci 0 0 a (small positive value) 3195bd8deadSopenharmony_ci 0 1 b (large positive value) 3205bd8deadSopenharmony_ci 3215bd8deadSopenharmony_ci 3225bd8deadSopenharmony_ci 3235bd8deadSopenharmony_ci Add figure 3.9.0: Pixel layout for a 8x8 texture using four ETC1 3245bd8deadSopenharmony_ci compressed blocks. Note how pixel a2 in the second block is 3255bd8deadSopenharmony_ci adjacent to pixel m in the first block. 3265bd8deadSopenharmony_ci 3275bd8deadSopenharmony_ci First block in mem Second block in mem 3285bd8deadSopenharmony_ci ---- ---- ---- ---- .... .... .... .... --> u direction 3295bd8deadSopenharmony_ci |a1 |e1 |i1 |m1 |a2 :e2 :i2 :m2 : 3305bd8deadSopenharmony_ci | | | | | : : : : 3315bd8deadSopenharmony_ci ---- ---- ---- ---- .... .... .... .... 3325bd8deadSopenharmony_ci |b1 |f1 |j1 |n1 |b2 :f2 :j2 :n2 : 3335bd8deadSopenharmony_ci | | | | | : : : : 3345bd8deadSopenharmony_ci ---- ---- ---- ---- .... .... .... .... 3355bd8deadSopenharmony_ci |c1 |g1 |k1 |o1 |c2 :g2 :k2 :o2 : 3365bd8deadSopenharmony_ci | | | | | : : : : 3375bd8deadSopenharmony_ci ---- ---- ---- ---- .... .... .... .... 3385bd8deadSopenharmony_ci |d1 |h1 |l1 |p1 |d2 :h2 :l2 :p2 : 3395bd8deadSopenharmony_ci | | | | | : : : : 3405bd8deadSopenharmony_ci ---- ---- ---- ---- ---- ---- ---- ---- 3415bd8deadSopenharmony_ci :a3 :e3 :i3 :m3 |a4 |e4 |i4 |m4 | 3425bd8deadSopenharmony_ci : : : : | | | | | 3435bd8deadSopenharmony_ci .... .... .... .... ---- ---- ---- ---- 3445bd8deadSopenharmony_ci :b3 :f3 :j3 :n3 |b4 |f4 |j4 |n4 | 3455bd8deadSopenharmony_ci : : : : | | | | | 3465bd8deadSopenharmony_ci .... .... .... .... ---- ---- ---- ---- 3475bd8deadSopenharmony_ci :c3 :g3 :k3 :o3 |c4 |g4 |k4 |o4 | 3485bd8deadSopenharmony_ci : : : : | | | | | 3495bd8deadSopenharmony_ci .... .... .... .... ---- ---- ---- ---- 3505bd8deadSopenharmony_ci :d3 :h3 :l3 :p3 |d4 |h4 |l4 |p4 | 3515bd8deadSopenharmony_ci : : : : | | | | | 3525bd8deadSopenharmony_ci .... .... .... .... ---- ---- ---- ---- 3535bd8deadSopenharmony_ci | Third block in mem Fourth block in mem 3545bd8deadSopenharmony_ci v 3555bd8deadSopenharmony_ci v direction 3565bd8deadSopenharmony_ci 3575bd8deadSopenharmony_ci Add figure 3.9.1: Pixel layout for a ETC1 compressed block: 3585bd8deadSopenharmony_ci 3595bd8deadSopenharmony_ci ---- ---- ---- ---- 3605bd8deadSopenharmony_ci |a |e |i |m | 3615bd8deadSopenharmony_ci | | | | | 3625bd8deadSopenharmony_ci ---- ---- ---- ---- 3635bd8deadSopenharmony_ci |b |f |j |n | 3645bd8deadSopenharmony_ci | | | | | 3655bd8deadSopenharmony_ci ---- ---- ---- ---- 3665bd8deadSopenharmony_ci |c |g |k |o | 3675bd8deadSopenharmony_ci | | | | | 3685bd8deadSopenharmony_ci ---- ---- ---- ---- 3695bd8deadSopenharmony_ci |d |h |l |p | 3705bd8deadSopenharmony_ci | | | | | 3715bd8deadSopenharmony_ci ---- ---- ---- ---- 3725bd8deadSopenharmony_ci 3735bd8deadSopenharmony_ci 3745bd8deadSopenharmony_ci Add figure 3.9.2: Two 2x4-pixel subblocks side-by-side: 3755bd8deadSopenharmony_ci 3765bd8deadSopenharmony_ci 3775bd8deadSopenharmony_ci subblock 1 subblock 2 3785bd8deadSopenharmony_ci ---- ---- ---- ---- 3795bd8deadSopenharmony_ci |a e |i m | 3805bd8deadSopenharmony_ci | | | 3815bd8deadSopenharmony_ci | | | 3825bd8deadSopenharmony_ci |b f |j n | 3835bd8deadSopenharmony_ci | | | 3845bd8deadSopenharmony_ci | | | 3855bd8deadSopenharmony_ci |c g |k o | 3865bd8deadSopenharmony_ci | | | 3875bd8deadSopenharmony_ci | | | 3885bd8deadSopenharmony_ci |d h |l p | 3895bd8deadSopenharmony_ci | | | 3905bd8deadSopenharmony_ci ---- ---- ---- ---- 3915bd8deadSopenharmony_ci 3925bd8deadSopenharmony_ci 3935bd8deadSopenharmony_ci Add figure 3.9.3: Two 4x2-pixel subblocks on top of each other: 3945bd8deadSopenharmony_ci 3955bd8deadSopenharmony_ci ---- ---- ---- ---- 3965bd8deadSopenharmony_ci |a e i m | 3975bd8deadSopenharmony_ci | | 3985bd8deadSopenharmony_ci | | subblock 1 3995bd8deadSopenharmony_ci |b f j n | 4005bd8deadSopenharmony_ci | | 4015bd8deadSopenharmony_ci ------------------- 4025bd8deadSopenharmony_ci |c g k o | 4035bd8deadSopenharmony_ci | | 4045bd8deadSopenharmony_ci | | subblock 2 4055bd8deadSopenharmony_ci |d h l p | 4065bd8deadSopenharmony_ci | | 4075bd8deadSopenharmony_ci ---- ---- ---- ---- 4085bd8deadSopenharmony_ci 4095bd8deadSopenharmony_ci 4105bd8deadSopenharmony_ciAdditions to Chapter 4 of the OpenGL 1.3 Specification (Per-Fragment 4115bd8deadSopenharmony_ciOperations and the Frame Buffer) 4125bd8deadSopenharmony_ci 4135bd8deadSopenharmony_ci None 4145bd8deadSopenharmony_ci 4155bd8deadSopenharmony_ciAdditions to Chapter 5 of the OpenGL 1.3 Specification (Special 4165bd8deadSopenharmony_ciFunctions) 4175bd8deadSopenharmony_ci 4185bd8deadSopenharmony_ci None 4195bd8deadSopenharmony_ci 4205bd8deadSopenharmony_ci 4215bd8deadSopenharmony_ciAdditions to Chapter 6 of the OpenGL 1.3 Specification (State and 4225bd8deadSopenharmony_ciState Requests) 4235bd8deadSopenharmony_ci 4245bd8deadSopenharmony_ci None 4255bd8deadSopenharmony_ci 4265bd8deadSopenharmony_ciAdditions to Appendix A of the OpenGL 1.3 Specification (Invariance) 4275bd8deadSopenharmony_ci 4285bd8deadSopenharmony_ci None 4295bd8deadSopenharmony_ci 4305bd8deadSopenharmony_ciAdditions to the AGL/GLX/WGL Specification 4315bd8deadSopenharmony_ci 4325bd8deadSopenharmony_ci None 4335bd8deadSopenharmony_ci 4345bd8deadSopenharmony_ciGLX Protocol 4355bd8deadSopenharmony_ci 4365bd8deadSopenharmony_ci None 4375bd8deadSopenharmony_ci 4385bd8deadSopenharmony_ciErrors 4395bd8deadSopenharmony_ci 4405bd8deadSopenharmony_ci INVALID_OPERATION is generated by CompressedTexSubImage2D, 4415bd8deadSopenharmony_ci TexSubImage2D, or CopyTexSubImage2D if the texture image <level> 4425bd8deadSopenharmony_ci bound to <target> has internal format ETC1_RGB8_OES. 4435bd8deadSopenharmony_ci 4445bd8deadSopenharmony_ciNew State 4455bd8deadSopenharmony_ci 4465bd8deadSopenharmony_ci The queries for NUM_COMPRESSED_TEXTURE_FORMATS and 4475bd8deadSopenharmony_ci COMPRESSED_TEXTURE_FORMATS include ETC1_RGB8_OES. 4485bd8deadSopenharmony_ci 4495bd8deadSopenharmony_ci 4505bd8deadSopenharmony_ciRevision History 4515bd8deadSopenharmony_ci 04/20/2005 0.1 (Jacob Strom) 4525bd8deadSopenharmony_ci - Original draft. 4535bd8deadSopenharmony_ci 04/26/2005 0.2 (Jacob Strom) 4545bd8deadSopenharmony_ci - Minor bugfixes. 4555bd8deadSopenharmony_ci 05/10/2005 0.3 (Jacob Strom) 4565bd8deadSopenharmony_ci - Minor bugfixes. 4575bd8deadSopenharmony_ci 06/30/2005 0.9 (Jacob Strom) 4585bd8deadSopenharmony_ci - Merged iPACKMAN and iPACKMANalpha. 4595bd8deadSopenharmony_ci 07/04/2005 0.92 (Jacob Strom) 4605bd8deadSopenharmony_ci - Changed name from iPACKMAN to Ericsson Texture Compression 4615bd8deadSopenharmony_ci 07/07/2005 0.98 (Jacob Strom) 4625bd8deadSopenharmony_ci - Removed alpha formats 4635bd8deadSopenharmony_ci 07/27/2005 1.00 (Jacob Strom) 4645bd8deadSopenharmony_ci - Added token value for ETC1_RGB8_OES 4655bd8deadSopenharmony_ci 07/28/2005 1.001 (Jacob Strom) 4665bd8deadSopenharmony_ci - Changed typos found by Eric Fausett 4675bd8deadSopenharmony_ci 10/25/2006 1.1 (Jacob Strom) 4685bd8deadSopenharmony_ci - Added clarification on small textures and endianess 4695bd8deadSopenharmony_ci 04/02/2008 1.11 (Jacob Strom) 4705bd8deadSopenharmony_ci - Added clarification on coordinate system orientation 4715bd8deadSopenharmony_ci 04/24/2008 1.12 (Jacob Strom) 4725bd8deadSopenharmony_ci - Improve error description 473