
    lj                    0   U d dl mZ d dlZd dlZd dlZd dlmZmZ d dlm	Z	 d dl
mZmZmZ d dlZd dlZd dlm
Z erd dlmZ dgZ ej        d          Zd	 ZddZej        Zded<   ej        e         Zded<    G d d          Zi Z ded<   ddZ!ddZ"dS )     )annotationsN)MappingSequence)Path)TYPE_CHECKINGSelf	TypeAlias)FloatRGBLike_ArrayShaderWrappermanimc                 :    t          t                    j        dz  S )Nshaders)r   __file__parent     X/home/agentuser/manim-venv/lib/python3.11/site-packages/manim/renderer/shader_wrapper.pyget_shader_dirr      s    >> 9,,r   	file_namer   directories
list[Path]returnc                                                       r S  fd|D             }|D ]7}|                                 r|c S t                              | d           8t            d          )Nc              3  "   K   | ]	}|z  V  
d S Nr   ).0	directoryr   s     r   	<genexpr>zfind_file.<locals>.<genexpr>$   s(      II	i)+IIIIIIr   z does not exist.z
 not Found)existsloggerdebugOSError)r   r   possible_pathspaths   `   r   	find_filer%       s     IIII[IIIN 4 4;;== 	4KKKLLD2223333
Y***
+
++r   r	   _ShaderDType_ShaderDatac                  ~    e Zd Zddddddej        fd&dZd Zd'dZd(dZd)dZ	d Z
d*dZd Zd Zd Zd+d!Zd,d%ZdS )-r   NF	vert_datar'   vert_indicesSequence[int] | Noneshader_folderPath | str | Noneuniforms+dict[str, float | tuple[float, ...]] | Nonetexture_pathsMapping[str, Path | str] | None
depth_testboolrender_primitive	int | strc                   || _         || _        |j        j        | _        t          |pd          | _        |pi | _        |pi | _        || _	        t          |          | _        |                                  |                                  d S )N )r)   r*   dtypenamesvert_attributesr   r,   r.   r0   r2   strr4   init_program_code
refresh_id)selfr)   r*   r,   r.   r0   r2   r4   s           r   __init__zShaderWrapper.__init__2   s     '02>7@7L#'(;#<#<>Fn"7D7J *%()9%:%:   r   c                4   t          j         |           }t          j        | j                  |_        |j        t          j        | j                  |_        | j        rt          | j                  |_        | j        rt          | j                  |_        |S r   )copynparrayr)   r*   r.   dictr0   )r>   results     r   rA   zShaderWrapper.copyI   s    48DN33*"$(4+<"="=F= 	2"4=11FO 	<#'(:#;#;F r   r   c                h    t          | j        d u| j        d         d u| j        d         d ug          S )Nvertex_shaderfragment_shader)allr)   program_coder>   s    r   is_validzShaderWrapper.is_validT   sD    d*!/2$>!"34D@
 
 	
r   r;   c                    | j         S r   )idrK   s    r   get_idzShaderWrapper.get_id]   s	    wr   intc                    | j         S r   )
program_idrK   s    r   get_program_idzShaderWrapper.get_program_id`   s
    r   c           
         d                     t          t          | j        | j        | j        | j        | j        g                    S )N|)joinmapr;   rR   r.   r0   r2   r4   rK   s    r   	create_idzShaderWrapper.create_idc   sH    xxOM&O)	 	
 
 	
r   Nonec                j    |                                  | _        |                                 | _        d S r   )create_program_idrR   rX   rN   rK   s    r   r=   zShaderWrapper.refresh_idr   s*    #5577~~''r   c                `     t          d                     fddD                                 S )Nr7   c              3  <   K   | ]}j         | d          pdV  dS )_shaderr7   NrJ   )r   namer>   s     r   r   z2ShaderWrapper.create_program_id.<locals>.<genexpr>x   sM         !T"2"2"239r     r   )vertexgeometryfragment)hashrV   rK   s   `r   r[   zShaderWrapper.create_program_idv   sL    GG    >    
 
 	
r   c                `     d
 fd} |d           |d           |d          d	 _         d S )Nr`   r;   r   
