
    .~hv%                     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]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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                         [/var/www/peopleoo.sandbox-dev.co.uk/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++DJ'++FDGGLL4FGDL$))!3Q<=DI$qJA $*!7"$*!7"$*!7"$)! 
--$)!"
7"$*!"
7"b 
!'tTWW\\!_!ER #;=R"SS(-D%A!&DJ $99(.D%A!&DJ $99(.D%A!&DJ $99(/D%A!&DJ %=?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DIc 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     /3t9/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   	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 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	${2Z?BRR * $ # - 
	+ *^; + (+EE (+EE (+EE (+EE (+EE (+EE    
 !#  "$         ~9&& ~B.Mb!   L''w ?   L'' /   ,,f 5r   