
    kjt,                       d dl mZ d dlZd dlmZmZ d dlZd dlZd dlZd dl	m
Z
 d dlmZ d dlmZ ddlmZ e
j                            ej                            ej                            e          d	                      G d
 d          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d d          Z G d de          ZdS )    )annotationsN)AnyOptional)settings)ProgramDescription)programs   )Meshr   c                  H    e Zd ZdZddd	Zedd            Z	 dddZddZdS )MeshProgramzJ
    Describes how a mesh is rendered using a specific shader program
    NprogramOptional[moderngl.Program]kwargsr   returnNonec                    || _         dS )zMInitialize.

        Args:
            program: The moderngl program
        Nr   )selfr   r   s      Y/home/agentuser/manim-venv/lib/python3.11/site-packages/moderngl_window/scene/programs.py__init__zMeshProgram.__init__   s         moderngl.Contextc                (    t          j                    S )z%moderngl.Context: The current context)moderngl_windowctx)r   s    r   r   zMeshProgram.ctx    s     "$$$r           meshr
   projection_matrixglm.mat4model_matrixcamera_matrixtimefloatc                H   | j         
J d            |j        
J d            | j         d                             |           | j         d                             |           | j         d                             |           |j                            | j                    dS )ac  Draw code for the mesh

        Args:
            mesh (Mesh): The mesh to render
        Keyword Args:
            projection_matrix (numpy.ndarray): projection_matrix (bytes)
            model_matrix (numpy.ndarray): view_matrix (bytes)
            camera_matrix (numpy.ndarray): camera_matrix (bytes)
            time (float): The current time
        NThere is no program to drawThere is no vao to renderm_projm_mvm_camr   vaowriterenderr   r   r   r    r!   r"   s         r   drawzMeshProgram.draw%   s    $ |'')F'''x##%@###X$$%6777V""<000W##M222%%%%%r   MeshProgram | Nonec                     t          d          )z
        Determine if this ``MeshProgram`` should be applied to the mesh.
        Can return self or some ``MeshProgram`` instance to support dynamic ``MeshProgram`` creation

        Args:
            mesh: The mesh to inspect
        z@apply is not implemented. Please override the MeshProgram method)NotImplementedErrorr   r   s     r   applyzMeshProgram.apply>   s     "N
 
 	
r   Nr   r   r   r   r   r   )r   r   r   r   r
   r   r   r    r   r!   r   r"   r#   r   r   r   r
   r   r0   )	__name__
__module____qualname____doc__r   propertyr   r/   r4    r   r   r   r      s              % % % X% & & & & &2

 

 

 

 

 

r   r   c                  :     e Zd ZdZdd fd	Z	 dddZddZ xZS )VertexColorProgramzVertex color programNr   r   r   r   r   r   c                    t                                          d            t          j        t	          d                    | _        d S )Nr   zscene_default/vertex_color.glslpathsuperr   r   loadr   r   r   r   r   	__class__s      r   r   zVertexColorProgram.__init__N   s@    &&&}%7=^%_%_%_``r   r   r   r
   r   r   r    r!   r"   r#   c                H   | j         
J d            |j        
J d            | j         d                             |           | j         d                             |           | j         d                             |           |j                            | j                    d S )Nr%   r&   r'   m_modelr)   r*   r.   s         r   r/   zVertexColorProgram.drawR   s     |'')F'''x##%@###X$$%6777Y%%l333W##M222%%%%%r   Optional[MeshProgram]c                    |j         sd S |j                            d          rd S |j                            d          r| S d S )N
TEXCOORD_0COLOR_0material
attributesgetr3   s     r   r4   zVertexColorProgram.applya   sP    } 	4?|,, 	4?y)) 	Ktr   r5   r6   r7   r8   r   r
   r   rL   r:   r;   r<   r=   r   r/   r4   __classcell__rI   s   @r   rA   rA   K   s        a a a a a a a & & & & &
 
 
 
 
 
 
 
