U
    ­A›d‚$  ã                   @   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$ZFd%ZGd&ZHG d'd(„ d(ejƒZId)d*„ ZJd+d,„ ZKe LeIjMeIeK¡ e NeIjMeJ¡ e OeIjMd-¡ 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   s  t | j d¡ƒsd}t|ƒ‚t d| j d¡¡\}|dkrPdt|ƒ› �}t|ƒ‚| j |d ¡}t|ƒdkr„dt|ƒ› d�}t|ƒ‚t	|ƒ}t d	| d
¡¡\}}}||f| _
d| _t d	| d
¡¡\}}	}
t d| d¡¡ t d| d¡¡\}}| d¡}t d| d¡¡\}t d| d¡¡}|t@ �rh|t@ �r@d| _nd| _dd| j d| jddffg| _�n˜|t@ �rìdd„ t|ƒD ƒ}d}|t@ �r ||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}�nÔ|d#k�r(d$| _d%}�n¼|d&k�r@d'| _d(}�n¤|d)k�r^d*| _d}d| _�n†|d+k�r|d,| _d-}d| _�nh|d.k�ršd/| _d-}d| _�nJ|d0k�rÎ|d17 }t d| j d¡¡\}| j d¡ |ttfk�rîd,| _d-}d| _nÞ|tk�r
d/| _d-}d| _nÂ|tk�r&d2| _d3}d| _n¦|tk�rBd4| _d3}d| _nŠ|ttfk�r\d5| _d6}np|tk�r|d5| _d7| jd8< d6}nP|tttfk�rºdd| j dd9fg| _|tk�r¶d7| jd8< d S d:|› �}t|ƒ‚nd;t|ƒ› �}t|ƒ‚d<d| j ||| jffg| _d S )=Nr   znot a DDS filez<Ié|   zUnsupported header size éx   zIncomplete header: z bytesz<3Ié   ÚRGBAz<11Ié,   z<2Ir	   z<4Ié   ÚLAÚLÚraw©r   r   r   r   c                 S   s"   i | ]\}}|d dddg| “qS )ÚRÚGÚBÚA© )Ú.0ÚiÚmaskr&   r&   úK/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/PIL/DdsImagePlugin.pyÚ
<dictcomp>—   s      z&DdsImageFile._open.<locals>.<dictcomp>Ú ì      ~ ÚRGBé  ÿ é ÿ  éÿ   éÿÿÿÿs   DXT1ZDXT1s   DXT3ZDXT3r   s   DXT5ZDXT5é   s   ATI1ZBC4s   ATI2ZBC5é   s   BC5SZBC5Ss   DX10é   ZBC6Hé   ZBC6HSZBC7é   g]tÑEÝ?Úgamma)r   r   r   zUnimplemented DXGI format zUnimplemented pixel format Zbcn) Ú_acceptÚfpÚreadÚSyntaxErrorÚstructÚunpackÚreprÚOSErrorÚlenr   Ú_sizeÚmodeÚDDPF_LUMINANCEÚDDPF_ALPHAPIXELSÚsizeZtileÚDDPF_RGBÚ	enumerateZpixel_formatÚDXGI_FORMAT_BC5_TYPELESSÚDXGI_FORMAT_BC5_UNORMÚDXGI_FORMAT_BC5_SNORMÚDXGI_FORMAT_BC6H_UF16ÚDXGI_FORMAT_BC6H_SF16Ú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ÚmsgÚheader_sizeÚheader_bytesÚheaderÚflagsÚheightÚwidthZpitchÚdepthZmipmapsZpfsizeZpfflagsZfourccÚbitcountÚmasksÚrawmodeZ
data_startÚnZdxgi_formatr&   r&   r*   Ú_opens   sÆ    



"

*














ý



ÿzDdsImageFile._openc                 C   s   d S ©Nr&   )rV   Úposr&   r&   r*   Ú	load_seekè   s    zDdsImageFile.load_seekN)Ú__name__Ú
__module__Ú__qualname__ÚformatÚformat_descriptionrc   rf   r&   r&   r&   r*   r   o   s   ur   c              
   C   sº  | j dkr d| j › d�}t|ƒ‚| j }dddg}| j dkr@t}nt}|d d d… }| j d	krn|tO }| d
¡ t|ƒd }t|ƒdk r’| d¡ qz| tt	ƒtdƒ tt
tB tB tB tB ƒ t| jƒ t| jƒ t| j| d d ƒ tdƒ tdƒ tdƒd  tdƒ t|ƒ tdƒ t|ƒ d dd„ |D ƒ¡ ttƒ tdƒ tdƒ tdƒ tdƒ ¡ | j dk�r’|  ¡ \}}	}
}t d|||	|
f¡} t | |dd| j d|ddffg¡ d S )N)r.   r   r   r   zcannot write mode z as DDSr/   r0   r1   )r   r   r2   )r   r   r-   r	   r   r   r   r7   é   r
   ó    c                 s   s   | ]}t |ƒV  qd S rd   )Úo32)r'   r)   r&   r&   r*   Ú	<genexpr>  s     z_save.<locals>.<genexpr>r   r    r!   r   )rC   r@   rD   rG   rE   ÚappendrA   Úwritern   Ú	DDS_MAGICÚ	DDSD_CAPSÚDDSD_HEIGHTÚ
DDSD_WIDTHÚ
DDSD_PITCHÚDDSD_PIXELFORMATr\   r]   ÚjoinÚDDSCAPS_TEXTUREÚsplitr   Úmerger   Ú_saverF   )Zimr:   ÚfilenamerW   ra   r`   Zpixel_flagsr_   ÚrÚgÚbÚar&   r&   r*   r|   ì   sx    




ÿÿþûúùø	÷

öõôóòñðïîíìÿr|   c                 C   s   | d d… dkS )Nr   s   DDS r&   )Úprefixr&   r&   r*   r9     s    r9   z.dds)PÚ__doc__r=   Úior   r,   r   r   Ú_binaryr   rn   rr   rs   rt   ru   rv   rw   ZDDSD_MIPMAPCOUNTZDDSD_LINEARSIZEZ
DDSD_DEPTHZDDSCAPS_COMPLEXry   ZDDSCAPS_MIPMAPZDDSCAPS2_CUBEMAPZDDSCAPS2_CUBEMAP_POSITIVEXZDDSCAPS2_CUBEMAP_NEGATIVEXZDDSCAPS2_CUBEMAP_POSITIVEYZDDSCAPS2_CUBEMAP_NEGATIVEYZDDSCAPS2_CUBEMAP_POSITIVEZZDDSCAPS2_CUBEMAP_NEGATIVEZZDDSCAPS2_VOLUMErE   Z
DDPF_ALPHAZDDPF_FOURCCZDDPF_PALETTEINDEXED8rG   rD   Z
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_FOURCCrR   rS   rT   rI   rJ   rK   rL   rM   rN   rO   rP   r   r|   r9   Zregister_openrj   Zregister_saveZregister_extensionr&   r&   r&   r*   Ú<module>   s’   }1