
    :hI                       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e      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Zej8                  e   ZeD ]1  Zej@                  J  e!edej@                   ejD                         3 eD ]1  Z#e#j@                  J  e!ede#j@                   e#jD                         3 eD ]1  Z$e$j@                  J  e!ede$j@                   e$jD                         3 eD ]1  Z%e%j@                  J  e!ede%j@                   e%jD                         3 ejL                  Z'ejP                  Z)ejP                  ejT                  z  Z+ejX                  Z-ejX                  ejT                  z  Z.ej^                  Z0ejb                  Z2ejf                  ejh                  z  ejj                  z  ejl                  z  Z7ejp                  Z9ejt                  Z;ejx                  Z=ej|                  Z?ejh                  Z@ejj                  ZAej                  ZCej                  ej                  z  ZFej                  ZGej                  ej                  z  ZJej                  ej                  z  ZLej                  ej                  z  ZNej                  ej                  z  ZPej                  ej                  z  ZRej                  ej                  z  ZTej                  ZVej                  ZXej                  ZZej                  Z\ej                  Z^ej                  Z`ej                  Zbej                  Zdej                  Zfej                  Zhej                  Zjej                  Zlej                  Znej                  Zp G d dej                        Zq G d dej                        Zsd$d Ztd%d!Zu ej                  eqj                  eqeu        ej                  d"es        ej                  eqj                  et        ej                  eqj                  d#       y)&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                  ,    e Zd ZdZdZdZdZdZdZdZ	dZ
y	)
DDSDr                  i   i   N)__name__
__module____qualname__CAPSHEIGHTWIDTHPITCHPIXELFORMATMIPMAPCOUNT
LINEARSIZEDEPTH     P/var/www/urcfiles/bundle/venv/lib/python3.12/site-packages/PIL/DdsImagePlugin.pyr   r      s*    DFEEKKJEr!   r   c                      e Zd ZdZdZdZy)DDSCAPSr   r   i  @ N)r   r   r   COMPLEXTEXTUREMIPMAPr    r!   r"   r$   r$   +   s    GGFr!   r$   c                  ,    e Zd ZdZdZdZdZdZdZdZ	dZ
y	)
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   s0    GFr!   r)   c                  $    e Zd ZdZdZdZdZdZdZy)DDPFr   r   r       @   r   N)	r   r   r   ALPHAPIXELSALPHAFOURCCPALETTEINDEXED8RGB	LUMINANCEr    r!   r"   r4   r4   =   s     KEFO
CIr!   r4   c                     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{yz){DXGI_FORMATr   r   r      r            r   	   
                                                                  r5   !   "   #   $   %   &   '   (   )   *   +   ,   -   .   /   0   1   2   3   4   5   6   7   8   9   :   ;   <   =   >   ?   r6   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>   r>   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!   r>   c                     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/Z1d0Z2d1Z3d2Z4d3Z5d4Z6d5Z7d6Z8d7Z9 e:d8      Z; e:d9      Z< e:d:      Z= e:d;      Z> e:d<      Z? e:d=      Z@ e:d>      ZA e:d?      ZB e:d@      ZC e:dA      ZD e:dB      ZE e:dC      ZF e:dD      ZG e:dE      ZH e:dF      ZI e:dG      ZJ e:dH      ZKyI)JD3DFMTr   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   r5   rZ   r[   r\   r]   ra   rb   rk   rl   rm   ru   rv   rw   rx   r6   r{   r~   r   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   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                  $    e Zd ZdZdZddZddZy)DdsImageFileDDSzDirectDraw Surfacec                &   t        | j                  j                  d            sd}t        |      t	        j
                  d| j                  j                  d            \  }|dk7  rdt        |       }t        |      | j                  j                  |dz
        }t        |      dk7  rdt        |       d}t        |      t        j                  |      }t	        j
                  d	|j                  d
            \  }}}||f| _        d| j                  z   }t	        j
                  d	|j                  d
            \  }	}
}t	        j
                  d|j                  d             t	        j
                  d|j                  d            \  }}}}d}d }|t        j                  z  rs|t        j                  z  r
d| _        d}n	d| _        d}t	        j
                  d| d|j                  |dz              }t#        j$                  d|d||f      g| _        y |t        j(                  z  rB|dk(  r	d| _        ny|dk(  r|t        j                  z  r	d| _        nXd| d| }t        |      |t        j*                  z  rNd| _        t-        j.                  d| j                  j                  d            | _        d| j0                  _        n|t        j4                  z  r|dz   }|t6        j8                  k(  rd| _        d| _        d}n|t6        j<                  k(  rd| _        d | _        d!}n|t6        j>                  k(  rd| _        d"| _        d}n\|t6        j@                  t6        jB                  fv rd| _        d#| _        d}n(|t6        jD                  k(  rd| _        d$| _        d%}n|t6        jF                  t6        jH                  fv rd| _        d&| _        d%}n|t6        jJ                  k(  r|d'z  }t	        j
                  d| j                  j                  d            \  }| j                  j                  d       |tL        jN                  tL        jP                  fv rd| _        d(| _        d}n6|tL        jR                  tL        jT                  fv rd| _        d)| _        d!}n|tL        jV                  tL        jX                  fv rd| _        d*| _        d}n|tL        jZ                  tL        j\                  fv rd| _        d#| _        d}n|tL        j^                  tL        j`                  fv rd| _        d&| _        d%}nf|tL        jb                  k(  rd| _        d$| _        d%}nA|tL        jd                  k(  rd| _        d+| _        d,}n|tL        jf                  k(  rd| _        d-| _        d,}n|tL        jh                  tL        jj                  tL        jl                  fv r3d| _        d.| _        d/}|tL        jl                  k(  rd0| jn                  d1<   n|tL        jp                  tL        jr                  tL        jt                  fv r*d| _        |tL        jt                  k(  rId0| jn                  d1<   n9d2| }tw        |      d3t        |       }tw        |      d4| }tw        |      |r+t#        j$                  d5||| j:                  f      g| _        y t#        j$                  d6|d|xs | j2                        g| _        y )7Nr   znot a DDS filez<I|   zUnsupported header size x   zIncomplete header: z bytesz<3IrF   r   r   z<11Ire   <4IrJ   r   RGBAr;   r?   <Idds_rgbr   LLAzUnsupported bitcount z for Pr*   ri  r   rk  r   rm  BC4rq  r@   BC5rN   BC1BC2BC3BC6HrA   BC6HSBC7rB   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sizer4   r;   r7   _moder	   _Tiletiler<   r:   r
   r  palettemoder9   r+  ri  pixel_formatrk  rm  rp  rs  rq  rr  rt  rn  r>   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"   _openzDdsImageFile._openO  s   tww||A'"Cc""tTWW\\!_=#,T+->,?@C#,ww||K!O4|#'L(9':&AC#,L)%}}UFKKODvuV_
