
    djZ                        d dl Z d dlmZ d dlmZ d dlmZmZmZm	Z	m
Z
mZmZmZ d dlmZ 	 d dlmZ n# e$ r Y nw xY wdZdZd	Zd
 Z G d d          ZdZdZdZdZdZdZdZdZ G d d          Z  G d d          Z! G d d          Z" G d d          Z# G d d          Z$ G d d           Z% G d! d"          Z& G d# d$          Z' G d% d&          Z( G d' d(          Z) G d) d*          Z* G d+ d,          Z+ G d- d.          Z, G d/ d0          Z- G d1 d2          Z.d;d4Z/d<d5Z0d6 Z1d7 Z2dd9Z3d: Z4 e4 e5                       dS )=    N)deque)contextmanager)	AttributeErrorInvalidObjectStorageBlock
SubroutineUniformUniformBlockVarying)parse_spv_inputs)mglz5.12.0iI  iJ  c                      ddl } dS )zHsome additional imports that code freezers (Pyinstaller,etc) should see.r   N	glcontextr   s    L/home/agentuser/manim-venv/lib/python3.11/site-packages/moderngl/__init__.pypackager_importsr      s         c                       e Zd ZdZdS )_storeN)__name__
__module____qualname__default_context r   r   r   r      s        OOOr   r   i  i  i  i  i  it  i@  iA  c                       e Zd Zd Zd Zed             Zed             Zed             Zed             Z	e	j
        d             Z	dd	Zd
 ZddZddZd ZddZddZddZddZddZd ZdddZd ZdS )Bufferc                     d | _         d | _        d | _        d | _        d | _        d | _        d | _        t                      N)mglo_size_dynamic_gloctxextra_label	TypeErrorselfs    r   __init__zBuffer.__init__'   s=    	
	
kkr   c                     t          | d          sd S | j        j        dk    r|                                  d S | j        j        dk    r&| j        j                            | j                   d S d S Nr$   auto
context_gchasattrr$   gc_modereleaseobjectsappendr    r(   s    r   __del__zBuffer.__del__1   s    tU## 	F8v%%LLNNNNNX--H##DI..... .-r   c                 4    | j                                         S r   )r    sizer(   s    r   r8   zBuffer.size:   s    y~~r   c                     | j         S r   )r"   r(   s    r   dynamiczBuffer.dynamic>   
    }r   c                     | j         S r   r#   r(   s    r   gloz
Buffer.gloB   
    yr   c                 |    | j         j        r*| j         j                            t          | j                  S | j        S r   )r$   supports_labelsr    	get_label_BUFFERr#   r&   r(   s    r   labelzBuffer.labelF   s3    8# 	8=**7DI>>>;r   c                     t          |t                    s&|$t          dt          |          j                   | j        j        r-| j        j                            t          | j
        |           d S || _        d S Nz(Expected value to be a str or None, got )
