U
    Å½„b‡  ã                   @   sª  d Z ddlZddlmZ ddlmZmZ ddlmZ	 dZ
dZdZd	Zd
ZdZdZdZdZd
ZdZdZdZdZdZdZdZdZdZdZdZdZd	Z dZ!dZ"dZ#e Z$e"Z%e"eB Z&e#Z'e#eB Z(eZ)e!Z*eeB eB eB Z+eZ,eZ-eZ.eZ/eZ0eZ1eZ2eeB Z3eZ4eeB Z5eeB Z6eeB Z7eeB Z8eeB Z9eeB Z:dZ;dZ<dZ=dZ>dZ?dZ@dZAd ZBd!ZCd"ZDd#ZEd$ZFG d%d&„ d&ejƒZGd'd(„ ZHd)d*„ ZIe JeGjKeGeI¡ e LeGjKeH¡ e MeGjKd+¡ dS ),aŠ  
A Pillow loader for .dds files (S3TC-compressed aka DXTC)
Jerome Leclanche <jerome@leclan.ch>

Documentation:
  https://web.archive.org/web/20170802060935/http://oss.sgi.com/projects/ogl-sample/registry/EXT/texture_compression_s3tc.txt

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/
é    N)ÚBytesIOé   )ÚImageÚ	ImageFile)Úo32leiDDS é   é   é   i   i   i   i  € i  @ i   i   i   i    i @  i €  i    é    é@   iDXT1iDXT3iDXT5é   é   é   éR   éS   éT   éa   éb   éc   c                   @   s$   e Zd ZdZdZdd„ Zdd„ ZdS )ÚDdsImageFileZDDSzDirectDraw Surfacec                 C   s8  t | j d¡ƒstdƒ‚t d| j d¡¡\}|dkrHtdt|ƒ› �ƒ‚| j |d ¡}t|ƒdkrxtdt|ƒ› d�ƒ‚t	|ƒ}t d	| d
¡¡\}}}||f| _
d| _t d	| d
¡¡\}}}	t d| d¡¡ t d| d¡¡\}
}| d¡}t d| d¡¡\}t d| d¡¡}|t@ �rœdd„ t|ƒD ƒ}d}|dk�rP||d 7 }nd| _||d |d  |d  7 }dd| j d|d d d… ddffg| _�n˜|d }d}|d k�rÀd!| _d}�nX|d"k�rØd#| _d$}�n@|d%k�rðd&| _d'}�n(|d(k�rd)| _d*}d| _�n
|d+k�r|d,7 }t d| j d¡¡\}| j d¡ |ttfk�rbd-| _d*}d| _n¢|tk�r~d)| _d*}d| _n†|ttfk�r˜d.| _d/}nl|tk�r¸d.| _d0| jd1< d/}nL|tttfk�rödd| j dd2fg| _|tk�ròd0| jd1< d S td3|› �ƒ‚ntd4t|ƒ› �ƒ‚d5d| j ||| jffg| _d S )6Nr   znot a DDS filez<Ié|   zUnsupported header size éx   zIncomplete header: z bytesz<3Ié   ÚRGBAz<11Ié,   z<2Ir	   z<4Ié   c                 S   s"   i | ]\}}|d dddg| “qS )ÚRÚGÚBÚA© )Ú.0ÚiÚmaskr    r    ú6/tmp/pip-unpacked-wheel-_wxctax1/PIL/DdsImagePlugin.pyÚ
<dictcomp>Š   s      z&DdsImageFile._open.<locals>.<dictcomp>Ú r
   ì      ~ ÚRGBé  ÿ é ÿ  éÿ   Úraw©r   r   r   éÿÿÿÿr   s   DXT1ZDXT1s   DXT3ZDXT3r   s   DXT5ZDXT5é   s   BC5SZBC5Sé   s   DX10é   ZBC5ZBC7é   g]tÑEÝ?Úgamma)r   r   r   zUnimplemented DXGI format zUnimplemented pixel format Zbcn)Ú_acceptÚfpÚreadÚSyntaxErrorÚstructÚunpackÚOSErrorÚreprÚlenr   Ú_sizeÚmodeÚDDPF_RGBÚ	enumerateÚsizeZtileZpixel_formatÚDXGI_FORMAT_BC5_TYPELESSÚDXGI_FORMAT_BC5_UNORMÚDXGI_FORMAT_BC5_SNORMÚDXGI_FORMAT_BC7_TYPELESSÚDXGI_FORMAT_BC7_UNORMÚDXGI_FORMAT_BC7_UNORM_SRGBÚinfoÚDXGI_FORMAT_R8G8B8A8_TYPELESSÚDXGI_FORMAT_R8G8B8A8_UNORMÚDXGI_FORMAT_R8G8B8A8_UNORM_SRGBÚNotImplementedError)ÚselfÚheader_sizeÚheader_bytesÚheaderÚflagsÚheightÚwidthZpitchÚdepthZmipmapsZpfsizeZpfflagsZfourccZbitcountÚmasksÚrawmodeZ