r   rA   c                  :     e Zd ZdZdd fd	Z	 dddZddZ xZS )ColorLightProgramzSimple color program with lightNr   r   r   r   r   r   c                    t                                          d            t          j        t	          d                    | _        d S )Nr   zscene_default/color_light.glslrC   rE   rH   s      r   r   zColorLightProgram.__init__q   s@    &&&}%7=]%^%^%^__r   r   r   r
   r   r   r    r!   r"   r#   c                   | j         
J d            |j        
J d            |j        H|j        j        r*t	          |j        j                  | j         d         _        nd| j         d         _        | j         d                             |           | j         d                             |           | j         d                             |           |j                            | j                    d S )Nr%   r&   color)      ?r]   r]   r]   r'   rK   r)   )r   r+   rQ   r\   tuplevaluer,   r-   r.   s         r   r/   zColorLightProgram.drawu   s     |'')F'''x##%@###=$ }" C.3DM4G.H.HW%++.BW%+X$$%6777Y%%l333W##M222%%%%%r   r0   c                P    |j         sd S |j                            d          sd S | S )NNORMALrP   r3   s     r   r4   zColorLightProgram.apply   s3    } 	4""8,, 	4r   r5   r6   r7   r8   r9   rU   rW   s   @r   rY   rY   n   s        ))` ` ` ` ` ` ` & & & & &4       r   rY   c                  :     e Zd ZdZdd fd	Z	 dddZddZ xZS )TextureProgramzPlan texturedNr   r   r   r   r   r   c                    t                                          d            t          j        t	          d                    | _        d S )Nr   zscene_default/texture.glslrC   rE   rH   s      r   r   zTextureProgram.__init__   s@    &&&}%7=Y%Z%Z%Z[[r   r   r   r
   r   r   r    r!   r"   r#   c                   | j         
J d            |j        
J d            |j        
J d            |j        j        
J d            |j        j        j        
J d            |j        j        j                                         | j         d                             |           | j         d                             |           | j         d                             |           |j                            | j                    d S 	Nr%   r&   There is no material to render.The material does not have a texture to renderJThe material texture is not linked to a texture, so it can not be renderedr'   rK   r)   r   r+   rQ   mat_texturetextureuser,   r-   r.   s         r   r/   zTextureProgram.draw       |'')F'''x##%@###}((*J(((M%11; 211 M%-99W :99 	!)--///X$$%6777Y%%l333W##M222%%%%%r   rL   c                    |j         sd S |j                            d          rd S |j                            d          sd S |j                            d          rd S |j         j        | S d S Nra   rN   rO   rQ   rR   rS   rk   r3   s     r   r4   zTextureProgram.apply   s}    } 	4?x(( 	4""<00 	4?y)) 	4=$0Ktr   r5   r6   r7   r8   rT   rU   rW   s   @r   rc   rc      s        \ \ \ \ \ \ \ & & & & &0       r   rc   c                  :     e Zd ZdZdd fd	Z	 dddZddZ xZS )TextureVertexColorProgramz!textured object with vertex colorNr   r   r   r   r   r   c                    t                                          d            t          j        t	          d                    | _        d S )Nr   z'scene_default/vertex_color_texture.glslrC   rE   rH   s      r   r   z"TextureVertexColorProgram.__init__   sD    &&&}$MNNN
 
r   r   r   r
   r   r   r    r!   r"   r#   c                   | j         