isinstancestrr'   typer   r$   rA   r    	set_labelrC   r#   r&   r)   values     r   rD   zBuffer.labelM   su    5#&& 	_%-]tE{{G[]]^^^8# 	 HM##GTY>>>>>DKKKr   r   c                 <    | j                             ||           d S r   )r    write)r)   dataoffsets      r   rN   zBuffer.writeW   s    	f%%%%%r   c                 @    | j                             ||||           d S r   )r    write_chunks)r)   rO   startstepcounts        r   rR   zBuffer.write_chunksZ   s$    	tUD%88888r   c                 8    | j                             ||          S r   r    read)r)   r8   rP   s      r   rY   zBuffer.read]   s    y~~dF+++r   c                 <    | j                             ||||          S r   )r    	read_into)r)   bufferr8   rP   write_offsets        r   r[   zBuffer.read_into`   s    y""64FFFr   c                 <    | j                             ||||          S r   )r    read_chunks)r)   
chunk_sizerS   rT   rU   s        r   r_   zBuffer.read_chunksc   s    y$$ZeDDDr   c                 @    | j                             ||||||          S r   rX   )r)   r\   r`   rS   rT   rU   r]   s          r   read_chunks_intozBuffer.read_chunks_intof   s     y~~fj%ulSSSr   Nc                 >    | j                             |||           d S r   r    clear)r)   r8   rP   chunks       r   re   zBuffer.cleari   s     	fe,,,,,r   c                 >    | j                             |||           d S r   )r    bind_to_uniform_blockr)   bindingrP   r8   s       r   rh   zBuffer.bind_to_uniform_blockl   s"    	''>>>>>r   c                 >    | j                             |||           d S r   )r    bind_to_storage_bufferri   s       r   rl   zBuffer.bind_to_storage_buffero   s"    	((&$?????r   c                 :    | j                             |           d S r   )r    orphan)r)   r8   s     r   rn   zBuffer.orphanr   s    	r   c                     t          | j        t                    s.| j                                         t                      | _        d S d S r   rG   r    r   r2   r(   s    r   r2   zBuffer.releaseu   C    $)]33 	(I%DIII	( 	(r   )layoutc                    | |g|R S r   r   )r)   rr   attribss      r   bindzBuffer.bindz   s    f'w'''r   c                 
    | |fS r   r   r)   indexs     r   assignzBuffer.assign}       e}r   r   )rV   r   rV   r   r   )rV   r   N)r   r   rV   )rV   )r   r   r   r*   r5   propertyr8   r:   r>   rD   setterrN   rR   rY   r[   r_   rb   re   rh   rl   rn   r2   ru   ry   r   r   r   r   r   &   s         / / /     X    X   X   X \    \ & & & &9 9 9, , , ,G G G GE E ET T T T- - - -? ? ? ?@ @ @ @   ( ( (
 %) ( ( ( ( (    r   r   c                        e Zd Zd Zd Zd ZdS )ConditionalRenderc                 ,    d | _         t                      r   )r    r'   r(   s    r   r*   zConditionalRender.__init__   s    	kkr   c                 8    | j                                          | S r   )r    begin_renderr(   s    r   	__enter__zConditionalRender.__enter__   s    	   r   c                 8    | j                                          d S r   )r    
end_renderr)   argss     r   __exit__zConditionalRender.__exit__   s    	r   N)r   r   r   r*   r   r   r   r   r   r   r      sA                r   r   c                   b    e Zd Zd Zd Zd Zed             Zed             Zed             Z	dS )Queryc                 d    d | _         d | _        d | _        d | _        d | _        t                      r   )r    crenderr$   r%   r&   r'   r(   s    r   r*   zQuery.__init__   s/    	
kkr   c                 8    | j                                          | S r   r    beginr(   s    r   r   zQuery.__enter__       	r   c                 8    | j                                          d S r   r    endr   s     r   r   zQuery.__exit__       	r   c                     | j         j        S r   )r    samplesr(   s    r   r   zQuery.samples       y  r   c                     | j         j        S r   )r    
primitivesr(   s    r   r   zQuery.primitives       y##r   c                     | j         j        S r   )r    elapsedr(   s    r   r   zQuery.elapsed   r   r   N)
r   r   r   r*   r   r   r}   r   r   r   r   r   r   r   r      s               ! ! X! $ $ X$ ! ! X! ! !r   r   c                       e Zd Zd Zd Zd Zd Zd Zed             Z	ddZ
dd
Zd Zd Zed             Zej        d             ZdS )ComputeShaderc                 r    d | _         i | _        d | _        d | _        d | _        d | _        t                      r   )r    _membersr#   r$   r%   r&   r'   r(   s    r   r*   zComputeShader.__init__   s6    		
kkr   c                     t          | d          sd S | j        j        dk    r|                                  d S | j        j        dk    r&| j        j                            | j                   d S d S r,   r/   r(   s    r   r5   zComputeShader.__del__   r6   r   c                     | j         |         S r   r   r)   keys     r   __getitem__zComputeShader.__getitem__       }S!!r   c                 *    || j         |         _        d S r   r   rL   r)   r   rL   s      r   __setitem__zComputeShader.__setitem__       #(c   r   c              #   $   K   | j         E d {V  d S r   r   r(   s    r   __iter__zComputeShader.__iter__   &      =         r   c                     | j         S r   r=   r(   s    r   r>   zComputeShader.glo   r?   r      c                 :    | j                             |||          S r   )r    run)r)   group_xgroup_ygroup_zs       r   r   zComputeShader.run   s    y}}Wgw777r   r   c                 B    | j                             |j         |          S r   )r    run_indirect)r)   r\   rP   s      r   r   zComputeShader.run_indirect   s    y%%fk6:::r   c                 8    | j                             ||          S r   r   getr)   r   defaults      r   r   zComputeShader.get       }  g...r   c                     t          | j        t                    s.| j                                         t                      | _        d S d S r   rp   r(   s    r   r2   zComputeShader.release   rq   r   c                 |    | j         j        r*| j         j                            t          | j                  S | j        S r   r$   rA   r    rB   _PROGRAMr#   r&   r(   s    r   rD   zComputeShader.label   3    8# 	8=**8TY???;r   c                     t          |t                    s&|$t          dt          |          j                   | j        j        r-| j        j                            t          | j
        |           d S || _        d S rF   rG   rH   r'   rI   r   r$   rA   r    rJ   r   r#   r&   rK   s     r   rD   zComputeShader.label   u    5#&& 	_%-]tE{{G[]]^^^8# 	 HM##Hdi?????DKKKr   N)r   r   r   r{   )r   r   r   r*   r5   r   r   r   r}   r>   r   r   r   r2   rD   r~   r   r   r   r   r      s          / / /" " ") ) )! ! !   X8 8 8 8; ; ; ;/ / /( ( (
   X \    \     r   r   c                      e Zd Zd Zd Zed             Zej        d             Zed             Zej        d             Zed             Z	e	j        d             Z	ed	             Z
e
j        d
             Z
ed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zej        d             Zd"dZd Zd#dZ	 d$d Zd! ZdS )%Framebufferc                     d | _         d | _        d | _        d| _        d | _        d | _        d | _        d | _        d | _        d | _	        t                      N)NN)r    _color_attachments_depth_attachmentr!   _samplesr#   r$   _is_referencer%   r&   r'   r(   s    r   r*   zFramebuffer.__init__   sU    	"&!%!
	!
kkr   c                     t          | d          sd S | j        rd S | j        j        dk    r|                                  d S | j        j        dk    r&| j        j                            | j                   d S d S r,   )r0   r   r$   r1   r2   r3   r4   r    r(   s    r   r5   zFramebuffer.__del__   s    tU## 	F  	F 8v%%LLNNNNNX--H##DI..... .-r   c                     | j         j        S r   )r    viewportr(   s    r   r   zFramebuffer.viewport      y!!r   c                     |\  }}}}t          |          t          |          t          |          t          |          f| j        _        d S r   )intr    r   r)   rL   xywhs         r   r   zFramebuffer.viewport  s@    
1a!!ffc!ffc!ffc!ff=	r   c                     | j         j        S r   )r    scissorr(   s    r   r   zFramebuffer.scissor  r   r   c                     |d | j         _        d S |\  }}}}t          |          t          |          t          |          t          |          f| j         _        d S r   )r    r   r   r   s         r   r   zFramebuffer.scissor  sU    = $DIJAq!Q!$QQQQ @DIr   c                     | j         j        S r   r    
color_maskr(   s    r   r   zFramebuffer.color_mask  r   r   c                     || j         _        d S r   r   rK   s     r   r   zFramebuffer.color_mask       $	r   c                     | j         j        S r   r    
depth_maskr(   s    r   r   zFramebuffer.depth_mask$  r   r   c                     || j         _        d S r   r   rK   s     r   r   zFramebuffer.depth_mask(  r   r   c                     | j         d         S Nr   r!   r(   s    r   widthzFramebuffer.width,      z!}r   c                     | j         d         S Nr   r   r(   s    r   heightzFramebuffer.height0  r   r   c                     | j         S r   r   r(   s    r   r8   zFramebuffer.size4  
    zr   c                     | j         S r   r   r(   s    r   r   zFramebuffer.samples8  r;   r   c                     | j         j        S r   )r    bitsr(   s    r   r   zFramebuffer.bits<  s    y~r   c                     | j         S r   )r   r(   s    r   color_attachmentszFramebuffer.color_attachments@  s    &&r   c                     | j         S r   )r   r(   s    r   depth_attachmentzFramebuffer.depth_attachmentD  s    %%r   c                     | j         S r   r=   r(   s    r   r>   zFramebuffer.gloH  r?   r   c                 |    | j         j        r*| j         j                            t          | j                  S | j        S r   )r$   rA   r    rB   _FRAMEBUFFERr#   r&   r(   s    r   rD   zFramebuffer.labelL  s3    8# 	8=**<CCC;r   c                     t          |t                    s&|$t          dt          |          j                   | j        j        r-| j        j                            t          | j
        |           d S || _        d S rF   )rG   rH   r'   rI   r   r$   rA   r    rJ   r   r#   r&   rK   s     r   rD   zFramebuffer.labelS  su    5#&& 	_%-]tE{{G[]]^^^8# 	 HM##L$)UCCCCCDKKKr                 ?Nc                     |t          |          dz   ^}}}}}|t          |          }| j                            ||||||           d S N)r   r   r   r   )tupler    re   	r)   redgreenbluealphadepthr   color_s	            r   re   zFramebuffer.clear]  sY    */,,9M*M'CeaXH	UD%AAAAAr   c                 P    | | j         _        | j                                         d S r   )r$   fbor    user(   s    r   r  zFramebuffer.usef  s    	r      r   r   f1Fc           
         |dd| j         | j        f}t          |          dk    rddg|R }t          j        t          j        |d         |d         d|||                    \  }}| j                            |||||||d           |S )Nr      r  r   )r   r   lenr   writable_bytesexpected_sizer    r[   )	r)   r   
components
attachment	alignmentdtypeclampresmems	            r   rY   zFramebuffer.readj  s    1dj$+6Hx==A1(x((H%c&7Xa[RSU_ajlq&r&rssS	C:z9eUZ\]^^^
r   c	           
      ~    t          |          t          u r|j        }| j                            ||||||||          S r   rI   r   r    r[   )	r)   r\   r   r  r  r  r  r  r]   s	            r   r[   zFramebuffer.read_intos  sC     <<6!![Fy""68ZYX]_dfrsssr   c                     t          | j        t                    s<d | _        d | _        | j                                         t                      | _        d S d S r   )rG   r    r   r   r   r2   r(   s    r   r2   zFramebuffer.release{  sS    $)]33 	(&*D#%)D"I%DIII		( 	(r   r   r   r   r   r   NN)Nr  r   r   r  F)Nr  r   r   r  Fr   )r   r   r   r*   r5   r}   r   r~   r   r   r   r   r   r8   r   r   r   r   r>   rD   re   r  rY   r[   r2   r   r   r   r   r      s         / / / " " X" _> > _> ! ! X! ^A A ^A $ $ X$ % % % $ $ X$ % % %   X   X   X   X   X ' ' X' & & X&   X   X \    \ B B B B      uvt t t t( ( ( ( (r   r   c                       e Zd Zd Zd Zd Zd Zd Zed             Z	ed             Z
ed             Zed	             Zed
             Zed             Zed             Zej        d             Zd Zd ZdS )Programc                     d | _         i | _        d | _        d| _        d | _        d | _        d | _        d | _        d | _        d | _	        d | _
        t                      N)NNN)r    r   _subroutines_geomr#   _is_transform_attribute_locations_attribute_typesr$   r%   r&   r'   r(   s    r   r*   zProgram.__init__  s]    	 '
	!$(! $
kkr   c                     t          | d          sd S | j        j        dk    r|                                  d S | j        j        dk    r&| j        j                            | j                   d S d S r,   r/   r(   s    r   r5   zProgram.__del__  r6   r   c                     | j         |         S r   r   r   s     r   r   zProgram.__getitem__  r   r   c                 *    || j         |         _        d S r   r   r   s      r   r   zProgram.__setitem__  r   r   c              #   $   K   | j         E d {V  d S r   r   r(   s    r   r   zProgram.__iter__  r   r   c                     | j         S r   )r%  r(   s    r   is_transformzProgram.is_transform      !!r   c                     | j         d         S r   r$  r(   s    r   geometry_inputzProgram.geometry_input  r   r   c                     | j         d         S r   r0  r(   s    r   geometry_outputzProgram.geometry_output  r   r   c                     | j         d         S Nr  r0  r(   s    r   geometry_verticeszProgram.geometry_vertices  r   r   c                     | j         S r   )r#  r(   s    r   subroutineszProgram.subroutines  s      r   c                     | j         S r   r=   r(   s    r   r>   zProgram.glo  r?   r   c                 |    | j         j        r*| j         j                            t          | j                  S | j        S r   r   r(   s    r   rD   zProgram.label  r   r   c                     t          |t                    s&|$t          dt          |          j                   | j        j        r-| j        j                            t          | j
        |           d S || _        d S rF   r   rK   s     r   rD   zProgram.label  r   r   c                 8    | j                             ||          S r   r   r   s      r   r   zProgram.get  r   r   c                     t          | j        t                    s.| j                                         t                      | _        d S d S r   rp   r(   s    r   r2   zProgram.release  rq   r   N)r   r   r   r*   r5   r   r   r   r}   r-  r1  r3  r6  r8  r>   rD   r~   r   r2   r   r   r   r   r     sW         / / /" " ") ) )! ! ! " " X"   X   X   X ! ! X!   X   X \    \ / / /( ( ( ( (r   r   c                      e Zd Zd Zd Zed             Zed             Zed             Zed             Z	ed             Z
ed             Zed	             Zed
             Zed             Zej        d             Zd ZdS )Renderbufferc                     d | _         d| _        d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _	        t                      r   )r    r!   _componentsr   _depth_dtyper#   r$   r%   r&   r'   r(   s    r   r*   zRenderbuffer.__init__  S    	!
	
kkr   c                     t          | d          sd S | j        j        dk    r|                                  d S | j        j        dk    r&| j        j                            | j                   d S d S r,   r/   r(   s    r   r5   zRenderbuffer.__del__  r6   r   c                     | j         d         S r   r   r(   s    r   r   zRenderbuffer.width  r   r   c                     | j         d         S r   r   r(   s    r   r   zRenderbuffer.height  r   r   c                     | j         S r   r   r(   s    r   r8   zRenderbuffer.size  r   r   c                     | j         S r   r   r(   s    r   r   zRenderbuffer.samples  r;   r   c                     | j         S r   rA  r(   s    r   r  zRenderbuffer.components      r   c                     | j         S r   rB  r(   s    r   r  zRenderbuffer.depth  
    {r   c                     | j         S r   rC  r(   s    r   r  zRenderbuffer.dtype  rO  r   c                     | j         S r   r=   r(   s    r   r>   zRenderbuffer.glo	  r?   r   c                 |    | j         j        r*| j         j                            t          | j                  S | j        S r   )r$   rA   r    rB   _RENDERBUFFERr#   r&   r(   s    r   rD   zRenderbuffer.label  3    8# 	8=**=$)DDD;r   c                     t          |t                    s&|$t          dt          |          j                   | j        j        r-| j        j                            t          | j
        |           d S || _        d S rF   )rG   rH   r'   rI   r   r$   rA   r    rJ   rT  r#   r&   rK   s     r   rD   zRenderbuffer.label  u    5#&& 	_%-]tE{{G[]]^^^8# 	 HM##M49eDDDDDDKKKr   c                     t          | j        t                    s.| j                                         t                      | _        d S d S r   rp   r(   s    r   r2   zRenderbuffer.release  rq   r   N)r   r   r   r*   r5   r}   r   r   r8   r   r  r  r  r>   rD   r~   r2   r   r   r   r?  r?    sQ         / / /   X   X   X   X     X    X   X   X   X \    \ ( ( ( ( (r   r?  c                   R   e Zd Zd Zd ZddZddZd Zed             Z	e	j
        d             Z	ed	             Zej
        d
             Zed             Zej
        d             Zed             Zej
        d             Zed             Zej
        d             Zed             Zej
        d             Zed             Zej
        d             Zed             Zej
        d             Zed             Zej
        d             Zed             Zej
        d             Zd ZdS )Samplerc                 r    d | _         d | _        d | _        d | _        d | _        d | _        t                      r   )r    r#   r$   r%   texturer&   r'   r(   s    r   r*   zSampler.__init__%  s6    		
kkr   c                     t          | d          sd S | j        j        dk    r|                                  d S | j        j        dk    r&| j        j                            | j                   d S d S r,   r/   r(   s    r   r5   zSampler.__del__.  r6   r   r   c                 |    | j         | j                             |           | j                            |           d S r   )r\  r  r    r)   locations     r   r  zSampler.use7  s:    <#LX&&&	hr   c                 :    | j                             |           d S r   rd   r_  s     r   re   zSampler.clear<  s    	!!!!!r   c                     t          | j        t                    s.| j                                         t                      | _        d S d S r   rp   r(   s    r   r2   zSampler.release?  rq   r   c                     | j         j        S r   r    repeat_xr(   s    r   re  zSampler.repeat_xD  r   r   c                     || j         _        d S r   rd  rK   s     r   re  zSampler.repeat_xH      "	r   c                     | j         j        S r   r    repeat_yr(   s    r   rj  zSampler.repeat_yL  r   r   c                     || j         _        d S r   ri  rK   s     r   rj  zSampler.repeat_yP  rg  r   c                     | j         j        S r   r    repeat_zr(   s    r   rn  zSampler.repeat_zT  r   r   c                     || j         _        d S r   rm  rK   s     r   rn  zSampler.repeat_zX  rg  r   c                     | j         j        S r   r    filterr(   s    r   rr  zSampler.filter\      yr   c                     || j         _        d S r   rq  rK   s     r   rr  zSampler.filter`       	r   c                     | j         j        S r   r    compare_funcr(   s    r   rx  zSampler.compare_funcd      y%%r   c                     || j         _        d S r   rw  rK   s     r   rx  zSampler.compare_funch      !&	r   c                     | j         j        S r   r    
anisotropyr(   s    r   r~  zSampler.anisotropyl  r   r   c                     || j         _        d S r   r}  rK   s     r   r~  zSampler.anisotropyp  r   r   c                     | j         j        S r   r    border_colorr(   s    r   r  zSampler.border_colort  ry  r   c                     || j         _        d S r   r  rK   s     r   r  zSampler.border_colorx  r{  r   c                     | j         j        S r   r    min_lodr(   s    r   r  zSampler.min_lod|  r   r   c                     || j         _        d S r   r  rK   s     r   r  zSampler.min_lod      !	r   c                     | j         j        S r   r    max_lodr(   s    r   r  zSampler.max_lod  r   r   c                     || j         _        d S r   r  rK   s     r   r  zSampler.max_lod  r  r   c                 |    | j         j        r*| j         j                            t          | j                  S | j        S r   )r$   rA   r    rB   _SAMPLERr#   r&   r(   s    r   rD   zSampler.label  r   r   c                     t          |t                    s&|$t          dt          |          j                   | j        j        r-| j        j                            t          | j
        |           d S || _        d S rF   )rG   rH   r'   rI   r   r$   rA   r    rJ   r  r#   r&   rK   s     r   rD   zSampler.label  r   r   c                 
    | |fS r   r   rw   s     r   ry   zSampler.assign  rz   r   Nr{   )r   r   r   r*   r5   r  re   r2   r}   re  r~   rj  rn  rr  rx  r~  r  r  r  rD   ry   r   r   r   rZ  rZ  $  s         / / /       
" " " "( ( (
 " " X" _# # _# " " X" _# # _# " " X" _# # _#     X  ]! ! ]! & & X& ' ' ' $ $ X$ % % % & & X& ' ' ' ! ! X! ^" " ^" ! ! X! ^" " ^"   X \    \     r   rZ  c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )Scopec                     d | _         d | _        d | _        d | _        d | _        d | _        d | _        d | _        t                      r   )	r    r$   _framebuffer	_textures_uniform_buffers_storage_buffers	_samplersr%   r'   r(   s    r   r*   zScope.__init__  sG    	  $ $
kkr   c                 8    | j                                          | S r   r   r(   s    r   r   zScope.__enter__  r   r   c                 8    | j                                          d S r   r   r   s     r   r   zScope.__exit__  r   r   c                     t          | d          sd S | j        j        dk    r|                                  d S | j        j        dk    r&| j        j                            | j                   d S d S r,   r/   r(   s    r   r5   zScope.__del__  r6   r   c                     t          | j        t                    sQd | _        d | _        d | _        d | _        d | _        | j                                         t                      | _        d S d S r   )	rG   r    r   r  r  r  r  r  r2   r(   s    r   r2   zScope.release  si    $)]33 	( $D!DN$(D!$(D!!DNI%DIII	( 	(r   N)r   r   r   r*   r   r   r5   r2   r   r   r   r  r    s_        	 	 	    / / /( ( ( ( (r   r  c                      e Zd Zd Zd Zed             Zej        d             Zed             Zej        d             Zed             Z	e	j        d             Z	ed	             Z
e
j        d
             Z
ed             Zej        d             Zed             Zej        d             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zej        d             Zd&dZd'dZd(dZd)d Zd*d!Zd+d#Zd,d$Zd% ZdS )-Texturec                     d | _         d| _        d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _	        t                      r   r    r!   rA  r   rC  rB  r#   r$   r%   r&   r'   r(   s    r   r*   zTexture.__init__  rD  r   c                     t          | d          sd S | j        j        dk    r|                                  d S | j        j        dk    r&| j        j                            | j                   d S d S r,   r/   r(   s    r   r5   zTexture.__del__  r6   r   c                     | j         j        S r   rd  r(   s    r   re  zTexture.repeat_x  r   r   c                     || j         _        d S r   rd  rK   s     r   re  zTexture.repeat_x  rg  r   c                     | j         j        S r   ri  r(   s    r   rj  zTexture.repeat_y  r   r   c                     || j         _        d S r   ri  rK   s     r   rj  zTexture.repeat_y  rg  r   c                     | j         j        S r   rq  r(   s    r   rr  zTexture.filter  rs  r   c                     || j         _        d S r   rq  rK   s     r   rr  zTexture.filter  ru  r   c                     | j         j        S r   r}  r(   s    r   r~  zTexture.anisotropy  r   r   c                     || j         _        d S r   r}  rK   s     r   r~  zTexture.anisotropy  r   r   c                     | j         j        S r   r    swizzler(   s    r   r  zTexture.swizzle   r   r   c                     || j         _        d S r   r  rK   s     r   r  zTexture.swizzle  r  r   c                     | j         j        S r   rw  r(   s    r   rx  zTexture.compare_func  ry  r   c                     || j         _        d S r   rw  rK   s     r   rx  zTexture.compare_func  r{  r   c                     | j         d         S r   r   r(   s    r   r   zTexture.width  r   r   c                     | j         d         S r   r   r(   s    r   r   zTexture.height  r   r   c                     | j         S r   r   r(   s    r   r8   zTexture.size  r   r   c                     | j         S r   rK  r(   s    r   r  zTexture.components  rL  r   c                     | j         S r   r   r(   s    r   r   zTexture.samples   r;   r   c                     | j         S r   rQ  r(   s    r   r  zTexture.dtype$  rO  r   c                     | j         S r   rN  r(   s    r   r  zTexture.depth(  rO  r   c                     | j         S r   r=   r(   s    r   r>   zTexture.glo,  r?   r   c                 |    | j         j        r*| j         j                            t          | j                  S | j        S r   r$   rA   r    rB   _TEXTUREr#   r&   r(   s    r   rD   zTexture.label0  r   r   c                     t          |t                    s&|$t          dt          |          j                   | j        j        r-| j        j                            t          | j
        |           d S || _        d S rF   rG   rH   r'   rI   r   r$   rA   r    rJ   r  r#   r&   rK   s     r   rD   zTexture.label7  r   r   r   r   c                 8    | j                             ||          S r   rX   )r)   levelr  s      r   rY   zTexture.readA  s    y~~eY///r   c                 v    t          |          t          u r|j        }| j                            ||||          S r   r  )r)   r\   r  r  r]   s        r   r[   zTexture.read_intoD  s6    <<6!![Fy""65)\JJJr   Nc                 z    t          |          t          u r|j        }| j                            ||||           d S r   rI   r   r    rN   )r)   rO   r   r  r  s        r   rN   zTexture.writeJ  s:    ::9D	hy99999r     c                 <    | j                             ||           d S r   r    build_mipmapsr)   base	max_levels      r   r  zTexture.build_mipmapsP       	i00000r   c                 :    | j                             |           d S r   r    r  r_  s     r   r  zTexture.useS      	hr   Tc                 B    | j                             |||||           d S r   r    ru   r)   unitrY   rN   r  formats         r   bind_to_imagezTexture.bind_to_imageV  $    	tT5%88888r   c                 6    | j                             |          S r   r    
get_handler)   residents     r   r  zTexture.get_handleY      y##H---r   c                     t          | j        t                    s.| j                                         t                      | _        d S d S r   rp   r(   s    r   r2   zTexture.release\  rq   r   )r   r   )r   r   r   Nr   r   r   r  r{   TTr   r   T)r   r   r   r*   r5   r}   re  r~   rj  rr  r~  r  rx  r   r   r8   r  r   r  r  r>   rD   rY   r[   rN   r  r  r  r  r2   r   r   r   r  r    s5         / / / " " X" _# # _# " " X" _# # _#     X  ]! ! ]! $ $ X$ % % % ! ! X! ^" " ^" & & X& ' ' '   X   X   X     X    X   X   X   X   X \    \ 0 0 0 0K K K K: : : :1 1 1 1       9 9 9 9. . . .( ( ( ( (r   r  c                   6   e Zd Zd Zd Zed             Zej        d             Zed             Zej        d             Zed             Z	e	j        d             Z	ed	             Z
e
j        d
             Z
ed             Zej        d             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zej        d             Zd#dZd$dZd%dZd&dZd'dZd(d Zd)d!Zd" ZdS )*	Texture3Dc                     d | _         d| _        d | _        d | _        d | _        d | _        d | _        d | _        d | _        t                      r"  )
r    r!   rA  r   rC  r#   r$   r%   r&   r'   r(   s    r   r*   zTexture3D.__init__c  sL    	'
	
kkr   c                     t          | d          sd S | j        j        dk    r|                                  d S | j        j        dk    r&| j        j                            | j                   d S d S r,   r/   r(   s    r   r5   zTexture3D.__del__o  r6   r   c                     | j         j        S r   rd  r(   s    r   re  zTexture3D.repeat_xx  r   r   c                     || j         _        d S r   rd  rK   s     r   re  zTexture3D.repeat_x|  rg  r   c                     | j         j        S r   ri  r(   s    r   rj  zTexture3D.repeat_y  r   r   c                     || j         _        d S r   ri  rK   s     r   rj  zTexture3D.repeat_y  rg  r   c                     | j         j        S r   rm  r(   s    r   rn  zTexture3D.repeat_z  r   r   c                     || j         _        d S r   rm  rK   s     r   rn  zTexture3D.repeat_z  rg  r   c                     | j         j        S r   rq  r(   s    r   rr  zTexture3D.filter  rs  r   c                     || j         _        d S r   rq  rK   s     r   rr  zTexture3D.filter  ru  r   c                     | j         j        S r   r  r(   s    r   r  zTexture3D.swizzle  r   r   c                     || j         _        d S r   r  rK   s     r   r  zTexture3D.swizzle  r  r   c                     | j         d         S r   r   r(   s    r   r   zTexture3D.width  r   r   c                     | j         d         S r   r   r(   s    r   r   zTexture3D.height  r   r   c                     | j         d         S r5  r   r(   s    r   r  zTexture3D.depth  r   r   c                     | j         S r   r   r(   s    r   r8   zTexture3D.size  r   r   c                     | j         S r   rK  r(   s    r   r  zTexture3D.components  rL  r   c                     | j         S r   rQ  r(   s    r   r  zTexture3D.dtype  rO  r   c                     | j         S r   r=   r(   s    r   r>   zTexture3D.glo  r?   r   c                 |    | j         j        r*| j         j                            t          | j                  S | j        S r   r  r(   s    r   rD   zTexture3D.label  r   r   c                     t          |t                    s&|$t          dt          |          j                   | j        j        r-| j        j                            t          | j
        |           d S || _        d S rF   r  rK   s     r   rD   zTexture3D.label  r   r   r   c                 6    | j                             |          S r   rX   r)   r  s     r   rY   zTexture3D.read      y~~i(((r   r   c                 t    t          |          t          u r|j        }| j                            |||          S r   r  r)   r\   r  r]   s       r   r[   zTexture3D.read_into  4    <<6!![Fy""69lCCCr   Nc                 x    t          |          t          u r|j        }| j                            |||           d S r   r  r)   rO   r   r  s       r   rN   zTexture3D.write  8    ::9D	h	22222r   r  c                 <    | j                             ||           d S r   r  r  s      r   r  zTexture3D.build_mipmaps  r  r   c                 :    | j                             |           d S r   r  r_  s     r   r  zTexture3D.use  r  r   Tc                 B    | j                             |||||           d S r   r  r  s         r   r  zTexture3D.bind_to_image  r  r   c                 6    | j                             |          S r   r  r  s     r   r  zTexture3D.get_handle  r  r   c                     t          | j        t                    s.| j                                         t                      | _        d S d S r   rp   r(   s    r   r2   zTexture3D.release  rq   r   r   r   r   r   r  r{   r  r  )r   r   r   r*   r5   r}   re  r~   rj  rn  rr  r  r   r   r  r8   r  r  r>   rD   rY   r[   rN   r  r  r  r  r2   r   r   r   r  r  b  s       
 
 
/ / / " " X" _# # _# " " X" _# # _# " " X" _# # _#     X  ]! ! ]! ! ! X! ^" " ^"   X   X   X   X     X    X   X   X \    \ ) ) ) )D D D D3 3 3 31 1 1 1       9 9 9 9. . . .( ( ( ( (r   r  c                      e Zd Zd Zd Zed             Zed             Zed             Zed             Z	e	j
        d             Z	ed             Zej
        d	             Zed
             Zej
        d             Zed             Zej
        d             Zed             Zed             Zed             Zej
        d             ZddZd dZd!dZd"dZd#dZd$dZd%dZd ZdS )&TextureCubec                     d | _         d| _        d | _        d | _        d | _        d | _        d | _        d | _        d | _        t                      r   )
r    r!   rA  rB  rC  r#   r$   r%   r&   r'   r(   s    r   r*   zTextureCube.__init__  sL    	!
	
kkr   c                     t          | d          sd S | j        j        dk    r|                                  d S | j        j        dk    r&| j        j                            | j                   d S d S r,   r/   r(   s    r   r5   zTextureCube.__del__  r6   r   c                     | j         S r   r   r(   s    r   r8   zTextureCube.size  r   r   c                     | j         S r   rK  r(   s    r   r  zTextureCube.components  rL  r   c                     | j         S r   rQ  r(   s    r   r  zTextureCube.dtype  rO  r   c                     | j         j        S r   rq  r(   s    r   rr  zTextureCube.filter  rs  r   c                     || j         _        d S r   rq  rK   s     r   rr  zTextureCube.filter  ru  r   c                     | j         j        S r   r  r(   s    r   r  zTextureCube.swizzle  r   r   c                     || j         _        d S r   r  rK   s     r   r  zTextureCube.swizzle  r  r   c                     | j         j        S r   rw  r(   s    r   rx  zTextureCube.compare_func   ry  r   c                     || j         _        d S r   rw  rK   s     r   rx  zTextureCube.compare_func$  r{  r   c                     | j         j        S r   r}  r(   s    r   r~  zTextureCube.anisotropy(  r   r   c                     || j         _        d S r   r}  rK   s     r   r~  zTextureCube.anisotropy,  r   r   c                     | j         S r   rN  r(   s    r   r  zTextureCube.depth0  rO  r   c                     | j         S r   r=   r(   s    r   r>   zTextureCube.glo4  r?   r   c                 |    | j         j        r*| j         j                            t          | j                  S | j        S r   r  r(   s    r   rD   zTextureCube.label8  r   r   c                     t          |t                    s&|$t          dt          |          j                   | j        j        r-| j        j                            t          | j
        |           d S || _        d S rF   r  rK   s     r   rD   zTextureCube.label?  r   r   r   c                 8    | j                             ||          S r   rX   )r)   facer  s      r   rY   zTextureCube.readI  s    y~~dI...r   r   c                 v    t          |          t          u r|j        }| j                            ||||          S r   r  )r)   r\   r  r  r]   s        r   r[   zTextureCube.read_intoL  s6    <<6!![Fy""64LIIIr   Nc                 z    t          |          t          u r|j        }| j                            ||||           d S r   r  )r)   r  rO   r   r  s        r   rN   zTextureCube.writeR  s:    ::9D	dHi88888r   r  c                 <    | j                             ||           d S r   r  r  s      r   r  zTextureCube.build_mipmapsX  r  r   c                 :    | j                             |           d S r   r  r_  s     r   r  zTextureCube.use[  r  r   Tc                 B    | j                             |||||           d S r   r  r  s         r   r  zTextureCube.bind_to_image^  r  r   c                 6    | j                             |          S r   r  r  s     r   r  zTextureCube.get_handlea  r  r   c                     t          | j        t                    s.| j                                         t                      | _        d S d S r   rp   r(   s    r   r2   zTextureCube.released  rq   r   r  r  r   r  r{   r  r  )r   r   r   r*   r5   r}   r8   r  r  rr  r~   r  rx  r~  r  r>   rD   rY   r[   rN   r  r  r  r  r2   r   r   r   r  r    st       
 
 
/ / /   X     X    X     X  ]! ! ]! ! ! X! ^" " ^" & & X& ' ' ' $ $ X$ % % %   X   X   X \    \ / / / /J J J J9 9 9 91 1 1 1       9 9 9 9. . . .( ( ( ( (r   r  c                   6   e Zd Zd Zd Zed             Zej        d             Zed             Zej        d             Zed             Z	e	j        d             Z	ed	             Z
e
j        d
             Z
ed             Zej        d             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zej        d             Zd#dZd$dZd%dZd&dZd'dZd(d Zd)d!Zd" ZdS )*TextureArrayc                     d | _         d| _        d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _	        t                      r"  r  r(   s    r   r*   zTextureArray.__init__k  sS    	'
	
kkr   c                     t          | d          sd S | j        j        dk    r|                                  d S | j        j        dk    r&| j        j                            | j                   d S d S r,   r/   r(   s    r   r5   zTextureArray.__del__x  r6   r   c                     | j         j        S r   rd  r(   s    r   re  zTextureArray.repeat_x  r   r   c                     || j         _        d S r   rd  rK   s     r   re  zTextureArray.repeat_x  rg  r   c                     | j         j        S r   ri  r(   s    r   rj  zTextureArray.repeat_y  r   r   c                     || j         _        d S r   ri  rK   s     r   rj  zTextureArray.repeat_y  rg  r   c                     | j         j        S r   rq  r(   s    r   rr  zTextureArray.filter  rs  r   c                     || j         _        d S r   rq  rK   s     r   rr  zTextureArray.filter  ru  r   c                     | j         j        S r   r  r(   s    r   r  zTextureArray.swizzle  r   r   c                     || j         _        d S r   r  rK   s     r   r  zTextureArray.swizzle  r  r   c                     | j         j        S r   r}  r(   s    r   r~  zTextureArray.anisotropy  r   r   c                     || j         _        d S r   r}  rK   s     r   r~  zTextureArray.anisotropy  r   r   c                     | j         d         S r   r   r(   s    r   r   zTextureArray.width  r   r   c                     | j         d         S r   r   r(   s    r   r   zTextureArray.height  r   r   c                     | j         d         S r5  r   r(   s    r   layerszTextureArray.layers  r   r   c                     | j         S r   r   r(   s    r   r8   zTextureArray.size  r   r   c                     | j         S r   rK  r(   s    r   r  zTextureArray.components  rL  r   c                     | j         S r   rQ  r(   s    r   r  zTextureArray.dtype  rO  r   c                     | j         S r   r=   r(   s    r   r>   zTextureArray.glo  r?   r   c                 |    | j         j        r*| j         j                            t          | j                  S | j        S r   r  r(   s    r   rD   zTextureArray.label  r   r   c                     t          |t                    s&|$t          dt          |          j                   | j        j        r-| j        j                            t          | j
        |           d S || _        d S rF   r  rK   s     r   rD   zTextureArray.label  r   r   r   c                 6    | j                             |          S r   rX   r  s     r   rY   zTextureArray.read  r  r   r   c                 t    t          |          t          u r|j        }| j                            |||          S r   r  r  s       r   r[   zTextureArray.read_into  r  r   Nc                 x    t          |          t          u r|j        }| j                            |||           d S r   r  r  s       r   rN   zTextureArray.write  r  r   r  c                 <    | j                             ||           d S r   r  r  s      r   r  zTextureArray.build_mipmaps  r  r   c                 :    | j                             |           d S r   r  r_  s     r   r  zTextureArray.use  r  r   Tc                 B    | j                             |||||           d S r   r  r  s         r   r  zTextureArray.bind_to_image  r  r   c                 6    | j                             |          S r   r  r  s     r   r  zTextureArray.get_handle  r  r   c                     t          | j        t                    s.| j                                         t                      | _        d S d S r   rp   r(   s    r   r2   zTextureArray.release  rq   r   r  r  r   r  r{   r  r  )r   r   r   r*   r5   r}   re  r~   rj  rr  r  r~  r   r   r3  r8   r  r  r>   rD   rY   r[   rN   r  r  r  r  r2   r   r   r   r#  r#  j  s         / / / " " X" _# # _# " " X" _# # _#     X  ]! ! ]! ! ! X! ^" " ^" $ $ X$ % % %   X   X   X   X     X    X   X   X \    \ ) ) ) )D D D D3 3 3 31 1 1 1       9 9 9 9. . . .( ( ( ( (r   r#  c                      e Zd Zd Zd Zed             Zej        d             Zed             Zed             Z	ed             Z
ed             Zej        d	             Zed
             Zej        d             Zed             Zej        d             Zed             Zed             Zej        d             ZddZddZddZddZd ZdS )VertexArrayc                     d | _         d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _	        d | _
        t                      r   )r    _program_index_buffer_content_index_element_sizer#   _moder$   r%   scoper&   r'   r(   s    r   r*   zVertexArray.__init__  s[    	!#' 	


kkr   c                     t          | d          sd S | j        j        dk    r|                                  d S | j        j        dk    r&| j        j                            | j                   d S d S r,   r/   r(   s    r   r5   zVertexArray.__del__  r6   r   c                     | j         S r   rI  r(   s    r   modezVertexArray.mode  r   r   c                     || _         d S r   rM  rK   s     r   rN  zVertexArray.mode  s    


r   c                     | j         S r   )rE  r(   s    r   programzVertexArray.program  r;   r   c                     | j         S r   )rF  r(   s    r   index_bufferzVertexArray.index_buffer  r.  r   c                     | j         S r   )rH  r(   s    r   index_element_sizezVertexArray.index_element_size  s    ''r   c                     | j         j        S r   )r    verticesr(   s    r   rW  zVertexArray.vertices#  r   r   c                 8    t          |          | j        _        d S r   )r   r    rW  rK   s     r   rW  zVertexArray.vertices'  s     ZZ	r   c                     | j         j        S r   )r    	instancesr(   s    r   rZ  zVertexArray.instances+      y""r   c                 8    t          |          | j        _        d S r   )r   r    rZ  rK   s     r   rZ  zVertexArray.instances/      !%jj	r   c                     | j         j        S r   )r    r8  r(   s    r   r8  zVertexArray.subroutines3      y$$r   c                 8    t          |          | j        _        d S r   )r  r    r8  rK   s     r   r8  zVertexArray.subroutines7  s     %e	r   c                     | j         S r   r=   r(   s    r   r>   zVertexArray.glo;  r?   r   c                 |    | j         j        r*| j         j                            t          | j                  S | j        S r   )r$   rA   r    rB   _VERTEX_ARRAYr#   r&   r(   s    r   rD   zVertexArray.label?  rU  r   c                     t          |t                    s&|$t          dt          |          j                   | j        j        r-| j        j                            t          | j
        |           d S || _        d S rF   )rG   rH   r'   rI   r   r$   rA   r    rJ   rc  r#   r&   rK   s     r   rD   zVertexArray.labelF  rW  r   NrV   r   c                     || j         }| j        r?| j        5  | j                            ||||           d d d            d S # 1 swxY w Y   d S | j                            ||||           d S r   )rI  rJ  r    render)r)   rN  rW  firstrZ  s        r   rf  zVertexArray.renderP  s    <:D: 	? C C	  x	BBBC C C C C C C C C C C C C C C C C C IT8UI>>>>>s   AA
Ac                     || j         }| j        rD| j        5  | j                            |j        |||           d d d            d S # 1 swxY w Y   d S | j                            |j        |||           d S r   )rI  rJ  r    render_indirect)r)   r\   rN  rU   rg  s        r   ri  zVertexArray.render_indirectZ  s    <:D: 	G K K	))&+tUEJJJK K K K K K K K K K K K K K K K K K I%%fk4FFFFFs   #AAAc           	      H   || j         }t          |t          t          f          rd |D             }n|j        g}| j        rA| j        5  | j                            ||||||           d d d            d S # 1 swxY w Y   d S | j                            ||||||           d S )Nc                     g | ]	}|j         
S r   r    ).0bufs     r   
<listcomp>z)VertexArray.transform.<locals>.<listcomp>i  s    222Csx222r   )rI  rG   listr  r    rJ  	transform)r)   r\   rN  rW  rg  rZ  buffer_offsetoutputss           r   rq  zVertexArray.transformd  s   <:DftUm,, 	$226222GG{mG: 	Z ^ ^	##GT8UI}]]]^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ Ix	=YYYYYs   	 A66A:=A:Fc	           
      R    | j                             |||j         |||||           d S r   r  )	r)   	attributeclsr\   fmtrP   stridedivisor	normalizes	            r   ru   zVertexArray.binds  s-    	y#v{CR[\\\\\r   c                     t          | j        t                    sCd | _        d | _        d | _        | j                                         t                      | _        d S d S r   )rG   r    r   rE  rF  rG  r2   r(   s    r   r2   zVertexArray.releasev  sY    $)]33 	( DM!%D DMI%DIII	( 	(r   )NrV   r   rV   )NrV   r   )NrV   r   rV   r   )r   r   r   F)r   r   r   r*   r5   r}   rN  r~   rQ  rS  rU  rW  rZ  r8  r>   rD   rf  ri  rq  ru   r2   r   r   r   rC  rC    s%         / / /   X 
[  [   X " " X" ( ( X( " " X" _( ( _( # # X# ) ) ) % % X% - - -   X   X \    \ ? ? ? ?G G G GZ Z Z Z] ] ] ]( ( ( ( (r   rC  c                      e Zd Zg dZdZdZdZdZdZdZ	dZ
dZdZdZdZd	Zd
ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!dZ"dZ#dZ$dZ%e e!fZ&eefZ'e efZ(dZ)dZ*d Z+d!Z,d"Z-d#Z.d$Z/dZ0dZ1dZ2dZ3d%Z4d&Z5d'Z6d(Z7d)Z8d*Z9d+Z:d,Z;d-Z<d.Z=d/ Z>d0 Z?e@d1             ZAeAjB        d2             ZAe@d3             ZCd4 ZDe@d5             ZEeEjB        d6             ZEe@d7             ZFeFjB        d8             ZFe@d9             ZGeGjB        d:             ZGe@d;             ZHeHjB        d<             ZHe@d=             ZIeIjB        d>             ZIe@d?             ZJeJjB        d@             ZJe@dA             ZKeKjB        dB             ZKe@dC             ZLeLjB        dD             ZLe@dE             ZMeMjB        dF             ZMe@dG             ZNeNjB        dH             ZNe@dI             ZOeOjB        dJ             ZOe@dK             ZPe@dL             ZQe@dM             ZRe@dN             ZSe@dO             ZTe@dP             ZUe@dQ             ZVeVjB        dR             ZVe@dS             ZWe@dT             ZXe@dU             ZYeYjB        dV             ZYe@dW             ZZeZjB        dX             ZZe@dY             Z[e[jB        dZ             Z[e@d[             Z\e\jB        d\             Z\e@d]             Z]e@d^             Z^e@d_             Z_e@d`             Z`e@da             Zae@db             ZbddfZcdg Zddh Zedi Zfdj Zgdk Zhdl ZiddnejdoejfdpZkdq ZlddrZmddtZndu Zodv Zp	 	 	 	 	 	 ddxZqddyZrddzZsdd{Ztdd|Zudd}Zvd~ ZwddZxdeddeddZy	 	 	 	 	 	 	 	 	 ddZzddZ{	 	 	 	 	 	 	 ddZ|ddZ}ddZ~ddZddZddZd Z	 	 	 	 	 	 	 	 	 	 ddZe=dsfdZddZd Zd Zd Zd Zd Zedd            ZdeS )Context)Nr.   r-   r   r   r           r        
               i &  &  i '  i'  i'  i'  i   i  i  i  i  i  i  i  i  i
  i  i  i  iM  iN      @         i   i   i   i   i    l    c                     d | _         d | _        d | _        d | _        d | _        d | _        d | _        d | _        t                      | _	        t                      r   )r    _screen_info_extensionsversion_coder  r%   _gc_moder   _objectsr'   r(   s    r   r*   zContext.__init__  sQ    	
 
kkr   c                 l    t          | d          r!| j        dk    r|                                  d S d S d S )Nr  r-   )r0   r  r2   r(   s    r   r5   zContext.__del__  sA    4$$ 	&)@)@LLNNNNN	 	)@)@r   c                     | j         S r   )r  r(   s    r   r1   zContext.gc_mode  r;   r   c                 P    || j         vrt          d| j                   || _        d S )NzValid  gc modes:)_valid_gc_modes
ValueErrorr  rK   s     r   r1   zContext.gc_mode  s/    ,,,/1EFFFr   c                     | j         S r   )r  r(   s    r   r3   zContext.objects  r;   r   c                     d}| j         r9| j                                         }|                                 |dz  }| j         9|S r  )r  popleftr2   )r)   rU   objs      r   gcz
Context.gc  sO     m 	-''))CKKMMMQJE	 m 	 r   c                     | j         j        S r   r    
line_widthr(   s    r   r  zContext.line_width  r   r   c                     || j         _        d S r   r  rK   s     r   r  zContext.line_width  r   r   c                     | j         j        S r   r    
point_sizer(   s    r   r  zContext.point_size  r   r   c                     || j         _        d S r   r  rK   s     r   r  zContext.point_size	  r   r   c                     t                      r   NotImplementedErrorr(   s    r   
depth_funczContext.depth_func      !###r   c                     || j         _        d S r   )r    r  rK   s     r   r  zContext.depth_func  r   r   c                     t                      r   r  r(   s    r   
blend_funczContext.blend_func  r  r   c                 8    t          |          | j        _        d S r   )r  r    r  rK   s     r   r  zContext.blend_func  s    $U||	r   c                     t                      r   r  r(   s    r   blend_equationzContext.blend_equation  r  r   c                     t          |t                    st          |g          | j        _        d S t          |          | j        _        d S r   )rG   r  r    r  rK   s     r   r  zContext.blend_equation!  sB    %'' 	4',eW~~DI$$$',U||DI$$$r   c                     t                      r   r  r(   s    r   depth_clamp_rangezContext.depth_clamp_range(  r  r   c                     || j         _        d S r   )r    r  rK   s     r   r  zContext.depth_clamp_range,  s    &+	###r   c                     t                      r   r  r(   s    r   multisamplezContext.multisample0  r  r   c                     || j         _        d S r   )r    r  rK   s     r   r  zContext.multisample4  s     %	r   c                     t                      r   r  r(   s    r   provoking_vertexzContext.provoking_vertex8  r  r   c                     || j         _        d S r   )r    r  rK   s     r   r  zContext.provoking_vertex<  s    %*	"""r   c                     | j         j        S r   )r    polygon_offsetr(   s    r   r  zContext.polygon_offset@      y''r   c                 `    |\  }}t          |          t          |          f| j        _        d S r   )floatr    r  )r)   rL   factorunitss       r   r  zContext.polygon_offsetD  s,    $)&MM5<<#@	   r   c                 $    | j         j        j        S r   )r    r  r   r(   s    r   r   zContext.viewportI  s    y}%%r   c                     |\  }}}}t          |          t          |          t          |          t          |          f| j        j        _        d S r   )r   r    r  r   r   s         r   r   zContext.viewportM  sB    
1a"%a&&#a&&#a&&#a&&!A	r   c                 $    | j         j        j        S r   )r    r  r   r(   s    r   r   zContext.scissorR  s    y}$$r   c                     |d | j         j        _        d S |\  }}}}t          |          t          |          t          |          t          |          f| j         j        _        d S r   )r    r  r   r   r   s         r   r   zContext.scissorV  sY    =$(DIM!!!JAq!Q%(VVSVVSVVSVV$DDIM!!!r   c                     | j         j        S r   )r    max_samplesr(   s    r   r  zContext.max_samples^  r_  r   c                     | j         j        S r   )r    max_integer_samplesr(   s    r   r  zContext.max_integer_samplesb  s    y,,r   c                     | j         j        S r   )r    max_texture_unitsr(   s    r   r  zContext.max_texture_unitsf  s    y**r   c                     | j         j        S r   )r    max_label_lengthr(   s    r   r  zContext.max_label_lengthj  s    y))r   c                     | j         j        S r   )r    max_debug_message_lengthr(   s    r   r  z Context.max_debug_message_lengthn  s    y11r   c                     | j         j        S r   )r    max_debug_group_stack_depthr(   s    r   r  z#Context.max_debug_group_stack_depthr  s    y44r   c                     | j         j        S r   r    default_texture_unitr(   s    r   r  zContext.default_texture_unitv  s    y--r   c                     || j         _        d S r   r  rK   s     r   r  zContext.default_texture_unitz  s    ).	&&&r   c                     | j         j        S r   )r    max_anisotropyr(   s    r   r  zContext.max_anisotropy~  r  r   c                     | j         S r   )r  r(   s    r   screenzContext.screen  s
    |r   c                     | j         j        S r   r    	wireframer(   s    r   r  zContext.wireframe  r[  r   c                     || j         _        d S r   r  rK   s     r   r  zContext.wireframe  s    #	r   c                     | j         j        S r   )r    
front_facer(   s    r   r  zContext.front_face  r   r   c                 8    t          |          | j        _        d S r   )rH   r    r  rK   s     r   r  zContext.front_face  s    "5zz	r   c                     | j         j        S r   )r    	cull_facer(   s    r   r  zContext.cull_face  r[  r   c                 8    t          |          | j        _        d S r   )rH   r    r  rK   s     r   r  zContext.cull_face  r]  r   c                     | j         j        S r   r    patch_verticesr(   s    r   r  zContext.patch_vertices  r  r   c                     || j         _        d S r   r  rK   s     r   r  zContext.patch_vertices  s    #(	   r   c                     | j         j        S r   )r    errorr(   s    r   r  zContext.error  s    yr   c                 @    | j         | j        j        | _         | j         S r   )r  r    
extensionsr(   s    r   r  zContext.extensions  s!    ##y3Dr   c                 L    | j         dk    rdS d| j        v rdS d| j        v rdS dS )N  TGL_KHR_debugGL_EXT_debug_labelFr  r  r(   s    r   rA   zContext.supports_labels  s>    ##4T_,,44?224ur   c                 L    | j         dk    rdS d| j        v rdS d| j        v rdS dS )Nr  Tr  GL_EXT_debug_markerFr  r(   s    r   supports_debug_scopeszContext.supports_debug_scopes  s>    ##4T_,,4 DO334ur   c                 @    | j         | j        j        | _         | j         S r   )r  r    infor(   s    r   r  zContext.info  s    :DJzr   c                     | j         j        S r   )r    includesr(   s    r   r  zContext.includes  r   r   r   r   Nc                     |t          |          dz   ^}}}}}| j        j                            ||||||           d S r   )r  r    r  re   r  s	            r   re   zContext.clear  sL    */,,9M*M'Cea	CeUHEEEEEr   c                 :    | j                             |           d S r   )r    enable_onlyr)   flagss     r   r  zContext.enable_only  s    	e$$$$$r   c                 :    | j                             |           d S r   )r    enabler  s     r   r  zContext.enable  s    	r   c                 :    | j                             |           d S r   )r    disabler  s     r   r   zContext.disable  s    	%     r   c                 :    | j                             |           d S r   )r    enable_directr)   enums     r   r  zContext.enable_direct  s    	%%%%%r   c                 :    | j                             |           d S r   )r    disable_directr  s     r   r  zContext.disable_direct  s    	  &&&&&r   c                 8    | j                                          d S r   )r    finishr(   s    r   r  zContext.finish  s    	r   rV   dstsrcc                 V    | j                             |j         |j         |||           d S r   )r    copy_buffer)r)   r	  r
  r8   read_offsetr]   s         r   r  zContext.copy_buffer  s*    	ch$\RRRRRr   c                 P    | j                             |j         |j                    d S r   )r    copy_framebuffer)r)   r	  r
  s      r   r  zContext.copy_framebuffer  s$    	""38SX66666r   c                     t                               t                     }| j                            |          \  |_        |_        |_        |_        d |_        d |_        | |_	        d|_
        d |_        |S )NT)r   __new__r    detect_framebufferr!   r   r#   r   r   r$   r   r%   )r)   r>   r  s      r   r  zContext.detect_framebuffer  sg    !!+..6:i6R6RSV6W6W3#)S\38!% $ 	
r   Fc                     t          |          t          u rt          j        |          }t                              t                    }| j                            |||          \  |_        |_        |_	        ||_
        | |_        d |_        |S r   )rI   rH   r   strsizer   r  r    r\   r!   r#   r"   r$   r%   )r)   rO   reserver:   r  s        r   r\   zContext.buffer  ss    ==Ck'**GnnV$$(,	(8(8w(P(P%#)SX	
r   c                     t                               t                     }| j                            ||          \  |_        |_        |_        d|_        | |_        d |_        |S NF)	r   r  r    external_bufferr!   r#   r"   r$   r%   )r)   r>   r8   r  s       r   r  zContext.external_buffer	  sQ    nnV$$(,	(A(A#t(L(L%#)SX	
r   c                     t                               t                     }| j                            |||||          \  |_        |_        ||_        ||_        ||_        ||_        d|_	        | |_
        d |_        |S r  )r  r  r    external_texturer#   r!   rA  r   rC  rB  r$   r%   )r)   r>   r8   r  r   r  r  s          r   r  zContext.external_texture  sp    oog&&!Y77T:wX]^^#(	$

	
r   r  c	           
         t                               t                     }	| j                            |||||||pd|          \  |	_        |	_        ||	_        ||	_        ||	_        ||	_        d|	_	        | |	_
        d |	_        |	S Nr   F)r  r  r    r\  r#   r!   rA  r   rC  rB  r$   r%   )
r)   r8   r  rO   r   r  r  internal_formatrenderbufferr  s
             r   r\  zContext.texture  s     oog&&!Y..*dGY?SRSUa
 
#( 	$

	
r   c                     t                               t                     }| j                            |||||          \  |_        |_        ||_        ||_        ||_        | |_        d |_	        |S r   )
r#  r  r    texture_arrayr#   r!   rA  rC  r$   r%   r)   r8   r  rO   r  r  r  s          r   r   zContext.texture_array5  sd    ""<00!Y44T:tYX]^^#(	$
	
r   c                     t                               t                     }||_        ||_        ||_        | j                            |||||          \  |_        |_        | |_        d |_	        |S r   )
r  r  r!   rA  rC  r    	texture3dr#   r$   r%   r!  s          r   r#  zContext.texture3d?  sd    	**	$
!Y00z4TYZZ#(	
r   c                     t                               t                     }| j                            ||||||pd          \  |_        |_        ||_        ||_        ||_        | |_        d |_	        |S r   )
r  r  r    texture_cuber#   r!   rA  rC  r$   r%   )r)   r8   r  rO   r  r  r  r  s           r   r%  zContext.texture_cubeI  sm    !!+..!Y33D*dIW\^m^rqrss#(	$
	
r   c                     t                               t                     }| j                            |||||          \  |_        |_        ||_        d|_        ||_        d|_        d|_	        | |_
        d |_        |S Nr   f4T)r  r  r    depth_texturer#   r!   rA  r   rC  rB  r$   r%   )r)   r8   rO   r   r  r  r  s          r   r)  zContext.depth_textureS  sp    oog&&!Y44T4)Uabb#(	

	
r   c                     t                               t                     }| j                            |||          \  |_        |_        ||_        d|_        d|_        d|_        | |_	        d |_
        |S r'  )r  r  r    depth_texture_cuber#   r!   rA  rC  rB  r$   r%   )r)   r8   rO   r  r  s        r   r+  zContext.depth_texture_cube_  sf    !!+..!Y99$iPP#(	

	
r   c                     t          |          dk    r)t          |d                   t          u r | j        |i |S  | j        |i |S )Nr  r   )r  rI   r   simple_vertex_array_vertex_array)r)   r   kwargss      r   vertex_arrayzContext.vertex_arrayj  sU    t99q==T$q']]f44+4+T<V<<<!t!426222r   c                 T   |j         |j        |d n|j        }g }|D ]W^}	}
}|
t          ||          }
|rfd|D             }nfd|D             }|                    |	j        |
g|R            Xt
                              t
                    }| j                            |j        t          |          ||          \  |_        |_	        ||_
        ||_        ||_        ||_        |||_        n|j        r| j        n| j        |_        | |_        d |_        d |_        |S )Nc                     g | ]X}t          |          t          u r                    |d           n)                                        |d          d           YS )NrV   )rI   r   r   rm  r   	locationstypess     r   ro  z)Context._vertex_array.<locals>.<listcomp>y  si        +/q''S..EIIa&&&eii	VWY[H\H\^b>c>c  r   c                 h    g | ].}t          |          t          u r|         n|                  /S r   rI   r   r3  s     r   ro  z)Context._vertex_array.<locals>.<listcomp>~  s9    ```STtAww#~~58851;N```r   )r&  r'  r    detect_formatr4   rC  r  r0  r  r#   rE  rF  rG  rH  rI  r-  POINTS	TRIANGLESr$   r%   rJ  )r)   rQ  contentrS  rU  skip_errorsrN  index_buffer_mglomgl_contentr\   rr   rt   r  r4  r5  s                @@r   r.  zContext._vertex_arrayo  s~   0	($0$8DDl>O(/ 
	@ 
	@$FFW~&w88 a    $  
 a````X_```V>g>>????!!+..!Y33L+	
 
#( ("4CII'.';OCI		
r   )rS  rU  rN  c                    t          |          t          u rt          d          |t          ||          f|z   g}|                     |||||          S )Nz*Change simple_vertex_array to vertex_array)rN  )rI   rp  SyntaxErrorr8  r.  )r)   rQ  r\   rS  rU  rN  
attributesr;  s           r   r-  zContext.simple_vertex_array  s_    <<4JKKKM':>>?*LM!!'7LBT[_!```r   r   interleavedc
                    |	dvrt          d          t          |          t          u r|f}t          |          }|i }t	          |t                    r|                                }t	          |t                    r|                                }t                              t                    }