data_startÚnZdxgi_formatr    r    r$   Ú_openq   s–    



*








ý

ÿÿzDdsImageFile._openc                 C   s   d S )Nr    )rM   Úposr    r    r$   Ú	load_seekË   s    zDdsImageFile.load_seekN)Ú__name__Ú
__module__Ú__qualname__ÚformatÚformat_descriptionrX   rZ   r    r    r    r$   r   m   s   Zr   c                 C   s”  | j dkrtd| j › d�ƒ‚| ttƒtdƒ tttB tB tB t	B ƒ t| j
ƒ t| jƒ t| j| j dkrndnd d d	 ƒ td
ƒ td
ƒ td
ƒd  tdƒ t| j dkr²tntƒ td
ƒ t| j dkrÐdndƒ tdƒ tdƒ tdƒ t| j dkrþdnd
ƒ ttƒ td
ƒ td
ƒ td
ƒ td
ƒ ¡ | j dk�r`|  ¡ \}}}}t d||||f¡} t | |dd| j d
| j d d d… d
dffg¡ d S )N)r(   r   zcannot write mode z as DDSr   r   r
   é   r2   r	   r   é   r)   r*   r+   r'   r,   r-   r.   r   )r>   r:   ÚwriteÚo32Ú	DDS_MAGICÚ	DDSD_CAPSÚDDSD_HEIGHTÚ
DDSD_WIDTHÚ
DDSD_PITCHÚDDSD_PIXELFORMATrR   rS   ÚDDS_RGBAr?   ÚDDSCAPS_TEXTUREÚsplitr   Úmerger   Ú_saverA   )Zimr5   ÚfilenameÚrÚgÚbÚar    r    r$   rn   Ï   sj    
ÿÿþûú"ùø	÷

öõôóòñðïîíìëêéÿrn   c                 C   s   | d d… dkS )Nr   s   DDS r    )Úprefixr    r    r$   r4   ó   s    r4   z.dds)NÚ__doc__r8   Úior   r&   r   r   Ú_binaryr   rc   rd   re   rf   rg   rh   ri   ZDDSD_MIPMAPCOUNTZDDSD_LINEARSIZEZ
DDSD_DEPTHZDDSCAPS_COMPLEXrk   ZDDSCAPS_MIPMAPZDDSCAPS2_CUBEMAPZDDSCAPS2_CUBEMAP_POSITIVEXZDDSCAPS2_CUBEMAP_NEGATIVEXZDDSCAPS2_CUBEMAP_POSITIVEYZDDSCAPS2_CUBEMAP_NEGATIVEYZDDSCAPS2_CUBEMAP_POSITIVEZZDDSCAPS2_CUBEMAP_NEGATIVEZZDDSCAPS2_VOLUMEZDDPF_ALPHAPIXELSZ
DDPF_ALPHAZDDPF_FOURCCZDDPF_PALETTEINDEXED8r?   ZDDPF_LUMINANCEZ
DDS_FOURCCZDDS_RGBrj   ZDDS_LUMINANCEZDDS_LUMINANCEAZ	DDS_ALPHAZDDS_PAL8ZDDS_HEADER_FLAGS_TEXTUREZDDS_HEADER_FLAGS_MIPMAPZDDS_HEADER_FLAGS_VOLUMEZDDS_HEADER_FLAGS_PITCHZDDS_HEADER_FLAGS_LINEARSIZEZ
DDS_HEIGHTZ	DDS_WIDTHZDDS_SURFACE_FLAGS_TEXTUREZDDS_SURFACE_FLAGS_MIPMAPZDDS_SURFACE_FLAGS_CUBEMAPZDDS_CUBEMAP_POSITIVEXZDDS_CUBEMAP_NEGATIVEXZDDS_CUBEMAP_POSITIVEYZDDS_CUBEMAP_NEGATIVEYZDDS_CUBEMAP_POSITIVEZZDDS_CUBEMAP_NEGATIVEZZDXT1_FOURCCZDXT3_FOURCCZDXT5_FOURCCrI   rJ   rK   rB   rC   rD   rE   rF   rG   r   rn   r4   Zregister_openr^   Zregister_saveZregister_extensionr    r    r    r$   Ú<module>   sŽ   b$