
    \
j9                     ^   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m
Z
 d dlmZ d d	lmZ 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 G d de          Z G d de          Z G d de          Z G d de          Z G d de          ZdS )    N)*   )ConfigCanvasConfigContext)
XlibCanvas)glx)
glxext_arb)glx_info)glxext_mesa)lib)glc                       e Zd Zd ZdS )
XlibConfigc                     t          t                    st          d          j        j        }j        j        }t          j        |                              dd          }|rt          nt          g }                                 D ]H\  }}j                            |d           }|r&|$|                    |t          |          g           I|r"|                    t           j        dg           n!|                    t           j        dg           |                    ddg           t'          t)          |          z  | }	|r}t'                      }
t!          j        |||	t-          |
                    }|sg S t/          |t1          t           j        |
j        z                      j        } fd|D             }|S 	  |	           gS # t8          j        $ r g cY S w xY w)Nz(Canvas must be an instance of XlibCanvasr      Tr   c                 ,    g | ]} |          S  r   ).0ccanvasconfig_classinfoselfs     H/DATA/AppData/hermes/venv/lib/python3.11/site-packages/pyglet/gl/xlib.py
<listcomp>z$XlibConfig.match.<locals>.<listcomp>W   s)    KKKall64D99KKK    )
isinstancer   RuntimeErrordisplay_displayx_screenr   GLXInfohave_versionXlibCanvasConfig13XlibCanvasConfig10get_gl_attributesattribute_idsgetextendintr	   GLX_X_RENDERABLEGLX_RGBAc_intlenglXChooseFBConfigbyrefcastPOINTERGLXFBConfigvaluecontentsr   ContextException)r   r   	x_displayr"   have_13attrsnamer5   attrattrib_listelementsconfigsresultr   r   s   ``           @@r   matchzXlibConfig.match2   s   &*-- 	KIJJJN+	>*	**##Aq)) 	.-LL-L 1133 	1 	1KD%-11$==D 1)dCJJ/000 	/LL#.56666LL#,-...aVs5zz)E2 	wwH+IxeT\oo^^G 	7GCOhn,L$M$MNNWGKKKKKKK7KKKF M$VT;EEFF&   			s   G G32G3N)__name__
__module____qualname__rA   r   r   r   r   r   1   s#        0 0 0 0 0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        ej        ej        ej        ej        ej        dZ fdZd Zd Zd Zd Z xZS )BaseXlibCanvasConfig)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_sizec                 h    t          t          |                               ||           || _        d S N)superrF   __init__r   )r   r   r   config	__class__s       r   rY   zBaseXlibCanvasConfig.__init__z   s/    "D))2266BBB r   c                 ,    t          |t                    S rW   )r   r   )r   r   s     r   
compatiblezBaseXlibCanvasConfig.compatible~   s    &*---r   c                      t          d          NabstractNotImplementedErrorr   shares     r   _create_glx_contextz(BaseXlibCanvasConfig._create_glx_context       !*---r   c                     dS )NTr   r   s    r   is_completez BaseXlibCanvasConfig.is_complete   s    tr   c                      t          d          r_   ra   rh   s    r   get_visual_infoz$BaseXlibCanvasConfig.get_visual_info   rf   r   )rB   rC   rD   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_SIZEr(   rY   r]   re   ri   rk   __classcell__r[   s   @r   rF   rF   e   s         *-.*$(&((,0424 M$! ! ! ! !. . .. . .  . . . . . . .r   rF   c                   *     e Zd Z fdZd Zd Z xZS )r&   c           	         t          t          |                               |||           |j        j        }|j        j        }t          j        |||          | _        | j        st          j
        d          | j                                        D ]X\  }}t                      }	t          j        || j        |t          |	                    }