| j        	                    |||||d |||	dk    	  	        \  |
_        }|
_
        |
_        |
_        |\  |
_        |
_        |
_        t	          |t                     rqt"                              |d d         d          dk    rJt'          |
j        |          |
_        |
j                                        D ]}|j        |
j        |j        <   |&i |
_        t/          |          D ]\  }}||
j        |<   |d u |
_        | |
_        d |
_        |
S )N)rB  separatez5varyings_capture_mode must be interleaved or separaterB  r~  littlei#)r  rI   rH   r  rG   stripr   r  r    rQ  r#  r$  r#   r   r&  r'  bytesr   
from_bytes
_parse_spvvaluesr`  name	enumerater%  r$   r%   )r)   vertex_shaderfragment_shadergeometry_shadertess_control_shadertess_evaluation_shadervaryingsfragment_outputsrA  varyings_capture_moder  r   r  irK  s                  r   rQ  zContext.program  s    !(CCCTUUU>>S   {H??#!mS)) 	2)//11Mos++ 	6-3355Ooog&&DHIDUDU"!]2
E
 
E
A(C,ci HPDc.0DmU++ 	D}RaR?PRZ0[0[_i0i0i#-ch#F#FC ,3355 D D6:m(33!')C$$Z00 3 3412(..+t3	
r   c                 $   t                               t                     }| j                            ||||          |_        d |_        |s|r5t
                              t
                    |_        |j        |j        _        | |_        d |_        |S r   )r   r  r    queryr   r   r$   r%   )r)   r   any_samplestimer   r  s         r   rW  zContext.query  sy    mmE""9??7KzJJ 	(k 	(+334EFFCK"xCK	
r   c                    ||}|| j         }|t          d          t          d |D                       }t          d |D                       }	t          d |D                       }
t                              t                    }| j                            |j        |||	|
|          |_        | |_        ||_        ||_	        ||_
        ||_        ||_        d |_        |S )NzA framebuffer must be specifiedc              3   .   K   | ]\  }}|j         |fV  d S r   rl  )rm  texidxs      r   	<genexpr>z Context.scope.<locals>.<genexpr>  s,      FFcch_FFFFFFr   c              3   .   K   | ]\  }}|j         |fV  d S r   rl  rm  rn  r]  s      r   r^  z Context.scope.<locals>.<genexpr>  ,      #T#TSSXsO#T#T#T#T#T#Tr   c              3   .   K   | ]\  }}|j         |fV  d S r   rl  r`  s      r   r^  z Context.scope.<locals>.<genexpr>  ra  r   )r  RuntimeErrorr  r  r  r    rJ  r$   r  r  r  r  r  r%   )r)   framebufferr  texturesuniform_buffersstorage_bufferssamplersr  mgl_texturesmgl_uniform_buffersmgl_storage_buffersr  s               r   rJ  zContext.scope  s      K+K""#DEEEFFXFFFFF##T#TO#T#T#TTT##T#TO#T#T#TTTmmE""9??
 
 & .. 	
