§
    œ"²c‚$  ã                   ó6  — d Z ddlZddlmZ ddl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Z/eZ0eZ1eZ2eez  Z3eZ4eez  Z5eez  Z6eez  Z7eez  Z8eez  Z9eez  Z:dZ;dZ<dZ=dZ>dZ?dZ@dZAd ZBd!ZCd"ZDd#ZEd$ZFd%ZGd&ZH G d'„ d(ej        ¦  «        ZId)„ ZJd*„ ZK ejL        eIjM        eIeK¦  «          ejN        eIjM        eJ¦  «          ejO        eIjM        d+¦  «         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/
é    N)ÚBytesIOé   )ÚImageÚ	ImageFile)Úo32leiDDS é   é   é   i   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dS )ÚDdsImageFileÚDDSzDirectDraw Surfacec                 óÚ	  — 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          |¦  «        }t	          j        d	|                     d
¦  «        ¦  «        \  }}}||f| _
        d| _        t	          j        d	|                     d
¦  «        ¦  «        \  }}	}
t	          j        d|                     d¦  «        ¦  «         t	          j        d|                     d¦  «        ¦  «        \  }}|                     d¦  «        }t	          j        d|                     d¦  «        ¦  «        \  }t	          j        d|                     d¦  «        ¦  «        }|t          z  r7|t          z  rd| _        nd| _        dd| j        z   d| j        ddffg| _        d S |t           z  rwd„ t#          |¦  «        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| _        d S |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*k    rd+| _        d,}d| _        �n’|d-k    rd.| _        d,}d| _        �nz|d/k    �rR|d0z  }t	          j        d| j                             d¦  «        ¦  «        \  }| j                             d¦  «         |t&          t(          fv rd+| _        d,}d| _        �n|t*          k    rd.| _        d,}d| _        nç|t,          k    rd1| _        d2}d| _        nË|t.          k    rd3| _        d2}d| _        n¯|t0          t2          fv r
d4| _        d5}n•|t4          k    rd4| _        d6| j        d7<   d5}nv|t8          t:          t<          fv r+dd| j        z   dd8fg| _        |t<          k    r
d6| j        d7<   d S d9|› �}t?          |¦  «        ‚d:t          |¦  «        › �}t?          |¦  «        ‚d;d| j        z   ||| j        ffg| _        d S )<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   c                 ó*   — i | ]\  }}|g d ¢|         “ŒS ))ÚRÚGÚBÚA© )Ú.0ÚiÚmasks      ú4/usr/lib/python3/dist-packages/PIL/DdsImagePlugin.pyú
<dictcomp>z&DdsImageFile._open.<locals>.<dictcomp>—   s*   € ÐSÐSÐS±w°q¸$�TÐ/Ð/Ð/°Ô2ÐSÐSÐSó    Ú ì      ~ ÚRGBé  ÿ é ÿ  éÿ   éÿÿÿÿs   DXT1ÚDXT1s   DXT3ÚDXT3r   s   DXT5ÚDXT5é   s   ATI1ÚBC4s   ATI2Ú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ÚtileÚDDPF_RGBÚ	enumerateÚ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ÚrawmodeÚ
data_startÚnÚdxgi_formats                       r/   Ú_openzDdsImageFile._opens   s>  € Ý�t”w—|’| A‘”Ñ'Ô'ð 	#Ø"ˆCÝ˜cÑ"Ô"Ð"Ýœ t¨T¬W¯\ª\¸!©_¬_Ñ=Ô=‰ˆØ˜#ÒÐØ@­T°+Ñ->Ô->Ð@Ð@ˆCÝ˜#‘,”,ÐØ”w—|’| K°!¡OÑ4Ô4ˆÝˆ|ÑÔ Ò#Ð#ØA­¨LÑ(9Ô(9ÐAÐAÐAˆCÝ˜#‘,”,ÐÝ˜Ñ&Ô&ˆå%œ}¨U°F·K²KÀ±O´OÑDÔDÑˆˆv�uØ˜V�_ˆŒ
ØˆŒ	å &¤¨e°V·[²[À±_´_Ñ EÔ EÑˆˆu�gÝŒ�f˜fŸkšk¨"™oœoÑ.Ô.Ð.õ !œ-¨¨v¯{ª{¸1©~¬~Ñ>Ô>‰ˆ�Ø—’˜Q‘”ˆÝ”m D¨&¯+ª+°a©.¬.Ñ9Ô9‰ˆÝ”˜e V§[¢[°¡_¤_Ñ5Ô5ˆØ•^Ñ#ð Y	àÕ)Ñ)ð  Ø �”	�	à�”	à ¨$¬)Ñ!3°Q¸¼ÀAÀqÐ8IÐJÐKˆDŒIˆIˆIØ•xÑð Q	àSÐSÅ)ÈEÑBRÔBRÐSÑSÔSˆEØˆGØÕ)Ñ)ð "Ø˜5 Ô,Ñ,��à!�”	Ø�u˜X”¨¨v¬Ñ6¸¸t¼ÑDÑDˆGà ¨$¬)Ñ!3°Q¸ÀÀÀ2À¼ÈÈ1Ð8MÐNÐOˆDŒIˆIˆIà$ q™ˆJØˆAØ˜Ò Ð Ø$*�Ô!Ø�‘Ø˜7Ò"Ð"Ø$*�Ô!Ø�‘Ø˜7Ò"Ð"Ø$*�Ô!Ø�‘Ø˜7Ò"Ð"Ø$)�Ô!Ø�Ø�”	‘	Ø˜7Ò"Ð"Ø$)�Ô!Ø�Ø!�”	‘	Ø˜7Ò"Ð"Ø$*�Ô!Ø�Ø!�”	‘	Ø˜7Ò"Ñ"Ø˜bÑ �
å!'¤¨t°T´W·\²\À!±_´_Ñ!EÔ!E‘�Ø”—’˜RÑ Ô Ð ØÕ#;Õ=RÐ"SÐSÐSØ(-�DÔ%Ø�AØ %�D”I‘IØ Õ$9Ò9Ð9Ø(.�DÔ%Ø�AØ %�D”I�IØ Õ$9Ò9Ð9Ø(.�DÔ%Ø�AØ %�D”I�IØ Õ$9Ò9Ð9Ø(/�DÔ%Ø�AØ %�D”I�IØ Õ%=Õ?TÐ$UÐUÐUØ(-�DÔ%Ø�A�AØ Õ$>Ò>Ð>Ø(-�DÔ%Ø)0�D”I˜gÑ&Ø�A�AØ Ý1Ý.Ý3ð%ð ð ð
 #(¨°$´)Ñ);¸QÀÐ!OÐ P�D”IØ"Õ&EÒEÐEØ-4˜œ	 'Ñ*Ø�FàD°{ÐDÐD�CÝ-¨cÑ2Ô2Ð2àBµD¸±L´LÐBÐB�Ý)¨#Ñ.Ô.Ð.ð ˜ ¤Ñ*¨J¸¸DÔ<MÐ8NÐOðˆDŒIˆIˆIr1   c                 ó   — d S ©Nr+   )rh   Úposs     r/   Ú	load_seekzDdsImageFile.load_seekè   s   € Øˆr1   N)Ú__name__Ú
