
    lj&                        d dl mZ d dlmZ d dlmZmZ d dlmZ d dl	Z
erd dlmZmZ d dlmZ dd	lmZ dd
lmZmZ ddlmZ ddgZd#dZd$dZd%dZd&dZd$d Zd'd"ZdS )(    )annotations)defaultdict)IterableSequence)TYPE_CHECKINGN)OpenGLRendererOpenGLVMobject)MatrixMN   )opengl)cross2dearclip_triangulation   )Shader%render_opengl_vectorized_mobject_fill'render_opengl_vectorized_mobject_strokemobr	   return4defaultdict[tuple[float, ...], list[OpenGLVMobject]]c                4   |                                  }t          t                    }|                                 r:|t	          |                                                                       |            | |i}| g}|r|                                }|j        D ]z}||         |j	        z  }|||<   |                                r:|t	          |                                                                       |           |                    |           {||S )N)
hierarchical_model_matrixr   list
has_pointstupleravelappendpopsubmobjectsmodel_matrix)r   root_hierarchical_matrixmatrix_to_mobject_listmobject_to_hierarchical_matrixdfsparentchildchild_hierarchical_matrixs           f/home/agentuser/manim-venv/lib/python3.11/site-packages/manim/renderer/vectorized_mobject_rendering.pybuild_matrix_listsr(      s4     #<<>>(..
~~ Tu%=%C%C%E%EFFGNNsSSS&)+C%D"%C
 ' 		 		E.v69KK & 5N*51!! &u-F-L-L-N-N'O'OPWW   JJu   "!    rendererr   mobjectNonec                    t          |          }|                                D ]=\  }}t          j        |                              d          }t          | ||           >d S N)   r/   )r(   itemsnparrayreshape render_mobject_fills_with_matrixr*   r+   r!   matrix_tuplemobject_listr   s         r'   r   r   2   sr     088&<&B&B&D&D O O"lx--55f==(<NNNNO Or)   r   r
   mobjectsIterable[OpenGLVMobject]c                   d}|D ]}|t          |          j        d         z  } t          j        |dt          j        dfdt          j        dfdt          j        dfdt          j        fg	          }d}|D ]q}|                                st          |          }||j        d         z   }||||<   t          j        |j        |j        d         d
          |d         ||<   |}rt          | j
        d          }	|	                    dt          j        | j        j        |z                       |	                    d| j        j                   | j
                            |                                          }
 | j
        j        |	j        |
g|j        j        R  }|                                 |                                 |
                                 d S )Nr   in_vert   in_colorr/   texture_coordsr   texture_modedtypeaxisvectorized_mobject_fill)nameu_model_view_matrixu_projection_matrix)triangulate_mobjectshaper1   emptyfloat32int32r   repeat	fill_rgbar   contextset_uniformr   matrix_to_shader_inputcameraunformatted_view_matrixprojection_matrixbuffertobytessimple_vertex_arrayshader_programrD   namesrenderrelease)r*   r   r8   
total_sizesubmob
attributeswrite_offsetmobject_triangulation
end_offsetfill_shadervbovaos               r'   r4   r4   <   s    J ; ;)&117::


D)T*rz40RX&	
  J L " "  "" 	 3F ; ;!$9$?$BB
.C
<
*+:<)!'*;
 ;
 ;

:|J67
 ")0IJJJK%O3lB	
 	
   )  
 

!
!*"4"4"6"6
7
7C
.(

." 
		  C
 JJLLLKKMMMKKMMMMMr)   
np.ndarrayc                   | j         s| j        S | j        }|dd d         }|dd d         }|dd d         }||z
  }||z
  }t          ||          }t	          j        |          }| j        dk    r|dk    }	|dk    }
n|dk     }	|dk    }
| j        }t	          j        t          |          t                    }t	          j        |d d         |dd          z
            |k                        d          |d d<   d|d<   t	          j        t          |          t                    }t	          j        |dd d         |dd d         |	         |dd d         |         g          }|                                 t	          j        dt          |          dz             |dz  dk             }||         }|t#          ||                   }t	          j        |d          }t	          j        ||	         d          }t	          j        ||
         d          }|t	          j        |||g                   }t	          j        d	d	gd