499$ &eV[[_ Eug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                     y )Nr    )r  poss     r"   	load_seekzDdsImageFile.load_seek  s    r!   N)returnNone)r  intr  r  )r   r   r   formatformat_descriptionr  r  r    r!   r"   r{  r{  K  s    F-TSlr!   r{  c                      e Zd ZdZddZy)DdsRgbDecoderTc           	        | j                   J | j                  \  }}g }g }|D ]V  }d}|dk7  r(||dz   z	  |dz   z  |k(  r|dz  }||dz   z	  |dz   z  |k(  r|j                  |       |j                  ||z	         X t               }|dz  }	| j                  j
                  | j                  j                  z  t        |      z  }
t        |      |
k  r|t        j                  | j                   j                  |	      d      }t        |      D ]0  \  }}||z  }|t        t        |||   z	  ||   z  dz              z  }2 t        |      |
k  r|| j                  |       y)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"   decodezDdsRgbDecoder.decode  sm   ww"""))% DFqyvz*vz:dBaKF vz*vz:dB'tv~.  {M	jj&&)9)99CJF$i+%NN477<<	#:HEE$U+4$t|,,q/9[^KsRS  , $i+% 	r!   N)r  z$bytes | Image.SupportsArrayInterfacer  ztuple[int, int])r   r   r   	_pulls_fdr  r    r!   r"   r  r    s    Ir!   r  c                   | j                   dvrd| j                    d}t        |      t        j                  t        j                  z  t        j
                  z  t        j                  z  }t        | j                               dz  }| j                  j                  d      }|rd}|t        j                  z  }| j                  dz   dz  }g d	}	t        j                  }
|d
k(  rt        j                   }d}n|dk(  rt        j"                  }d}n|dk(  rt        j$                  }d}nt        j&                  }|dk(  rd}t(        j*                  }nd|dk(  rd}t(        j,                  }nK|dk(  r/d}t(        j.                  }| j                   dk7  r$d}t        |      d| }t        |      d}|t        j0                  z  }| j                  |z  dz   dz  }| j                   d   dk(  }| j                   d   dk(  r(t        j2                  }
| j                   }|rg d}	n\g d}	nWt        j4                  }
| j                   d d d   }g d}	|r/| j7                         \  }}}}t9        j:                  d ||||f      } |r|
t        j<                  z  }
|	j?                  |rd!nd       t        j@                  }|jC                  tE        tF              tI        jJ                  d"d#|| jL                  | j                  |dd      z   tI        jJ                  d$gd% z   tI        jJ                  d&d'|
||      z   tI        jJ                  d&g|	 z   tI        jJ                  d(tN        jP                  dddd      z          |t        j&                  k(  r)|jC                  tI        jJ                  d(dddd)             tS        jT                  | |tS        jV                  |d*| jX                  z   d|      g       y )+N)r;   r  r  r  zcannot write mode z as DDSr   r  r  r?   r   )r   r   r   r   ri  )r   rk  )r   rm  )r?   r  r  r  )r@   r;   z#only RGB mode can be written as BC5zcannot write pixel format r  rB   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  r5   z<5Ir   r  )-r  r  r   r   r   r   r   r  getbandsencoderinfogetr   r  r4   r9   r+  ri  rk  rm  rn  r>   r   r   r  r   r<   r;   splitr   merger7   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    si   	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!#,&2<.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fh
?	@ ++e
(i
(	) ++eW__aAq
9	:$ 
KK{Aq!Q7	
 OOBY__Z"''9I1dSTUr!   c                $    | j                  d      S )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   re  r   r   r  r  r   r$   r)   r4   r>   r+  modulesr   moduleitemnamesetattrr  item1item2item3r9   
DDS_FOURCCr;   DDS_RGBr7   DDS_RGBAr<   DDS_LUMINANCEDDS_LUMINANCEAr8   	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_CUBEMAPr+   r,   DDS_CUBEMAP_POSITIVEXr-   DDS_CUBEMAP_NEGATIVEXr.   DDS_CUBEMAP_POSITIVEYr/   DDS_CUBEMAP_NEGATIVEYr0   DDS_CUBEMAP_POSITIVEZr1   DDS_CUBEMAP_NEGATIVEZri  DXT1_FOURCCrk  DXT3_FOURCCrm  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!   