
     fB                    R   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j        e         ZeD ]%Zej         J  e!edej          ej"                   &eD ]%Z#e#j         J  e!ede#j          e#j"                   &eD ]%Z$e$j         J  e!ede$j          e$j"                   &eD ]%Z%e%j         J  e!ede%j          e%j"                   &ej&        Z'ej(        Z)ej(        ej*        z  Z+ej,        Z-ej,        ej*        z  Z.ej/        Z0ej1        Z2ej3        ej4        z  ej5        z  ej6        z  Z7ej8        Z9ej:        Z;ej<        Z=ej>        Z?ej4        Z@ej5        ZAejB        ZCejD        ejE        z  ZFejD        ZGejH        ejI        z  ZJejH        ejK        z  ZLejH        ejM        z  ZNejH        ejO        z  ZPejH        ejQ        z  ZRejH        ejS        z  ZTejU        ZVejW        ZXejY        ZZej[        Z\ej]        Z^ej_        Z`eja        Zbejc        Zdeje        Zfejg        Zheji        Zjejk        Zlejm        Znejo        Zp G d dej                  Zq G d dejr                  Zsd/d(Ztd0d,Zu ejv        eqjw        eqeu            ejx        d-es            ejy        eqjw        et            ejz        eqjw        d.           dS )1a  
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
d	S )
DDSDr                  i   i   N)__name__
__module____qualname__CAPSHEIGHTWIDTHPITCHPIXELFORMATMIPMAPCOUNT
LINEARSIZEDEPTH     U/var/www/api.educacionweb.es/myenv/lib/python3.11/site-packages/PIL/DdsImagePlugin.pyr   r      s6        DFEEKKJEEEr!   r   c                      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        GGFFFr!   r$   c                  .    e Zd ZdZdZdZdZdZdZdZ	dZ
d	S )
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   s<        GFFFr!   r)   c                  &    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"   r4   r4   =   s,        KEFO
CIIIr!   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{dzS ){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          ZKdIS )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3w<<DGI3w<<DGI3w<<D3w<<D3w<<D3w<<D3w<<D3w<<D3w<<D3w<<D3w<<D3w<<D3w<<D3w<<D3w<<LLLr!   r+  DDSD_DDSCAPS_	DDSCAPS2_DDPF_c                  &    e Zd ZdZdZd
dZddZd	S )DdsImageFileDDSzDirectDraw SurfacereturnNonec                z   t          | j                            d                    sd}t          |          t	          j        d| j                            d                    \  }|dk    r!dt          |           }t          |          | j                            |dz
            }t          |          dk    r"dt          |           d}t          |          t          j
        |          }t	          j        d	|                    d
                    \  }}}||f| _        d| j        z   }t	          j        d	|                    d
                    \  }	}
}t	          j        d|                    d                     t	          j        d|                    d                    \  }}}}d}d }|t          j        z  ra|t          j        z  r
d| _        d}n	d| _        d}t	          j        d| d|                    |dz                      }d|d||ffg| _        d S |t          j        z  rD|dk    r	d| _        n|dk    r|t          j        z  r	d| _        nd| d| }t          |          |t          j        z  rGd| _        t)          j        d| j                            d                    | _        d| j        _        n|t          j        z  r|dz   }|t2          j        k    rd| _        d| _        d}n|t2          j        k    rd| _        d | _        d!}n|t2          j        k    rd| _        d"| _        d}n|t2          j        t2          j        fv rd| _        d#| _        d}nv|t2          j         k    rd| _        d$| _        d%}nT|t2          j!        t2          j"        fv rd| _        d&| _        d%}n(|t2          j#        k    r|d'z  }t	          j        d| j                            d                    \  }| j                            d           |tH          j%        tH          j&        fv rd| _        d(| _        d}n|tH          j'        tH          j(        fv rd| _        d#| _        d}nq|tH          j)        tH          j*        fv rd| _        d&| _        d%}nE|tH          j+        k    rd| _        d$| _        d%}n#|tH          j,        k    rd| _        d)| _        d*}n|tH          j-        k    rd| _        d+| _        d*}n|tH          j.        tH          j/        tH          j0        fv r+d| _        d,| _        d-}|tH          j0        k    r
d.| j1        d/<   n|tH          j2        tH          j3        tH          j4        fv r"d| _        |tH          j4        k    r
d.| j1        d/<   nId0| }tk          |          d1t          |           }tk          |          d2| }tk          |          |r&tm          j7        d3|||| j        f          g| _        d S tm          j7        d4|d|p| j                  g| _        d S )5Nr   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BC6HrA   BC6HSBC7rB   g]tE?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sizer4   r;   r7   _mode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  infor   r   r   NotImplementedErrorr	   _Tile)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  s4   tw||A'' 	#"Cc"""tTW\\!__==#@T+->->@@C#,,w||K!O44|##AL(9(9AAAC#,,L))%}UFKKOODDvuV_
49$ &eV[[__ E Eugffkk"oo... -3M%R,Q,Q)TX l	+)) #


"

M"3j"3"3"3V[[a5P5PQQE#Wa(E1BCDDIFt~% `	+1}} 

RGd.>$>!

FhFFWFFcll"t++ X	+DJ'+FDGLL4F4FGGDL &DLt{" T	+ 1_F$$#
$*!6;&&#
$*!6;&&#
$*!FK555 
$)!6;&&"
$*!FK555"
$)!6;&&"!'tTW\\!__!E!ER   ),#   "(DJ(-D%AA [%={?T$UUU!$DJ(-D%AA [%={?T$UUU!&DJ(-D%AA K$999!&DJ(.D%AA K$999!&DJ(.D%AA K$999!&DJ(/D%AA ,).%  
 "(DJ(-D%A"k&@@@-4	'* 1.3%  
 "(DJ"k&EEE-4	'*D{DDC-c222BDLLBB)#...999C%c*** 	SwD<M8NOODIII #G<PtyQQRDIIIr!   posintc                    d S )Nr    )r  r  s     r"   	load_seekzDdsImageFile.load_seek  s    r!   N)r}  r~  )r  r  r}  r~  )r   r   r   formatformat_descriptionr  r  r    r!   r"   r{  r{  K  sP        F-LS LS LS LS\     r!   r{  c                      e Zd ZdZddZdS )	DdsRgbDecoderTbufferbytesr}  tuple[int, int]c           	        | j         J | j        \  }}g }g }|D ]`}d}|dk    r)||dz   z	  |dz   z  |k    r|dz  }||dz   z	  |dz   z  |k    |                    |           |                    ||z	             at                      }|dz  }	| j        j        | j        j        z  t          |          z  }
t          |          |
k     rt          	                    | j         
                    |	          d          }t          |          D ]>\  }}||z  }|t          t          |||         z	  ||         z  dz                      z  }?t          |          |
k     |                     |           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_values                 r"   decodezDdsRgbDecoder.decode  s   w""")%  	/ 	/DFqyyvz*vz:dBBaKF vz*vz:dBB'''tv~....{{M	j&)99CJJF$ii+%%NN47<<	#:#:HEEE$U++  4$t|,,q/9[^KsRSS   $ii+%% 	ur!   N)r  r  r}  r  )r   r   r   	_pulls_fdr  r    r!   r"   r  r    s-        I     r!   r  imImage.Imager  	IO[bytes]filenamestr | bytesr}  r~  c                   | j         dvrd| j          d}t          |          | j         d         dk    }| j         d         dk    rt          j        }| j         }|rg d}nYg d	}nTt          j        }| j         d d d         }g d
}|r2|                                 \  }}	}
}t          j        d|||	|
f          } |r|t          j        z  }|	                    |rdnd           t          j        t          j        z  t          j        z  t          j        z  t          j        z  }t!          |                                           dz  }| j        |z  dz   dz  }|                    t)          t*                    t-          j        dd|| j        | j        |dd          z   t-          j        dgdR  z   t-          j        dd|d|          z   t-          j        dg|R  z   t-          j        dt2          j        dddd          z              t7          j        | |t7          j        dd| j        z   d|ddf          g           d S )N)r;   r  r  r  zcannot write mode z as DDSr  Ar   r  )r  r  r  )      ~ r  r  )i   i   r  r  r  r   rB   z<7Ir  11I)r   r   r   r   r   r   r   r   r   r   r   r  r5   z<5Ir  r  r   )r  r  r4   r<   r;   splitr   merger7   r  r   r   r   r   r   r   r  getbandsr  writeo32	DDS_MAGICr  packr  r$   r&   r	   _saver  r  )r  r  r  r  alphapixel_flagsr  	rgba_maskrgbar  r  r  s                  r"   r  r    sh   	w000327333cllGBK3E	wqzSn' 	=<<<II<<<IIh'$$B$-888	 	3JAq!QVaAq\22B (t''5/ZZa000I#dj04:=@PPE2;;==!!A%HX 1$*EHHI
+IH	
 	

	
 +e
*y
*
*
*	+ +eRa
:
:	; +e
(i
(
(
(	) +eW_aAq
9
9	:  $ O
B(8!gq!_MMN    r!   prefixr  boolc                    | d d         dk    S )Nr   s   DDS r    )r  s    r"   r  r  8  s    "1":  r!   r  z.dds)r  r  r  r  r  r  r}  r~  )r  r  r}  r  ){__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>r8     sc  
 
 # " " " " " 				  



 ! ! ! ! ! ! ! !       , , , , , , , , , , ! ! ! ! ! !       ! ! ! ! ! ! 	    7       g       w       7   y2 y2 y2 y2 y2' y2 y2 y2xI  I  I  I  I W I  I  I Z 
X	 5 5D9   GF'DI''4444 : :E:!!!GF+uz++U[9999 ; ;E:!!!GF,
,,ek:::: 7 7E:!!!GF(EJ((%+6666[

(8d&&$"22J	9t{2TZ?$BRR * *  "o [
J	#O "?W^; #O  (8+EE  (8+EE  (8+EE  (8+EE  (8+EE  (8+EE kkk + = (7 "-"A &3 #- #- #- #- &3 #- (7 S S S S S9& S S Sl         I'      F1 1 1 1h! ! ! !  L'w ? ? ?  y- 0 0 0  L' / / /  ,f 5 5 5 5 5r!   