|
dk    rt!          | ||	j                   Yd| _        d| _        d S )NzNo conforming visual existsr   )rX   r&   rY   r    r!   r"   r	   glXChooseVisual_visual_infor   r7   r(   itemsr.   glXGetConfigr1   setattrr5   sample_bufferssamples)r   r   r   r=   rZ   r8   r"   r;   r<   r5   r@   r[   s              r   rY   zXlibCanvasConfig10.__init__   s     $''006JJJN+	>*/x. .  	E%&CDDD,2244 	1 	1JD$GGE%4,dE%LLB BF{{dEK000r   c                     | j         j        S rW   )r   r6   rh   s    r   rk   z"XlibCanvasConfig10.get_visual_info   s     ))r   c                 "    t          | |          S rW   )XlibContext10rc   s     r   create_contextz!XlibCanvasConfig10.create_context   s    T5)))r   )rB   rC   rD   rY   rk   r   r{   r|   s   @r   r&   r&      sV            &* * ** * * * * * *r   r&   c                       e Zd Zej                                        Ze                    ej        ej	        ej
        ej        ej        ej        ej        ej        ej        ej        ej        d            fdZd Zd Z xZS )r%   )r   r   render_typeconfig_caveattransparent_typetransparent_index_valuetransparent_red_valuetransparent_green_valuetransparent_blue_valuetransparent_alpha_valuex_renderablec           	      f   t          t          |                               |||           |j        j        }|| _        | j                                        D ]X\  }}t                      }t          j
        || j        |t          |                    }	|	dk    rt          | ||j                   Yd S Nr   )rX   r%   rY   r    r!   	_fbconfigr(   r   r.   r	   glXGetFBConfigAttribr1   r   r5   )r   r   r   fbconfigrZ   r8   r;   r<   r5   r@   r[   s             r   rY   zXlibCanvasConfig13.__init__   s     $''006JJJN+	!,2244 	1 	1JD$GGE-4>4u? ?F{{dEK000	1 	1r   c                 ^    t          j        | j        j        j        | j                  j        S rW   )r	   glXGetVisualFromFBConfigr   r    r!   r   r6   rh   s    r   rk   z"XlibCanvasConfig13.get_visual_info   s"    +DK,?,H$.YYbbr   c                 v    | j                             d          rt          | |          S t          | |          S )NGLX_ARB_create_context)r   have_extensionXlibContextARBXlibContext13rc   s     r   r   z!XlibCanvasConfig13.create_context   s;    =''(@AA 	.!$... u---r   )rB   rC   rD   rF   r(   copyupdater	   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_VALUEr,   rY   rk   r   r{   r|   s   @r   r%   r%      s        (6;;==M0? *.4#&#B!$!>#&#B"%"@#&#B ,    $
1 
1 
1 
1 
1c c c. . . . . . .r   r%   c                   8     e Zd Z fdZd ZddZd Zd Z xZS )BaseXlibContextc                 ,   t          t          |                               ||           |j        j        j        | _        |                     |          | _        | j        st          j
        d          |j                            d          | _        |j                            d          | _        |j                            d          | _        |j                            d          | _        | j        o| j        p| j         | _        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)rX   r   rY   r   r    r!   r8   re   glx_contextr   r7   r   r   _have_SGI_video_sync_have_SGI_swap_control_have_EXT_swap_control_have_MESA_swap_control_use_video_sync_vsyncr   rZ   rd   r[   s      r   rY   zBaseXlibContext.__init__   s    ot$$--fe<<<.733E:: 	E%&CDDD$*O$B$BCW$X$X!&,o&D&DE[&\&\#&,o&D&DE[&\&\#'-'E'EF]'^'^$ !% 9 !b%)%@%`DD` a 	 r   c                 @    t          j        | j        | j                  S rW   )r	   glXIsDirectr8   r   rh   s    r   	is_directzBaseXlibContext.is_direct   s    t~t/?@@@r   Tc                    || _         |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        |j                   Y d }~d S d }~ww xY w)Nr   r   )r   r   r   r
   glXSwapIntervalEXTr8   r	   glXGetCurrentDrawabler   r   glXSwapIntervalMESAr   glXSwapIntervalSGIr   MissingFunctionExceptionwarningswarnmessage)r   vsyncintervales       r   	set_vsynczBaseXlibContext.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!)$$$$$$$$$	%s#   :B "B /B CB<<Cc                     | j         S rW   )r   rh   s    r   	get_vsynczBaseXlibContext.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   c_uintr
   glXGetVideoSyncSGIr1   glXWaitVideoSyncSGIr5   )r   counts     r   _wait_vsynczBaseXlibContext._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   )T)	rB   rC   rD   rY   r   r   r   r   r{   r|   s   @r   r   r      s            4A A A% % % %  S S S S S S S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 )r   c                 Z    t          t          |                               ||           d S rW   )rX   r   rY   r   s      r   rY   zXlibContext10.__init__  s)    mT""++FE:::::r   c                     | j                                         rt          j        d          |r|j        }nd }t          j        | j         j        j        j	        | j         j
        |d          S NzERequire GLX_ARB_create_context extension to create OpenGL 3 contexts.T)rZ   requires_gl_3r   r7   r   r	   glXCreateContextr   r    r!   r   r   rd   share_contexts      r   re   z!XlibContext10._create_glx_context
  s~    ;$$&& 	Y%WY Y Y  	!!-MM M#DK$6$>$G$(K$<mTS S 	Sr   c                     t          t          |                               |           |                                  d S rW   )rX   r   attachset_currentr   r   r[   s     r   r   zXlibContext10.attach  s9    mT""))&111r   c                     t          j        | j        | j        j        | j                   t          t          |                                            d S rW   )	r	   glXMakeCurrentr8   r   x_windowr   rX   r   r   r   r[   s    r   r   zXlibContext10.set_current  sD    4>4;+?AQRRRmT""..00000r   c                     | j         sd S |                                  t          j                     t	          j        | j        dd            t          t          |           	                                 d S r   )