str | Nonec                8    t          j        |  dz            S )Nz.glsl)get_shader_code_from_filer,   )r`   r>   s    r   get_codez1ShaderWrapper.init_program_code.<locals>.get_code   s&    ,"^^^3  r   vertgeomfrag)rG   geometry_shaderrH   )r`   r;   r   rf   r_   )r>   ri   s   ` r   r<   zShaderWrapper.init_program_code~   s_    	 	 	 	 	 	 &Xf--'x//'x//4
 4
r   c                    | j         S r   r_   rK   s    r   get_program_codezShaderWrapper.get_program_code   s      r   oldnewc                    | j         }|                                D ] \  }}|rt          j        |||          ||<   !|                                  d S r   )rJ   itemsresubr=   )r>   rp   rq   code_mapr`   codes         r   replace_codezShaderWrapper.replace_code   s]    $"..** 	8 	8JD$ 8!#S$!7!7r   shader_wrappers'ShaderWrapper'r   c                   t          |          dk    r| S | j        t          | j                  }| j        g}| j        g}|D ]P}|                    |j        |z              |                    |j                   |t          |j                  z  }Qt	          j        |          | _        t	          j        |          | _        n+t	          j        | j        gd |D                       | _        | S )Nr   c              3  $   K   | ]}|j         V  d S r   )r)   )r   sws     r   r   z-ShaderWrapper.combine_with.<locals>.<genexpr>   s$      "J"JB2<"J"J"J"J"J"Jr   )lenr*   r)   appendrB   hstack)r>   ry   	num_vertsindices_list	data_listr}   s         r   combine_withzShaderWrapper.combine_with   s    1$$K(DN++I -.L(I% / /##BOi$?@@@  ...S...		 "	, 7 7DYy11DNNYK"J"J/"J"J"JK DN r   )r)   r'   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   )r   r3   )r   r;   )r   rP   )r   rY   )rp   r;   rq   r;   r   rY   )ry   rz   r   r   )__name__
__module____qualname__modernglTRIANGLE_STRIPr?   rA   rL   rO   rS   rX   r=   r[   r<   ro   rx   r   r   r   r   r   r   1   s
        "&-1+/@D9= &.&=    .	 	 	
 
 
 
      
 
 
( ( ( (
 
 


 

 

! ! !        r   rD   filename_to_code_mapfilenamerf   c                   | t           v rt           |          S 	 t          | t                      t          d          g          }n# t          $ r Y d S w xY w|                                }t          j        d|t          j                  }|D ]R}t          t                      dz  |
                    dd          z            }| d S |
                    ||          }S|t           | <   |S )N/)r   z^#include ../include/.*\.glsl$)flagsincludez#include ../include/r7   )r   r%   r   r   r"   	read_textrt   findall	MULTILINErh   replace)r   filepathrE   
insertionslineinserted_codes         r   rh   rh      s   '''#H--'))4995
 
 
    tt !!F )l  J
  5 51FFY.Db!I!II
 
  44m44%+"Ms   ,A 
AArgb_listr
   r;   c                l    d                     d | D                       }dt          |            d| dS )N,c              3  *   K   | ]} d j         | V  dS )zvec3({}, {}, {})N)format)r   rgbs     r   r   z$get_colormap_code.<locals>.<genexpr>   s.      HH-&-s3HHHHHHr   zvec3[z]())rV   r~   )r   datas     r   get_colormap_coder      sA    88HHxHHHHHD+3x==++D++++r   )r   r   r   r   r   r   )r   r   r   rf   )r   r
   r   r;   )#
__future__r   rA   loggingrt   collections.abcr   r   pathlibr   typingr   r   r	   r   numpyrB   numpy.typingnptmanim.typingr
   __all__	getLoggerr    r   r%   voidr&   __annotations__NDArrayr'   r   r   rh   r   r   r   r   <module>r      s   " " " " " " "   				 - - - - - - - -       1 1 1 1 1 1 1 1 1 1            0////// 
		7	#	#- - -
, 
, 
, 
, ' ! ! ! !\2 2 2 2 2u u u u u u u ur          D, , , , , ,r   