
    hI                       S r SSKJr  SSKrSSKrSSKrSSKJrJr  SSK	J
r
  SSKJrJrJr  SSKJr  SS	KJr  SS
KJr  Sr " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r\R8                  \   r\ H3  r\R@                  c   e\!" \S\R@                   3\RD                  5        M5     \ H3  r#\#R@                  c   e\!" \S\#R@                   3\#RD                  5        M5     \ H3  r$\$R@                  c   e\!" \S\$R@                   3\$RD                  5        M5     \ H3  r%\%R@                  c   e\!" \S\%R@                   3\%RD                  5        M5     \RL                  r'\RP                  r)\RP                  \RT                  -  r+\RX                  r-\RX                  \RT                  -  r.\R^                  r0\Rb                  r2\Rf                  \Rh                  -  \Rj                  -  \Rl                  -  r7\Rp                  r9\Rt                  r;\Rx                  r=\R|                  r?\Rh                  r@\Rj                  rA\R                  rC\R                  \R                  -  rF\R                  rG\R                  \R                  -  rJ\R                  \R                  -  rL\R                  \R                  -  rN\R                  \R                  -  rP\R                  \R                  -  rR\R                  \R                  -  rT\R                  rV\R                  rX\R                  rZ\R                  r\\R                  r^\R                  r`\R                  rb\R                  rd\R                  rf\R                  rh\R                  rj\R                  rl\R                  rn\R                  rp " S S\R                  5      rq " S S\R                  5      rsS$S  jrtS%S! jru\R                  " \qR                  \q\u5        \R                  " S"\s5        \R                  " \qR                  \t5        \R                  " \qR                  S#5        g)&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)IO   )Image	ImageFileImagePalette)i32le)o8)o32leiDDS c                  4    \ rS rSrSrSrSrSrSrSr	Sr
S	rS
rg)DDSD   r                  i   i    N)__name__
__module____qualname____firstlineno__CAPSHEIGHTWIDTHPITCHPIXELFORMATMIPMAPCOUNT
LINEARSIZEDEPTH__static_attributes__r       D/var/www/html/env/lib/python3.13/site-packages/PIL/DdsImagePlugin.pyr   r      s*    DFEEKKJEr$   r   c                       \ rS rSrSrSrSrSrg)DDSCAPS+   r   r   i  @ r   N)r   r   r   r   COMPLEXTEXTUREMIPMAPr#   r   r$   r%   r'   r'   +   s    GGFr$   r'   c                  4    \ rS rSrSrSrSrSrSrSr	Sr
S	rS
rg)DDSCAPS21   i      i   r   i    i @  i   i    r   N)r   r   r   r   CUBEMAPCUBEMAP_POSITIVEXCUBEMAP_NEGATIVEXCUBEMAP_POSITIVEYCUBEMAP_NEGATIVEYCUBEMAP_POSITIVEZCUBEMAP_NEGATIVEZVOLUMEr#   r   r$   r%   r-   r-   1   s0    GFr$   r-   c                  ,    \ rS rSrSrSrSrSrSrSr	Sr
g	)
DDPF=   r   r   r       @   r   r   N)r   r   r   r   ALPHAPIXELSALPHAFOURCCPALETTEINDEXED8RGB	LUMINANCEr#   r   r$   r%   r9   r9   =   s     KEFO
CIr$   r9   c                     \ rS rSrSrSrSrSrSrSr	Sr
S	rS
rSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSr Sr!S r"S!r#S"r$S#r%S$r&S%r'S&r(S'r)S(r*S)r+S*r,S+r-S,r.S-r/S.r0S/r1S0r2S1r3S2r4S3r5S4r6S5r7S6r8S7r9S8r:S9r;S:r<S;r=S<r>S=r?S>r@S?rAS@rBSArCSBrDSCrESDrFSErGSFrHSGrISHrJSrKSIrLSJrMSKrNSLrOSMrPSNrQSOrRSPrSSQrTSRrUSSrVSTrWSUrXSVrYSWrZSXr[SYr\SZr]S[r^S\r_S]r`S^raS_rbS`rcSardSbreScrfSdrgSerhSfriSgrjShrkSirlSjrmSkrnSlroSmrpSnrqSorrSprsSqrtSrruSsrvStrwSurxSvrySwrzSxr{Syr|Szr}g{)|DXGI_FORMATG   r   r   r      r            r   	   
                                                               r   r;   !   "   #   $   %   &   '   (   )   *   r(   ,   -   .   /   0   r.   2   3   4   5   6   7   8   9   :   ;   <   r:   >   ?   r<   A   B   C   D   E   F   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                  r   N)~r   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%   rD   rD   G   s~   GONNOLKK! ONMNMOLLKLKLIIHHNMJIJILIIIHIHKHGHGHHOOLINLINLINLIILIILNNN!#MIILINDDDDDDJDDDDDD	BDNDDD&)#.1+r$   rD   c                      \ rS rSrSrSrSrSrSrSr	Sr
