o
    ÒèFhGA  ã                   @  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
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szJ ‚eedej ej ƒ qqe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j/Z0ej1ej2B ej3B ej4B Z5ej6Z7ej8Z9ej:Z;ej<Z=ej2Z>ej3Z?ej@ZAejBejCB ZDejBZEejFejGB ZHejFejIB ZJejFejKB ZLejFejMB ZNejFejOB ZPejFejQB ZRejSZTejUZVejWZXejYZZej[Z\ej]Z^ej_Z`ejaZbejcZdejeZfejgZhejiZjejkZlejmZnG dd„ dejƒZoG dd„ dejpƒZqdd „ Zrd!d"„ Zse
 teojueoes¡ e
 vd#eq¡ e
 weojuer¡ e
 xeojud$¡ 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é   )Ú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   úK/var/www/html/loop/nvenv/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   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   Ú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   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«   Ú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„ Zdd„ ZdS )ÚDdsImageFileÚDDSzDirectDraw Surfacec                 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 ¡¡}d|d||ffg| _d S |tj@ rÛ|dkrÁd| _�np|dkrÏ|tj@ rÏd| _�nbd|› d|› �}t|ƒ‚|tj@ rðd| _t d| j d¡¡| _�nA|tj@ �r(|d }|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fv �r<d| _d#| _d}nõ|tjk�rKd| _d$| _d%}næ|tj tj!fv �r]d| _d&| _d%}nÔ|tj"k�r|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*k�r½d| _d$| _d%}nt|t#j+k�rÌd| _d)| _d*}ne|t#j,k�rÛd| _d+| _d*}nV|t#j-t#j.t#j/fv �rúd| _d,| _d-}|t#j/k�rùd.| j0d/< n7|t#j1t#j2t#j3fv �rd| _|t#j3k�rd.| j0d/< nd0|› �}t4|ƒ‚d1t|ƒ› �}t4|ƒ‚d2|› �}t4|ƒ‚|�rCt5 6d3|||| jf¡g| _d S t5 6d4|d|�pM| j7¡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_   ú<4IrD   r   ÚRGBAr6   r9   ú<ÚIÚdds_rgbr   ÚLÚLAzUnsupported bitcount z for ÚPr&   rb  r   rd  r   rf  ÚBC4rj  r:   ÚBC5rH   ÚBC1ÚBC6Hr;   ÚBC6HSÚBC7r<   g]tÑEÝ?ÚgammazUnimplemented DXGI format zUnimplemented pixel format zUnknown pixel format flags ÚbcnÚraw)8Ú_acceptÚfpÚreadÚSyntaxErrorÚstructÚunpackÚreprÚOSErrorÚlenÚioÚBytesIOÚ_sizeÚsizer/   r6   r2   Ú_modeÚtiler7   r5   r   rˆ  Úpaletter4   r$  rb  Úpixel_formatrd  rf  ri  rl  rj  rk  rm  rg  r8   rò   rñ   rú   rû   rý   rþ   rÿ   r
  r  r  r  r  ÚinforÆ   rÇ   rÈ   ÚNotImplementedErrorr   Ú_TileÚmode)Ú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   Ú_openN  sü   








þý
€ý
€


ÿ zDdsImageFile._openc                 C  s   d S )Nr   )rž  Úposr   r   r   Ú	load_seekÛ  s   zDdsImageFile.load_seekN)r   r   r   ÚformatÚformat_descriptionr´  r¶  r   r   r   r   rs  J  s     rs  c                   @  s   e Zd ZdZdd„ ZdS )ÚDdsRgbDecoderTc                 C  s  | j \}}g }g }|D ]0}d}|dkr/||d ? |d > |kr/|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 }qct|ƒ|
k sU|  |¡ dS )Nr   r   r   Úlittleéÿ   )éÿÿÿÿr   )ÚargsÚappendÚ	bytearrayÚstateÚxsizeÚysizer‘  ÚintÚ
from_bytesÚfdr‹  Ú	enumerater
   Ú
set_as_raw)rž  Úbufferr­  r±  Úmask_offsetsÚmask_totalsÚmaskr²  ÚdataÚ	bytecountÚdest_lengthÚvalueÚiÚmasked_valuer   r   r   Údecodeâ  s0   
ÿ
ÿû
zDdsRgbDecoder.decodeN)r   r   r   Ú	_pulls_fdrÒ  r   r   r   r   r¹  ß  s    r¹  c                 C  s¨  | j dvrd| j › d�}t|ƒ‚| j d dk}| j d dkr0tj}| j }|r+g d¢}n(g d	¢}n#tj}| j d d d… }g d
¢}|rS|  ¡ \}}	}
}t d|||	|
f¡} |rZ|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gd¢R Ž  t dd|d|¡ tjdg|¢R Ž  t dtjdddd¡ ¡ t | |t dd| j d|ddf¡g¡ d S )N)r6   ry  r}  r~  zcannot write mode z as DDSr¼  ÚAr   r}  )r»  r»  r»  )ì      ~ rÕ  rÕ  )i  ÿ i ÿ  r»  ry  rÕ  r   r<   z<7Iru  Ú11I)r   r   r   r   r   r   r   r   r   r   r   rx  r0   z<5Irˆ  rw  r   )r�  r�  r/   r7   r6   Úsplitr   Úmerger2   r¾  r   r   r   r   r   r   r‘  Úgetbandsr¥  ÚwriteÚo32Ú	DDS_MAGICr�  Úpackr¤  r!   r#   r   Ú_saverœ  r•  )ÚimrŠ  ÚfilenamerŸ  ÚalphaÚpixel_flagsr¯  Ú	rgba_maskÚrÚgÚbÚar£  r­  r§  r   r   r   rÞ    s^   



øÿõóòñÿ ÿrÞ  c                 C  s   | d d… dkS )Nr   s   DDS r   )Úprefixr   r   r   r‰  5  s   r‰  r|  z.dds)yÚ__doc__Ú
__future__r   r’  r�  ÚsysÚenumr   r   Ú r   r   r   Ú_binaryr	   r^  r
   r   rÛ  rÜ  r   r!   r%   r/   r8   r$  Úmodulesr   ÚmoduleÚitemÚnameÚsetattrrÏ  Úitem1Úitem2Úitem3r4   Ú
DDS_FOURCCr6   ÚDDS_RGBr2   ÚDDS_RGBAr7   ÚDDS_LUMINANCEÚDDS_LUMINANCEAr3   Ú	DDS_ALPHAr5   Ú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_NEGATIVEZrb  ÚDXT1_FOURCCrd  ÚDXT3_FOURCCrf  Ú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_SRGBrs  Ú	PyDecoderr¹  rÞ  r‰  Úregister_openr·  Úregister_decoderÚregister_saveÚregister_extensionr   r   r   r   Ú<module>   s˜    
|
M "4