U
    ®&^Z  ã                   @   sp  d Z ddlZddlmZ ddlmZ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	Z-e
Z.eZ/eeB Z0eZ1eeB Z2eeB Z3eeB Z4eeB Z5eeB Z6eeB Z7dZ8dZ9dZ:dZ;dZ<dZ=G dd„ dejƒZ>d d!„ Z?e @e>jAe>e?¡ e Be>jAd"¡ 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Ú	ImageFileiDDS é   é   é   i   i   i   i  € i  @ i   i   i   i    i @  i €  i    é    é@   iDXT1iDXT3iDXT5é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   s\  t  d| j d¡¡\}}|dkr,td| ƒ‚| j |d ¡}t|ƒdkrXtdt|ƒ ƒ‚t|ƒ}t  d| d	¡¡\}}}||f| _d
| _t  d| d	¡¡\}}	}
t  d| d¡¡ t  d| d¡¡\}}| d¡}t  d| d¡¡\}t  d| d¡¡}|d@ rhdd„ t	|ƒD ƒ}d}|dkr.||d 7 }||d |d  |d  7 }dd| j
 d|ddffg| _nð|d }d}|dkrŠd| _d}n¸|d kr d!| _d"}n¢|d#kr¶d$| _d%}nŒ|d&kr6|d'7 }t| j d'¡ƒ}t  d| d¡¡\}}|ttfkrd(| _d)}n,|tkr(d(| _d*| jd+< d)}ntd,| ƒ‚ntd-| ƒ‚d.d| j
 ||fg| _d S )/Nz<IIr   é|   zUnsupported header size %rr   éx   zIncomplete header: %s bytesz<3Ié   ZRGBAz<11Ié,   z<2Iz<Iz<4Ié   r
   c                 S   s"   i | ]\}}|d dddg| “qS )ÚRÚGÚBÚA© )Ú.0ÚiÚmaskr   r   ú6/tmp/pip-install-a1j0c_p1/Pillow/PIL/DdsImagePlugin.pyÚ
<dictcomp>   s      z&DdsImageFile._open.<locals>.<dictcomp>Ú r	   l      ~ i  ÿ i ÿ  éÿ   Úraw)r   r   r   r   s   DXT1ZDXT1s   DXT3ZDXT3r   s   DXT5ZDXT5é   s   DX10é   ZBC7é   g]tÑEÝ?ÚgammazUnimplemented DXGI format %dzUnimplemented pixel format %rZbcn)ÚstructÚunpackÚfpÚreadÚOSErrorÚlenr   Ú_sizeÚmodeÚ	enumerateÚsizeZtileZpixel_formatÚDXGI_FORMAT_BC7_TYPELESSÚDXGI_FORMAT_BC7_UNORMÚDXGI_FORMAT_BC7_UNORM_SRGBÚinfoÚNotImplementedError)ÚselfÚmagicÚheader_sizeÚheader_bytesÚheaderÚflagsÚheightÚwidthZpitchÚdepthZmipmapsZpfsizeZpfflagsZfourccZbitcountÚmasksÚrawmodeZ
data_startÚnZdxt10Zdxgi_formatZ	dimensionr   r   r   Ú_openj   sd    









ÿzDdsImageFile._openc                 C   s   d S )Nr   )r4   Úposr   r   r   Ú	load_seek©   s    zDdsImageFile.load_seekN)Ú__name__Ú
__module__Ú__qualname__ÚformatÚformat_descriptionr@   rB   r   r   r   r   r   f   s   ?r   c                 C   s   | d d… dkS )Nr   s   DDS r   )Úprefixr   r   r   Ú	_validate­   s    rI   z.dds)CÚ__doc__r%   Úior   r   r   r   Z	DDS_MAGICZ	DDSD_CAPSZDDSD_HEIGHTZ
DDSD_WIDTHZ
DDSD_PITCHZDDSD_PIXELFORMATZDDSD_MIPMAPCOUNTZDDSD_LINEARSIZEZ
DDSD_DEPTHZDDSCAPS_COMPLEXZDDSCAPS_TEXTUREZ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_PALETTEINDEXED8ZDDPF_RGBZDDPF_LUMINANCEZ
DDS_FOURCCZDDS_RGBZDDS_RGBAZ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_FOURCCr/   r0   r1   r   rI   Zregister_openrF   Zregister_extensionr   r   r   r   Ú<module>   s|   G