
    ^j],                    B   d dl mZ d dlZd dlmZ d dlmZmZmZm	Z	m
Z
 d dlmZ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 d dlmZ d dlmZmZmZ d dlmZ d dlmZ d dlmZ erd dl m!Z! ddlm"Z"  G d de          Z# G d de          Z$ G d de          Z%dS )    )annotationsN)_Pointer)POINTERbyrefc_intc_uintcast)TYPE_CHECKINGNoReturn)gl)glx)
glxext_arb)glx_info)glxext_mesa)lib)ConfigDisplayConfigContext)
XlibCanvas)xlib)XRenderFindVisualFormat)Display   )GLXInfoc                      e Zd ZddZdS )
XlibConfigcanvasr   returnlist[XlibDisplayConfig]c                T    t          t                    s!dt                     }t          |          j        j        }j        j        }t          j        |          g } 	                                D ]M\  }}t          j                            |d           }|r&|$|                    |t          |          g           N|                    t          j        dg           |                    ddg           t#          t%          |          z  | }	t#                      }
t          j        |||	t)          |
                    }|sg S t+          |t-          t          j        |
j        z                      j        } fd|D             } j        rd |D             }|S )Nz)Canvas must be an instance of XlibCanvas Tr   c                4    g | ]}t          |          S  )XlibDisplayConfig).0cr   infoselfs     I/home/agentuser/manim-venv/lib/python3.11/site-packages/pyglet/gl/xlib.py
<listcomp>z$XlibConfig.match.<locals>.<listcomp>8   s(    LLLq#FD!T::LLL    c                     g | ]}|j         	|S r"   )transparent)r$   fb_cfs     r(   r)   z$XlibConfig.match.<locals>.<listcomp><   s     EEE53DEeEEEr*   )
isinstancer   typeRuntimeErrordisplay_displayx_screenr   r   get_gl_attributesr#   attribute_idsgetextendintr   GLX_X_RENDERABLEr   lenglXChooseFBConfigr   r	   r   GLXFBConfigvaluecontentstransparent_framebuffer)r'   r   msg	x_displayr3   attrsnamer=   attrattrib_listelementsconfigsresultr&   s   ``           @r(   matchzXlibConfig.match   s   &*-- 	$Ld6llLLCs###N+	>*	** 1133 	1 	1KD%$266tTBBD 1)dCJJ/000c*D1222aVs5zz)E277'	8[%PX//ZZ 	Iw(.(H I IJJSLLLLLLGLLL ' 	FEEEEEF r*   N)r   r   r   r   )__name__
__module____qualname__rI   r"   r*   r(   r   r      s(        ' ' ' ' ' 'r*   r   c                      e Zd ZU ded<   i dej        dej        dej        dej        dej	        dej
        d	ej        d
ej        dej        dej        dej        dej        dej        dej        dej        dej        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!d0d$Z"d1d(Z#d2d)Z$d3d,Z%d4d-Z& xZ'S )5r#   r   r   buffer_sizeleveldouble_bufferstereoaux_buffersred_size
green_size	blue_size
alpha_size
depth_sizestencil_sizeaccum_red_sizeaccum_green_sizeaccum_blue_sizeaccum_alpha_sizesample_bufferssamples)	render_typeconfig_caveattransparent_typetransparent_index_valuetransparent_red_valuetransparent_green_valuetransparent_blue_valuetransparent_alpha_valuex_renderabler   r   r&   fbconfigglx.GLXFBConfigconfigr   r   Nonec           	     @   t                                          ||           || _        || _        d| _        | j                                        D ]b\  }}t                      }t          j	        |j
        j        | j        |t          |                    }|dk    rt          | ||j                   c|j        r`t          j        |j
        j        | j                  }	|	r<|                     |	j        j                  | _        t)          j        |	           d S d S d S NFr   )super__init__r   rh   r,   r5   itemsr   r   glXGetFBConfigAttribr1   r2   r   setattrr=   r?   glXGetVisualFromFBConfig_is_visual_transparentr>   visualr   XFree)r'   r   r&   rh   rj   rC   rD   r=   rH   xvi_ptr	__class__s             r(   ro   zXlibDisplayConfig.__init__j   s   (((  ,2244 	1 	1JD$GGE-fn.Et}VZ.3Ell< <F{{dEK000
 ) 	$26>3JDMZZG $#'#>#>w?O?V#W#W 
7#####		$ 	$$ $r*   ru   _Pointer[xlib.Visual]boolc                    t           sdS t          | j        j        j        |          }|o|j        j        j        dk    S rm   )r   r   r1   r2   r>   direct	alphaMask)r'   ru   xrender_formats      r(   rt   z(XlibDisplayConfig._is_visual_transparent   s?    & 	501D1MvVVO."9"@"Ja"OOr*   glx.XVisualInfoc                ^    t          j        | j        j        j        | j                  j        S N)r   rs   r   r1   r2   rh   r>   r'   s    r(   get_visual_infoz!XlibDisplayConfig.get_visual_info   s"    +DK,?,H$-XXaar*   shareXlibContext | NoneXlibContextc                "    t          | |          S r   )r   )r'   r   s     r(   create_contextz XlibDisplayConfig.create_context   s    4'''r*   c                ,    t          |t                    S r   )r.   r   )r'   r   s     r(   
compatiblezXlibDisplayConfig.compatible   s    &*---r*   _sharer   c                    t           r   )NotImplementedError)r'   r   s     r(   _create_glx_contextz%XlibDisplayConfig._create_glx_context   s    !!r*   c                    dS )NTr"   r   s    r(   is_completezXlibDisplayConfig.is_complete   s    tr*   )
r   r   r&   r   rh   ri   rj   r   r   rk   )ru   ry   r   rz   )r   r   )r   r   r   r   )r   r   r   rz   )r   rk   r   r   r   rz   )(rJ   rK   rL   __annotations__r   GLX_BUFFER_SIZE	GLX_LEVELGLX_DOUBLEBUFFER
GLX_STEREOGLX_AUX_BUFFERSGLX_RED_SIZEGLX_GREEN_SIZEGLX_BLUE_SIZEGLX_ALPHA_SIZEGLX_DEPTH_SIZEGLX_STENCIL_SIZEGLX_ACCUM_RED_SIZEGLX_ACCUM_GREEN_SIZEGLX_ACCUM_BLUE_SIZEGLX_ACCUM_ALPHA_SIZEGLX_SAMPLE_BUFFERSGLX_SAMPLESGLX_RENDER_TYPEGLX_CONFIG_CAVEATGLX_TRANSPARENT_TYPEGLX_TRANSPARENT_INDEX_VALUEGLX_TRANSPARENT_RED_VALUEGLX_TRANSPARENT_GREEN_VALUEGLX_TRANSPARENT_BLUE_VALUEGLX_TRANSPARENT_ALPHA_VALUEr9   r5   ro   rt   r   r   r   r   r   __classcell__rx   s   @r(   r#   r#   E   s         s*   	-  	#.	 
 	s*  	C$  	c(  	S&  	c(  	c(  	,  	#0  	C4  	32  	C4 " 	#0# $ 	3?% * *.4#&#B!$!>#&#B"%"@#&#B ,?     MD$ $ $ $ $ $0P P P Pb b b b( ( ( (. . . ." " " "       r*   r#   c                       e Zd ZU ded<   ded<   ded<   ded<   ded	<   d
ed<   ded<   ded<   ded<   ded<   d# fdZd$dZd%dZd& fdZd' fdZd' fdZ	d' fdZ
d(d)dZd$d Zd'd!Zd'd"Z xZS )*r   r   rA   glx.GLXContextglx_contextzglx.GLXWindow | None
glx_windowrz   _use_video_sync_vsyncr#   rj   _have_SGI_swap_control_have_EXT_swap_control_have_MESA_swap_control_have_SGI_video_syncr   r   r   rk   c                0   t                                          ||           |j        j        j        | _        |                     |          | _        | j        sd}t          j	        |          |j
                            d          | _        |j
                            d          | _        |j
                            d          | _        |j
                            d          | _        | j        o| j        p| j         | _        d| _        d | _        d S )NzCould not create GL contextGLX_SGI_video_syncGLX_SGI_swap_controlGLX_EXT_swap_controlGLX_MESA_swap_controlT)rn   ro   r   r1   r2   rA   r   r   r   ContextExceptionr   have_extensionr   r   r   r   r   r   r   )r'   rj   r   r@   rx   s       r(   ro   zXlibContext.__init__   s   '''.733E:: 	+/C%c***$*O$B$BCW$X$X!&,o&D&DE[&\&\#&,o&D&DE[&\&\#'-'E'EF]'^'^$ !% 9 !b%)%@%`DD` a 	 r*   c                Z    t          t          j        | j        | j                            S r   )rz   r   glXIsDirectrA   r   r   s    r(   	is_directzXlibContext.is_direct   s!    CODND4DEEFFFr*   c                f   |r|j         }nd }g }| j        j        +|                    t          j        | j        j        g           | j        j        +|                    t          j        | j        j        g           | j        j        dk    r,|                    t          j	        t          j
        g           n;| j        j        dk    r+|                    t          j	        t          j        g           d}| j        j        r|t          j        z  }| j        j        r|t          j        z  }|r!|                    t          j        |g           |                    d           t%          t'          |          z  | }t	          j        | j        j        j        j        | j        j        |d|          S )Nr   glesr   T)r   rj   major_versionr7   r   GLX_CONTEXT_MAJOR_VERSION_ARBminor_versionGLX_CONTEXT_MINOR_VERSION_ARB
opengl_apiGLX_CONTEXT_PROFILE_MASK_ARB GLX_CONTEXT_CORE_PROFILE_BIT_ARBGLX_CONTEXT_ES2_PROFILE_BIT_EXTforward_compatible&GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARBdebugGLX_CONTEXT_DEBUG_BIT_ARBGLX_CONTEXT_FLAGS_ARBappendr   r:   glXCreateContextAttribsARBr   r1   r2   rh   )r'   r   share_contextattribsflagss        r(   r   zXlibContext._create_glx_context   s    	!!-MM M;$0NNJDdkF_`aaa;$0NNJDdkF_`aaa;!T))NNJCZEpqrrrr[#v--NNJCZEopqqq;) 	GZFFE; 	:Z99E 	FNNJ<eDEEEq3w<<''24T[5G5O5X59[5I=Z^`gi i 	ir*   r   r   c                    || j         u rd S t                                          |           t          j        | j        | j        j        |j        d           | _	        | 
                                 d S r   )r   rn   attachr   glXCreateWindowrA   rj   rh   x_windowr   set_current)r'   r   rx   s     r(   r   zXlibContext.attach   sg    T[  Fv-dndk>RTZTceijjr*   c                    t          j        | j        | j        | j        | j                   t                                                       d S r   )r   glXMakeContextCurrentrA   r   r   rn   r   r'   rx   s    r(   r   zXlibContext.set_current   s@    !$.$/4?TXTdeeer*   c                >   | j         sd S |                                  t          j                     t	                                                       t          j        | j        ddd            | j	        r(t          j
        | j        | j	                   d | _	        d S d S )Nr   )r   r   r   glFlushrn   detachr   r   rA   r   glXDestroyWindowr   s    r(   r   zXlibContext.detach   s    { 	F

!$.!Q===? 	# AAA"DOOO	# 	#r*   c                    t                                                       | j        r&t          j        | j        | j                   d | _        | j        r(t          j        | j        | j                   d | _        d S d S r   )rn   destroyr   r   r   rA   r   glXDestroyContextr   s    r(   r   zXlibContext.destroy  sz    ? 	# AAA"DO 	$!$.$2BCCC#D	$ 	$r*   Tvsyncc                   || _         |rdpd}	 | j        s5| j        r.t          j        | j        t          j                    |           d S | j        s| j        rt          j
        |           d S | j        rt          j        |           d S d S # t          j        $ r,}t          j        t#          |                     Y d }~d S d }~ww xY w)Nr   r   )r   r   r   r   glXSwapIntervalEXTrA   r   glXGetCurrentDrawabler   r   glXSwapIntervalMESAr   glXSwapIntervalSGIr   MissingFunctionExceptionwarningswarnstr)r'   r   intervales       r(   	set_vsynczXlibContext.set_vsync
  s    ;Q#!	"' 8D,G 8-dnc>W>Y>Y[cddddd) 8d.J 8/99999, 8-h777778 8+ 	" 	" 	"M#a&&!!!!!!!!!	"s#   :B "B /B C	!CC	c                    | j         S r   )r   r   s    r(   	get_vsynczXlibContext.get_vsync  s
    {r*   c                    | j         rm| j        rh| j        rct                      }t	          j        t          |                     t	          j        d|j        dz   dz  t          |                     d S d S d S d S )N   r   )	r   r   r   r   r   glXGetVideoSyncSGIr   glXWaitVideoSyncSGIr=   )r'   counts     r(   _wait_vsynczXlibContext._wait_vsync  s    ; 	S44 	S9M 	SHHE)%,,777*1u{Q!.CU5\\RRRRR	S 	S 	S 	S 	S 	Sr*   c                    | j         sd S | j        r|                                  t          j        | j        | j                    d S r   )r   r   r   r   glXSwapBuffersrA   r   s    r(   flipzXlibContext.flip   sJ     	F; 	4>4?;;;;;r*   )rj   r#   r   r   r   rk   r   )r   r   r   r   )r   r   r   rk   )r   rk   )T)r   rz   r   rk   )rJ   rK   rL   r   ro   r   r   r   r   r   r   r   r   r   r   r   r   s   @r(   r   r      s        $$$$LLL        !!!!     :G G G Gi i i i>          # # # # # #$ $ $ $ $ $" " " " "   S S S S< < < < < < < <r*   r   )&
__future__r   r   _ctypesr   ctypesr   r   r   r   r	   typingr
   r   pygletr   	pyglet.glr   r   r   r   r   pyglet.gl.baser   r   r   pyglet.display.xlibr   pyglet.libs.x11r   pyglet.libs.x11.xrenderr   pyglet.libs.x11.xlibr   r   r   r#   r   r"   r*   r(   <module>r     s   " " " " " "        6 6 6 6 6 6 6 6 6 6 6 6 6 6 * * * * * * * *                               ! ! ! ! ! !       9 9 9 9 9 9 9 9 9 9 * * * * * *             ; ; ; ; ; ; ",,,,,,!!!!!!) ) ) ) ) ) ) )XR R R R R R R RjM< M< M< M< M<' M< M< M< M< M<r*   