r   c                     |                      |                     ||||          |                     ||                    S )N)r   r  )r   )rd  r  depth_renderbuffer)r)   r8   r  r   r  s        r   simple_framebufferzContext.simple_framebuffer  sJ    dJuMM##D'#::
 
 	
r   c                    t          |          t          u st          |          t          u r|f}t          d |D                       }|d n|j        }t
                              t
                    }| j                            ||          \  |_        |_        |_	        |_
        t          |          |_        ||_        | |_        d|_        d |_        |S )Nc              3   $   K   | ]}|j         V  d S r   rl  )rm  r   s     r   r^  z&Context.framebuffer.<locals>.<genexpr>  s$      ::1::::::r   F)rI   r  r?  r  r    r   r  rd  r!   r   r#   r   r   r$   r   r%   )r)   r   r   ca_mgloda_mglor  s         r   rd  zContext.framebuffer  s    !""g--6G1H1HL1X1X!2 4::(9:::::*2$$8H8M!!+..6:i6K6KGU\6]6]3#)S\38!&'8!9!9 0!	
r   c                     t                               t                     }| j                            |||          \  |_        |_        |_        |_        d|_        d |_        | |_	        d|_
        d |_        |S )Nr   F)r   r  r    empty_framebufferr!   r   r#   r   r   r$   r   r%   )r)   r8   r3  r   r  s        r   rt  zContext.empty_framebuffer!  sm    !!+..6:i6Q6QRVX^`g6h6h3#)S\38!# $!	
