
    \
j                        d Z ddlZddlZddlT ddlmZ ddlmZ ddlmZ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 G d d          Z  G d de           Z! G d de           Z"e#ej$        fe%ej&        fe'ej(        fe'ej(        fe)ej*        fe)ej*        fdZ+ G d d ej,                  Z-d! Z.d" Z/dS )#zWDDS texture loader.

Reference: http://msdn2.microsoft.com/en-us/library/bb172993.aspx
    N)*)CompressedImageData)codecs)s3tcImageDecodeException            i   i   i   i   @   i  @ i   i   i   i    i @  i   i    c                   J    e Zd Zg Zd Zd Zed             Zed             ZdS )_FileStructc                 .   t          |          |                                 k     rt          d          t          j        |                                 |          }t          j        | j        |d           D ]\  }}t          | |d         |           d S )NzNot a DDS file)	fillvaluer   )
lenget_sizer   structunpack
get_format	itertoolszip_longest_fieldssetattr)selfdataitemsfieldvalues        Q/DATA/AppData/hermes/venv/lib/python3.11/site-packages/pyglet/image/codecs/dds.py__init__z_FileStruct.__init__T   s    t99t}}&&&'7888doo//66%1$,QUVVV 	+ 	+LE5D%(E****	+ 	+    c                       j         j        }|dddt          |          dz   z  z                       fd j        D                       dS )N(z, 
%s r   c                 l    g | ]0}|d          dt          t          |d                              1S )r   z = )reprgetattr).0r   r   s     r   
<listcomp>z(_FileStruct.__repr__.<locals>.<listcomp>^   s?    ]]]u%(((DuQx)@)@$A$A$AB]]]r!   ))	__class____name__r   joinr   )r   names   ` r   __repr__z_FileStruct.__repr__[   so    ~&44(cSYY].C"D!J!J]]]]PTP\]]]"_ "_ "_ "_ ` 	`r!   c                 P    dd                     d | j        D                       z   S )N< c                     g | ]
}|d          S )r    )r(   fs     r   r)   z*_FileStruct.get_format.<locals>.<listcomp>b   s    888qad888r!   )r-   r   clss    r   r   z_FileStruct.get_format`   s*    RWW88CK8889999r!   c                 N    t          j        |                                           S N)r   calcsizer   r6   s    r   r   z_FileStruct.get_sized   s    s~~//000r!   N)	r,   
__module____qualname__r   r    r/   classmethodr   r   r4   r!   r   r   r   Q   sp        G+ + +` ` `
 : : [: 1 1 [1 1 1r!   r   c                   &     e Zd Zg dZ fdZ xZS )DDSURFACEDESC2))dwMagic4sdwSizeIdwFlagsrD   )dwHeightrD   )dwWidthrD   )dwPitchOrLinearSizerD   )dwDepthrD   )dwMipMapCountrD   )dwReserved144s)ddpfPixelFormat32s)dwCaps1rD   )dwCaps2rD   )dwCapsReserved8s)dwReserved2rD   c                     t          t          |                               |           t          | j                  | _        d S r9   )superr?   r    DDPIXELFORMATrN   )r   r   r+   s     r   r    zDDSURFACEDESC2.__init__{   s:    nd##,,T222,T-ABBr!   )r,   r;   r<   r   r    __classcell__)r+   s   @r   r?   r?   i   sR          G"C C C C C C C C Cr!   r?   c                       e Zd Zg dZdS )rW   )rB   rE   )dwFourCCrA   )dwRGBBitCountrD   )
dwRBitMaskrD   )
dwGBitMaskrD   )
dwBBitMaskrD   )dwRGBAlphaBitMaskrD   N)r,   r;   r<   r   r4   r!   r   rW   rW      s        	 	 	GGGr!   rW   ))   DXT1F)r`   T)   DXT3F)ra   T)   DXT5F)rb   Tc                       e Zd Zd Zd ZdS )DDSImageDecoderc                     dgS )Nz.ddsr4   )r   s    r   get_file_extensionsz#DDSImageDecoder.get_file_extensions   s	    xr!   c                 8   |                     t                                                    }t          |          }|j        dk    s|j        dk    rt          d          |j        }|j        }d}|j        t          z  rt          d          |j        t          z  r|j        }|j        j        dk    rt          d          |j        t          z  rt          d          |j        j        t          z  st          d	          |j        j        d
k    }|j        j        |f}	|	t$          vrt          d|j        j        z            t$          |	         \  }
}|
t&          k    rd}nd}g }||}}t)          |          D ]X}|s|s nQ|sd}|sd}|dz   dz  |dz   dz  z  |z  }|                     |          }|                    |           |dz  }|dz  }Yt-          |||
|d
         d|          }d
}|dd          D ]}|dz  }|                    ||           |S )Ns   DDS |   z$Invalid DDS file (incorrect header).r   zVolume DDS files unsupported    z*Invalid DDS file (incorrect pixel format).zCubemap DDS files unsupportedz(Uncompressed DDS textures not supported.r   z"Unsupported texture compression %sr         r
   GL_EXT_texture_compression_s3tc)readr?   r   r@   rC   r   rH   rG   rF   