__module__Ú__qualname__ÚformatÚformat_descriptionr|   r€   r+   r1   r/   r   r   o   sA   € € € € € Ø€FØ-Ððsð sð sðjð ð ð ð r1   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  }|                     d¦  «         t          |¦  «        d	z  }t          |¦  «        d
k     r(|                     d¦  «         t          |¦  «        d
k     °(|                     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                     d„ |D ¦   «         ¦  «        z   t          t$          ¦  «        z   t          d¦  «        z   t          d¦  «        z   t          d¦  «        z   t          d¦  «        z   ¦  «         | j         dk    r2|                      ¦   «         \  }}	}
}t)          j        d|||	|
f¦  «        } t-          j        | |dd| j        z   d|ddffg¦  «         d S )N)r4   r   r#   r"   zcannot write mode z as DDS)r5   r6   r7   )r#   r"   r8   )r"   r   r3   r
   r	   r   r   rF   é   r   r1   c              3   ó4   K  — | ]}t          |¦  «        V — Œd S r~   )Úo32)r,   r.   s     r/   ú	<genexpr>z_save.<locals>.<genexpr>  s(   è è € Ð/Ð/ •3�t‘9”9Ð/Ð/Ð/Ð/Ð/Ð/r1   r   r$   r%   r   )rS   rP   rT   rX   rU   ÚappendrQ   Úwriter‰   Ú	DDS_MAGICÚ	DDSD_CAPSÚDDSD_HEIGHTÚ
