o
    “jdL  ã                   @  s4  d Z ddlm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!ƒ qseD ]Z"e"jdus“J ‚e ede"j› �e"j!ƒ qŠeD ]Z#e#jdusªJ ‚e ede#j› �e#j!ƒ q¡e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.Z/ej0Z1ej2ej3B ej4B ej5B Z6ej7Z8ej9Z:ej;Z<ej=Z>ej3Z?ej4Z@ejAZBejCejDB ZEejCZFejGejHB ZIejGejJB ZKejGejLB ZMejGejNB ZOejGejPB ZQejGejRB ZSejTZUejVZWejXZYejZZ[ej\Z]ej^Z_ej`ZaejbZcejdZeejfZgejhZiejjZkejlZmejnZoG dd„ dejƒZpG dd„ dejqƒZrd1d(d)„Zsd2d-d.„Zte uepjvepet¡ e wd/er¡ e xepjves¡ e yepjvd0¡ dS )3a†  
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                   @  ó,   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   ú\C:\Users\psant\Downloads\Anu Raj Backend\school\venv\Lib\site-packages\PIL/DdsImagePlugin.pyr      ó    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                   @  r   )
Ú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&   0   r!   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   é	   é
   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   r0   é!   é"   é#   é$   é%   é&   é'   é(   é)   é*   é+   é,   é-   é.   é/   é0   é1   é2   é3   é4   é5   é6   é7   é8   é9   é:   é;   é<   é=   é>   é?   r1   é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    r8   F   sô    r8   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   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   r0   rT   rU   rV   rW   r[   r\   re   rf   rg   ro   rp   rq   rr   r1   ru   rx   ry   r{   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                   @  s(   e Zd ZdZdZddd„Zdd	d
„ZdS )ÚDdsImageFileZDDSzDirectDraw SurfaceÚreturnÚNonec                 C  s  | j d usJ ‚t| j  d¡ƒsd}t|ƒ‚t d| j  d¡¡\}|dkr/dt|ƒ› �}t|ƒ‚| j  |d ¡}t|ƒdkrIdt|ƒ› d�}t|ƒ‚t d	|d d
… ¡\}}}||f| _	d| j
 }t d	|d
d… ¡\}}	}
t d|dd… ¡ t d|dd… ¡\}}}}d}d }|tj@ r¾|tj@ r™d| _d}nd| _d}t d|› d�|dd|d  … ¡}t d|d||f¡g| _d S |tj@ ræ|dkrÌd| _�nš|dkrÚ|tj@ rÚd| _�nŒd|› d|› �}t|ƒ‚|tj@ rÿd| _t d| j  d¡¡| _d| j_�ng|tj@ �r]|d }|tjk�rd| _d | _d!}�nM|tjk�r)d| _d"| _d#}�n=|tjk�r9d| _d$| _d}�n-|tjtjfv �rLd| _d%| _d}�n|tj k�r\d| _d&| _d'}�n
|tj!tj"fv �rnd| _d(| _d'}nø|tj#k�rR|d)7 }t d| j  d¡¡\}| j  d¡ |t$j%t$j&fv �r›d| _d*| _d!}nË|t$j't$j(fv �r­d| _d+| _d#}n¹|t$j)t$j*fv �r¿d| _d,| _d}n§|t$j+t$j,fv �rÑd| _d%| _d}n•|t$j-t$j.fv �rãd| _d(| _d'}nƒ|t$j/k�ròd| _d&| _d'}nt|t$j0k�rd| _d-| _d.}ne|t$j1k�rd| _d/| _d.}nV|t$j2t$j3t$j4fv �r/d| _d0| _d1}|t$j4k�r.d2| j5d3< n7|t$j6t$j7t$j8fv �rId| _|t$j8k�rHd2| j5d3< nd4|› �}t9|ƒ‚d5t|ƒ› �}t9|ƒ‚d6|› �}t9|ƒ‚|�rxt d7|||| jf¡g| _d S t d8|d|�p‚| j¡g| _d S )9Nr   znot a DDS filez<Ié|   zUnsupported header size éx   zIncomplete header: z bytesz<3Ir@   ©r   r   rL   z<11Irv   ú<4Ir†   r   ÚRGBAr6   r9   ú<ÚIÚdds_rgbr   ÚLrD   ÚLAzUnsupported bitcount z for ÚPr'   rÊ   r   rË   r   rÌ   ZBC4rÏ   r:   ÚBC5rH   ZBC1ÚBC2ÚBC3ZBC6Hr;   ZBC6HSZBC7r<   g]tÑEÝ?ÚgammazUnimplemented DXGI format zUnimplemented pixel format zUnknown pixel format flags ÚbcnÚraw):ÚfpÚ_acceptÚreadÚSyntaxErrorÚstructÚunpackÚreprÚOSErrorÚlenÚ_sizeÚsizer/   r6   r2   Ú_moder   Ú_TileZtiler7   r5   r	   ræ   ZpaletteÚmoder4   rÂ   rÊ   Úpixel_formatrË   rÌ   rÎ   rÑ   rÏ   rÐ   rÒ   rÍ   r8   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ÚflagsÚheightÚwidthZextentsÚpitchÚdepthZmipmapsZpfsizeZpfflagsÚfourccÚbitcountÚnÚrawmodeZ
mask_countÚmasksÚoffsetÚdxgi_formatr   r   r    Ú_openN  s  



