a
    ij"*                     @   s  d Z ddlmZ ddlmZmZmZ ddlZddl	Z	ddl
Z
ddlZe
dZedZdZg Zg Zdeded	ed
edgfdededgfdededededgfdededededededededededg
fdeded ed!ed"ed#ed$ed%ed&ed'ed(ed)gfd*ed+ed,ed-ed.ed/ed0gfd1ed2ed3ed4ed5ed6ed7ed8ed9ed:ed;ed<gfgZG d=d> d>eZG d?d@ d@eZe ZG dAdB dBeZe ZdCdD Ze ZZG dEdF dFeZdGdH ZdS )IzuExtension module support methods

This module provides the tools required to check whether
an extension is available
    )LateBind)bytesunicodeas_8_bitNzOpenGL.extensionsGL_VERSION_GL_)   r   ZGL_ARB_vertex_array_objectZGL_ARB_texture_buffer_objectZGL_ARB_framebuffer_objectZGL_ARB_map_buffer_range)r      ZGL_ARB_copy_bufferZGL_ARB_uniform_buffer_object)r      Z GL_ARB_draw_elements_base_vertexZGL_ARB_provoking_vertexZGL_ARB_syncZGL_ARB_texture_multisample)r   r   ZGL_ARB_blend_func_extendedZGL_ARB_sampler_objectsZGL_ARB_explicit_attrib_locationZGL_ARB_occlusion_query2ZGL_ARB_shader_bit_encodingZGL_ARB_texture_rgb10_a2uiZGL_ARB_texture_swizzleZGL_ARB_timer_queryZ!GL_ARB_vertex_type_2_10_10_10_rev)   r   ZGL_ARB_texture_query_lodZGL_ARB_draw_indirectZGL_ARB_gpu_shader5ZGL_ARB_gpu_shader_fp64ZGL_ARB_shader_subroutineZGL_ARB_tessellation_shaderZ"GL_ARB_texture_buffer_object_rgb32ZGL_ARB_texture_cube_map_arrayZGL_ARB_texture_gatherZGL_ARB_transform_feedback2ZGL_ARB_transform_feedback3)r
   r   ZGL_ARB_ES2_compatibilityZGL_ARB_get_program_binaryZGL_ARB_separate_shader_objectsZGL_ARB_shader_precisionZGL_ARB_vertex_attrib_64bitZGL_ARB_viewport_array)r
   r	   ZGL_ARB_base_instanceZGL_ARB_shading_language_420packZ#GL_ARB_transform_feedback_instancedZ'GL_ARB_compressed_texture_pixel_storageZGL_ARB_conservative_depthZGL_ARB_internalformat_queryZGL_ARB_map_buffer_alignmentZGL_ARB_shader_atomic_countersZGL_ARB_shader_image_load_storeZGL_ARB_shading_language_packingZGL_ARB_texture_storagec                   @   s\   e Zd ZdZdZddgZd ZZd ZZ	g Z
dd Zedd Zdd	 Zd
d Zdd ZdS )ExtensionQuerierNr   r   c                 C   s   | j |  d S N)
registeredappendself r   O/home/ghrups/robot-bench/.venv/lib/python3.9/site-packages/OpenGL/extensions.py__init__v   s    zExtensionQuerier.__init__c                 C   s$   | j D ]}||}|r|  S qdS )NF)r   )r   	specifierr   resultr   r   r   hasExtensiony   s
    

zExtensionQuerier.hasExtensionc                 C   s   t |t dt d}|t | js,d S |t | jrdd |t| jd  t dD }|d d | jkrxdS |  }|s|S ||kS | 	 }|o||v S d S )N._c                 S   s   g | ]}t |qS r   int.0xr   r   r   
<listcomp>   s   z-ExtensionQuerier.__call__.<locals>.<listcomp>r	   T)
r   replace
startswithprefixversion_prefixlensplitassumed_version
getVersiongetExtensions)r   r   version
extensionsr   r   r   __call__   s    zExtensionQuerier.__call__c                 C   s   | j s|  | _ | j S r   )r(   pullVersionr   r   r   r   r&      s    
zExtensionQuerier.getVersionc                 C   s   | j s|  | _ | j S r   )r)   pullExtensionsr   r   r   r   r'      s    
zExtensionQuerier.getExtensions)__name__
__module____qualname__r!   r"   r%   r(   r)   version_stringZextensions_stringr   r   classmethodr   r*   r&   r'   r   r   r   r   r   l   s   
r   c                   @   sB   e Zd ZedZedZddgZedZ	dZ
dd Zdd	 Zd
S )
_GLQuerierZGL_r   r   z8^(?P<api_marker>OpenGL (ES )?)?(?P<version>\d+([.]\d+)+)Fc                 C   s   ddl m} |j sdS ddlm} ddlm} ||}|jddd| _| j	
| j}|r|d	| _|d
}|r|dkrtd d| _|rdd | jdD S dS dS )z}Retrieve 2-int declaration of major/minor GL version

        returns [int(major),int(minor)] or False if not loaded
        r   platformF)glGetString)
