o
    üÞhÚI  ã                   @  s<  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"ƒ qwe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/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ƒZsd1d(d)„Ztd2d-d.„Zue veqjweqeu¡ e xd/es¡ e yeqjwet¡ e zeqjwd0¡ 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   úR/var/www/html/premium_crap/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&   1   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   G   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þ  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| j }t d	| d
¡¡\}	}
}t d| d¡¡ t d| d¡¡\}}}}d}d }|tj@ rµ|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| _�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@ �rT|d }|tjk�rd| _d| _d}�nM|tjk�r d| _d | _d!}�n=|tjk�r0d| _d"| _d}�n-|tj tj!fv �rCd| _d#| _d}�n|tj"k�rSd| _d$| _d%}�n
|tj#tj$fv �red| _d&| _d%}nø|tj%k�rI|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&j0fv �rÚd| _d&| _d%}nƒ|t&j1k�réd| _d$| _d%}nt|t&j2k�rød| _d+| _d,}ne|t&j3k�rd| _d-| _d,}nV|t&j4t&j5t&j6fv �r&d| _d.| _d/}|t&j6k�r%d0| j7d1< n7|t&j8t&j9t&j:fv �r@d| _|t&j:k�r?d0| j7d1< nd2|› �}t;|ƒ‚d3t|ƒ› �}t;|ƒ‚d4|› �}t;|ƒ‚|�rot d5|||| jf¡g| _d S t d6|d|�py| j¡g| _d S )7Nr   znot a DDS filez<Ié|   zUnsupported header size éx   zIncomplete header: z bytesz<3IrA   ©r   r   z<11Ir`   ú<4IrE   r   ÚRGBAr7   r:   ú<ÚIÚdds_rgbr   ÚLÚ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)<Ú_acceptÚfpÚreadÚSyntaxErrorÚstructÚunpackÚreprÚOSErrorÚlenÚioÚBytesIOÚ_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_bytesÚheaderÚflagsÚheightÚwidthÚextentsÚpitchÚdepthÚmipmapsÚpfsizeÚpfflagsÚfourccÚbitcountÚnÚrawmodeÚ
mask_countÚmasksÚoffsetÚdxgi_formatr   r   r    Ú_openO  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  K  s    
 rt  c                   @  s   e Zd ZdZd	dd„ZdS )
ÚDdsRgbDecoderTÚbufferú$bytes | Image.SupportsArrayInterfacerv  útuple[int, int]c                 C  s$  | 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t||| ? ||  d ƒƒ7 }qjt|ƒ|
k s\|  |¡ dS )Nr   r   r   Úlittleéÿ   )éÿÿÿÿr   )ÚfdÚargsÚappendÚ	bytearrayÚstateÚxsizeÚysizer–  r»  Ú
from_bytesr�  Ú	enumerater   Ú
set_as_raw)r£  rÀ  r²  r¶  Úmask_offsetsÚmask_totalsÚmaskr·  ÚdataÚ	bytecountÚdest_lengthÚvalueÚiÚmasked_valuer   r   r    Údecodeì  s2   
ÿ
ÿû
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Ž  i  s   
rŽ  r  z.dds)rÛ  rÜ  r�  rÝ  rÞ  rß  rv  rw  )rõ  rö  rv  r÷  ){Ú__doc__Ú
__future__r   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 
#
]