
    \
j^7                         d Z ddlZddlZddlT ddlmZ ddlmZmZ  ej        dej	                  Z
 ej        dej	                  Z G d	 d
e          Zd Zd Zd Zd ZdS )zSoftware decoder for S3TC compressed texture (i.e., DDS).

http://oss.sgi.com/projects/ogl-sample/registry/EXT/texture_compression_s3tc.txt
    N)*)gl_info)AbstractImageTexturez........)flagsz................c                   L     e Zd ZdZ fdZd Zd Z ee          ZddZ	 xZ
S )PackedImageDataNc                     t          t          |                               ||           || _        || _        || _        d S )N)superr	   __init__formatpacked_formatdata)selfwidthheightr   r   r   	__class__s         R/DATA/AppData/hermes/venv/lib/python3.11/site-packages/pyglet/image/codecs/s3tc.pyr   zPackedImageData.__init__7   s=    ot$$--eV<<<*			    c                    | j         t          k    rsd}t          j        | j        | j        z  dz  z              }| j        D ].}|dz  dz  ||dz   <   |dz  dz	  ||dz   <   |dz  dz	  ||<   |dz  }/|| _        t          | _         d S d S )	Nr                       )r   GL_UNSIGNED_SHORT_5_6_5ctypesc_ubyter   r   r   GL_UNSIGNED_BYTE)r   ioutcs       r   unpackzPackedImageData.unpack=   s    !888A>TZ$+%=%ABEECY  H?AaCI!+AaCf**AQDI!1D 98r   c                    | j         r| j         S t          j        t          | j        | j                  }t          |j        |j                   t          |j        t          t                     t          j        dd          r	 |                                  t          |j        |j        | j        | j        | j        d| j        | j        | j        	  	         || _         |S )Nr   r   Tr   )_current_texturer   create_for_sizeGL_TEXTURE_2Dr   r   glBindTexturetargetidglTexParameteriGL_TEXTURE_MIN_FILTER	GL_LINEARr   have_versionr%   glTexImage2Dlevelr   r   r   )r   textures     r   _get_texturezPackedImageData._get_textureJ   s      	)(()4:t{4 4gngj111(=yIII#Aq)) 	 	KKMMMW^W]KT[!K+TY	8 	8 	8 !(r   Fc                 *    |                                  S )zThe parameters 'rectangle' and 'force_rectangle' are ignored.
           See the documentation of the method 'AbstractImage.get_texture' for
           a more detailed documentation of the method. )r4   )r   	rectangleforce_rectangles      r   get_texturezPackedImageData.get_texture_   s       """r   )FF)__name__
__module____qualname__r'   r   r%   r4   propertyr3   r8   __classcell__)r   s   @r   r	   r	   4   s            2 2 2  & h|$$G# # # # # # # #r   r	   c           	      V   t          j        ||z  z              }d}t                              |           D ]\  }}}}}	}
}}t	          |          t	          |          dz  z  }t	          |          t	          |          dz  z  }t	          |	          t	          |
          dz  z  t	          |          dz  z  t	          |          dz  z  }|dz  }|dz  dz	  }|dz  d	z	  }	|dz  }|dz  dz	  }|dz  d	z	  }
|}t          d
          D ]}t          d
          D ]}|dz  }|dk    r|||<   n|dk    r|||<   n|dk    r||k    rd||<   n|dk    r(||k    r"d|z  |z   dz  }d|z  |z   dz  }d|	z  |
z   dz  }nT|dk    r(||k    r"|d|z  z   dz  }|d|z  z   dz  }|	d|
z  z   dz  }n&|dk    r||k    sJ ||z   dz  }||z   dz  }|	|
z   dz  }||dz  z  |d	z  z  ||<   |dz  }|dz  }||d
z
  z  }|d
z   |z  dk    }||dz  |z  d
z   z  }t          ||t          t          |          S )Nr   r         r   r      r         r   r   r   )	r   c_uint16split_8bytefindallordranger	   GL_RGBr   )r   r   r   r#   image_offsetc0_loc0_hic1_loc1_hib0b1b2b3color0color1bitsr0g0r1g1r"   yxcodergbadvance_rows                               r   decode_dxt1_rgbra   f   s   ?efn-
0
0C L6A6I6I$6O6O .4 .42ueUBBUc%jjAo-Uc%jjAo-2wwRA%B25B2Ed]un"vo"$d]un"vo"$ q 	 	A1XX  cz199#CFFQYY#CFFQYY6V#3#3CFFqyyVf__Vb[Q.Vb[Q.Vb[Q.v!b&[Q.!b&[Q.!b&[Q.#qyyVv-=-=-=="WN"WN"WNaZ!r'1CF
QNAA $a'50A5	K/!335&&2I3OOOr   c           	         t          j        ||z  dz  z              }|dz  }d}t                              |           D ]\  }}}}	}
}}}t	          |          t	          |          dz  z  }t	          |          t	          |	          dz  z  }t	          |
          t	          |          dz  z  t	          |          dz  z  t	          |          dz  z  }|dz  }|dz  d	z	  }|d
z  dz	  }
|dz  }|dz  d	z	  }|d
z  dz	  }|}t          d          D ]}t          d          D ]}|dz  }d}|dk    r|||
}}}n|dk    r|||}}}n|dk    r||k    r	dx}x}x}}n|dk    r(||k    r"d|z  |z   dz  }d|z  |z   dz  }d|
z  |z   dz  }nT|dk    r(||k    r"|d|z  z   dz  }|d|z  z   dz  }|
d|z  z   dz  }n&|dk    r||k    sJ ||z   dz  }||z   dz  }|
|z   dz  }|dz  ||<   |dz  ||dz   <   |dz  ||dz   <   |dz  ||dz   <   |dz  }|dz  }||dz
  z  }
|dz   |z  dk    }||dz  |z  dz   z  }t          ||t          t          |          S )NrC   r   r   r   r?   r@   r   r   rA   r   rB   r      r   )	r   r    rE   rF   rG   rH   r	   GL_RGBAr!   )r   r   r   r#   pitchrJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   r"   rZ   r[   r\   ar]   r^   r_   r`   s                                 r   decode_dxt1_rgbarg      s%   >UV^a/0
3
3CQJE L6A6I6I$6O6O 35 352ueUBBUc%jjAo-Uc%jjAo-2wwRA%B25B2Ed]un"vo"$d]un"vo"$ q !	 !	A1XX  cz199 "b!qAAQYY "b!qAAQYY6V#3#3$%%A%%AqyyVf__Vb[Q.Vb[Q.Vb[Q.v!b&[Q.!b&[Q.!b&[Q.#qyyVv-=-=-=="WN"WN"WNaA6AaC6AaC6AaC
QOAA $b(E1Q6	K/"445&'3CSIIIr   c                    t          j        ||z  dz  z              }|dz  }d}t                              |           D ]\  }}}}	}
}}}}}}}}}}}t	          |          t	          |          dz  z  }t	          |          t	          |          dz  z  }t	          |          t	          |          dz  z  t	          |          dz  z  t	          |          dz  z  }t	          |          t	          |          dz  z  t	          |          dz  z  t	          |	          dz  z  t	          |
          dz  z  t	          |          dz  z  t	          |          d	z  z  t	          |          d
z  z  }|dz  }|dz  dz	  }|dz  dz	  }|dz  }|dz  dz	  }|dz  dz	  }|}t          d          D ]}t          d          D ]} |dz  }!|dz  }"|!dk    r|||}%}$}#n|!dk    r|||}%}$}#n|!dk    r||k    rdx}#x}$}%n|!dk    r(||k    r"d|z  |z   dz  }#d|z  |z   dz  }$d|z  |z   dz  }%nT|!dk    r(||k    r"|d|z  z   dz  }#|d|z  z   dz  }$|d|z  z   dz  }%n&|!dk    r||k    sJ ||z   dz  }#||z   dz  }$||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
  z  }|dz   |z  dk    }&||dz  |&z  dz   z  }t          ||t          t          |          S )NrC   r   r   r   r?   r@       (   0   8   r   r   rA   r   rB   r      r   	r   r    split_16byterF   rG   rH   r	   rd   r!   )'r   r   r   r#   re   rJ   a0a1a2a3a4a5a6a7rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   alpharV   rW   rX   rY   r"   rZ   r[   r\   rf   r]   r^   r_   r`   s'                                          r   decode_dxt3ry      s   >UV^a/0
3
3CQJE L )006685 85 	RRRR	ue	RRUc%jjAo-Uc%jjAo-2wwRA%B25B2EB#b''Q,&RB6RBFGGrMGGrM*,/GGrM:<?GGrMJ d]un"vo"$d]un"vo"$ q "	 "	A1XX    czCK199 "b!qAAQYY "b!qAAQYY6V#3#3 !MAMAAqyyVf__Vb[Q.Vb[Q.Vb[Q.v!b&[Q.!b&[Q.!b&[Q.#qyyVv-=-=-=="WN"WN"WNaA6AaC6AaC6AaC
!QOAA $b(E1Q6	K/"445&'3CSIIIr   c                    t          j        ||z  dz  z              }|dz  }d}t                              |           D ]\  }}}}	}
}}}}}}}}}}}t	          |          t	          |          dz  z  }t	          |          t	          |          dz  z  }t	          |          }t	          |          }t	          |          t	          |          dz  z  t	          |          dz  z  t	          |          dz  z  }t	          |          t	          |	          dz  z  t	          |
          dz  z  t	          |          dz  z  t	          |          dz  z  t	          |          dz  z  }|d	z  }|d
z  dz	  }|dz  dz	  }|d	z  }|d
z  dz	  }|dz  dz	  }|}t          d          D ]}t          d          D ]} |dz  }!|dz  }"|!dk    r|||}%}$}#n|!dk    r|||}%}$}#n|!dk    r||k    rdx}#x}$}%n|!dk    r(||k    r"d|z  |z   dz  }#d|z  |z   dz  }$d|z  |z   dz  }%nT|!dk    r(||k    r"|d|z  z   dz  }#|d|z  z   dz  }$|d|z  z   dz  }%n&|!dk    r||k    sJ ||z   dz  }#||z   dz  }$||z   dz  }%|"dk    r|}&n|"dk    r|}&n||k    r|"dk    rd|z  d|z  z   dz  }&n|"dk    rd|z  d|z  z   dz  }&n|"dk    rd|z  d|z  z   dz  }&n|"dk    rd|z  d|z  z   dz  }&n|"dk    rd|z  d|z  z   dz  }&n~|"dk    sJ d|z  d|z  z   dz  }&ng|"dk    rd|z  d|z  z   dz  }&nR|"dk    rd|z  d|z  z   dz  }&n=|"dk    rd|z  d|z  z   dz  }&n(|"dk    rd|z  d|z  z   dz  }&n|"dk    rd}&n
|"dk    sJ d}&|%dz  ||<   |$dz  ||dz   <   |#dz  ||dz   <   |&||dz   <   |dz  }|dz  }|dz  }||dz
  z  }|dz   |z  dk    }'||dz  |'z  dz   z  }t          ||t          t          |          S )NrC   r   r   r   r?   r@   ri   rj   r   r   rA   r   rB   r      r      rc   rn   )(r   r   r   r#   re   rJ   alpha0alpha1ab0ab1ab2ab3ab4ab5rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   abitsrV   rW   rX   rY   r"   rZ   r[   r\   acoder]   r^   r_   rf   r`   s(                                           r   decode_dxt5r   "  sZ   >UV^a/0
3
3CQJE L )0066[5 [5 	c3S#	ue	RRUc%jjAo-Uc%jjAo-VV2wwRA%B25B2EC3s88q=(3s88r>9CHHNJHHN XX^, d]un"vo"$d]un"vo"$ q C	 C	A1XX A Acz199 "b!qAAQYY "b!qAAQYY6V#3#3 !MAMAAqyyVf__Vb[Q.Vb[Q.Vb[Q.v!b&[Q.!b&[Q.!b&[Q.#qyyVv-=-=-=="WM"WM"WMA::AAaZZAAf__zzZ!f*4:!Z!f*4:!Z!f*4:!Z!f*4:!Z!f*4:$zzzzZ!f*4:zzZ!f*4:!Z!f*4:!Z!f*4:!Z!f*4:!$zzzzaA6AaC6AaCAaC
!QOAA $b(E1Q6	K/"445&'3CSIIIr   )__doc__r   re	pyglet.glr   pyglet.imager   r   compileDOTALLrE   ro   r	   ra   rg   ry   r    r   r   <module>r      s  H 
  				           / / / / / / / /bj	222rz(")444/# /# /# /# /#m /# /# /#d6P 6P 6Pr<J <J <J~AJ AJ AJHdJ dJ dJ dJ dJr   