d	gddgg|j        d         dz  df          }t	          j        t	          j        |j        d                   dt	          j        |j        d                   z  t	          j        |j        d                   f          }t	          j        |j        d         dt          j        dfdt          j        dfdt          j        dfdt          j        fg          }||d<   ||d<   ||d<   || _        d| _         |S )Nr   r=   r   r   rC   T)rj   r=           g      ?      ?r;   r<   r>   r?   r@   rA   rB   F)needs_new_triangulationtriangulationpointsr   r1   signorientationtolerance_for_point_equalityzeroslenboolabsanyarangeinthstacksortr   r3   tilerL   onesrN   rO   )r   ro   b0sb1sb2sv01sv12scrossesconvexitiesconcave_partsconvex_partsatolend_of_loopindicesinner_vert_indicesringsinner_vertsinner_tri_indicesbezier_triangle_indicesconcave_triangle_indicesconvex_triangle_indicesr@   rB   ra   s                           r'   rK   rK   v   s~   & !   ZF
A,C
A,C
A,C9D9DdD!!G''""K
!#a"a'#a"a' +D(3s884000Ks3B3x#abb'122T9>>qAAKKOiF3///GADqDMADqDM-(ADqDM+&	
  Ia/0014556H16LPQ6QRE +,K*+@e+T+TU j'::!z*A-*PSUWW j)@)NQSUU
	('!	
 	
F W#J#J#J	

 
aA	q! N 9G,2156606q9:::H&,Q/00	
 L Q
D)T*rz40RX&	
  J #Jy#1J !-J~"C"'Cr)   c                    t          |          }|                                D ]=\  }}t          j        |                              d          }t          | ||           >d S r.   )r(   r0   r1   r2   r3   "render_mobject_strokes_with_matrixr5   s         r'   r   r      sr     088&<&B&B&D&D Q Q"lx--55f==*8\<PPPPQ Qr)   Sequence[OpenGLVMobject]c           	     (   d}|D ]}||j         j        d         z  }t          j        |df          }t          j        |df          }t          j        |          }d}|D ]}|                                s||j         j        d         z   }	|j         |||	<   |j        j        d         |||	         j        d         k    r|j        |||	<   n1t          j        |j        |j         j        d         d          |||	<   t          j        |j        |j         j        d                   |||	<   |	}t          j        t          |          dt          j
        dfdt          j
        dfd	t          j
        d
fdt          j
        fg          }
||
d	<   ||
d<   t          j        |d          }t          j        |dd          |
d<   t          j        |
d          }
t          j        t          j        ddgddgddggt          |          dz  df          t          j        ddgddgddggt          |          dz  df          f          |
d<   t          | j        d          }|                    dt#          j        | j        j        |z                       |                    d| j        j                   |                    dt-          |d         j        d                               | j                            |
                                          } | j        j        |j        |g|
j        j        R  }| j                                         |                                  |!                                 |!                                 d S )Nr   r=   r/   rE   current_curve)r=   r=   tile_coordinaterA   r>   r?   in_widthrC   )rj   r=   r=   r   rk   rl   r   vectorized_mobject_strokerI   rJ   manim_unit_normal)"ro   rL   r1   rM   r   stroke_rgbarP   stroke_widthrs   rt   rN   r3   r|   vstackr   rR   rS   r   rT   rU   rV   rW   r   unit_normalrX   rY   rZ   r[   rD   r\   frame_buffer_objectuser]   r^   )r*   r   r8   r_   r`   ro   colorswidthsrb   rd   stroke_datacurvesshaderrf   rg   s                  r'   r   r      s    J - -fm)!,,

Xz1o&&FXz1o&&FXj!!FL " "  "" 	!FM$7$::
*0-|J&'#A&&j1H*I*OPQ*RRR.4.@F<
*++.0i"#A&/ / /F<
*+
 +-)M"+
 +
|J&' "(F bj&1
D1T*$

 
 
K %K
$K
Z
++F#%9VQQ#?#?#?K  '+q))K%'YG#J#J#J
 V!1%  G#J#J#J
 V!1% 	
& &K!"* H$&ABBF
%O3lB	
 	
   ,ho.OPPP
*E8A;3J13M2M,N,NOOO


!
!+"5"5"7"7
8
8C
.(

.s%0%6%<  C  $$&&&JJLLLKKMMMKKMMMMMr)   )r   r	   r   r   )r*   r   r+   r	   r   r,   )r*   r   r   r
   r8   r9   r   r,   )r   r	   r   rh   )r*   r   r   r
   r8   r   r   r,   )
__future__r   collectionsr   collections.abcr   r   typingr   numpyr1   manim.renderer.opengl_rendererr   r	   manim.typingr
   utilsr   utils.space_opsr   r   r   r   __all__r(   r   r4   rK   r   r    r)   r'   <module>r      s   " " " " " " # # # # # # . . . . . . . .                 &        &%%%%%       < < < < < < < <       ,-" " " "0O O O O7 7 7 7t[ [ [ [|Q Q Q Q^ ^ ^ ^ ^ ^r)   