U
    M»{jB  ã                   @  sZ  d Z ddlmZ ddlZddlZddlZddlmZmZ ddl	m
Z
 ddlmZmZmZ ddlmZ dd	lmZ dd
lmZ dZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZeje ZeD ]*Zej dk	�st!‚e"edej › �ej#ƒ qîeD ],Z$e$j dk	�s2t!‚e"ede$j › �e$j#ƒ �qeD ],Z%e%j dk	�sdt!‚e"ede%j › �e%j#ƒ �qPeD ],Z&e&j dk	�s–t!‚e"ede&j › �e&j#ƒ �q‚ej'Z(ej)Z*ej)ej+B Z,ej-Z.ej-ej+B Z/ej0Z1ej2Z3ej4ej5B ej6B ej7B Z8ej9Z:ej;Z<ej=Z>ej?Z@ej5ZAej6ZBejCZDejEejFB ZGejEZHejIejJB ZKejIejLB ZMejIejNB ZOejIejPB ZQejIejRB ZSejIejTB ZUejVZWejXZYejZZ[ej\Z]ej^Z_ej`ZaejbZcejdZeejfZgejhZiejjZkejlZmejnZoejpZqG dd„ dejƒZrG dd„ dejsƒZtd d!d"d#d$œd%d&„Zud'd(d)œd*d+„Zve werjxerev¡ e yd,et¡ e zerjxeu¡ e {erjxd-¡ 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/
é    )ÚannotationsN)ÚIntEnumÚIntFlag)ÚIOé   )ÚImageÚ	ImageFileÚImagePalette)Úi32le)Úo8)Úo32leiDDS c                   @  s,   e Zd ZdZdZdZdZdZdZdZ	dZ
d	S )
ÚDDSDr   é   é   é   é   é   i   i  € N)Ú__name__Ú
__module__Ú__qualname__ÚCAPSÚHEIGHTÚWIDTHÚPITCHÚPIXELFORMATÚMIPMAPCOUNTÚ
LINEARSIZEÚDEPTH© r   r   úQ/var/www/html/bwave/python/venv/lib/python3.8/site-packages/PIL/DdsImagePlugin.pyr      s   r   c                   @  s   e Zd ZdZdZdZdS )ÚDDSCAPSr   r   i  @ N)r   r   r   ÚCOMPLEXÚTEXTUREÚMIPMAPr   r   r   r   r    +   s   r    c                   @  s,   e Zd ZdZdZdZdZdZdZdZ	dZ
d	S )
ÚDDSCAPS2i   é   i   r   i    i @  i €  i    N)r   r   r   ÚCUBEMAPÚCUBEMAP_POSITIVEXÚCUBEMAP_NEGATIVEXÚCUBEMAP_POSITIVEYÚCUBEMAP_NEGATIVEYÚCUBEMAP_POSITIVEZÚCUBEMAP_NEGATIVEZZVOLUMEr   r   r   r   r$   1   s   r$   c                   @  s$   e Zd ZdZdZdZdZdZdZdS )ÚDDPFr   r   r   é    é@   r   N)	r   r   r   ÚALPHAPIXELSÚALPHAÚFOURCCÚPALETTEINDEXED8ÚRGBÚ	LUMINANCEr   r   r   r   r-   =   s   r-   c                   @  sð  e 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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.Z0d/Z1d0Z2d1Z3d2Z4d3Z5d4Z6d5Z7d6Z8d7Z9d8Z:d9Z;d:Z<d;Z=d<Z>d=Z?d>Z@d?ZAd@ZBdAZCdBZDdCZEdDZFdEZGdFZHdGZIdHZJdIZKdJZLdKZMdLZNdMZOdNZPdOZQdPZRdQZSdRZTdSZUdTZVdUZWdVZXdWZYdXZZdYZ[dZZ\d[Z]d\Z^d]Z_d^Z`d_Zad`ZbdaZcdbZddcZeddZfdeZgdfZhdgZidhZjdiZkdjZldkZmdlZndmZodnZpdoZqdpZrdqZsdrZtdsZudtZvduZwdvZxdwZydxZzdyZ{dzS ){ÚDXGI_FORMATr   r   r   é   r   é   é   é   r   é	   é
   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   r.   é!   é"   é#   é$   é%   é&   é'   é(   é)   é*   é+   é,   é-   é.   é/   é0   é1   é2   é3   é4   é5   é6   é7   é8   é9   é:   é;   é<   é=   é>   é?   r/   éA   éB   éC   éD   éE   éF   éG   éH   éI   éJ   éK   éL   éM   éN   éO   éP   éQ   éR   éS   éT   éU   éV   éW   éX   éY   éZ   é[   é\   é]   é^   é_   é`   éa   éb   éc   éd   ée   éf   ég   éh   éi   éj   ék   él   ém   én   éo   ép   éq   ér   és   é‚   éƒ   é„   é½   é¾   N)|r   r   r   ÚUNKNOWNZR32G32B32A32_TYPELESSZR32G32B32A32_FLOATZR32G32B32A32_UINTZR32G32B32A32_SINTZR32G32B32_TYPELESSZR32G32B32_FLOATZR32G32B32_UINTZR32G32B32_SINTZR16G16B16A16_TYPELESSZR16G16B16A16_FLOATZR16G16B16A16_UNORMZR16G16B16A16_UINTZR16G16B16A16_SNORMZR16G16B16A16_SINTZR32G32_TYPELESSZR32G32_FLOATZR32G32_UINTZR32G32_SINTZR32G8X24_TYPELESSZD32_FLOAT_S8X24_UINTZR32_FLOAT_X8X24_TYPELESSZX32_TYPELESS_G8X24_UINTZR10G10B10A2_TYPELESSZR10G10B10A2_UNORMZR10G10B10A2_UINTZR11G11B10_FLOATÚR8G8B8A8_TYPELESSÚR8G8B8A8_UNORMÚR8G8B8A8_UNORM_SRGBZR8G8B8A8_UINTZR8G8B8A8_SNORMZR8G8B8A8_SINTZR16G16_TYPELESSZR16G16_FLOATZR16G16_UNORMZR16G16_UINTZR16G16_SNORMZR16G16_SINTZR32_TYPELESSZ	D32_FLOATZ	R32_FLOATZR32_UINTZR32_SINTZR24G8_TYPELESSZD24_UNORM_S8_UINTZR24_UNORM_X8_TYPELESSZX24_TYPELESS_G8_UINTZR8G8_TYPELESSZ
R8G8_UNORMZ	R8G8_UINTZ
R8G8_SNORMZ	R8G8_SINTZR16_TYPELESSZ	R16_FLOATZ	D16_UNORMZ	R16_UNORMZR16_UINTZ	R16_SNORMZR16_SINTZR8_TYPELESSZR8_UNORMZR8_UINTZR8_SNORMZR8_SINTZA8_UNORMZR1_UNORMZR9G9B9E5_SHAREDEXPZR8G8_B8G8_UNORMZG8R8_G8B8_UNORMÚBC1_TYPELESSÚ	BC1_UNORMZBC1_UNORM_SRGBZBC2_TYPELESSZ	BC2_UNORMZBC2_UNORM_SRGBZBC3_TYPELESSZ	BC3_UNORMZBC3_UNORM_SRGBÚBC4_TYPELESSÚ	BC4_UNORMZ	BC4_SNORMÚBC5_TYPELESSÚ	BC5_UNORMÚ	BC5_SNORMZB5G6R5_UNORMZB5G5R5A1_UNORMZB8G8R8A8_UNORMZB8G8R8X8_UNORMZR10G10B10_XR_BIAS_A2_UNORMZB8G8R8A8_TYPELESSZB8G8R8A8_UNORM_SRGBZB8G8R8X8_TYPELESSZB8G8R8X8_UNORM_SRGBZBC6H_TYPELESSÚ	BC6H_UF16Ú	BC6H_SF16ÚBC7_TYPELESSÚ	BC7_UNORMÚBC7_UNORM_SRGBZAYUVZY410ZY416ZNV12ZP010ZP016Z
OPAQUE_420ÚYUY2ZY210ZY216ZNV11ZAI44ZIA44ÚP8ÚA8P8ZB4G4R4A4_UNORMZP208ZV208ZV408ZSAMPLER_FEEDBACK_MIN_MIP_OPAQUEZ'SAMPLER_FEEDBACK_MIP_REGION_USED_OPAQUEr   r   r   r   r6   G   sò   r6   c                   @  sp  e 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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.Z0d/Z1d0Z2d1Z3d2Z4d3Z5d4Z6d5Z7d6Z8d7Z9e:d8ƒZ;e:d9ƒZ<e:d:ƒZ=e:d;ƒZ>e:d<ƒZ?e:d=ƒZ@e:d>ƒZAe:d?ƒZBe:d@ƒZCe:dAƒZDe:dBƒZEe:dCƒZFe:dDƒZGe:dEƒZHe:dFƒZIe:dGƒZJe:dHƒZKdIS )JÚD3DFMTr   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   r.   rR   rS   rT   rU   rY   rZ   rc   rd   re   rm   rn   ro   rp   r/   rs   rv   rw   ry   r{   r}   r   r€   r‚   rƒ   r„   r…   r�   r”   r•   r–   rž   rŸ   r    r¡   r¢   r£   ét   éu   év   éw   éÇ   s   UYVYs   RGBGs   YUY2s   GRGBs   DXT1s   DXT2s   DXT3s   DXT4s   DXT5s   DX10s   BC4Ss   BC4Us   BC5Ss   BC5Us   ATI1s   ATI2s   MET1N)Lr   r   r   r©   ZR8G8B8ZA8R8G8B8ZX8R8G8B8ZR5G6B5ZX1R5G5B5ZA1R5G5B5ZA4R4G4B4ZR3G3B2ZA8ZA8R3G3B2ZX4R4G4B4ZA2B10G10R10ZA8B8G8R8ZX8B8G8R8ZG16R16ZA2R10G10B10ZA16B16G16R16r»   rº   ZL8ZA8L8ZA4L4ZV8U8ZL6V5U5ZX8L8V8U8ZQ8W8V8U8ZV16U16ZA2W10V10U10ZD16_LOCKABLEZD32ZD15S1ZD24S8ZD24X8ZD24X4S4ZD16ZD32F_LOCKABLEZD24FS8ZD32_LOCKABLEZS8_LOCKABLEZL16Z
VERTEXDATAZINDEX16ZINDEX32ZQ16W16V16U16ZR16FZG16R16FZA16B16G16R16FZR32FZG32R32FZA32B32G32R32FZCxV8U8ÚA1ZA2B10G10R10_XR_BIASZBINARYBUFFERÚi32ZUYVYZ	R8G8_B8G8r¹   Z	G8R8_G8B8ÚDXT1ZDXT2ÚDXT3ZDXT4ÚDXT5ÚDX10ZBC4SÚBC4UÚBC5SÚBC5UÚATI1ÚATI2ZMULTI2_ARGB8r   r   r   r   r¼   Ã   s�   r¼   ZDDSD_ZDDSCAPS_Z	DDSCAPS2_ZDDPF_c                   @  s2   e Zd ZdZdZddœdd„Zdddœd	d
„ZdS )ÚDdsImageFileZDDSzDirectDraw SurfaceÚNone)Úreturnc                 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| j }t d	| d
¡¡\}	}
}t d| d¡¡ t d| d¡¡\}}}}d}d }|tj@ �rj|tj@ �r*d| _d}n
d| _d}t d|› d�| |d ¡¡}d|d||ffg| _d S |tj@ �rÂ|dk�rˆd| _n6|dk�r¦|tj@ �r¦d| _nd|› d|› �}t|ƒ‚�nÄ|tj@ �röd| _t d| j d¡¡| _d| j_�n�|tj@ �rt|d }|tjk�r*d| _d| _d}�q†|tjk�rJd| _d | _d!}�q†|tjk�rjd| _d"| _d}�q†|tjtjfk�r�d| _d#| _d}�q†|tj k�r°d| _d$| _d%}�q†|tj!tj"fk�rÖd| _d&| _d%}�q†|tj#k�r\|d'7 }t d| j d¡¡\}| j d¡ |t$j%t$j&fk�r2d| _d(| _d}�qr|t$j't$j(fk�rXd| _d#| _d}�qr|t$j)t$j*fk�r|d| _d&| _d%}nÞ|t$j+k�ršd| _d$| _d%}nÀ|t$j,k�r¸d| _d)| _d*}n¢|t$j-k�rÖd| _d+| _d*}n„|t$j.t$j/t$j0fk�rd| _d,| _d-}|t$j0k�rZd.| j1d/< nF|t$j2t$j3t$j4fk�rHd| _|t$j4k�rZd.| j1d/< nd0|› �}t5|ƒ‚nd1t|ƒ› �}t5|ƒ‚nd2|› �}t5|ƒ‚|�r¨t6 7d3|||| jf¡g| _nt6 7d4|d|�p¼| j¡g| _d S )5Nr   znot a DDS filez<Ié|   zUnsupported header size éx   zIncomplete header: z bytesz<3Ir>   ©r   r   z<11Ir]   ú<4IrB   r   ÚRGBAr4   r7   ú<ÚIÚdds_rgbr   ÚLÚLAzUnsupported bitcount z for ÚPr%   rÄ   r   rÅ   r   rÆ   ZBC4rÉ   r8   ZBC5rF   ZBC1ZBC6Hr9   ZBC6HSZBC7r:   g]tÑEÝ?ÚgammazUnimplemented DXGI format zUnimplemented pixel format zUnknown pixel format flags ZbcnÚraw)8Ú_acceptÚfpÚreadÚSyntaxErrorÚstructÚunpackÚreprÚOSErrorÚlenÚioÚBytesIOÚ_sizeÚsizer-   r4   r0   Ú_modeZtiler5   r3   r	   rÜ   ÚpaletteÚmoder2   r¼   rÄ   Zpixel_formatrÅ   rÆ   rÈ   rË   rÉ   rÊ   rÌ   rÇ   r6   r®   r­   r¯   r°   r±   r²   r³   r´   rµ   r¶   r·   r¸   Úinforª   r«   r¬   ÚNotImplementedErrorr   Ú_Tile)ÚselfÚmsgÚheader_sizeÚheader_bytesÚheaderÚflagsÚheightÚwidthZextentsÚpitchÚdepthZmipmapsZpfsizeZpfflagsZfourccÚbitcountÚnÚrawmodeZ
mask_countÚmasksÚoffsetZdxgi_formatr   r   r   Ú_openO  sú    