r   c           
         t                               t                     }| j                            ||d |d|dd          \  |_        |_        ||_        ||_        ||_        ||_        d|_	        | |_
        d |_        |S )Nr   r   TF)r?  r  r    r\  r#   r!   rA  r   rC  rB  r$   r%   )r)   r8   r  r   r  r  s         r   r  zContext.renderbuffer+  s{    ""<00!Y..tZwPQSXZ[]abb#(	$

	
r   c                     t                               t                     }| j                            |d |dd          \  |_        |_        ||_        d|_        ||_        d|_        d|_	        | |_
        d |_        |S )Nr   Tr(  )r?  r  r    r)  r#   r!   rA  r   rC  rB  r$   r%   )r)   r8   r   r  s       r   rm  zContext.depth_renderbuffer7  sq    ""<00!Y44T4!TRR#(	

	
r   c                     t                               t                     }| j                            d d d d d |di d	  	        \  |_        }}}|_        |d         |_        | |_        d |_        |S )Nr   Fr   )r   r  r    rQ  r#   r   r$   r%   )r)   sourcer  r   r	  s        r   compute_shaderzContext.compute_shaderC  sv    ##M22-1Y->->
.
 
.
*(Aq#(  {	
r   T?     @     @@c                 @   t                               t                     }| j                                        \  |_        |_        | |_        ||_        ||_        ||_        |pd|_	        ||_
        ||_        |r||_        ||_        |	|_        d |_        |
