
    &Th$                     b   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j                  eIj                  eIeK        ej                  eIj                  eJ        ej                  eIj                  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)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y)DdsImageFileDDSzDirectDraw Surfacec                 p	   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 |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| _        nl|d/k(  rM|d0z  }t	        j
                  d| j                  j                  d            \  }| j                  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| j6                  d7<   d5}nn|t8        t:        t<        fv r2dd| j                  z   dd8fg| _        |t<        k(  rd6| j6                  d7<   y d9| }t?        |      d:t        |       }t?        |      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         s   DXT1DXT1s   DXT3DXT3r   s   DXT5DXT5   s   ATI1BC4s   ATI2BC5   s   BC5SBC5Ss   DX10   BC6H   BC6HSBC7   g]tE?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imaskrawmode
data_startndxgi_formats                         Z/home/stella.sw7ft.com/public_html/venv/lib/python3.12/site-packages/PIL/DdsImagePlugin.py_openzDdsImageFile._opens   s   tww||A'"Cc""tTWW\\!_=#,T+->,?@C#,ww||K!O4|#'L(9':&AC#,&%}}UFKKODvuV_
	 &eV[[_ Eugffkk"o. !--v{{1~>QmmD&++a.9eV[[_5^#)) 		$))!3QAq8IJKDIxBKEBRSwq$T/22SESG))5,,!	uXv6tDDG$))!3Q218MNODI$qJA $*!7"$*!7"$*!7"$)!	7"$)!!	7"$*!!	7"b 
!'tTWW\\!_!ER #;=R"SS(-D%A %DI $99(.D%A %DI $99(.D%A %DI $99(/D%A %DI %=?T$UU(-D%A $>>(-D%)0DIIg&A 1.3% 
 #($)));Q!O PDI"&EE-4		'*6{mDC-c223DL>B)#.. *JD<M<M8NODI[ Ts   =R2c                      y N )r`   poss     rv   	load_seekzDdsImageFile.load_seek   s        N)__name__
__module____qualname__formatformat_descriptionrw   r|   rz   r}   rv   r   r   o   s    F-sj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-   r.   r/   )r#   r"   r0   )r"   r   r+   r
   r	   r   r   r>      r   r}   c              3   2   K   | ]  }t        |        y wry   )o32).0rq   s     rv   	<genexpr>z_save.<locals>.<genexpr>  s     /3t9/s   r   r$   r%   r   )rK   rH   rL   rP   rM   appendrI   writer   	DDS_MAGIC	DDSD_CAPSDDSD_HEIGHT
DDSD_WIDTH
DDSD_PITCHDDSD_PIXELFORMATrf   rg   joinDDSCAPS_TEXTUREsplitr   merger   _saverN   )imrB   filenamera   rr   ro   pixel_flagsrn   rgbas               rv   r   r      sf   	ww00"277)73clggG$E	ww+$$B$-	ww. ''Z 5zA~H
e*q.Q e*q. HHI
c(	
#j0:=@PP
	

 bii.	 bhh-	 rxx("Q&1,
-	. a&	 a&		 a&2+
	 b'	 k
	 a&	 h-	 ((//
/	0  o
!	" a&#	$ a&%	& a&'	( a&)	. 
ww&XXZ
1a[[!Q1.OOBeVbgg%5q7Aq/JKLr}   c                     | d d dk(  S )Nr	   s   DDS rz   )prefixs    rv   rA   rA     s    "1:  r}   z.dds)P__doc__rE   ior   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_VOLUMErM   
DDPF_ALPHADDPF_FOURCCDDPF_PALETTEINDEXED8rP   rL   
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_FOURCCr\   r]   r^   rS   rT   rU   rV   rW   rX   rY   rZ   r   r   rA   register_openr   register_saveregister_extensionrz   r}   rv   <module>r      s;  
    ! 	 	

  
  " " # # # #   
 
 

&&"22	${2Z?BRR * $ # - 
	+ *^; + (+EE (+EE (+EE (+EE (+EE (+EE    
 !#  "$         z9&& zz.Mb!   L''w ?   L'' /   ,,f 5r}   