þýý



ÿzDdsImageFile._openÚint)ÚposrÏ   c                 C  s   d S )Nr   )rð   r  r   r   r   Ú	load_seekÝ  s    zDdsImageFile.load_seekN)r   r   r   ÚformatÚformat_descriptionrÿ   r  r   r   r   r   rÍ   K  s
    rÍ   c                   @  s    e Zd ZdZdddœdd„ZdS )ÚDdsRgbDecoderTÚbytesztuple[int, int])ÚbufferrÏ   c                 C  s  | j d k	st‚| j\}}g }g }|D ]J}d}|dkrV||d ? |d > |krV|d7 }q4| |¡ | ||? ¡ q$tƒ }|d }	| jj| jj t|ƒ }
t|ƒ|
k röt	 
| j  |	¡d¡}t|ƒD ]4\}}||@ }|tt	||| ? ||  d ƒƒ7 }q¾q–|  |¡ dS )Nr   r   r   Úlittleéÿ   )éÿÿÿÿr   )ÚfdÚAssertionErrorÚargsÚappendÚ	bytearrayÚstateZxsizeZysizerå   r   Ú
from_bytesrß   Ú	enumerater   Z
set_as_raw)rð   r  rú   rý   Zmask_offsetsZmask_totalsÚmaskrþ   ÚdataZ	bytecountZdest_lengthÚvalueÚiZmasked_valuer   r   r   Údecodeä  s.    


