
    ^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        R/home/agentuser/manim-venv/lib/python3.11/site-packages/pyglet/image/codecs/dds.py__init__z_FileStruct.__init__1   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__8   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>?   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_sizeA   s    s~~//000r!   N)	r,   
__module____qualname__r   r    r/   classmethodr   r   r4   r!   r   r   r   .   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          | j                  | _        d S r9   )superr    DDPIXELFORMATrN   )r   r   r+   s     r   r    zDDSURFACEDESC2.__init__X   s4    ,T-ABBr!   )r,   r;   r<   r   r    __classcell__)r+   s   @r   r?   r?   F   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_extensionsu   s	    xr!   c                 \   |st          |d          }|                    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 )Nrbs   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)open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   filenamefileheaderdescwidthheightmipmaps	has_alphaselectordformatdecoder
block_sizedataswhisizer   imagelevels                        r   decodezDDSImageDecoder.decodex   s    	($''D>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   t   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_PIXELFORMATrq   DDSD_LINEARSIZErp   DDPF_ALPHAPIXELSrs   DDPF_RGBDDSCAPS_COMPLEXDDSCAPS_TEXTUREDDSCAPS_MIPMAPrr   DDSCAPS2_CUBEMAP_POSITIVEXDDSCAPS2_CUBEMAP_NEGATIVEXDDSCAPS2_CUBEMAP_POSITIVEYDDSCAPS2_CUBEMAP_NEGATIVEYDDSCAPS2_CUBEMAP_POSITIVEZDDSCAPS2_CUBEMAP_NEGATIVEZDDSCAPS2_VOLUMEr   r?   rW   ru   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_dxt5rt   ImageDecoderrd   r   r   r4   r!   r   <module>r      s!   
          , , , , , ,       : : : : : : : : !	  
 
      
      ' ( ( ( ( ( ( %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  A A A A Af) A A AH      r!   