S	rS
rSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSr Sr!S r"S!r#S"r$S#r%S$r&S%r'S&r(S'r)S(r*S)r+S*r,S+r-S,r.S-r/S.r0S/r1S0r2S1r3S2r4S3r5S4r6S5r7S6r8S7r9S8r:\;" S95      r<\;" S:5      r=\;" S;5      r>\;" S<5      r?\;" S=5      r@\;" S>5      rA\;" S?5      rB\;" S@5      rC\;" SA5      rD\;" SB5      rE\;" SC5      rF\;" SD5      rG\;" SE5      rH\;" SF5      rI\;" SG5      rJ\;" SH5      rK\;" SI5      rLSJrMgK)LD3DFMT   r   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r   r;   r`   ra   rb   rc   rg   rh   ro   rp   rq   ry   r:   rz   r{   r<   r~   r   rE   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   MET1r   N)Nr   r   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-  r-     s   GFHHFHHHF	BHHKHHFKLD	B	BDDDFHHFKL
CEEEG
CMFLK
CJGGLDGMDGMF	BLw<DGIw<DGIw<Dw<Dw<Dw<Dw<Dw<Dw<Dw<Dw<Dw<Dw<Dw<Dw<Lr$   r-  DDSD_DDSCAPS_	DDSCAPS2_DDPF_c                  0    \ rS rSrSrSrSS jrS	S jrSrg)
DdsImageFileiK  DDSzDirectDraw Surfacec                   [        U R                  R                  S5      5      (       d  Sn[        U5      e[        R
                  " SU R                  R                  S5      5      u  nUS:w  a  S[        U5       3n[        U5      eU R                  R                  US-
  5      n[        U5      S:w  a  S[        U5       S3n[        U5      e[        R                  " U5      n[        R
                  " S	UR                  S
5      5      u  pVnXv4U l        SU R                  -   n[        R
                  " S	UR                  S
5      5      u  pn[        R
                  " SUR                  S5      5        [        R
                  " SUR                  S5      5      u  ppSnS nU[        R                  -  (       az  U[        R                  -  (       a
  SU l        SnO	SU l        Sn[        R
                  " SU S3UR                  US-  5      5      n["        R$                  " SUSUU45      /U l        g U[        R(                  -  (       aI  US:X  a	  SU l        GOUS:X  a!  U[        R                  -  (       a	  SU l        GOSU SU 3n[        U5      eU[        R*                  -  (       aO  SU l        [,        R.                  " SU R                  R                  S5      5      U l        SU R0                  l        GOU[        R4                  -  (       Ga  US-   nU[6        R8                  :X  a  SU l        SU l        SnGOU[6        R<                  :X  a  SU l        S U l        S!nGOU[6        R>                  :X  a  SU l        S"U l        SnGOvU[6        R@                  [6        RB                  4;   a  SU l        S#U l        SnGO@U[6        RD                  :X  a  SU l        S$U l        S%nGOU[6        RF                  [6        RH                  4;   a  SU l        S&U l        S%nGOU[6        RJ                  :X  Ga  US'-  n[        R
                  " SU R                  R                  S5      5      u  nU R                  R                  S5        U[L        RN                  [L        RP                  4;   a  SU l        S(U l        SnGOGU[L        RR                  [L        RT                  4;   a  SU l        S)U l        S!nGOU[L        RV                  [L        RX                  4;   a  SU l        S*U l        SnGOU[L        RZ                  [L        R\                  4;   a  SU l        S#U l        SnGOU[L        R^                  [L        R`                  4;   a  SU l        S&U l        S%nGOoU[L        Rb                  :X  a  SU l        S$U l        S%nGOIU[L        Rd                  :X  a  SU l        S+U l        S,nGO#U[L        Rf                  :X  a  SU l        S-U l        S,nOU[L        Rh                  [L        Rj                  [L        Rl                  4;   a4  SU l        S.U l        S/nU[L        Rl                  :X  a  S0U Rn                  S1'   OU[L        Rp                  [L        Rr                  [L        Rt                  4;   a+  SU l        U[L        Rt                  :X  a  S0U Rn                  S1'   O9S2U 3n[w        U5      eS3[        U5       3n[w        U5      eS4U 3n[w        U5      eU(       a,  ["        R$                  " S5UWUU R:                  45      /U l        g ["        R$                  " S6USU=(       d    U R2                  5      /U l        g )7Nr   znot a DDS filez<I|   zUnsupported header size x   zIncomplete header: z bytesz<3IrM   r   r   z<11Irj   <4IrQ   r   RGBArA   rF   <Idds_rgbr   LLAzUnsupported bitcount z for Pr/   rl  r   rn  r   rp  BC4rt  rG   BC5rU   BC1BC2BC3BC6HrH   BC6HSBC7rI   g]tE?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sizer9   rA   r=   _moder	   _TiletilerB   r@   r
   r  palettemoder?   r-  rl  pixel_formatrn  rp  rs  rv  rt  ru  rw  rq  rD   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_formats                         r%   _openDdsImageFile._openO  s   tww||A''"Cc""tTWW\\!_=#,T+->,?@C#,ww||K!O4|#'L(9':&AC#,L)%}}UFKKODu_
499$ &eV[[_ Egffkk"o. -3MM%R,Q)TXX)))#

"

MMAj\"3V[[a5PQE"GQ5@QRSDIt~~%1} 
RGd.>.>$>!
-hZuWIFcl"t+++DJ'++FDGGLL4FGDL &DLLt{{"" 1_F$#
$*!6;;&#
$*!6;;&#
$*!FKK55 
$)!6;;&"
$*!FKK55"
$)!6;;&"!'tTWW\\!_!ER )),,#  "(DJ(-D%A [%=%={?T?T$UU!'DJ(-D%A [%=%={?T?T$UU!'DJ(-D%A [%=%={?T?T$UU!$DJ(-D%A [%=%={?T?T$UU!&DJ(-D%A K$9$99!&DJ(.D%A K$9$99!&DJ(.D%A K$9$99!&DJ(/D%A ,,))..% 
 "(DJ(-D%A"k&@&@@-4		'* 11..33% 
 "(DJ"k&E&EE-4		'*6{mDC-c223DL>B)#../y9C%c**wD<M<M8NODI #G<PtyyQRDIr$   c                    g )Nr   )r  poss     r%   	load_seekDdsImageFile.load_seek  s    r$   )r  r  r  r  r  N)returnNone)r  intr  r  )	r   r   r   r   formatformat_descriptionr  r  r#   r   r$   r%   r~  r~  K  s    F-TSlr$   r~  c                  "    \ rS rSrSrSS jrSrg)DdsRgbDecoderi  Tc           	        U R                   c   eU R                  u  p#/ n/ nU HX  nSnUS:w  a)  XgS-   -	  US-   -  U:X  a  US-  nXgS-   -	  US-   -  U:X  a  M  UR                  U5        UR                  Xg-	  5        MZ     [        5       nUS-  n	U R                  R
                  U R                  R                  -  [        U5      -  n
[        U5      U
:  a|  [        R                  U R                   R                  U	5      S5      n[        U5       H-  u  pX-  nU[        [        XU   -	  X\   -  S-  5      5      -  nM/     [        U5      U
:  a  M|  U R                  U5        g)Nr   r   r   little   )r   )fdargsappend	bytearraystatexsizeysizer  r  
from_bytesr  	enumerater   
set_as_raw)r  bufferr  r  mask_offsetsmask_totalsmaskr  data	bytecountdest_lengthvalueimasked_values                 r%   decodeDdsRgbDecoder.decode  s]   ww""")) DFqyz*vz:dBaKF z*vz:dB't~.  {M	jj&&)9)99CJF$i+%NN477<<	#:HEE$U+$|,q/9[^KsRS  , $i+% 	r$   r   N)r  z$bytes | Image.SupportsArrayInterfacer  ztuple[int, int])r   r   r   r   	_pulls_fdr  r#   r   r$   r%   r  r    s    Ir$   r  c                <   U R                   S;  a  SU R                    S3n[        U5      e[        R                  [        R                  -  [        R
                  -  [        R                  -  n[        U R                  5       5      S-  nU R                  R                  S5      nU(       Ga  SnU[        R                  -  nU R                  S-   S-  n/ S	Qn	[        R                  n
US
:X  a  [        R                   nSnGOUS:X  a  [        R"                  nSnGOUS:X  a  [        R$                  nSnGO[        R&                  nUS:X  a  Sn[(        R*                  nGO~US:X  a  Sn[(        R,                  nGOdUS:X  a1  Sn[(        R.                  nU R                   S:w  a  Sn[        U5      eGO-SU 3n[        U5      eSnU[        R0                  -  nU R                  U-  S-   S-  nU R                   S   S:H  nU R                   S   S:X  a-  [        R2                  n
U R                   nU(       a  / SQn	Ob/ SQn	O][        R4                  n
U R                   S S S2   n/ SQn	U(       a0  U R7                  5       u  nnnn[8        R:                  " S UUUU45      n U(       a  U
[        R<                  -  n
U	R?                  U(       a  S!OS5        [        R@                  nURC                  [E        [F        5      [H        RJ                  " S"S#UU RL                  U R                  USS5      -   [H        RJ                  " S$/S%Q76 -   [H        RJ                  " S&S'XU5      -   [H        RJ                  " S&/U	Q76 -   [H        RJ                  " S([N        RP                  SSSS5      -   5        U[        R&                  :X  a*  URC                  [H        RJ                  " S(WSSSS)5      5        [R        RT                  " X[R        RV                  " US*U RX                  -   SU5      /5        g )+N)rA   r  r  r  zcannot write mode z as DDSr   r  r  rF   r   )r   r   r   r   rl  )r   rn  )r   rp  )rF   r  r  r  )rG   rA   z#only RGB mode can be written as BC5zcannot write pixel format r  rI   r  Ar   r  )r  r  r  )      ~ r  r  )i   i   r  r  r  z<7Ir  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  getbandsencoderinfogetr!   r  r9   r?   r-  rl  rn  rp  rq  rD   r   r   r  r   rB   rA   splitr   merger=   r  r   writeo32	DDS_MAGICr  packr  r'   r*   r	   _saver  r  )imr  filenamer  r  r  r  
codec_namer  	rgba_maskpixel_flagsr  r  r  alphargbas                      r%   r  r    sl   	ww00"277)73clII#djj043C3CCE2;;=!A%H>>%%n5L
 A" 	kk6![[FDV#[[FDV#[[FD[[Fu$)66&)66&)6677e#?C!#,& $ 3<.Acl"
H$q(Q.s"771:..K77D@	@	((K774R4=D<IXXZ
1a[[!Q164+++Ku!4HHI
++IIHH	

	
 ++e
*y
*	+ ++eRh
?	@ ++e
(i
(	) ++eW__aAq
9	:$ 
KK{Aq!Q7	
 OOBY__Z"''9I1dSTUr$   c                $    U R                  S5      $ )Ns   DDS )
startswith)prefixs    r%   r  r  i  s    W%%r$   r  z.dds)r  zImage.Imager  z	IO[bytes]r  zstr | bytesr  r  )r  bytesr  bool){__doc__
__future__r   r  r  sysenumr   r   typingr    r   r	   r
   _binaryr   rh  r   r   r  r  r   r'   r-   r9   rD   r-  modulesr   moduleitemnamesetattrr  item1item2item3r?   
DDS_FOURCCrA   DDS_RGBr=   DDS_RGBArB   DDS_LUMINANCEDDS_LUMINANCEAr>   	DDS_ALPHAr@   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_CUBEMAPr0   r1   DDS_CUBEMAP_POSITIVEXr2   DDS_CUBEMAP_NEGATIVEXr3   DDS_CUBEMAP_POSITIVEYr4   DDS_CUBEMAP_NEGATIVEYr5   DDS_CUBEMAP_POSITIVEZr6   DDS_CUBEMAP_NEGATIVEZrl  DXT1_FOURCCrn  DXT3_FOURCCrp  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_SRGBr~  	PyDecoderr  r  r  register_openr  register_decoderregister_saveregister_extensionr   r$   r%   <module>r@     s  
 # 	  
 !  , , !  ! 	7 g w 7 y2' y2xI W I Z 
X	D99   FeDII;'4  E::!!!Fhuzzl+U[[9  E::!!!Fi

|,ekk:  E::!!!FeEJJ<(%++6  [[

((88d&&&$"2"22JJ	99t{{2TZZ?$BRBRR ** **  "oo [[
JJ	#OO "??W^^; #OO  ((8+E+EE  ((8+E+EE  ((8+E+EE  ((8+E+EE  ((8+E+EE  ((8+E+EE kkkkkk + = = (77 "-"A"A &33 #-- #-- #-- #-- &33 #-- (77 [9&& [| I''  FZVz&   L''w ?   y- 0   L'' /   ,,f 5r$   