|_        |S )N)r  r  )rZ  r  r    samplerr#   r$   re  rj  rn  rr  r~  rx  r  r  r  r%   r\  )r)   re  rj  rn  rr  r~  rx  r  r  r  r\  r  s               r   r~  zContext.samplerV  s     oog&&!Y..00#(+|
#' 	,+C	
r   c                 <    | j                             ||           d S r   )r    memory_barrier)r)   barriers	by_regions      r   r  zContext.memory_barriert  s     	  955555r   c                 <    | j                             ||           d S r   )r    clear_samplers)r)   rS   r   s      r   r  zContext.clear_samplersw  s     	  ,,,,,r   c                 8   | j         d         }|dk    rt          j        d           | j        }|sJt	          t
          | j         d                             dd          d d                   \  }}|dz  |dz  z   }|d	k     rt          j        d
|z             d S d S )NGL_CONTEXT_PROFILE_MASKr   z/The window should request a CORE OpenGL profile
GL_VERSION.r  d   r  J  z7The window should support OpenGL 3.3+ (version_code=%d))r  warningswarnr  mapr   split)r)   profile_maskr  majorminors        r   core_profile_checkzContext.core_profile_checkz  s    y!:;1MKLLL( 	4sDIl$;$A$A#q$I$I"1"$MNNLE5 3;3L#MSVbbccccc r   c                 8    | j                                          | S r   )r    r   r(   s    r   r   zContext.__enter__  s    	r   c                 >    | j                             |||           d S r   )r    r   )r)   exc_typeexc_valexc_tbs       r   r   zContext.__exit__  s"    	8Wf55555r   c                     t           j        | u rd t           _        t          | j        t                    s.| j                                         t	                      | _        d S d S r   )r   r   rG   r    r   r2   r(   s    r   r2   zContext.release  sY    !T))%)F"$)]33 	(I%DIII	( 	(r   c                 p    t          | j        t                    s| j                                         d S d S r   )rG   r    r   clear_errorsr(   s    r   r  zContext.clear_errors  s:    $)]33 	%I""$$$$$	% 	%r   applicationc              #   p  K   t          |t                    s$t          dt          |          j                   t          |t
          t          d           f          s$t          dt          |          j                   |dk    rt          }n!|dk    rt          }nt          d| d          | j	        sd V  d S d}	 |t          |          n|}| j                            |||           d}d V  |r| j                                         d S d S # |r| j                                         w w xY w)	Nz#Expected label to be a string, got z,Expected group_id to be an int or None, got r  externalz1source must be 'application' or 'external', got ''FT)rG   rH   r'   rI   r   r   _GL_DEBUG_SOURCE_APPLICATION_GL_DEBUG_SOURCE_THIRD_PARTYr  r  hashr    push_debug_scopepop_debug_scope)r)   rD   group_idrx  	source_idgroup_pusheds         r   debug_scopezContext.debug_scope  so     %%% 	ZX$u++BVXXYYY(S$t**$566 	fd4PX>>Kbddeee]""4IIz!!4IIZQWZZZ[[[) 	 EEEF	,&.&6tE{{{HHI&&y(EBBBLEEE ,
 	))+++++, ,| ,
 	))++++,s   5D D5r  r|   r   r  )Nr   r   r  NF)Nr   r  )Nr   r  N)Nr   r~  F)Nr~  )Nr~  FN)	NNNNNr   NNrB  )FFFF)NNr   r   r   r   N)r~  r   r  )r   N)r   r   r{   )
