a
    7Xhv%                     @   s  d Z ddlZddlmZ ddlmZ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Z0eZ1eZ2eZ3eeB Z4eZ5eeB Z6eeB Z7eeB Z8eeB Z9eeB Z:eeB Z;dZ<dZ=dZ>dZ?dZ@dZAdZBd ZCd!ZDd"ZEd#ZFd$ZGd%ZHd&ZIG d'd( d(ejZJd)d* ZKd+d, ZLeMeJjNeJeL eOeJjNeK ePeJjNd- 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ImagePalette)o32leiDDS          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   sD  t | jdsd}t|td| jd\}|dkrPdt| }t|| j|d }t|dkrd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@ rd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| _nT|t@ r,d!| _td| jd"| _dd| j ddfg| _n|d }d}|d#krPd$| _d}n|d%krhd&| _d'}n|d(krd)| _d*}n|d+krd,| _d}d| _n|d-v rd.| _d/}d| _nh|d0krd1| _d/}d| _nJ|d2kr|d37 }td| jd\}| jd |ttfv r.d.| _d/}d| _n|tkrJd1| _d/}d| _n|tkrfd4| _d5}d| _n|tkrd6| _d5}d| _n|ttfv rd7| _d8}np|tkrd7| _d9| j d:< d8}nP|t!t"t#fv rdd| j dd;fg| _|t#krd9| j d:< 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 | ]\}}|g d | qS ))RGBA ).0imaskr(   r(   W/var/www/viveiro_mudafortebrasil/venv/lib/python3.9/site-packages/PIL/DdsImagePlugin.py
<dictcomp>       z&DdsImageFile._open.<locals>.<dictcomp>       ~ RGB         Pr   s   DXT1ZDXT1s   DXT3ZDXT3r   s   DXT5ZDXT5   s   ATI1ZBC4)s   ATI2s   BC5UZBC5   s   BC5SZBC5Ss   DX10   ZBC6H   ZBC6HSZBC7   g]tE?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sizemodeZtileDDPF_RGB	enumerateDDPF_PALETTEINDEXED8r   r"   ZpaletteZ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(   )r\   posr(   r(   r,   	load_seek   s    zDdsImageFile.load_seekN)__name__
__module____qualname__formatformat_descriptionri   rl   r(   r(   r(   r,   r   o   s   yr   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 rl|tO }|d t|d	 }t|d
k r|d qx|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)r1   r   r!   r    zcannot write mode z as DDS)r2   r3   r4   )r!   r    r5   )r    r   r0   r
   r	   r   r   r;      r   r.   c                 s   s   | ]}t |V  qd S rj   )o32)r)   r+   r(   r(   r,   	<genexpr>  r.   z_save.<locals>.<genexpr>r   r"   r#   r   )rK   rD   rH   rL   rI   appendrE   writers   	DDS_MAGIC	DDSD_CAPSDDSD_HEIGHT
DDSD_WIDTH
DDSD_PITCHDDSD_PIXELFORMATrb   rc   joinDDSCAPS_TEXTUREsplitr   merger   _saverJ   )Zimr>   filenamer]   rg   rf   Zpixel_flagsre   rgbar(   r(   r,   r      sx    



	

r   c                 C   s   | d d dkS )Nr	   s   DDS r(   )prefixr(   r(   r,   r=   !  s    r=   z.dds)Q__doc__rA   ior   r/   r   r   r   _binaryr   rs   rw   rx   ry   rz   r{   r|   ZDDSD_MIPMAPCOUNTZDDSD_LINEARSIZEZ
DDSD_DEPTHZDDSCAPS_COMPLEXr~   ZDDSCAPS_MIPMAPZDDSCAPS2_CUBEMAPZDDSCAPS2_CUBEMAP_POSITIVEXZDDSCAPS2_CUBEMAP_NEGATIVEXZDDSCAPS2_CUBEMAP_POSITIVEYZDDSCAPS2_CUBEMAP_NEGATIVEYZDDSCAPS2_CUBEMAP_POSITIVEZZDDSCAPS2_CUBEMAP_NEGATIVEZZDDSCAPS2_VOLUMErI   Z
DDPF_ALPHAZDDPF_FOURCCrN   rL   rH   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_FOURCCrX   rY   rZ   rO   rP   rQ   rR   rS   rT   rU   rV   r   r   r=   Zregister_openrp   Zregister_saveZregister_extensionr(   r(   r(   r,   <module>   s    1