DDSD_WIDTHÚ
DDSD_PITCHÚDDSD_PIXELFORMATrn   ro   ÚjoinÚDDSCAPS_TEXTUREÚsplitr   Úmerger   Ú_saverV   )ÚimrJ   Úfilenameri   rx   rw   Úpixel_flagsrv   ÚrÚgÚbÚas               r/   r—   r—   ì   sÍ  € Ø	„wÐ0Ð0Ð0Ø3 2¤7Ð3Ð3Ð3ˆÝ�c‰lŒlÐàŒg€GØ$Ð$Ð$€EØ	„w�+ÐÐÝ$ˆˆåˆØ˜$˜$˜B˜$”-ˆØ	„w�.Ð Ð ØÕ'Ñ'ˆØ�Š�ZÑ Ô Ð å�5‰zŒz˜A‰~€HÝ
ˆe‰*Œ*�qŠ.ˆ.Ø�Š�Q‰Œˆõ ˆe‰*Œ*�qŠ.ˆ.ð ‡H‚HÝ�I‰ŒÝ
ˆc‰(Œ(ñ	å
Ý�Ñ#¥jÑ0µ:Ñ=Õ@PÑPñ
ô 
ñ	
õ
 ˆbŒi‰.Œ.ñ	õ ˆbŒh‰-Œ-ñ	õ ˆrŒx˜(Ñ" QÑ&¨1Ñ,Ñ
-Ô
-ñ	.õ ˆa‰&Œ&ñ	õ ˆa‰&Œ&ñ		õ ˆa‰&Œ&�2‰+ñ
	õ ˆb‰'Œ'ñ	õ ˆkÑ
Ô
ñ	õ ˆa‰&Œ&ñ	õ ˆh‰-Œ-ñ	ð �(Š(Ð/Ð/¨Ð/Ñ/Ô/Ñ
/Ô
/ñ	0õ  �oÑ
Ô
ñ!	õ" ˆa‰&Œ&ñ#	õ$ ˆa‰&Œ&ñ%	õ& ˆa‰&Œ&ñ'	õ( ˆa‰&Œ&ñ)	ñô ð ð. 
„w�&ÒÐØ—X’X‘Z”Z‰
ˆˆ1ˆa�ÝŒ[˜ ! Q¨¨1 Ñ.Ô.ˆÝ„O�B˜˜e V¨b¬gÑ%5°q¸7ÀAÀq¸/ÐJÐKÑLÔLÐLÐLÐLr1   c                 ó   — | d d…         dk    S )Nr	   s   DDS r+   )Úprefixs    r/   rI   rI     s   € Ø�"�1�"Œ:˜Ò Ð r1   z.dds)PÚ__doc__rM   Úior   r2   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_VOLUMErU   Ú
DDPF_ALPHAÚDDPF_FOURCCÚDDPF_PALETTEINDEXED8rX   rT   Ú
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_FOURCCrd   re   rf   r[   r\   r]   r^   r_   r`   ra   rb   r   r—   rI   Úregister_openr„   Úregister_saveÚregister_extensionr+   r1   r/   ú<module>rÑ      s¶  ðð
ð 
ð €€€Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !ð €	ð €	Ø€Ø€
Ø€
ØÐ ØÐ Ø€Ø€
ð €Ø€Ø€àÐ Ø"Ð Ø"Ð Ø#Ð Ø#Ð Ø#Ð Ø#Ð Ø€ð Ð Ø€
Ø€ØÐ Ø€Ø€ð
 €
Ø
€ØÐ&Ñ&€Ø€ØÐ"2Ñ2€Ø€	Ø€à$ {Ñ2°ZÑ?ÐBRÑRÐ Ø*Ð Ø$Ð Ø#Ð Ø-Ð à€
Ø€	à+Ð Ø*¨^Ñ;Ð Ø+Ð à(Ð+EÑEÐ Ø(Ð+EÑEÐ Ø(Ð+EÑEÐ Ø(Ð+EÑEÐ Ø(Ð+EÑEÐ Ø(Ð+EÑEÐ ð €ð €ð €ð
 !#Ð ØÐ Ø"$Ð ØÐ ØÐ ØÐ ØÐ ØÐ ØÐ ØÐ ØÐ ðzð zð zð zð z�9Ô&ñ zô zð zðz.Mð .Mð .Mðb!ð !ð !ð €Ô �LÔ'¨°wÑ ?Ô ?Ð ?Ø €Ô �LÔ'¨Ñ /Ô /Ð /Ø €Ô ˜Ô,¨fÑ 5Ô 5Ð 5Ð 5Ð 5r1   