o
    ë6Wj�J  ã                   @  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   úa/home/esfera/Documents/content_generation/venv/lib/python3.10/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_NEGATIVEZÚ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    r0   <   s    r0   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   é	   é
   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   r1   é!   é"   é#   é$   é%   é&   é'   é(   é)   é*   é+   é,   é-   é.   é/   é0   é1   é2   é3   é4   é5   é6   é7   é8   é9   é:   é;   é<   é=   é>   é?   r2   é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   ÚUNKNOWNÚR32G32B32A32_TYPELESSÚR32G32B32A32_FLOATÚR32G32B32A32_UINTÚR32G32B32A32_SINTÚR32G32B32_TYPELESSÚR32G32B32_FLOATÚR32G32B32_UINTÚR32G32B32_SINTÚR16G16B16A16_TYPELESSÚR16G16B16A16_FLOATÚR16G16B16A16_UNORMÚR16G16B16A16_UINTÚR16G16B16A16_SNORMÚR16G16B16A16_SINTÚR32G32_TYPELESSÚR32G32_FLOATÚR32G32_UINTÚR32G32_SINTÚR32G8X24_TYPELESSÚD32_FLOAT_S8X24_UINTÚR32_FLOAT_X8X24_TYPELESSÚX32_TYPELESS_G8X24_UINTÚR10G10B10A2_TYPELESSÚR10G10B10A2_UNORMÚR10G10B10A2_UINTÚR11G11B10_FLOATÚR8G8B8A8_TYPELESSÚR8G8B8A8_UNORMÚR8G8B8A8_UNORM_SRGBÚR8G8B8A8_UINTÚR8G8B8A8_SNORMÚR8G8B8A8_SINTÚR16G16_TYPELESSÚR16G16_FLOATÚR16G16_UNORMÚR16G16_UINTÚR16G16_SNORMÚR16G16_SINTÚR32_TYPELESSÚ	D32_FLOATÚ	R32_FLOATÚR32_UINTÚR32_SINTÚR24G8_TYPELESSÚD24_UNORM_S8_UINTÚR24_UNORM_X8_TYPELESSÚX24_TYPELESS_G8_UINTÚR8G8_TYPELESSÚ
