
    kj+                     >    d dl mZmZ d dlmZ  G d de          ZdS )    )AnyOptional)ResourceDescriptionc                       e Zd ZdZdZdZ	 	 	 	 	 	 	 	 	 	 	 ddee         dee         ded	ee         d
ee         dee         dee         dee         dee         dee	ee
f                  deee                  de
f fdZedee         fd            Zej        de
ddfd            Zedee         fd            Zedee         fd            Zedee         fd            Zedee         fd            Zedee         fd            Zedee         fd            Zede	ee
f         fd            Zedee         fd            Z xZS ) ProgramDescriptiona  Describes a program to load

    By default a program can be loaded in the following ways:

    - By supplying a `path` to s single glsl file containing all shaders
    - By supplying several paths to separate files containing each shader type.
      For example ``vertex_shader``, ``fragment_shader`` .. etc.

    .. code:: python

        # Single glsl file containing all shaders
        ProgramDescription(path='programs/myprogram.glsl')

        # Multiple shader files
        ProgramDescription(
            vertex_shader='programs/myprogram_vs.glsl'.
            fragment_shader='programs/myprogram_fs.glsl'.
            geometry_shader='programs/myprogram_gs.glsl'.
        )
     programsNFpathkind
reloadablevertex_shadergeometry_shaderfragment_shadertess_control_shadertess_evaluation_shadercompute_shaderdefinesvaryingskwargsc                 |    |                     |||||||||	|
|d            t                      j        di | dS )a6  Create a program description

        Keyword Args:
            path (str): path to the resource relative to search directories
            kind (str): The kind of loader to use
            reloadable (bool): Should this program be reloadable
            vertex_shader (str): Path to vertex shader file
            geometry_shader (str): Path to geometry shader
            fragment_shader (str): Path to fragmet shader
            tess_control_shader (str) Path to tess control shader
            tess_evaluation_shader (str): Path to tess eval shader
            compute_shader (str): Path to compute shader
            defines (dict): Dictionary with define values to replace in the source
            varyings (list): List of varying names for transform shader
            **kwargs: Optional custom attributes
        )r
   r   r   r   r   r   r   r   r   r   r   N )updatesuper__init__)selfr
   r   r   r   r   r   r   r   r   r   r   r   	__class__s                W/home/agentuser/manim-venv/lib/python3.11/site-packages/moderngl_window/meta/program.pyr   zProgramDescription.__init__   sk    > 	(!.#2#2':*@"0"$ 	
 	
 	
 	""6"""""    returnc                 6    | j                             d          S )z#bool: if this program is reloadabler   _kwargsgetr   s    r   r   zProgramDescription.reloadableO   s     |---r   valuec                     || j         d<   d S )Nr   )r"   )r   r%   s     r   r   zProgramDescription.reloadableT   s    %*\"""r   c                 6    | j                             d          S )z#str: Relative path to vertex shaderr   r!   r$   s    r   r   z ProgramDescription.vertex_shaderX   s     |000r   c                 6    | j                             d          S )z%str: Relative path to geometry shaderr   r!   r$   s    r   r   z"ProgramDescription.geometry_shader]        | 1222r   c                 6    | j                             d          S )z%str: Relative path to fragment shaderr   r!   r$   s    r   r   z"ProgramDescription.fragment_shaderb   r)   r   c                 6    | j                             d          S )z)str: Relative path to tess control shaderr   r!   r$   s    r   r   z&ProgramDescription.tess_control_shaderg   s     | 5666r   c                 6    | j                             d          S )z4str: Relative path to tessellation evaluation shaderr   r!   r$   s    r   r   z)ProgramDescription.tess_evaluation_shaderl   s     | 8999r   c                 6    | j                             d          S )z$str: Relative path to compute shaderr   r!   r$   s    r   r   z!ProgramDescription.compute_shaderq   s     | 0111r   c                 8    | j                             di           S )z<dict: Dictionary with define values to replace in the sourcer   r!   r$   s    r   r   zProgramDescription.definesv   s     |	2...r   c                 8    | j                             dg           S )z1list: List of varying names for transform shadersr   r!   r$   s    r   r   zProgramDescription.varyings{   s     |
B///r   )NNFNNNNNNNN)__name__
__module____qualname____doc__default_kindresource_typer   strbooldictr   listr   propertyr   setterr   r   r   r   r   r   r   r   __classcell__)r   s   @r   r   r      s        * LM #" '+)-)--104(,,0(,.# .#sm.# sm.# 	.#
  }.# "#.# "#.# &c].# !).# !.# $sCx.).# 49%.# .# .# .# .# .# .#` .HTN . . . X. + + + + + + 1x} 1 1 1 X1 3# 3 3 3 X3 3# 3 3 3 X3 7Xc] 7 7 7 X7 : : : : X: 2 2 2 2 X2 /c3h / / / X/ 0$s) 0 0 0 X0 0 0 0 0r   r   N)typingr   r   moderngl_window.meta.baser   r   r   r   r   <module>r?      sn                    9 9 9 9 9 9x0 x0 x0 x0 x0, x0 x0 x0 x0 x0r   