§
    œ"²c  ã                   óö   — d Z ddlZddlmZ ddlmZ ddlmZmZ ddl	m
Z
 dZ G d	„ d
e¦  «        Zd„ Z G d„ dej        ¦  «        Zd„ Z ej        ej        ee¦  «          ej        ej        ddg¦  «         dS )a  
A Pillow loader for .ftc and .ftu files (FTEX)
Jerome Leclanche <jerome@leclan.ch>

The contents of this file are hereby released in the public domain (CC0)
Full text of the CC0 license:
  https://creativecommons.org/publicdomain/zero/1.0/

Independence War 2: Edge Of Chaos - Texture File Format - 16 October 2001

The textures used for 3D objects in Independence War 2: Edge Of Chaos are in a
packed custom format called FTEX. This file format uses file extensions FTC
and FTU.
* FTC files are compressed textures (using standard texture compression).
* FTU files are not compressed.
Texture File Format
The FTC and FTU texture files both use the same format. This
has the following structure:
{header}
{format_directory}
{data}
Where:
{header} = {
    u32:magic,
    u32:version,
    u32:width,
    u32:height,
    u32:mipmap_count,
    u32:format_count
}

* The "magic" number is "FTEX".
* "width" and "height" are the dimensions of the texture.
* "mipmap_count" is the number of mipmaps in the texture.
* "format_count" is the number of texture formats (different versions of the
same texture) in this file.

{format_directory} = format_count * { u32:format, u32:where }

The format value is 0 for DXT1 compressed textures and 1 for 24-bit RGB
uncompressed textures.
The texture data for a format starts at the position "where" in the file.

Each set of texture data in the file has the following structure:
{data} = format_count * { u32:mipmap_size, mipmap_size * { u8 } }
* "mipmap_size" is the number of bytes in that mip level. For compressed
textures this is the size of the texture data compressed with DXT1. For 24 bit
uncompressed textures, this is 3 * width * height. Following this are the image
bytes for that mipmap level.

Note: All data is stored in little-Endian (Intel) byte order.
é    N)ÚIntEnum)ÚBytesIOé   )ÚImageÚ	ImageFile)Ú	deprecates   FTEXc                   ó   — e Zd ZdZdZdS )ÚFormatr   r   N)Ú__name__Ú
__module__Ú__qualname__ÚDXT1ÚUNCOMPRESSED© ó    ú5/usr/lib/python3/dist-packages/PIL/FtexImagePlugin.pyr
   r
   @   s   € € € € € Ø€DØ€L€L€Lr   r
   c                 ó:  — t           di                     ¦   «         D ]c\  }}|                      |¦  «        rI| t          |¦  «        d …         } | |j        v r)t          |› | › �d|j        › d| › �¦  «         ||          c S Œddt          › d| › d�}t          |¦  «        ‚)NÚFORMAT_é
   ú.zmodule 'z' has no attribute 'ú')r
   ÚitemsÚ
startswithÚlenÚ__members__r   r   ÚAttributeError)ÚnameÚenumÚprefixÚmsgs       r   Ú__getattr__r!   E   sÀ   € Ý Ð+×1Ò1Ñ3Ô3ð "ð "‰ˆˆfØ�?Š?˜6Ñ"Ô"ð 	"Ø�˜F™œ˜˜Ô&ˆDØ�tÔ'Ð'Ð'Ý˜VÐ+ TÐ+Ð+¨R°D´MÐ1JÐ1JÀDÐ1JÐ1JÑKÔKÐKØ˜D”zÐ!Ð!Ð!øØ
:•XÐ
:Ð
:°4Ð
:Ð
:Ð
:€CÝ
˜Ñ
Ô
Ðr   c                   ó"   — e Zd ZdZdZd„ Zd„ ZdS )ÚFtexImageFileÚFTEXzTexture File Format (IW2:EOC)c                 ó  — t          | j                             d¦  «        ¦  «        sd}t          |¦  «        ‚t	          j        d| j                             d¦  «        ¦  «         t	          j        d| j                             d¦  «        ¦  «        | _        t	          j        d| j                             d¦  «        ¦  «        \  }}d| _        |dk    sJ ‚t	          j        d| j                             d¦  «        ¦  «        \  }}| j                             |¦  «         t	          j        d| j                             d¦  «        ¦  «        \  }| j                             |¦  «        }|t          j
        k    rd| _        d	d
| j        z   ddfg| _        nF|t          j        k    rdd
| j        z   ddfg| _        n!dt          |¦  «        › �}t          |¦  «        ‚| j                             ¦   «          t#          |¦  «        | _        d S )Né   znot an FTEX filez<iz<2ié   ÚRGBr   ÚRGBAÚbcn)r   r   r   Úraw)r(   r   r   z$Invalid texture compression format: )Ú_acceptÚfpÚreadÚSyntaxErrorÚstructÚunpackÚ_sizeÚmodeÚseekr
   r   ÚsizeÚtiler   ÚreprÚ
ValueErrorÚcloser   )Úselfr    Úmipmap_countÚformat_countÚformatÚwhereÚmipmap_sizeÚdatas           r   Ú_openzFtexImageFile._openT   sª  € Ý�t”w—|’| A‘”Ñ'Ô'ð 	#Ø$ˆCÝ˜cÑ"Ô"Ð"ÝŒ�d˜DœGŸLšL¨™OœOÑ,Ô,Ð,Ý”] 5¨$¬'¯,ª,°q©/¬/Ñ:Ô:ˆŒ
Ý%+¤]°5¸$¼'¿,º,Àq¹/¼/Ñ%JÔ%JÑ"ˆ�làˆŒ	ð ˜qÒ Ð Ð Ð åœ e¨T¬W¯\ª\¸!©_¬_Ñ=Ô=‰ˆ�ØŒ�Š�UÑÔÐÝœ t¨T¬W¯\ª\¸!©_¬_Ñ=Ô=‰ˆàŒw�|Š|˜KÑ(Ô(ˆà•V”[Ò Ð ØˆDŒIØ ¨$¬)Ñ!3°Q¸Ð:Ð;ˆDŒIˆIØ•vÔ*Ò*Ð*Ø ¨$¬)Ñ!3°Q¸ÐFÐGˆDŒIˆIàG½¸f¹¼ÐGÐGˆCÝ˜S‘/”/Ð!àŒ�Š‰ŒˆÝ˜$‘-”-ˆŒˆˆr   c                 ó   — d S )Nr   )r:   Úposs     r   Ú	load_seekzFtexImageFile.load_seekt   s   € Øˆr   N)r   r   r   r=   Úformat_descriptionrA   rD   r   r   r   r#   r#   P   s>   € € € € € Ø€FØ8Ðð ð  ð  ð@ð ð ð ð r   r#   c                 ó(   — | d d…         t           k    S )Nr&   )ÚMAGIC)r   s    r   r,   r,   x   s   € Ø�"�1�"Œ:�ÒÐr   z.ftcz.ftu)Ú__doc__r0   r   r   Úior   Ú r   r   Ú
_deprecater   rG   r
   r!   r#   r,   Úregister_openr=   Úregister_extensionsr   r   r   ú<module>rN      s#  ðð3ð 3ðj €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !à€ðð ð ð ð ˆWñ ô ð ð
ð ð ð%ð %ð %ð %ð %�IÔ'ñ %ô %ð %ðPð ð ð €Ô �MÔ(¨-¸Ñ AÔ AÐ AØ €Ô ˜-Ô.°¸Ð0@Ñ AÔ AÐ AÐ AÐ Ar   