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