
    ^j:                    Z   d Z ddlmZ ddlmZ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 erddlmZ  G d d	e          Z G d
 d          Z e            Zej        Zej        Zej        Zej        Zej        Zej        Zej        Zej         Z ej!        Z!ej"        Z"ej#        Z#dS )ak  Information about version and extensions of current GLX implementation.

Usage::

    from pyglet.gl import glx_info

    if glx_info.have_extension('GLX_NV_float_buffer'):
        # ...

Or, if using more than one display::

    from pyglet.gl.glx_info import GLXInfo

    info = GLXInfo(window._display)
    if info.get_server_vendor() == 'ATI':
        # ...

    )annotations)byrefc_int)TYPE_CHECKING)GLX_EXTENSIONS
GLX_VENDORGLX_VERSIONglXGetClientStringglXQueryExtensionglXQueryExtensionsStringglXQueryServerStringglXQueryVersion)asstr)Displayc                      e Zd ZdS )GLXInfoExceptionN)__name__
__module____qualname__     M/home/agentuser/manim-venv/lib/python3.11/site-packages/pyglet/gl/glx_info.pyr   r   *   s        Dr   r   c                  r    e Zd ZdddZddZdd	Zdd dZd!dZd!dZd"dZ	d!dZ
d!dZd"dZd"dZd#dZdS )$GLXInfoNdisplayDisplay | NonereturnNonec                d    |r&t           j        st                               |           || _        d S N)	_glx_infor   set_displayselfr   s     r   __init__zGLXInfo.__init__/   s3     	+9, 	+!!'***r   r   c                    || _         d S r    )r   r#   s     r   r"   zGLXInfo.set_display6   s    r   c                6    | j         sd}t          |          d S )Nz No X11 display has been set yet.)r   r   )r$   msgs     r   check_displayzGLXInfo.check_display9   s)    | 	(4C"3'''	( 	(r   r   majorintminorboolc                   |                                   t          | j        d d           sd}t          |          |                                                                 d         }|                                                                 d         }d |                    d          D             }d |                    d          D             }t          |          ||fk    ot          |          ||fk    S )Nz$pyglet requires an X server with GLXr   c                ,    g | ]}t          |          S r   r+   .0is     r   
<listcomp>z(GLXInfo.have_version.<locals>.<listcomp>G       <<<Q#a&&<<<r   .c                ,    g | ]}t          |          S r   r0   r1   s     r   r4   z(GLXInfo.have_version.<locals>.<listcomp>H   r5   r   )r)   r   r   r   get_server_versionsplitget_client_versiontuple)r$   r*   r,   r(   server_versionclient_versionserverclients           r   have_versionzGLXInfo.have_version>   s     tT:: 	(8C"3'''002288::1=002288::1=<<."6"6s";";<<<<<."6"6s";";<<<f%/ 0f%/	1r   strc                z    |                                   t          t          | j        dt                              S Nr   )r)   r   r   r   r   r$   s    r   get_server_vendorzGLXInfo.get_server_vendorL   s1    )$,:FFGGGr   c                   |                                   t                      }t                      }t          | j        t	          |          t	          |                    sd}t          |          |j         d|j         S )Nz&Could not determine GLX server versionr6   )r)   r   r   r   r   r   value)r$   r*   r,   r(   s       r   r8   zGLXInfo.get_server_versionP   su     	t|U5\\5<<HH 	(:C"3'''+-----r   	list[str]c                    |                                   t          t          | j        dt                                                              S rC   )r)   r   r   r   r   r9   rD   s    r   get_server_extensionszGLXInfo.get_server_extensions\   s=    )$,>JJKKQQSSSr   c                x    |                                   t          t          | j        t                              S r    )r)   r   r
   r   r   rD   s    r   get_client_vendorzGLXInfo.get_client_vendor`   s/    'jAABBBr   c                x    |                                   t          t          | j        t                              S r    )r)   r   r
   r   r	   rD   s    r   r:   zGLXInfo.get_client_versiond   s/    'kBBCCCr   c                    |                                   t          t          | j        t                                                              S r    )r)   r   r
   r   r   r9   rD   s    r   get_client_extensionszGLXInfo.get_client_extensionsh   s;    'nEEFFLLNNNr   c                    |                                   t          t          | j        d                                                    S rC   )r)   r   r   r   r9   rD   s    r   get_extensionszGLXInfo.get_extensionsl   s;    -dlA>>??EEGGGr   	extensionc                    |                                   |                     dd          sdS ||                                 v S )N   F)r)   r@   rQ   )r$   rR   s     r   have_extensionzGLXInfo.have_extensionp   sH      A&& 	5D//1111r   r    )r   r   r   r   )r   r   r   r   )r   r   )r   )r*   r+   r,   r+   r   r-   )r   rA   )r   rH   )rR   rA   r   r-   )r   r   r   r%   r"   r)   r@   rE   r8   rJ   rL   r:   rO   rQ   rU   r   r   r   r   r   .   s&              ( ( ( (
1 1 1 1 1H H H H
. 
. 
. 
.T T T TC C C CD D D DO O O OH H H H2 2 2 2 2 2r   r   N)$__doc__
__future__r   ctypesr   r   typingr   pyglet.gl.glxr   r   r	   r
   r   r   r   r   pyglet.utilr   pyglet.libs.x11.xlibr   	Exceptionr   r   r!   r"   r)   r@   rE   r8   rJ   rL   r:   rO   rQ   rU   r   r   r   <module>r^      s   & # " " " " "                    	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	       -,,,,,,	 	 	 	 	y 	 	 	F2 F2 F2 F2 F2 F2 F2 F2T GII	#'%/ 1 !7 / 1 !7 ))r   