
    kj
                         d dl Z d dlmZ d dlmZ d dlZd dlmZ d dlm	Z	 d dl
mZ  e j        e          Z G d de	          ZdS )	    N)Path)Union)ImproperlyConfigured)
BaseLoader)programc                   n    e Zd ZU dZej        ed<   dej        fdZ	de
eef         deeef         fdZdS )Loadersinglemetareturnc                    | j         j        
J d            | j         j        
J d            |                     | j         j                  \  | j         _        }t          j                            | j         |          }|                    | j                   |                                }| j         j	        r&d| j         _	        t	          j
        | j         |          }|S )a  Loads a shader program from a single glsl file.

        Each shader type is separated by preprocessors

        - VERTEX_SHADER
        - FRAGMENT_SHADER
        - GEOMETRY_SHADER
        - TESS_CONTROL_SHADER
        - TESS_EVALUATION_SHADER

        Example:

        .. code:: glsl

            #version 330

            #if defined VERTEX_SHADER

            in vec3 in_position;
            in vec2 in_texcoord_0;
            out vec2 uv0;

            void main() {
                gl_Position = vec4(in_position, 1);
                uv0 = in_texcoord_0;
            }

            #elif defined FRAGMENT_SHADER

            out vec4 fragColor;
            uniform sampler2D texture0;
            in vec2 uv0;

            void main() {
                fragColor = texture(texture0, uv0);
            }
            #endif

        Returns:
            moderngl.Program: The Program instance
        Nz!There is no path for the resourceF)r   path_load_sourceresolved_pathr   ProgramShadersfrom_singlehandle_includescreate
reloadableReloadableProgram)selfsourceshadersprogs       a/home/agentuser/manim-venv/lib/python3.11/site-packages/moderngl_window/loaders/program/single.pyloadzLoader.load   s    V y~))+N)))y~))+N)))*.*;*;DIN*K*K'	(44TYGG 1222~~ 9 	>#(DI ,TY==D    r   c                 D   |                      |          }|s"t          d                    |                    t                              d|           t          t          |          d          5 }||                                fcddd           S # 1 swxY w Y   dS )zFinds and loads a single source file.

        Args:
            path: Path to resource
        Returns:
            tuple[resolved_path, source]: The resolved path and the source
        zCannot find program '{}'zLoading: %srN)find_programr   formatloggerinfoopenstrread)r   r   r   fds       r   r   zLoader._load_sourceN   s     ))$// 	P&'A'H'H'N'NOOOM4(((#m$$c** 	,b "''))+	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,s   2BBBN)__name__
__module____qualname__kindr   ProgramDescription__annotations__modernglProgramr   r   r   r%   tupler    r   r   r	   r	      s}         D

$$$$:h& : : : :x,tSy!1 ,eD#I6F , , , , , ,r   r	   )loggingpathlibr   typingr   r.   moderngl_window.exceptionsr   moderngl_window.loaders.baser   moderngl_window.openglr   	getLoggerr(   r"   r	   r1   r   r   <module>r9      s                  ; ; ; ; ; ; 3 3 3 3 3 3 * * * * * *		8	$	$O, O, O, O, O,Z O, O, O, O, O,r   