ÿ

zDdsRgbDecoder.decodeN)r   r   r   Z	_pulls_fdr  r   r   r   r   r  á  s   r  zImage.Imagez	IO[bytes]zstr | bytesrÎ   )ÚimrÞ   ÚfilenamerÏ   c                 C  s¦  | j dkr d| j › d�}t|ƒ‚| j d dk}| j d dkrdtj}| j }|rXdddg}q¬d	d	d	g}nHtj}| j d d d… }d
ddg}|r¬|  ¡ \}}	}
}t d|||	|
f¡} |rº|tjO }| 	|rÆd	nd¡ t
jt
jB t
jB t
jB t
jB }t|  ¡ ƒd }| j| d d }| ttƒt dd|| j| j|dd¡ tjddžŽ  t dd|d|¡ tjd|žŽ  t dtjdddd¡ ¡ t | |t dd| j d|ddf¡g¡ d S )N)r4   rÔ   rØ   rÙ   zcannot write mode z as DDSr
  ÚAr   rØ   r	  l      ~ i  ÿ i ÿ  rÔ   r   r:   z<7IrÐ   Ú11I)r   r   r   r   r   r   r   r   r   r   r   rÓ   r.   z<5IrÜ   rÒ   r   )r  )rÓ   )rì   rä   r-   r5   r4   Úsplitr   Úmerger0   r  r   r   r   r   r   r   rå   Zgetbandsr÷   ÚwriteÚo32Ú	DDS_MAGICrá   Úpackrö   r    r"   r   Ú_saverï   ré   )r  rÞ   r  rñ   ÚalphaZpixel_flagsrü   Z	rgba_maskÚrÚgÚbÚarõ   rú   rø   r   r   r   r"    sb    