J d            |j        
J d            |j        
J d            |j        j        
J d            |j        j        j        
J d            |j        j        j                                         | j         d                             |           | j         d                             |           | j         d                             |           |j                            | j                    d S rf   rj   r.   s         r   r/   zTextureVertexColorProgram.draw   rn   r   r0   c                    |j         sd S |j                            d          rd S |j                            d          sd S |j                            d          sd S |j         j        | S d S rp   rq   r3   s     r   r4   zTextureVertexColorProgram.apply   s}    } 	4?x(( 	4""<00 	4""9-- 	4=$0Ktr   r5   r6   r7   r8   r9   rU   rW   s   @r   rs   rs      sz        ++
 
 
 
 
 
 
 & & & & &0       r   rs   c                  :     e Zd ZdZdd fd	Z	 dddZddZ xZS )TextureLightProgramz 
    Simple texture program
    Nr   r   r   r   r   r   c                    t                                          d            t          j        t	          d                    | _        d S )Nr   z scene_default/texture_light.glslrC   rE   rH   s      r   r   zTextureLightProgram.__init__  s@    &&&}%7=_%`%`%`aar   r   r   r
   r   r   r    r!   r"   r#   c                6   | j         
J d            |j        
J d            |j        
J d            |j        j        
J d            |j        j        j        
J d            |j        j        j                                         d| j         d         _        | j         d                             |           | j         d	                             |           | j         d
                             |           |j                            | j                    d S )Nr%   r&   rg   rh   ri   r   texture0r'   rK   r)   )	r   r+   rQ   rk   rl   rm   r_   r,   r-   r.   s         r   r/   zTextureLightProgram.draw  s    |'')F'''x##%@###}((*J(((M%11; 211 M%-99W :99 	!)--///)*Z &X$$%6777Y%%l333W##M222%%%%%r   r0   c                    |j         sd S |j                            d          sd S |j                            d          sd S |j         j        | S d S )Nra   rN   rq   r3   s     r   r4   zTextureLightProgram.apply&  s`    } 	4""8,, 	4""<00 	4=$0Ktr   r5   r6   r7   r8   r9   rU   rW   s   @r   rx   rx      s         b b b b b b b & & & & &<       r   rx   c                      e Zd ZdS )TextureLightColorProgramN)r:   r;   r<   r?   r   r   r~   r~   6  s        Dr   r~   c                  :     e Zd ZdZdd fd	Z	 dddZddZ xZS )FallbackProgramz<
    Fallback program only rendering positions in white
    Nr   r   r   r   r   r   c                    t                                          d            t          j        t	          d                    | _        d S )Nr   zscene_default/fallback.glslrC   rE   rH   s      r   r   zFallbackProgram.__init__?  s@    &&&}%7=Z%[%[%[\\r   r   r   r
   r   r   r    r!   r"   r#   c                   | j         
J d            |j        
J d            | j         d                             |           | j         d                             |           | j         d                             |           |j        r2t	          |j        j        dd                   | j         d         _        nd	| j         d         _        |j                            | j                    d S )
Nr%   r&   r'   rK   r)   r      r\   )r]   r]   r]   )r   r+   r,   rQ   r^   r\   r_   r-   r.   s         r   r/   zFallbackProgram.drawC  s     |'')F'''x##%@###X$$%6777Y%%l333W##M222= 	:*/0CAaC0H*I*IDL!''*9DL!'%%%%%r   r0   c                    | S r5   r?   r3   s     r   r4   zFallbackProgram.applyY  s    r   r5   r6   r7   r8   r9   rU   rW   s   @r   r   r   :  s         ] ] ] ] ] ] ] & & & & &,       r   r   )
__future__r   ostypingr   r   glmmodernglr   moderngl_window.confr   moderngl_window.metar   "moderngl_window.resources.programsr   r   r
   PROGRAM_DIRSappendrD   joindirname__file__r   rA   rY   rc   rs   rx   r~   r   r?   r   r   <module>r      s/   " " " " " " 				                 



      ) ) ) ) ) ) 3 3 3 3 3 3 7 7 7 7 7 7          RW\\"'//(*C*CZPP Q Q Q5
 5
 5
 5
 5
 5
 5
 5
p               F( ( ( ( ( ( ( (V/ / / / /[ / / /d1 1 1 1 1 1 1 1h4 4 4 4 4+ 4 4 4n	 	 	 	 	 	 	 	         k          r   