TTTNr   rz  Nr{  r|  N)r   rV   )Nr  )r   r   r   r  NOTHINGBLEND
DEPTH_TEST	CULL_FACERASTERIZER_DISCARDPROGRAM_POINT_SIZEr9  LINES	LINE_LOOP
LINE_STRIPr:  TRIANGLE_STRIPTRIANGLE_FANLINES_ADJACENCYLINE_STRIP_ADJACENCYTRIANGLES_ADJACENCYTRIANGLE_STRIP_ADJACENCYPATCHESNEARESTLINEARNEAREST_MIPMAP_NEARESTLINEAR_MIPMAP_NEARESTNEAREST_MIPMAP_LINEARLINEAR_MIPMAP_LINEARZEROONE	SRC_COLORONE_MINUS_SRC_COLOR	SRC_ALPHAONE_MINUS_SRC_ALPHA	DST_ALPHAONE_MINUS_DST_ALPHA	DST_COLORONE_MINUS_DST_COLORDEFAULT_BLENDINGADDITIVE_BLENDINGPREMULTIPLIED_ALPHAFUNC_ADDFUNC_SUBTRACTFUNC_REVERSE_SUBTRACTMINMAXFIRST_VERTEX_CONVENTIONLAST_VERTEX_CONVENTIONVERTEX_ATTRIB_ARRAY_BARRIER_BITELEMENT_ARRAY_BARRIER_BITUNIFORM_BARRIER_BITTEXTURE_FETCH_BARRIER_BITSHADER_IMAGE_ACCESS_BARRIER_BITCOMMAND_BARRIER_BITPIXEL_BUFFER_BARRIER_BITTEXTURE_UPDATE_BARRIER_BITBUFFER_UPDATE_BARRIER_BITFRAMEBUFFER_BARRIER_BITTRANSFORM_FEEDBACK_BARRIER_BITATOMIC_COUNTER_BARRIER_BITSHADER_STORAGE_BARRIER_BITALL_BARRIER_BITSr*   r5   r}   r1   r~   r3   r  r  r  r  r  r  r  r  r  r  r   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rA   r  r  r  re   r  r  r   r  r  r  r   r  r  r  r\   r  r  r\  r   r#  r%  r)  r+  r0  r.  r-  rQ  rW  rJ  rn  rd  rt  r  rm  ry  r~  r  r  r  r   r   r2   r  r   r  r   r   r   r}  r}    s
       222O GEJI FEIJINLO! &G GF#""! D