$



þý
€ý
€


ÿ zDdsImageFile._openÚposÚintc                 C  s   d S )Nr   )rø   r	  r   r   r    Ú	load_seekä  s   zDdsImageFile.load_seekN)rÔ   rÕ   )r	  r
  rÔ   rÕ   )r   r   r   ÚformatÚformat_descriptionr  r  r   r   r   r    rÓ   J  s    
 rÓ   c                   @  s   e Zd ZdZd	dd„ZdS )
ÚDdsRgbDecoderTÚbufferú$bytes | Image.SupportsArrayInterfacerÔ   útuple[int, int]c                 C  s0  | j d usJ ‚| j\}}g }g }|D ]0}d}|dkr6||d ? |d > |kr6|d7 }||d ? |d > |ks&| |¡ | ||? ¡ qtƒ }|d }	| jj| jj t|ƒ }
t|ƒ|
k r‘t 	| j  
|	¡d¡}t|ƒD ] \}}||@ }|t|| r†t||| ? ||  d ƒndƒ7 }qjt|ƒ|
k s\|  |¡ 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ë  s6   
ÿ
ÿýû

zDdsRgbDecoder.decodeN)r  r  rÔ   r  )r   r   r   Z	_pulls_fdr   r   r   r   r    r  è  s    r  ÚimúImage.Imagerç   ú	IO[bytes]Úfilenameústr | bytesrÔ   rÕ   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¡}|r”d}|tjO }| jd d }g d	¢}	tj}
|d
krKtj}d}n¯|dkrUtj}d}n¥|dkr_tj}d}n›tj}|dkrld}tj}nŽ|dkrvd}tj}n„|dkr‹d}tj}| j dkrŠd}t|ƒ‚nod|› �}t|ƒ‚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¢}	n#t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�rH| !t$ %d(|dddd)¡¡ t) *| |t) +|d*| j, d|¡g¡ d S )+N)r6   rÚ   rÞ   rß   zcannot write mode z as DDSr   rõ   rå   r9   r   )r   r   r   r   rÊ   )r   rË   )r   rÌ   )r9   râ   rã   rá   )r:   r6   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Ù   r0   z<5Ir   rØ   )-rô   rî   r   r   r   r   r   rï   ZgetbandsZencoderinfoÚgetr   rþ   r/   r4   rÂ   rÊ   rË   rÌ   rÍ   r8   r±   r³   r·   r   r7   r6   Úsplitr   Úmerger2   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/  ÚprefixÚbytesÚboolc                 C  s
   |   d¡S )Ns   DDS )Ú
startswith)r5  r   r   r    rè   j  s   
rè   rÝ   z.dds)r!  r"  rç   r#  r$  r%  rÔ   rÕ   )r5  r6  rÔ   r7  )zÚ__doc__Ú
__future__r   rë   ÚsysÚenumr   r   Útypingr   Ú r   r   r	   Ú_binaryr
   rÉ   r   r   r,  r-  r   r"   r&   r/   r8   rÂ   Úmodulesr   ÚmoduleÚitemÚnameÚsetattrr  Zitem1Zitem2Zitem3r4   Z
DDS_FOURCCr6   ZDDS_RGBr2   ZDDS_RGBAr7   ZDDS_LUMINANCEZDDS_LUMINANCEAr3   Z	DDS_ALPHAr5   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 
%
]