øÿõóòñÿ  ÿr"  r  Úbool)ÚprefixrÏ   c                 C  s   | d d… dkS )Nr   s   DDS r   )r)  r   r   r   rÝ   8  s    rÝ   r×   z.dds)|Ú__doc__Ú
__future__r   ræ   rá   ÚsysÚenumr   r   Útypingr   Ú r   r   r	   Ú_binaryr
   rÃ   r   r   r  r   r   r    r$   r-   r6   r¼   Úmodulesr   ÚmoduleÚitemÚnamer  Úsetattrr  Zitem1Zitem2Zitem3r2   Z
DDS_FOURCCr4   ZDDS_RGBr0   ZDDS_RGBAr5   ZDDS_LUMINANCEZDDS_LUMINANCEAr1   Z	DDS_ALPHAr3   ZDDS_PAL8r   r   r   r   ZDDS_HEADER_FLAGS_TEXTUREr   ZDDS_HEADER_FLAGS_MIPMAPr   ZDDS_HEADER_FLAGS_VOLUMEr   ZDDS_HEADER_FLAGS_PITCHr   ZDDS_HEADER_FLAGS_LINEARSIZEZ
DDS_HEIGHTZ	DDS_WIDTHr"   ZDDS_SURFACE_FLAGS_TEXTUREr!   r#   ZDDS_SURFACE_FLAGS_MIPMAPZDDS_SURFACE_FLAGS_CUBEMAPr&   r'   ZDDS_CUBEMAP_POSITIVEXr(   ZDDS_CUBEMAP_NEGATIVEXr)   ZDDS_CUBEMAP_POSITIVEYr*   ZDDS_CUBEMAP_NEGATIVEYr+   ZDDS_CUBEMAP_POSITIVEZr,   ZDDS_CUBEMAP_NEGATIVEZrÄ   ZDXT1_FOURCCrÅ   ZDXT3_FOURCCrÆ   ZDXT5_FOURCCrª   ZDXGI_FORMAT_R8G8B8A8_TYPELESSr«   ZDXGI_FORMAT_R8G8B8A8_UNORMr¬   ZDXGI_FORMAT_R8G8B8A8_UNORM_SRGBr±   ZDXGI_FORMAT_BC5_TYPELESSr²   ZDXGI_FORMAT_BC5_UNORMr³   ZDXGI_FORMAT_BC5_SNORMr´   ZDXGI_FORMAT_BC6H_UF16rµ   ZDXGI_FORMAT_BC6H_SF16r¶   ZDXGI_FORMAT_BC7_TYPELESSr·   ZDXGI_FORMAT_BC7_UNORMr¸   ZDXGI_FORMAT_BC7_UNORM_SRGBrÍ   Z	PyDecoderr  r"  rÝ   Zregister_openr  Zregister_decoderZregister_saveZregister_extensionr   r   r   r   Ú<module>   s˜   
|M
 #4