CI I I I !#67c
$c* HM"
C
C %# '1# *$ *&0#$)!+ *(%/"!+!+!
 
 
     X ^  ^   X
 
 
 $ $ X$ % % % $ $ X$ % % % $ $ X$ % % % $ $ X$ , , , $ $ X$ 4 4 4 $ $ X$ , , , $ $ X$ & & & $ $ X$ + + + ( ( X( A A A & & X& _B B _B % % X% ^E E ^E % % X% - - X- + + X+ * * X* 2 2 X2 5 5 X5 . . X.  / / ! / ( ( X(   X # # X# $ $ $ $ $ X$ * * * # # X# ) ) ) ( ( X( ) ) )   X     X  
 
 X
 
 
 X
   X " " X"F F F F% % %     ! ! !& & &' ' '  S Sv SF S S S S7 7 7   	 	 	 	  
 
 
     0         
 
 
 
	 	 	 	3 3 3
$ $ $ $L NRfgnr a a a a a  #+8 8 8 8t    & & & &P
 
 
 
       
 
 
 

 
 
 
  *    < '7% 6 6 6 6- - - -d d d  6 6 6( ( (% % %  ,  ,  , ^ ,  ,  ,r   r}  Fc                    | d} |sS|sQ|sOt           j        Ct                      }|j        | k     r(t	          d                    | |j                            |S |rdnd}|rd}t                              t                    }t          j	        d| |d|\  |_
        |_        d |_        d |_        d |_        d |_        t                      |_        |j        | k     r(t	          d                    | |j                            |rd |_        d |_        nI|                    d          |_        |                                |_        |j        j
        |j
        _        |t           _        |S )	Nr  z-Requested OpenGL version {0}, got version {1}
standalonedetectshare)	glversionrN  r   r   )r   r   get_contextr  r  r  r}  r  r   create_contextr    r  r  r%   r  r   r  r  r  r  )requirer  r  settingsr$   rN  s         r   r  r    ss    e H 9O9Wmmg%%LSST[]`]mnnooo
%3<<8D 
//'
"
"C!$!3!]gD!]!]T\!]!]CHcCICOCICL77CL
'!!HOOPWY\Yijjkkk $ ,,Q//((**w| FJr   c                    | ddl m}  |            } t                              t                    }t	          j        |           \  |_        |_        d |_        d |_	        d |_
        d |_        t                      |_        |                    d          |_        |                                |_        |j        j        |j        _        |t"          _        d S )Nr   )DefaultLoader)context)	_modernglr  r}  r  r   r  r    r  r  r  r%   r  r   r  r  r  r  r   r   )loaderr  r$   s      r   init_contextr    s    ~++++++
//'
"
"C!$!3F!C!C!CCHcCICOCICL77CL((++CK$$&&CG7<CHL Fr   c                  N    t           j        t                       t           j        S r   )r   r   r  r   r   r   r  r    s    %!!r   c                      t          dddi| S )Nr  Tr   )r  )r/  s    r   create_standalone_contextr    s    44T4V444r   r   c                 v    fd| j         | j        d                    fd|D                       S )Nc                     ddd}dk    r0| j         | j        z  |                    | j                  p| j        fS dk    r| j         | j        z  | j        fS t	          d                                        )Nf8u)dIr   structzinvalid format mode: {0})array_length	dimensionr   shaper  r  )attrmgl_fmtrN  s     r   rw  zdetect_format.<locals>.fmt	  s    3''5==!DN2DJ''54: 
 X$t~5tzAA7>>tDDEEEr    c              3      K   | ]<}d  t          |          t          u r|         n|                            z  V  =dS )z%d%sNr7  )rm  r   rw  r4  r5  s     r   r^  z detect_format.<locals>.<genexpr>	  sS      jjZ[FSST!WW^^qyQR|ATUUUjjjjjjr   )r&  r'  join)rQ  rA  rN  rw  r4  r5  s     `@@@r   r8  r8  	  sd    F F F F F ,I$E88jjjjjj_ijjjjjjr   c                 H    g d}|D ]}t          t          |          | |<   d S )N):r  r  r  r  r  r  r9  r  r  r  r:  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  )getattrr}  )rJ  
_constantscs      r   _resolve_module_constantsr  	  sD    ; ; ;Jz  ' '7A&&a' 'r   )NFFr   )6r  collectionsr   
contextlibr   r  r   r   r   r   r	   r
   r   r   r   rI  modernglr   ImportError__version__r  r  r   r   rC   r   _QUERYr  r  rc  r   rT  r   r   r   r   r   r   r?  rZ  r  r  r  r  r#  rC  r}  r  r  r  r  r8  r  localsr   r   r   <module>r     sy          % % % % % % o o o o o o o o o o o o o o o o o o o o 4 4 4 4 4 4	 	 	 	D	 % %          
 	X X X X X X X Xv
 
 
 
 
 
 
 
! ! ! ! ! ! ! !:=  =  =  =  =  =  =  = @U( U( U( U( U( U( U( U(pP( P( P( P( P( P( P( P(fK( K( K( K( K( K( K( K(\{ { { { { { { {|$( $( $( $( $( $( $( $(NV( V( V( V( V( V( V( V(rI( I( I( I( I( I( I( I(Xy( y( y( y( y( y( y( y(xJ( J( J( J( J( J( J( J(ZE( E( E( E( E( E( E( E(P{, {, {, {, {, {, {, {,|& & & &R! ! ! !&" " "5 5 5k k k k*?' ?' ?'D  &&(( # # # # #s   3 ;;