o
    g$                     @   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@ rd| _nd| _dd| j d| jddffg| _d S |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| _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rd2| _d3}d| _n^|tkrd4| _d3}d| _nP|ttfv rd5| _d6}nC|tkrd5| _d7| jd8< d6}n3|tttfv rdd| j dd9fg| _|tkrd7| 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'   P/home/ubuntu/cloudmapper/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]tE?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