o
    svXj‚$  ã                   @   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 )ÚDdsImageFileÚDDSzDirectDraw Surfacec                 C   sî  t | j d¡ƒsd}t|ƒ‚t d| j d¡¡\}|dkr(dt|ƒ› �}t|ƒ‚| j |d ¡}t|ƒdkrBd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@ r²|t@ ržd| _nd| _dd| j d| jddffg| _d S |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| _d S |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�r5d,| _d-}d| _n²|d.k�rCd/| _d-}d| _n¤|d0k�rÜ|d17 }t d| j d¡¡\}| j d¡ |ttfv �rmd,| _d-}d| _nz|tk�r{d/| _d-}d| _nl|tk�r‰d2| _d3}d| _n^|tk�r—d4| _d3}d| _nP|ttfv �r¤d5| _d6}nC|tk�r´d5| _d7| jd8< d6}n3|tttfv �rÓdd| j dd9fg| _|tk�rÑd7| jd8< d S d:|› �}t|ƒ‚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 | ]\}}|g d ¢| “qS ))ÚRÚGÚBÚA© )Ú.0ÚiÚmaskr'   r'   úO/var/www/html/myproject/venv/lib/python3.10/site-packages/PIL/DdsImagePlugin.pyÚ
<dictcomp>—   s    z&DdsImageFile._open.<locals>.<dictcomp>Ú ì      ~ ÚRGBé  ÿ é ÿ  éÿ   éÿÿÿÿs   DXT1ÚDXT1s   DXT3ÚDXT3r   s   DXT5ÚDXT5é   s   ATI1ÚBC4s   ATI2ÚBC5é   s   BC5SÚBC5Ss   DX10é   ÚBC6Hé   ÚBC6HSÚBC7é   g]tÑEÝ?Úgamma)r   r   r   zUnimplemented DXGI format zUnimplemented pixel format Úbcn) Ú_acceptÚfpÚreadÚSyntaxErrorÚstructÚunpackÚreprÚOSErrorÚlenr   Ú_sizeÚmodeÚDDPF_LUMINANCEÚDDPF_ALPHAPIXELSÚsizeÚtileÚDDPF_RGBÚ	enumerateÚ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ÚwidthÚpitchÚdepthÚmipmapsÚpfsizeÚpfflagsÚfourccÚbitcountÚmasksÚrawmodeÚ
data_startÚnÚdxgi_formatr'   r'   r+   Ú_opens   sÆ   

"*











ý



ÿzDdsImageFile._openc                 C   s   d S ©Nr'   )rc   Úposr'   r'   r+   Ú	load_seekè   s   zDdsImageFile.load_seekN)Ú__name__Ú
__module__Ú__qualname__ÚformatÚformat_descriptionrw   rz   r'   r'   r'   r+   r   o   s
    ur   c              
   C   sÀ  | j dvrd| j › d�}t|ƒ‚| j }g d¢}| j dv rt}n	t}|d d d… }| j dv r6|tO }| d¡ t|ƒd	 }t|ƒd
k rM| d¡ t|ƒd
k sB| 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 DDS)r0   r1   r2   )r    r   r3   )r   r   r.   r	   r   r   r   rA   é   r
   ó    c                 s   s   � | ]}t |ƒV  qd S rx   )Úo32)r(   r*   r'   r'   r+   Ú	<genexpr>  s   € z_save.<locals>.<genexpr>r   r!   r"   r   )rN   rK   rO   rS   rP   ÚappendrL   Úwriter‚   Ú	DDS_MAGICÚ	DDSD_CAPSÚDDSD_HEIGHTÚ
DDSD_WIDTHÚ
DDSD_PITCHÚDDSD_PIXELFORMATri   rj   ÚjoinÚDDSCAPS_TEXTUREÚsplitr   Úmerger   Ú_saverQ   )ÚimrE   Úfilenamerd   rs   rr   Úpixel_flagsrq   ÚrÚgÚbÚar'   r'   r+   r�   ì   sz   




ÿÿÿþûúùø	÷

öõôóòñðïîíìÿ
(r�   c                 C   s   | d d… dkS )Nr   s   DDS r'   )Úprefixr'   r'   r+   rD     s   rD   z.dds)PÚ__doc__rH   Úior   r-   r   r   Ú_binaryr   r‚   r†   r‡   rˆ   r‰   rŠ   r‹   ÚDDSD_MIPMAPCOUNTÚDDSD_LINEARSIZEÚ
DDSD_DEPTHÚDDSCAPS_COMPLEXr�   ÚDDSCAPS_MIPMAPÚDDSCAPS2_CUBEMAPÚDDSCAPS2_CUBEMAP_POSITIVEXÚDDSCAPS2_CUBEMAP_NEGATIVEXÚDDSCAPS2_CUBEMAP_POSITIVEYÚDDSCAPS2_CUBEMAP_NEGATIVEYÚDDSCAPS2_CUBEMAP_POSITIVEZÚDDSCAPS2_CUBEMAP_NEGATIVEZÚDDSCAPS2_VOLUMErP   Ú
DDPF_ALPHAÚDDPF_FOURCCÚDDPF_PALETTEINDEXED8rS   rO   Ú
DDS_FOURCCÚDDS_RGBÚDDS_RGBAÚDDS_LUMINANCEÚDDS_LUMINANCEAÚ	DDS_ALPHAÚDDS_PAL8ÚDDS_HEADER_FLAGS_TEXTUREÚDDS_HEADER_FLAGS_MIPMAPÚDDS_HEADER_FLAGS_VOLUMEÚDDS_HEADER_FLAGS_PITCHÚDDS_HEADER_FLAGS_LINEARSIZEÚ
DDS_HEIGHTÚ	DDS_WIDTHÚDDS_SURFACE_FLAGS_TEXTUREÚDDS_SURFACE_FLAGS_MIPMAPÚDDS_SURFACE_FLAGS_CUBEMAPÚDDS_CUBEMAP_POSITIVEXÚDDS_CUBEMAP_NEGATIVEXÚDDS_CUBEMAP_POSITIVEYÚDDS_CUBEMAP_NEGATIVEYÚDDS_CUBEMAP_POSITIVEZÚDDS_CUBEMAP_NEGATIVEZÚDXT1_FOURCCÚDXT3_FOURCCÚDXT5_FOURCCr_   r`   ra   rV   rW   rX   rY   rZ   r[   r\   r]   r   r�   rD   Úregister_openr~   Úregister_saveÚregister_extensionr'   r'   r'   r+   Ú<module>   s”    }1