
    \
j                         d dl Z d dlT ddlmZmZmZ d dlmZ d dlm	Z	 d dl
T d dl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 )    N)*   )ConfigCanvasConfigContext)HeadlessCanvas)egl)gl)double_bufferstereoaux_buffersaccum_red_sizeaccum_green_sizeaccum_blue_sizeaccum_alpha_sizec                       e Zd Zd ZdS )HeadlessConfigc           	      N    t          t                    st          d          j        j        }g }                                 D ]T\  }}|dk    rt          j                            |d           }|r&|$|	                    |t          |          g           U|	                    t          t          g           |	                    t          t          g           |	                    t          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   c                 2    g | ]}t          |          S  )HeadlessCanvasConfig).0ccanvasselfs     L/DATA/AppData/hermes/venv/lib/python3.11/site-packages/pyglet/gl/headless.py
<listcomp>z(HeadlessConfig.match.<locals>.<listcomp>R   s&    IIIA&vq$77III    )
isinstancer   RuntimeErrordisplay_display_connectionget_gl_attributesr   attribute_idsgetextendintEGL_SURFACE_TYPEEGL_PBUFFER_BITEGL_RENDERABLE_TYPEEGL_OPENGL_BITEGL_NONEr	   EGLintleneglChooseConfigbyref	EGLConfigvalue)r   r   display_connectionattrsnamer2   attr
attrs_list
num_configconfigsresults   ``         r   matchzHeadlessConfig.match9   s   &.11 	OMNNN#^? 1133 	1 	1KD%&&'599$EED 1)dCJJ/000&8999)>:;;;hZ   j3u::-6
Z\\
.
D!U:EVEVWWW=:#3366.
G&,eJ.?.?	A 	A 	A JIIIIIIIr   N)__name__
__module____qualname__r;   r   r   r   r   r   8   s#            r   r   c                        e Zd Zej        ej        ej        ej        ej        ej	        ej
        ej        ej        ej        d
Z fdZd Zd Z xZS )r   )
buffer_sizelevelred_size
green_size	blue_size
alpha_size
depth_sizestencil_sizesample_bufferssamplesc           	      z   t          t          |                               ||           || _        t          |j        pdt          |j        pdt          |j	        pdt          |j        pdt          f	}t          j        t          |          z  | | _        | j                                        D ]\\  }}t          j                    }t          j        |j        j        ||t-          |                     t/          | ||j                   ]t2                                          D ]\  }}t/          | ||           d S )N   r   )superr   __init___egl_configEGL_CONTEXT_MAJOR_VERSIONmajor_versionEGL_CONTEXT_MINOR_VERSIONminor_version%EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLEforward_compatibleEGL_CONTEXT_OPENGL_DEBUGdebugr,   r	   r-   r.   _context_attrib_arrayr$   itemseglGetConfigAttribr!   r"   r0   setattrr2   _fake_gl_attributes)	r   r   
egl_configconfigcontext_attribsr5   r6   r2   	__class__s	           r   rM   zHeadlessCanvasConfig.__init__d   s1   "D))2266BBB%4f6J6Oa4f6J6Oa@&B[B`_`3V\5FQ#	%
 '*j33G3G&G/%Z",2244 	- 	-JD$JLLE"6>#EzSWY^_dYeYefffD$,,,,.4466 	' 	'KD%D$&&&&	' 	'r   c                 ,    t          |t                    S N)r   r   )r   r   s     r   
compatiblezHeadlessCanvasConfig.compatiblev   s    &.111r   c                 "    t          | |          S ra   )HeadlessContext)r   shares     r   create_contextz#HeadlessCanvasConfig.create_contextz   s    tU+++r   )r<   r=   r>   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$   rM   rb   rf   __classcell__r_   s   @r   r   r   V   s        *$(&((,0? M' ' ' ' '$2 2 2, , , , , , ,r   r   c                   R     e Zd Z fdZd Z fdZ fdZ fdZ fdZd Z	 xZ
S )rd   c                     t          t          |                               ||           |j        j        j        | _        |                     |          | _        | j        st          j
        d          d S )NzCould not create GL context)rL   rd   rM   r   r!   r"   r3   _create_egl_contextegl_contextr
   ContextException)r   r]   re   r_   s      r   rM   zHeadlessContext.__init__   ss    ot$$--fe<<<"(-"7"K33E:: 	E%&CDDD	E 	Er   c                     |r|j         }nd }t          j        t          j                   t          j        | j        j        j        j        | j        j	        || j        j
                  S ra   )rv   r	   
eglBindAPIEGL_OPENGL_APIeglCreateContextr]   r   r!   r"   rN   rW   )r   re   share_contexts      r   ru   z#HeadlessContext._create_egl_context   sc     	!!-MM Ms)***#DK$6$>$R$(K$;]$(K$EG G 	Gr   c                     || j         u rd S t          t          |                               |           |j        | _        |                                  d S ra   )r   rL   rd   attachegl_surfaceset_current)r   r   r_   s     r   r~   zHeadlessContext.attach   sV    T[  Fot$$++F333!-r   c                     t          j        | j        | j        | j        | j                   t          t          |                                            d S ra   )r	   eglMakeCurrentr3   r   rv   rL   rd   r   r   r_   s    r   r   zHeadlessContext.set_current   sR    #T%5t7GIY	[ 	[ 	[ot$$0022222r   c                     | j         sd S |                                  t          j                     t	          t
          |                                            t          j        | j	        ddd            d | _
        d S )Nr   )r   r   r
   glFlushrL   rd   detachr	   r   r3   r   r   s    r   r   zHeadlessContext.detach   sz    { 	F

ot$$++---#Q4	1 	1 	1r   c                     t          t          |                                            | j        r(t	          j        | j        | j                   d | _        d S d S ra   )rL   rd   destroyrv   r	   eglDestroyContextr3   r   s    r   r   zHeadlessContext.destroy   s[    ot$$,,... 	$!$"94;KLLL#D	$ 	$r   c                 V    | j         sd S t          j        | j        | j                    d S ra   )r   r	   eglSwapBuffersr3   )r   s    r   flipzHeadlessContext.flip   s1     	F42D4DEEEEEr   )r<   r=   r>   rM   ru   r~   r   r   r   r   rq   rr   s   @r   rd   rd   ~   s        E E E E E	G 	G 	G    3 3 3 3 3
         $ $ $ $ $F F F F F F Fr   rd   )warningsctypesbaser   r   r   pyglet.canvas.headlessr   pyglet.libs.eglr	   pyglet.libs.egl.eglpygletr
   r[   r   r   rd   r   r   r   <module>r      s4  H      / / / / / / / / / / 1 1 1 1 1 1       ! ! ! !             V   <%, %, %, %, %,< %, %, %,P:F :F :F :F :Fg :F :F :F :F :Fr   