a
    ç´«jÚI  ã                   @  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u�sJ ‚e!edej › �ej"ƒ qîeD ],Z#e#j du�s2J ‚e!ede#j › �e#j"ƒ �qeD ],Z$e$j du�sdJ ‚e!ede$j › �e$j"ƒ �qPeD ],Z%e%j du�s–J ‚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j/Z0ej1Z2ej3ej4B ej5B ej6B Z7ej8Z9ej:Z;ej<Z=ej>Z?ej4Z@ej5ZAejBZCejDejEB ZFejDZGejHejIB ZJejHejKB ZLejHejMB ZNejHejOB ZPejHejQB ZRejHejSB ZTejUZVejWZXejYZZej[Z\ej]Z^ej_Z`ejaZbejcZdejeZfejgZhejiZjejkZlejmZnejoZpG dd„ dejƒZqG dd„ dejrƒZsd d!d"d#d$œd%d&„Ztd'd(d)œd*d+„Zue veqjweqeu¡ e xd,es¡ e yeqjwet¡ e zeqjwd-¡ dS ).a†  
A Pillow plugin 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/laksyashrimp/venv/lib/python3.9/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_SRGBÚBC2_TYPELESSÚ	BC2_UNORMZBC2_UNORM_SRGBÚBC3_TYPELESSÚ	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@ �rn|tj@ �r*d| _d}n
d| _d}t d|› d�| |d ¡¡}t d|d||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@ �rÄ|d }|tjk�r.d| _d| _d}�qÖ|tjk�rNd| _d | _d!}�qÖ|tjk�rnd| _d"| _d}�qÖ|tj tj!fv �r”d| _d#| _d}�qÖ|tj"k�r´d| _d$| _d%}�qÖ|tj#tj$fv �rÚd| _d&| _d%}�qÖ|tj%k�r¬|d'7 }t d| j d¡¡\}| j d¡ |t&j't&j(fv �r6d| _d(| _d}�qÂ|t&j)t&j*fv �r\d| _d)| _d!}�qÂ|t&j+t&j,fv �r‚d| _d*| _d}�qÂ|t&j-t&j.fv �r¨d| _d#| _d}�qÂ|t&j/t&j0fv �rÌd| _d&| _d%}nÞ|t&j1k�rêd| _d$| _d%}nÀ|t&j2k�rd| _d+| _d,}n¢|t&j3k�r&d| _d-| _d,}n„|t&j4t&j5t&j6fv �rdd| _d.| _d/}|t&j6k�rªd0| j7d1< nF|t&j8t&j9t&j:fv �r˜d| _|t&j:k�rªd0| j7d1< nd2|› �}t;|ƒ‚nd3t|ƒ› �}t;|ƒ‚nd4|› �}t;|ƒ‚|�røt d5|||| jf¡g| _nt d6|d|�p| j¡g| _d S )7Nr   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   ÚBC5rF   ZBC1ÚBC2ÚBC3ZBC6Hr9   ZBC6HSZBC7r:   g]tÑEÝ?ÚgammazUnimplemented DXGI format zUnimplemented pixel format zUnknown pixel format flags ÚbcnÚraw)<Ú_acceptÚfpÚreadÚSyntaxErrorÚstructÚunpackÚreprÚOSErrorÚlenÚioÚBytesIOÚ_sizeÚsizer-   r4   r0   Ú_moder   Ú_TileZtiler5   r3   r	   rä   ÚpaletteÚmoder2   rÀ   rÈ   Úpixel_formatrÉ   rÊ   rÌ   rÏ   rÍ   rÎ   rÐ   rË   r6   r®   r­   r¯   r°   r±   r²   r³   r´   rµ   r¶   r·   r¸   r¹   rº   r»   r¼   Úinforª   r«   r¬   ÚNotImplementedError)ÚselfÚmsgÚheader_sizeÚheader_bytesÚheaderÚflagsÚheightÚwidthZextentsÚpitchÚdepthZmipmapsZpfsizeZpfflagsÚfourccÚbitcountÚnÚrawmodeZ
mask_countÚmasksÚoffsetÚ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 )ÚDdsRgbDecoderTz$bytes | Image.SupportsArrayInterfaceztuple[int, int])ÚbufferrÓ   c                 C  s  | j d usJ ‚| 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Ú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vr d| j › d�}t|ƒ‚tjtjB tjB tjB }t|  ¡ ƒd }| j	 
d¡}|�r0d}|tjO }| jd d }g d	¢}	tj}
|d
kr˜tj}d}n–|dkr¬tj}d}n‚|dkrÀtj}d}nntj}|dkrÚd}tj}nT|dkrîd}tj}n@|dk�rd}tj}| j dk�r.d}t|ƒ‚nd|› �}t|ƒ‚nÖd}|tjO }| j| d d }| j d dk}| j d dk�r”tj}
| j }|�rŠg d¢}	ng d¢}	nHtj}
| j d d d… }g d¢}	|�rÜ|  ¡ \}}}}t d ||||f¡} |�rì|
tjO }
|	 |�rúd!nd¡ tj }| !t"t#ƒt$ %d"d#|| j&| j|dd¡ t$j%d$gd%¢R Ž  t$ %d&d'|
||¡ t$j%d&g|	¢R Ž  t$ %d(t'j(dddd¡ ¡ |tjk�r¢| !t$ %d(|dddd)¡¡ t) *| |t) +|d*| j, d|¡g¡ d S )+N)r4   rØ   rÜ   rÝ   zcannot write mode z as DDSr   rö   rã   r7   r   )r   r   r   r   rÈ   )r   rÉ   )r   rÊ   )r7   rà   rá   rß   )r8   r4   z#only RGB mode can be written as BC5zcannot write pixel format rä   r:   r  ÚAr   rÜ   )r  r  r  )ì      ~ r$  r$  )i  ÿ i ÿ  r  rØ   r$  z<7IrÔ   Z11I)r   r   r   r   r   r   r   r   r   r   r   r×   r.   z<5Ir   rÖ   )-rõ   rì   r   r   r   r   r   rí   ZgetbandsZencoderinfoÚgetr   r   r-   r2   rÀ   rÈ   rÉ   rÊ   rË   r6   r¯   r±   rµ   r   r5   r4   Úsplitr   Úmerger0   r  r©   ÚwriteÚo32Ú	DDS_MAGICré   Úpackrÿ   r    r"   r   Ú_saveró   rñ   )r!  ræ   r"  rú   rþ   r  rö   Z
codec_namer  Z	rgba_maskZpixel_flagsr  r  r	  ÚalphaÚrÚgÚbÚar   r   r   r,    s¦    









øÿõóòñÿþr,  ÚbytesÚbool)ÚprefixrÓ   c                 C  s
   |   d¡S )Ns   DDS )Ú
startswith)r4  r   r   r   rå   i  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ÚnameÚ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
 #]