GL_VERSIONzutf-8ignore)errorsr(   
api_markerz	OpenGL ESzDImporting OpenGL in an OpenGL ES context is not advisable, generallyTc                 S   s   g | ]}t |qS r   r   r   r   r   r   r          z*_GLQuerier.pullVersion.<locals>.<listcomp>r   N)OpenGLr4   PLATFORMCurrentContextIsValidOpenGL.raw.GL.VERSION.GL_1_1r5   r6   decoder0   version_matchermatchgroup_logwarningis_opengl_esr$   )r   r4   r5   r6   newrA   r9   r   r   r   r+      s(    

z_GLQuerier.pullVersionc              	   C   sT  ddl m} |j sdS ddlm} ddlm}m} ddlm	} ddl m
} z.||}| rf| |rt| }nW dS W nl t|jfy   ddlm}m}	 dd	lm}
 | }|
|| g }t|jD ]}|	||}|| qY n0 |  }|s|S t|d d
 }tD ]@\}}||krF|D ]}||vr$|t| q$n qPq|S )Nr   r3   F)GLint)r5   
glGetError)GL_EXTENSIONSerror)GL_NUM_EXTENSIONSglGetStringi)glGetIntegervr	   )r;   r4   r<   r=   ZOpenGL.raw.GL._typesrG   r>   r5   rH   rI   rK   ZGLErrorr$   AttributeErrorZOpenGL.raw.GL.VERSION.GL_3_0rL   rM   rN   rangevaluer   r&   tupleVERSION_EXTENSIONSr   )r   r4   rG   r5   rH   rI   rK   r)   rL   rM   rN   counti	extensionr(   checkvZv_extsZv_extr   r   r   r,      sD    







z_GLQuerier.pullExtensionsN)r-   r.   r/   r   r!   r"   r%   recompiler@   rE   r+   r,   r   r   r   r   r2      s   r2   c                   @   s,   e Zd ZedZedZdd Zdd ZdS )_GLUQuerierZGLU_ZGLU_VERSION_GL_c                 C   s,   ddl m}m} dd ||tdD S )Nr   )gluGetStringGLU_VERSIONc                 S   s   g | ]}|  rt|qS r   )isdigitr   r   r   r   r   r     s   z+_GLUQuerier.pullVersion.<locals>.<listcomp>r   )
OpenGL.GLUr\   r]   r$   r   )r   r\   r]   r   r   r   r+     s    z_GLUQuerier.pullVersionc                 C   s   ddl m}m} || S )Nr   )r\   GLU_EXTENSIONS)r_   r\   r`   r$   )r   r\   r`   r   r   r   r,   
  s    z_GLUQuerier.pullExtensionsN)r-   r.   r/   r   r!   r"   r+   r,   r   r   r   r   r[      s   	r[   c                 C   s
   t | S r   )r   r   )r   r   r   r   r     s    r   c                   @   s(   e Zd Zdd Zdd ZeZdd ZdS )
_Alternatec                 G   sD   || _ || _tjr@t j}|r@|jr@d|jjv r@|jjd | _dS )zBInitialize set of alternative implementations of the same functionr-   N)	r-   _alternativesrootZMODULE_ANNOTATIONSsys	_getframef_back	f_globalsr.   )r   nameZ
alternatesframer   r   r   r     s    
z_Alternate.__init__c              
   C   sH   ddl m} zt|  W S  |jyB } zW Y d }~dS d }~0 0 d S )Nr   rJ   F)r;   rK   boolZgetFinalCallNullFunctionError)r   rK   errr   r   r   __bool__$  s
    z_Alternate.__bool__c                 C   sN   | j D ]}|r|  S qddlm} |dddd | j D | jf dS )z<Call, doing a late lookup and bind to find an implementationr   rJ   zWAttempt to call an undefined alternate function (%s), check for bool(%s) before callingz, c                 S   s   g | ]
}|j qS r   )r-   r   r   r   r   r   =  r:   z'_Alternate.finalise.<locals>.<listcomp>N)rb   r;   rK   rk   joinr-   )r   	alternaterK   r   r   r   finalise.  s    

z_Alternate.finaliseN)r-   r.   r/   r   rm   __nonzero__rp   r   r   r   r   ra     s   	ra   c                 G   s8   t | ttfs| f| }| j} t| tfi | g|R  S )zConstruct a callable that functions as the first implementation found of given set of alternatives

    if name is a function then its name will be used....
    )
isinstancer   r   r-   typera   )rh   Z	functionsr   r   r   ro   C  s    
ro   )__doc__ZOpenGL.latebindr   ZOpenGL._bytesr   r   r   r;   rc   rd   loggingrY   	getLoggerrC   ZVERSION_PREFIXZCURRENT_GL_VERSIONZAVAILABLE_GL_EXTENSIONSZAVAILABLE_GLU_EXTENSIONSrS   objectr   r2   Z	GLQuerierr[   Z
GLUQuerierr   ZhasGLExtensionZhasGLUExtensionra   ro   r   r   r   r   <module>   s   


W4Z)