
    ^j                        d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	 ddl
mZmZmZ d d d d d d d dZ G d	 d
e          Z G d de          Z G d de          ZdS )    )annotations)byref)gl)HeadlessCanvas)egl   )DisplayConfigConfigContext)double_bufferstereoaux_buffersaccum_red_sizeaccum_green_sizeaccum_blue_sizeaccum_alpha_sizec                      e Zd ZddZdS )HeadlessConfigcanvasr   returnlist[HeadlessDisplayConfig]c           	     8    t          t                    sd}t          |          j        j        }g }                                 D ]T\  }}|dk    rt          j                            |d           }|r&|$|	                    |t          |          g           U|	                    t          j        t          j        g            j        dk    r,|	                    t          j        t          j        g           nP j        dk    r,|	                    t          j        t          j        g           nd j         }t%          |          |	                    t          j        g           t          j        t+          |          z  | }t          j                    }	t          j        ||d dt/          |	                     t          j        |	j        z              }
t          j        |||
|	j        t/          |	                      fd|
D             S )Nz,Canvas must be an instance of HeadlessCanvasr   r   gleszUnknown OpenGL API: r   c                2    g | ]}t          |          S  )HeadlessDisplayConfig).0cr   selfs     M/home/agentuser/manim-venv/lib/python3.11/site-packages/pyglet/gl/headless.py
<listcomp>z(HeadlessConfig.match.<locals>.<listcomp>8   s&    HHH1%fa66HHH    )
isinstancer   RuntimeErrordisplay_display_connectionget_gl_attributesr   attribute_idsgetextendintr   EGL_SURFACE_TYPEEGL_PBUFFER_BIT
opengl_apiEGL_RENDERABLE_TYPEEGL_OPENGL_BITEGL_OPENGL_ES3_BIT
ValueErrorEGL_NONEEGLintleneglChooseConfigr   	EGLConfigvalue)r   r   msgdisplay_connectionattrsnamer8   attr
attrs_list
num_configconfigss   ``         r    matchzHeadlessConfig.match   s   &.11 	$@Cs####^? 1133 	1 	1KD%&&(6::4FFD 1)dCJJ/000c*C,?@AAA?d""LL#133EFGGGG_&&LL#133IJKKKK:::CS//!cl^$$$j3u::-6
Z\\
.
D!U:EVEVWWW=:#3366.
G&,eJ.?.?	A 	A 	A IHHHHHHHHr"   N)r   r   r   r   )__name__
__module____qualname__rA   r   r"   r    r   r      s.         I  I  I  I  I  Ir"   r   c                       e Zd ZU ded<   ded<   ej        ej        ej        ej        ej	        ej
        ej        ej        ej        ej        d
Zd fd
ZddZddZ xZS )r   r   r   r   config)
buffer_sizelevelred_size
green_size	blue_size
alpha_size
depth_sizestencil_sizesample_bufferssamples
egl_configegl.EGLConfigr   Nonec           	        t                                          ||           || _        t          j        |j        pdt          j        |j        pdt          j        |j	        pdt          j
        |j        pdt          j        f	}t          j        t          |          z  | | _        | j                                        D ]\\  }}t          j                    }t          j        |j        j        ||t+          |                     t-          | ||j                   ]t0                                          D ]\  }}t-          | ||           d S )N   r   )super__init___egl_configr   EGL_CONTEXT_MAJOR_VERSIONmajor_versionEGL_CONTEXT_MINOR_VERSIONminor_version%EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLEforward_compatibleEGL_CONTEXT_OPENGL_DEBUGdebugr3   r4   r5   _context_attrib_arrayr(   itemseglGetConfigAttribr%   r&   r   setattrr8   _fake_gl_attributes)	r   r   rQ   rF   context_attribsr<   r=   r8   	__class__s	           r    rW   zHeadlessDisplayConfig.__init__L   s:   (((%8&:N:SRS8&:N:SRSDfF_Fdcd79J<	)
 '*j33G3G&G/%Z",2244 	- 	-JD$JLLE"6>#EzSWY^_dYeYefffD$,,,,.4466 	' 	'KD%D$&&&&	' 	'r"   boolc                ,    t          |t                    S N)r#   r   )r   r   s     r    
compatiblez HeadlessDisplayConfig.compatible^   s    &.111r"   shareHeadlessContext | NoneHeadlessContextc                "    t          | |          S rj   )rn   )r   rl   s     r    create_contextz$HeadlessDisplayConfig.create_contexta   s    tU+++r"   )r   r   rQ   rR   rF   r   r   rS   )r   r   r   rh   )rl   rm   r   rn   )rB   rC   rD   __annotations__r   EGL_BUFFER_SIZE	EGL_LEVELEGL_RED_SIZEEGL_GREEN_SIZEEGL_BLUE_SIZEEGL_ALPHA_SIZEEGL_DEPTH_SIZEEGL_STENCIL_SIZEEGL_SAMPLE_BUFFERSEGL_SAMPLESr(   rW   rk   rp   __classcell__rg   s   @r    r   r   ;   s          *$(&((,0? M' ' ' ' ' '$2 2 2 2, , , , , , , ,r"   r   c                  v     e Zd ZU ded<   ded<   d fd	ZddZd fdZd fdZd fdZd fdZ	ddZ
 xZS )rn   zegl.EGLDisplayr:   r   rF   rl   rm   r   rS   c                    t                                          ||           |j        j        j        | _        |                     |          | _        | j        sd}t          j	        |          d S )NzCould not create GL context)