r   r   r   glFlushr	   r   r8   rX   r   detachr   s    r   r   zXlibContext10.detach   sh    { 	F

4>1d333mT""))+++++r   c                     t          t          |                                            t          j        | j        | j                   d | _        d S rW   )rX   r   destroyr	   glXDestroyContextr8   r   r   s    r   r   zXlibContext10.destroy)  sE    mT""**,,,dnd.>???r   c                     | j         sd S | j        r|                                  t          j        | j        | j         j                   d S rW   )r   r   r   r	   glXSwapBuffersr8   r   rh   s    r   flipzXlibContext10.flip/  sM    { 	F; 	4>4;+?@@@@@r   rB   rC   rD   rY   re   r   r   r   r   r   r{   r|   s   @r   r   r     s        ; ; ; ; ;S S S    
1 1 1 1 1, , , , ,         A A A A A A A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 )r   c                 h    t          t          |                               ||           d | _        d S rW   )rX   r   rY   
glx_windowr   s      r   rY   zXlibContext13.__init__9  s.    mT""++FE:::r   c                     | j                                         rt          j        d          |r|j        }nd }t          j        | j         j        j        j	        | j         j
        t
          j        |d          S r   )rZ   r   r   r7   r   r	   glXCreateNewContextr   r    r!   r   GLX_RGBA_TYPEr   s      r   re   z!XlibContext13._create_glx_context=  s    ;$$&& 	&%%& & &  	!!-MM M&t{'9'A'J'+{'<c>OQ^'+- - 	-r   c                     || j         u rd S t          t          |                               |           t	          j        | j        | j        j        |j	        d           | _
        |                                  d S rW   )r   rX   r   r   r	   glXCreateWindowr8   rZ   r   r   r   r   r   s     r   r   zXlibContext13.attachL  ss    T[  FmT""))&111-NDK16?DJ Jr   c                     t          j        | j        | j        | j        | j                   t          t          |                                            d S rW   )r	   glXMakeContextCurrentr8   r   r   rX   r   r   r   s    r   r   zXlibContext13.set_currentV  sO    !NDOT_d>N	P 	P 	PmT""..00000r   c                 L   | j         sd S |                                  t          j                     t	          t
          |                                            t          j        | j	        ddd            | j
        r(t          j        | j	        | j
                   d | _
        d S d S r   )r   r   r   r   rX   r   r   r	   r   r8   r   glXDestroyWindowr   s    r   r   zXlibContext13.detach[  s    { 	F

mT""))+++!$.!Q===? 	# AAA"DOOO	# 	#r   c                 "   t          t          |                                            | j        r0t	          j        | j        j        j        | j                   d | _        | j	        r(t	          j
        | j        | j	                   d | _	        d S d S rW   )rX   r   r   r   r	   r   rZ   r    r!   r   r   r8   r   s    r   r   zXlibContext13.destroyi  s    mT""**,,,? 	# !4!=tOOO"DO 	$!$.$2BCCC#D	$ 	$r   c                     | j         sd S | j        r|                                  t          j        | j        | j                    d S rW   )r   r   r   r	   r   r8   rh   s    r   r   zXlibContext13.flipr  sJ     	F; 	4>4?;;;;;r   r   r|   s   @r   r   r   8  s            - - -    1 1 1 1 1
# # # # #$ $ $ $ $< < < < < < <r   r   c                       e Zd Zd ZdS )r   c                 x   |r|j         }nd }g }| j        j        +|                    t          j        | j        j        g           | j        j        +|                    t          j        | j        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   T)r   rZ   major_versionr*   r
   GLX_CONTEXT_MAJOR_VERSION_ARBminor_versionGLX_CONTEXT_MINOR_VERSION_ARBforward_compatible&GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARBdebugGLX_CONTEXT_DEBUG_BIT_ARBGLX_CONTEXT_FLAGS_ARBappendr.   r/   glXCreateContextAttribsARBr   r    r!   r   )r   rd   r   attribsflagss        r   re   z"XlibContextARB._create_glx_context|  s<    	!!-MM M;$0NNJD K57 8 8 8;$0NNJD K57 8 8 8;) 	GZFFE; 	:Z99E 	FNNJ<eDEEEq3w<<''24K&/K!=$A A 	Ar   N)rB   rC   rD   re   r   r   r   r   r   {  s(        A A A A Ar   r   )r   ctypesbaser   r   r   pyglet.canvas.xlibr   	pyglet.glr	   r
   r   r   r   pygletr   r   rF   r&   r%   r   r   r   r   r   r   r   <module>r     s=  H      / / / / / / / / / / ) ) ) ) ) )                         ! ! ! ! ! !            1 1 1 1 1 1 1 1h$. $. $. $. $.< $. $. $.N* * * * *- * * *6'. '. '. '. '.- '. '. '.T2S 2S 2S 2S 2Sg 2S 2S 2Sj/A /A /A /A /AO /A /A /Ad@< @< @< @< @<O @< @< @<FA A A A A] A A A A Ar   