§
    aÒ³gÇ  ã                  óò   — d Z ddlmZ ddlZddlmZ ddlmZ ddlm	Z	m
Z
 dZ G d	„ d
e¦  «        Z G d„ de
j
        ¦  «        Zd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.
é    )ÚannotationsN)ÚIntEnum)ÚBytesIOé   )ÚImageÚ	ImageFiles   FTEXc                  ó   — e Zd ZdZdZdS )ÚFormatr   r   N)Ú__name__Ú
__module__Ú__qualname__ÚDXT1ÚUNCOMPRESSED© ó    úQ/var/www/html/mpstechhub/venv/lib/python3.11/site-packages/PIL/FtexImagePlugin.pyr
   r
   A   s   € € € € € Ø€DØ€L€L€Lr   r
   c                  ó&   — e Zd ZdZdZd
d„Zdd„Zd	S )ÚFtexImageFileÚFTEXzTexture File Format (IW2:EOC)ÚreturnÚNonec                óZ  — 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| _        t          j        d	d
| j        z   dd¦  «        g| _        nW|t          j        k    r&t          j        dd
| j        z   dd¦  «        g| _        n!dt!          |¦  «        › �}t#          |¦  «        ‚| j                             ¦   «          t'          |¦  «        | _        d S )Né   znot an FTEX filez<iz<2ié   ÚRGBr   ÚRGBAÚbcn)r   r   r   )r   Úrawz$Invalid texture compression format: )Ú_acceptÚfpÚreadÚSyntaxErrorÚstructÚunpackÚ_sizeÚ_modeÚseekr
   r   r   Ú_TileÚsizeÚtiler   ÚreprÚ
ValueErrorÚcloser   )ÚselfÚmsgÚmipmap_countÚformat_countÚformatÚwhereÚmipmap_sizeÚdatas           r   Ú_openzFtexImageFile._openJ   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ŒJÝ"œ¨°¸¼Ñ0BÀAÀtÑLÔLÐMˆDŒIˆIØ•vÔ*Ò*Ð*Ý"œ¨°¸¼Ñ0BÀAÀuÑMÔMÐNˆDŒIˆIàG½¸f¹¼ÐGÐGˆCÝ˜S‘/”/Ð!àŒ�Š‰ŒˆÝ˜$‘-”-ˆŒˆˆr   ÚposÚintc                ó   — d S )Nr   )r.   r7   s     r   Ú	load_seekzFtexImageFile.load_seekj   s   € Øˆr   N)r   r   )r7   r8   r   r   )r   r   r   r2   Úformat_descriptionr6   r:   r   r   r   r   r   F   sH   € € € € € Ø€FØ8Ðð ð  ð  ð  ð@ð ð ð ð ð r   r   ÚprefixÚbytesr   Úboolc                ó(   — | d d…         t           k    S )Nr   )ÚMAGIC)r<   s    r   r   r   n   s   € Ø�"�1�"Œ:�ÒÐr   z.ftcz.ftu)r<   r=   r   r>   )Ú__doc__Ú
__future__r   r#   Úenumr   Úior   Ú r   r   r@   r
   r   r   Úregister_openr2   Úregister_extensionsr   r   r   ú<module>rH      s  ðð3ð 3ðj #Ð "Ð "Ð "Ð "Ð "à €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ð Ð Ð Ð à€ðð ð ð ð ˆWñ ô ð ð
%ð %ð %ð %ð %�IÔ'ñ %ô %ð %ðPð ð ð ð €Ô �MÔ(¨-¸Ñ AÔ AÐ AØ €Ô ˜-Ô.°¸Ð0@Ñ AÔ AÐ AÐ AÐ Ar   