R8G8_UNORMÚ	R8G8_UINTÚ
R8G8_SNORMÚ	R8G8_SINTÚR16_TYPELESSÚ	R16_FLOATÚ	D16_UNORMÚ	R16_UNORMÚR16_UINTÚ	R16_SNORMÚR16_SINTÚR8_TYPELESSÚR8_UNORMÚR8_UINTÚR8_SNORMÚR8_SINTÚA8_UNORMÚR1_UNORMÚR9G9B9E5_SHAREDEXPÚR8G8_B8G8_UNORMÚG8R8_G8B8_UNORMÚBC1_TYPELESSÚ	BC1_UNORMÚBC1_UNORM_SRGBÚBC2_TYPELESSÚ	BC2_UNORMÚBC2_UNORM_SRGBÚBC3_TYPELESSÚ	BC3_UNORMÚBC3_UNORM_SRGBÚBC4_TYPELESSÚ	BC4_UNORMÚ	BC4_SNORMÚBC5_TYPELESSÚ	BC5_UNORMÚ	BC5_SNORMÚB5G6R5_UNORMÚB5G5R5A1_UNORMÚB8G8R8A8_UNORMÚB8G8R8X8_UNORMÚR10G10B10_XR_BIAS_A2_UNORMÚB8G8R8A8_TYPELESSÚB8G8R8A8_UNORM_SRGBÚB8G8R8X8_TYPELESSÚB8G8R8X8_UNORM_SRGBÚBC6H_TYPELESSÚ	BC6H_UF16Ú	BC6H_SF16ÚBC7_TYPELESSÚ	BC7_UNORMÚBC7_UNORM_SRGBÚAYUVÚY410ÚY416ÚNV12ÚP010ÚP016Ú
OPAQUE_420ÚYUY2ÚY210ÚY216ÚNV11ÚAI44ÚIA44ÚP8ÚA8P8ÚB4G4R4A4_UNORMÚP208ÚV208ÚV408ÚSAMPLER_FEEDBACK_MIN_MIP_OPAQUEÚ'SAMPLER_FEEDBACK_MIP_REGION_USED_OPAQUEr   r   r   r    r9   F   sô    r9   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   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   r1   rU   rV   rW   rX   r\   r]   rf   rg   rh   rp   rq   rr   rs   r2   rv   ry   rz   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¬   ÚR8G8B8ÚA8R8G8B8ÚX8R8G8B8ÚR5G6B5ÚX1R5G5B5ÚA1R5G5B5ÚA4R4G4B4ÚR3G3B2ÚA8ÚA8R3G3B2ÚX4R4G4B4ÚA2B10G10R10ÚA8B8G8R8ÚX8B8G8R8ÚG16R16ÚA2R10G10B10ÚA16B16G16R16r  r  ÚL8ÚA8L8ÚA4L4ÚV8U8ÚL6V5U5ÚX8L8V8U8ÚQ8W8V8U8ÚV16U16ÚA2W10V10U10ÚD16_LOCKABLEÚD32ÚD15S1ÚD24S8ÚD24X8ÚD24X4S4ÚD16ÚD32F_LOCKABLEÚD24FS8ÚD32_LOCKABLEÚS8_LOCKABLEÚL16Ú
VERTEXDATAÚINDEX16ÚINDEX32ÚQ16W16V16U16ÚR16FÚG16R16FÚA16B16G16R16FÚR32FÚG32R32FÚA32B32G32R32FÚCxV8U8ÚA1ÚA2B10G10R10_XR_BIASÚBINARYBUFFERÚi32ÚUYVYÚ	R8G8_B8G8r  Ú	G8R8_G8B8ÚDXT1ÚDXT2ÚDXT3ÚDXT4ÚDXT5ÚDX10ÚBC4SÚBC4UÚBC5SÚBC5UÚATI1ÚATI2ÚMULTI2_ARGB8r   r   r   r    r%  Â   s’    r%  ÚDDSD_ÚDDSCAPS_Ú	DDSCAPS2_ÚDDPF_c                   @  s(   e Zd ZdZdZddd„Zdd	d
„ZdS )ÚDdsImageFileÚ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<3IrA   ©r   r   rM   z<11Irw   ú<4Ir‡   r   ÚRGBAr7   r:   ú<ÚIÚdds_rgbr   ÚLrE   ÚLAzUnsupported bitcount z for ÚPr'   rc  r   re  r   rg  ÚBC4rk  r;   ÚBC5rI   ÚBC1ÚBC2ÚBC3ÚBC6Hr<   ÚBC6HSÚ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Úsizer0   r7   r3   Ú_moder   Ú_TileÚtiler8   r6   r	   r�  ÚpaletteÚmoder5   r%  rc  Úpixel_formatre  rg  rj  rm  rk  rl  rn  rh  r9   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ÚwidthÚextentsÚpitchÚdepthÚmipmapsÚpfsizeÚpfflagsÚfourccÚbitcountÚnÚrawmodeÚ
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)rv  rw  )r·  r¸  rv  rw  )r   r   r   ÚformatÚformat_descriptionr¶  r¹  r   r   r   r    rt  J  s    
 rt  c                   @  s   e Zd ZdZd	dd„ZdS )
ÚDdsRgbDecoderTÚbufferúImage.DecoderInputrv  útuple[int, int]c                 C  sT  | j \}}tƒ }|d }|s|  |¡ dS g }g }|D ]0}d}	|dkr?||	d ? |	d > |kr?|	d7 }	||	d ? |	d > |ks/| |	¡ | ||	? ¡ q| jd usSJ ‚| jj| jj t|ƒ }
t|ƒ|
k r£| j 	|¡}t|ƒ|k rrn1t
 |d¡}t|ƒD ] \}}||@ }|t|| r˜t
||| ? ||  d ƒndƒ7 }q|t|ƒ|
k se|  |¡ dS )Nr   )éÿÿÿÿr   r   r   Úlittleéÿ   )ÚargsÚ	bytearrayÚ
set_as_rawÚappendÚfdÚstateÚxsizeÚysizer–  r�  r¸  Ú
from_bytesÚ	enumerater   )r¡  r½  r¯  r³  ÚdataÚ	bytecountÚmask_offsetsÚmask_totalsÚmaskr´  Údest_lengthÚ
bytes_readÚvalueÚiÚmasked_valuer   r   r    Údecodeë  sB   