rV   rW   r   r%   r&   r:   _create_egl_contextegl_contextr   ContextException)r   rF   rl   r9   rg   s       r    rW   zHeadlessContext.__init__i   sn    '''"(-"7"K33E:: 	+/C%c***	+ 	+r"   egl.EGLContextc                R   |r|j         }nd }| j        j        dk    rt          j        t          j                   n.| j        j        dk    rt          j        t          j                   t          j        | j        j        j	        j
        | j        j        || j        j                  S )Nr   r   )r   rF   r.   r   
eglBindAPIEGL_OPENGL_APIEGL_OPENGL_ES_APIeglCreateContextr   r%   r&   rX   ra   )r   rl   share_contexts      r    r   z#HeadlessContext._create_egl_contexts   s     	!!-MM M;!T))N3-....[#v--N30111#DK$6$>$R$(K$;]$(K$EG G 	Gr"   r   r   c                    || j         u rd S t                                          |           |j        | _        |                                  d S rj   )r   rV   attachegl_surfaceset_current)r   r   rg   s     r    r   zHeadlessContext.attach   sN    T[  Fv!-r"   c                    t          j        | j        | j        | j        | j                   t                                                       d S rj   )r   eglMakeCurrentr:   r   r   rV   r   r   rg   s    r    r   zHeadlessContext.set_current   sL    #T%5t7GIY	[ 	[ 	[r"   c                    | j         sd S |                                  t          j                     t	                                                       t          j        | j        ddd            d | _	        d S )Nr   )
r   r   r   glFlushrV   detachr   r   r:   r   r   s    r    r   zHeadlessContext.detach   sr    { 	F

#Q4	1 	1 	1r"   c                    t                                                       | j        r(t          j        | j        | j                   d | _        d S d S rj   )rV   destroyr   r   eglDestroyContextr:   r   s    r    r   zHeadlessContext.destroy   sS     	$!$"94;KLLL#D	$ 	$r"   c                V    | j         sd S t          j        | j        | j                    d S rj   )r   r   eglSwapBuffersr:   )r   s    r    flipzHeadlessContext.flip   s1     	F42D4DEEEEEr"   )rF   r   rl   rm   r   rS   )rl   rm   r   r   )r   r   r   rS   )r   rS   )rB   rC   rD   rq   rW   r   r   r   r   r   r   r|   r}   s   @r    rn   rn   e   s        &&&&!!!!+ + + + + +G G G G          
           $ $ $ $ $ $F F F F F F F Fr"   rn   N)
__future__r   ctypesr   pygletr   pyglet.display.headlessr   pyglet.libs.eglr   baser	   r
   r   re   r   r   rn   r   r"   r    <module>r      sI   " " " " " "             2 2 2 2 2 2       1 0 0 0 0 0 0 0 0 0   !I !I !I !I !IV !I !I !IH', ', ', ', ',M ', ', ',TAF AF AF AF AFg AF AF AF AF AFr"   