Ë
    ™2Úiv%  ã                   óf  — d Z ddlZddlmZ ddlmZmZmZ ddlm	Z
 dZdZdZd	Zd
ZdZdZdZdZd
ZdZdZdZdZdZdZdZdZdZdZdZdZ d	Z!dZ"dZ#dZ$e!Z%e#Z&e#ez  Z'e$Z(e$ez  Z)e Z*e"Z+eez  ez  ez  Z,eZ-eZ.eZ/eZ0eZ1eZ2eZ3eez  Z4eZ5eez  Z6eez  Z7eez  Z8eez  Z9eez  Z:eez  Z;dZ<dZ=dZ>dZ?dZ@dZAdZBd ZCd!ZDd"ZEd#ZFd$ZGd%ZHd&ZI G d'„ d(ej                  «      ZJd)„ ZKd*„ ZL ejš                  eJjœ                  eJeL«        ejž                  eJjœ                  eK«        ej                   eJjœ                  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/
é    N)ÚBytesIOé   )ÚImageÚ	ImageFileÚImagePalette)Úo32leiDDS é   é   é   i   i   i   i  € i  @ i   é   i   i    i @  i €  i    é    é@   iDXT1iDXT3iDXT5é   é   é   éR   éS   éT   é_   é`   éa   éb   éc   c                   ó    — e Zd ZdZdZd„ Z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        |«      }t	        j
                  d	|j                  d
«      «      \  }}}||f| _
        d| _        t	        j
                  d	|j                  d
«      «      \  }}	}
t	        j
                  d|j                  d«      «       t	        j
                  d|j                  d«      «      \  }}|j                  d«      }t	        j
                  d|j                  d«      «      \  }t	        j
                  d|j                  d«      «      }|t        z  r?|t        z  rd| _        nd| _        dd| j                  z   d| j                  ddffg| _        y |t"        z  rut%        |«      D ��ci c]  \  }}|g d¢|   “Œ }}}d}|t        z  r	||d   z  }nd| _        ||d   |d   z   |d   z   z  }dd| j                  z   d|d d d…   ddffg| _        y |t&        z  rUd | _        t)        j*                  d| j                  j                  d!«      «      | _        dd| j                  z   ddfg| _        y |dz   }d}|d"k(  rd#| _        d}�nÐ|d$k(  rd%| _        d&}�nÀ|d'k(  rd(| _        d)}�n°|d*k(  rd+| _        d}d| _        �n™|d,v rd-| _        d.}d| _        �nƒ|d/k(  rd0| _        d.}d| _        �nl|d1k(  �rM|d2z  }t	        j
                  d| j                  j                  d«      «      \  }| j                  j                  d«       |t0        t2        fv rd-| _        d.}d| _        nö|t4        k(  rd0| _        d.}d| _        nÜ|t6        k(  rd3| _        d4}d| _        nÂ|t8        k(  rd5| _        d4}d| _        n¨|t:        t<        fv r
d6| _        d7}n�|t>        k(  rd6| _        d8| j@                  d9<   d7}nn|tB        tD        tF        fv r2dd| j                  z   dd:fg| _        |tF        k(  rd8| j@                  d9<   y d;|› �}tI        |«      ‚d<t        |«      › �}tI        |«      ‚d=d| j                  z   ||| j.                  ffg| _        y c c}}w )>Nr
   znot a DDS filez<Ié|   zUnsupported header size éx   zIncomplete header: z bytesz<3Ié   ÚRGBAz<11Ié,   z<2Ir   z<4Ié   ÚLAÚLÚraw©r   r   r   r   )ÚRÚGÚBÚAÚ ì      ~ ÚRGBé  ÿ é ÿ  éÿ   éÿÿÿÿÚPr   s   DXT1ÚDXT1s   DXT3ÚDXT3r	   s   DXT5ÚDXT5é   s   ATI1ÚBC4)s   ATI2s   BC5UÚBC5é   s   BC5SÚBC5Ss   DX10é   ÚBC6Hé   ÚBC6HSÚBC7é   g]tÑEÝ?Úgamma)r!   r   r   zUnimplemented DXGI format zUnimplemented pixel format Úbcn)%Ú_acceptÚfpÚreadÚSyntaxErrorÚstructÚunpackÚreprÚOSErrorÚlenr   Ú_sizeÚ_modeÚDDPF_LUMINANCEÚDDPF_ALPHAPIXELSÚsizeÚmodeÚtileÚDDPF_RGBÚ	enumerateÚDDPF_PALETTEINDEXED8r   r&   ÚpaletteÚpixel_formatÚDXGI_FORMAT_BC5_TYPELESSÚDXGI_FORMAT_BC5_UNORMÚDXGI_FORMAT_BC5_SNORMÚDXGI_FORMAT_BC6H_UF16ÚDXGI_FORMAT_BC6H_SF16ÚDXGI_FORMAT_BC7_TYPELESSÚDXGI_FORMAT_BC7_UNORMÚDXGI_FORMAT_BC7_UNORM_SRGBÚinfoÚDXGI_FORMAT_R8G8B8A8_TYPELESSÚDXGI_FORMAT_R8G8B8A8_UNORMÚDXGI_FORMAT_R8G8B8A8_UNORM_SRGBÚNotImplementedError)ÚselfÚmsgÚheader_sizeÚheader_bytesÚheaderÚflagsÚheightÚwidthÚpitchÚdepthÚmipmapsÚpfsizeÚpfflagsÚfourccÚbitcountÚmasksÚiÚmaskÚrawmodeÚ
data_startÚnÚdxgi_formats                         úI/var/www/html/acx/venv/lib/python3.12/site-packages/PIL/DdsImagePlugin.pyÚ_openzDdsImageFile._opens   sõ  € Ü�t—w‘w—|‘| A“Ô'Ø"ˆCÜ˜cÓ"Ð"ÜŸ™ t¨T¯W©W¯\©\¸!«_Ó=‰ˆØ˜#ÒØ,¬T°+Ó->Ð,?Ð@ˆCÜ˜#“,ÐØ—w‘w—|‘| K°!¡OÓ4ˆÜˆ|Ó Ò#Ø'¬¨LÓ(9Ð':¸&ÐAˆCÜ˜#“,ÐÜ˜Ó&ˆä%Ÿ}™}¨U°F·K±KÀ³OÓDÑˆˆv�uØ˜V�_ˆŒ
ØˆŒ
ä &§¡¨e°V·[±[À³_Ó EÑˆˆu�gÜ�‰�f˜fŸk™k¨"›oÔ.ô !Ÿ-™-¨¨v¯{©{¸1«~Ó>‰ˆ�Ø—‘˜Q“ˆÜ—m‘m D¨&¯+©+°a«.Ó9‰ˆÜ—‘˜e V§[¡[°£_Ó5ˆØ”^Ò#àÔ)Ò)Ø!�•
à �”
à ¨$¯)©)Ñ!3°Q¸¿¹ÀAÀqÐ8IÐJÐKˆD�IØ”xÒäBKÈEÓBR×S±w°q¸$�TÒ/°Ñ2Ñ2ÐSˆEÑSØˆGØÔ)Ò)Ø˜5 Ñ,Ñ,‘à"�”
Ø�u˜X‘¨¨v©Ñ6¸¸t¹ÑDÑDˆGà ¨$¯)©)Ñ!3°Q¸ÁÀ2À¹ÈÈ1Ð8MÐNÐOˆD�IØÔ+Ò+ØˆDŒJÜ'×+Ñ+¨F°D·G±G·L±LÀÓ4FÓGˆDŒLØ ¨$¯)©)Ñ!3°Q¸Ð<Ð=ˆD�Ià$ q™ˆJØˆAØ˜Ò Ø$*�Ô!Ø’Ø˜7Ò"Ø$*�Ô!Ø’Ø˜7Ò"Ø$*�Ô!Ø’Ø˜7Ò"Ø$)�Ô!Ø�Ø �–
ØÐ-Ñ-Ø$)�Ô!Ø�Ø"�–
Ø˜7Ò"Ø$*�Ô!Ø�Ø"�–
Ø˜7Ó"Ø˜bÑ �
ä!'§¡¨t°T·W±W·\±\À!³_Ó!E‘�Ø—‘—‘˜RÔ ØÔ#;Ô=RÐ"SÑSØ(-�DÔ%Ø�AØ!&�D•JØ Ô$9Ò9Ø(.�DÔ%Ø�AØ!&�D•JØ Ô$9Ò9Ø(.�DÔ%Ø�AØ!&�D•JØ Ô$9Ò9Ø(/�DÔ%Ø�AØ!&�D•JØ Ô%=Ô?TÐ$UÑUØ(-�DÔ%Ø‘AØ Ô$>Ò>Ø(-�DÔ%Ø)0�D—I‘I˜gÑ&Ø‘AØ Ü1Ü.Ü3ð%ñ ð
 #(¨°$·)±)Ñ);¸QÀÐ!OÐ P�D”IØ"Ô&EÒEØ-4˜Ÿ	™	 'Ñ*Øà6°{°mÐD�CÜ-¨cÓ2Ð2à3´D¸³L°>ÐB�Ü)¨#Ó.Ð.ð ˜ §¡Ñ*¨J¸¸D×<MÑ<MÐ8NÐOðˆD�Iùóc Ts   È=Tc                  ó   — y ©N© )rf   Úposs     r|   Ú	load_seekzDdsImageFile.load_seekì   s   € Øó    N)Ú__name__Ú
__module__Ú__qualname__ÚformatÚformat_descriptionr}   r‚   r€   rƒ   r|   r   r   o   s   „ Ø€FØ-Ðòwórrƒ   r   c           
      óú  — | j                   dvrd| j                   › d�}t        |«      ‚| j                   }g d¢}| j                   dv rt        }nt        }|d d d…   }| j                   dv r|t        z  }|j                  d«       t        |«      d	z  }t        |«      d
k  r |j                  d«       t        |«      d
k  rŒ |j                  t        t        «      t        d«      z   t        t        t        z  t        z  t        z  t        z  «      z   t        | j                  «      z   t        | j                   «      z   t        | j                   |z  dz   d	z  «      z   t        d«      z   t        d«      z   t        d«      dz  z   t        d«      z   t        |«      z   t        d«      z   t        |«      z   dj#                  d„ |D «       «      z   t        t$        «      z   t        d«      z   t        d«      z   t        d«      z   t        d«      z   «       | j                   dk(  r/| j'                  «       \  }}	}
}t)        j*                  d|||	|
f«      } t-        j.                  | |dd| j0                  z   d|ddffg«       y )N)r.   r!   r%   r$   zcannot write mode z as DDS)r/   r0   r1   )r%   r$   r2   )r$   r!   r-   r   r
   r   r   rA   é   r   rƒ   c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wr   )Úo32)Ú.0rw   s     r|   ú	<genexpr>z_save.<locals>.<genexpr>  s   è ø€ Ò/ ”3�t—9Ñ/ùs   ‚r!   r&   r'   r   )rR   rK   rO   rT   rP   ÚappendrL   ÚwriterŒ   Ú	DDS_MAGICÚ	DDSD_CAPSÚDDSD_HEIGHTÚ
DDSD_WIDTHÚ
DDSD_PITCHÚDDSD_PIXELFORMATrl   rm   ÚjoinÚDDSCAPS_TEXTUREÚsplitr   Úmerger   Ú_saverQ   )ÚimrE   Úfilenamerg   rx   ru   Úpixel_flagsrt   ÚrÚgÚbÚas               r|   r›   r›   ð   sf  € Ø	‡w�wÐ0Ñ0Ø" 2§7¡7 )¨7Ð3ˆÜ�c‹lÐà�g‰g€GÚ$€EØ	‡w�w�+ÑÜ$‰äˆØ™$˜B˜$‘-ˆØ	‡w�w�.Ñ ØÔ'Ñ'ˆØ�‰�ZÔ ä�5‹z˜A‰~€HÜ
ˆe‹*�qŠ.Ø�‰�QŒô ˆe‹*�q‹.ð ‡H�HÜŒI‹Ü
ˆc‹(ñ	ä
ÜœÑ#¤jÑ0´:Ñ=Ô@PÑPó
ñ	
ô
 ˆb�i‰i‹.ñ	ô ˆb�h‰h‹-ñ	ô ˆr�x‰x˜(Ñ" QÑ&¨1Ñ,Ó
-ñ	.ô ˆa‹&ñ	ô ˆa‹&ñ		ô ˆa‹&�2‰+ñ
	ô ˆb‹'ñ	ô ˆkÓ
ñ	ô ˆa‹&ñ	ô ˆh‹-ñ	ð �(‰(Ñ/¨Ô/Ó
/ñ	0ô  ŒoÓ
ñ!	ô" ˆa‹&ñ#	ô$ ˆa‹&ñ%	ô& ˆa‹&ñ'	ô( ˆa‹&ñ)	ôð. 
‡w�w�&ÒØ—X‘X“Z‰
ˆˆ1ˆa�Ü�[‰[˜ ! Q¨¨1 Ó.ˆÜ‡O�O�B˜˜e V¨b¯g©gÑ%5°q¸7ÀAÀq¸/ÐJÐKÕLrƒ   c                 ó   — | d d dk(  S )Nr
   s   DDS r€   )Úprefixs    r|   rD   rD   !  s   € Ø�"�1ˆ:˜Ñ Ð rƒ   z.dds)QÚ__doc__rH   Úior   r,   r   r   r   Ú_binaryr   rŒ   r‘   r’   r“   r”   r•   r–   ÚDDSD_MIPMAPCOUNTÚDDSD_LINEARSIZEÚ
DDSD_DEPTHÚDDSCAPS_COMPLEXr˜   ÚDDSCAPS_MIPMAPÚDDSCAPS2_CUBEMAPÚDDSCAPS2_CUBEMAP_POSITIVEXÚDDSCAPS2_CUBEMAP_NEGATIVEXÚDDSCAPS2_CUBEMAP_POSITIVEYÚDDSCAPS2_CUBEMAP_NEGATIVEYÚDDSCAPS2_CUBEMAP_POSITIVEZÚDDSCAPS2_CUBEMAP_NEGATIVEZÚDDSCAPS2_VOLUMErP   Ú
DDPF_ALPHAÚDDPF_FOURCCrV   rT   rO   Ú
DDS_FOURCCÚDDS_RGBÚDDS_RGBAÚDDS_LUMINANCEÚDDS_LUMINANCEAÚ	DDS_ALPHAÚDDS_PAL8ÚDDS_HEADER_FLAGS_TEXTUREÚDDS_HEADER_FLAGS_MIPMAPÚDDS_HEADER_FLAGS_VOLUMEÚDDS_HEADER_FLAGS_PITCHÚDDS_HEADER_FLAGS_LINEARSIZEÚ
DDS_HEIGHTÚ	DDS_WIDTHÚDDS_SURFACE_FLAGS_TEXTUREÚDDS_SURFACE_FLAGS_MIPMAPÚDDS_SURFACE_FLAGS_CUBEMAPÚDDS_CUBEMAP_POSITIVEXÚDDS_CUBEMAP_NEGATIVEXÚDDS_CUBEMAP_POSITIVEYÚDDS_CUBEMAP_NEGATIVEYÚDDS_CUBEMAP_POSITIVEZÚDDS_CUBEMAP_NEGATIVEZÚDXT1_FOURCCÚDXT3_FOURCCÚDXT5_FOURCCrb   rc   rd   rY   rZ   r[   r\   r]   r^   r_   r`   r   r›   rD   Úregister_openr‡   Úregister_saveÚregister_extensionr€   rƒ   r|   ú<module>rÔ      s>  ðñ
ó Ý ç ,Ñ ,Ý !ð €	ð €	Ø€Ø€
Ø€
ØÐ ØÐ Ø€Ø€
ð €Ø€Ø€àÐ Ø"Ð Ø"Ð Ø#Ð Ø#Ð Ø#Ð Ø#Ð Ø€ð Ð Ø€
Ø€ØÐ Ø€Ø€ð
 €
Ø
€ØÐ&Ñ&€Ø€ØÐ"2Ñ2€Ø€	Ø€à$ {Ñ2°ZÑ?ÐBRÑRÐ Ø*Ð Ø$Ð Ø#Ð Ø-Ð à€
Ø€	à+Ð Ø*¨^Ñ;Ð Ø+Ð à(Ð+EÑEÐ Ø(Ð+EÑEÐ Ø(Ð+EÑEÐ Ø(Ð+EÑEÐ Ø(Ð+EÑEÐ Ø(Ð+EÑEÐ ð €ð €ð €ð
 !#Ð ØÐ Ø"$Ð ØÐ ØÐ ØÐ ØÐ ØÐ ØÐ ØÐ ØÐ ô~�9×&Ñ&ô ~òB.Mòb!ð €× Ñ �L×'Ñ'¨°wÔ ?Ø €× Ñ �L×'Ñ'¨Ô /Ø €× Ñ ˜×,Ñ,¨fÕ 5rƒ   