ÿ
ÿýø
zDdsRgbDecoder.decodeN)r½  r¾  rv  r¿  )r   r   r   Ú	_pulls_fdr×  r   r   r   r    r¼  è  s    r¼  ÚimúImage.ImagerŽ  ú	IO[bytes]Úfilenameústr | bytesrv  rw  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)r7   r|  r€  r�  zcannot write mode z as DDSr   rž  rŒ  r:   r   )r   r   r   r   rc  )r   re  )r   rg  )r:   r†  r‡  r„  )r;   r7   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<7Irx  Ú11I)r   r   r   r   r   r   r   r   r   r   r   r{  r1   z<5Ir   rz  )-r�  r•  r   r   r   r   r   r–  ÚgetbandsÚencoderinfoÚgetr   r§  r0   r5   r%  rc  re  rg  rh  r9   rõ   rø   rþ   r   r8   r7   Úsplitr   Úmerger3   rÆ  r¬   ÚwriteÚo32Ú	DDS_MAGICr’  Úpackr¦  r"   r$   r   Ú_saverš  r˜  )rÙ  rŽ  rÜ  r¢  r¥  r¯  rž  Ú
codec_namer©  Ú	rgba_maskÚpixel_flagsr®  rÃ  rµ  ÚalphaÚrÚgÚbÚar   r   r    rê    s¨   


þ




øÿõóòñÿþ&rê  ÚprefixÚbytesÚboolc                 C  s
   |   d¡S )Ns   DDS )Ú
startswith)ró  r   r   r    r�  q  s   
r�  r  z.dds)rÙ  rÚ  rŽ  rÛ  rÜ  rÝ  rv  rw  )ró  rô  rv  rõ  )zÚ__doc__Ú
__future__r   r’  ÚsysÚenumr   r   Útypingr   Ú r   r   r	   Ú_binaryr
   r_  r   r   rç  rè  r   r"   r&   r0   r9   r%  Úmodulesr   ÚmoduleÚitemÚnameÚsetattrrÔ  Úitem1Úitem2Úitem3r5   Ú
DDS_FOURCCr7   ÚDDS_RGBr3   ÚDDS_RGBAr8   ÚDDS_LUMINANCEÚDDS_LUMINANCEAr4   Ú	DDS_ALPHAr6   ÚDDS_PAL8r   r   r   r   ÚDDS_HEADER_FLAGS_TEXTUREr   ÚDDS_HEADER_FLAGS_MIPMAPr   ÚDDS_HEADER_FLAGS_VOLUMEr   ÚDDS_HEADER_FLAGS_PITCHr   ÚDDS_HEADER_FLAGS_LINEARSIZEÚ
DDS_HEIGHTÚ	DDS_WIDTHr$   ÚDDS_SURFACE_FLAGS_TEXTUREr#   r%   ÚDDS_SURFACE_FLAGS_MIPMAPÚDDS_SURFACE_FLAGS_CUBEMAPr(   r)   ÚDDS_CUBEMAP_POSITIVEXr*   ÚDDS_CUBEMAP_NEGATIVEXr+   ÚDDS_CUBEMAP_POSITIVEYr,   ÚDDS_CUBEMAP_NEGATIVEYr-   ÚDDS_CUBEMAP_POSITIVEZr.   ÚDDS_CUBEMAP_NEGATIVEZrc  ÚDXT1_FOURCCre  ÚDXT3_FOURCCrg  ÚDXT5_FOURCCrÇ   ÚDXGI_FORMAT_R8G8B8A8_TYPELESSrÈ   ÚDXGI_FORMAT_R8G8B8A8_UNORMrÉ   ÚDXGI_FORMAT_R8G8B8A8_UNORM_SRGBrþ   ÚDXGI_FORMAT_BC5_TYPELESSrÿ   ÚDXGI_FORMAT_BC5_UNORMr   ÚDXGI_FORMAT_BC5_SNORMr  ÚDXGI_FORMAT_BC6H_UF16r  ÚDXGI_FORMAT_BC6H_SF16r  ÚDXGI_FORMAT_BC7_TYPELESSr  ÚDXGI_FORMAT_BC7_UNORMr  ÚDXGI_FORMAT_BC7_UNORM_SRGBrt  Ú	PyDecoderr¼  rê  r�  Úregister_openrº  Úregister_decoderÚregister_saveÚregister_extensionr   r   r   r    Ú<module>   s˜    
|
M 
,
]