DDSD_DEPTHDDSD_MIPMAPCOUNTrK   rN   rQ   DDSCAPS2_CUBEMAPDDPF_FOURCCr_   rZ   _compression_formatsGL_COMPRESSED_RGB_S3TC_DXT1_EXTrangeappendr   set_mipmap_data)r   filefilenameheaderdescwidthheightmipmaps	has_alphaselectordformatdecoder
block_sizedataswhisizer   imagelevels                        r   decodezDDSImageDecoder.decode   ss   >224455f%%<7""dkS&8&8&'MNNN<*$ 	G&'EFFF<** 	)(G&",,&'STTT<** 	H&'FGGG#+k9 	S&'QRRR(:a?	(19=///&'KdNbNk'klll/9555JJJf1w 	 	A Q   UqLa!e\2Z?D99T??DLL!GA!GAA#E67E!HFgipqq!""I 	/ 	/DQJE!!%....r!   N)r,   r;   r<   rf   r   r4   r!   r   rd   rd      s2          : : : : :r!   rd   c                       t                      gS r9   )rd   r4   r!   r   get_decodersr      s    r!   c                      g S r9   r4   r4   r!   r   get_encodersr      s    Ir!   )0__doc__r   r   	pyglet.glpyglet.imager   r   pyglet.image.codecsr   r   	DDSD_CAPSDDSD_HEIGHT
DDSD_WIDTH
DDSD_PITCHDDSD_PIXELFORMATro   DDSD_LINEARSIZErn   DDPF_ALPHAPIXELSrq   DDPF_RGBDDSCAPS_COMPLEXDDSCAPS_TEXTUREDDSCAPS_MIPMAPrp   DDSCAPS2_CUBEMAP_POSITIVEXDDSCAPS2_CUBEMAP_NEGATIVEXDDSCAPS2_CUBEMAP_POSITIVEYDDSCAPS2_CUBEMAP_NEGATIVEYDDSCAPS2_CUBEMAP_POSITIVEZDDSCAPS2_CUBEMAP_NEGATIVEZDDSCAPS2_VOLUMEr   r?   rW   rs   decode_dxt1_rgb GL_COMPRESSED_RGBA_S3TC_DXT1_EXTdecode_dxt1_rgba GL_COMPRESSED_RGBA_S3TC_DXT3_EXTdecode_dxt3 GL_COMPRESSED_RGBA_S3TC_DXT5_EXTdecode_dxt5rr   ImageDecoderrd   r   r   r4   r!   r   <module>r      s  H 
          , , , , , ,       : : : : : : : : !	  
 
      
      ' ( ( ( ( ( ( %1 1 1 1 1 1 1 10C C C C C[ C C C.
 
 
 
 
K 
 
 
 79MN79NO79IJ79IJ79IJ79IJ  > > > > >f) > > >B      r!   