
    _e"%                        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
 e
j                  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d1 e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>e      Z G d? d@e      Z e       Z G dA dBe      Z e       ZdC ZexZZ G dD dEe      ZdF Zy)GzuExtension 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   GL_ARB_vertex_array_objectGL_ARB_texture_buffer_objectGL_ARB_framebuffer_objectGL_ARB_map_buffer_range)r      GL_ARB_copy_bufferGL_ARB_uniform_buffer_object)r       GL_ARB_draw_elements_base_vertexGL_ARB_provoking_vertexGL_ARB_syncGL_ARB_texture_multisample)r   r   GL_ARB_blend_func_extendedGL_ARB_sampler_objectsGL_ARB_explicit_attrib_locationGL_ARB_occlusion_query2GL_ARB_shader_bit_encodingGL_ARB_texture_rgb10_a2uiGL_ARB_texture_swizzleGL_ARB_timer_query!GL_ARB_vertex_type_2_10_10_10_rev)   r   GL_ARB_texture_query_lodGL_ARB_draw_indirectGL_ARB_gpu_shader5GL_ARB_gpu_shader_fp64GL_ARB_shader_subroutineGL_ARB_tessellation_shader"GL_ARB_texture_buffer_object_rgb32GL_ARB_texture_cube_map_arrayGL_ARB_texture_gatherGL_ARB_transform_feedback2GL_ARB_transform_feedback3)r   r   GL_ARB_ES2_compatibilityGL_ARB_get_program_binaryGL_ARB_separate_shader_objectsGL_ARB_shader_precisionGL_ARB_vertex_attrib_64bitGL_ARB_viewport_array)r   r   GL_ARB_base_instanceGL_ARB_shading_language_420pack#GL_ARB_transform_feedback_instanced'GL_ARB_compressed_texture_pixel_storageGL_ARB_conservative_depthGL_ARB_internalformat_queryGL_ARB_map_buffer_alignmentGL_ARB_shader_atomic_countersGL_ARB_shader_image_load_storeGL_ARB_shading_language_packingGL_ARB_texture_storagec                   X    e Zd ZdZdZddgZdxZZdxZZ	g Z
d Zed        Zd Zd Zd Zy)	ExtensionQuerierNr   r   c                 :    | j                   j                  |        y N)
registeredappendselfs    3/usr/lib/python3/dist-packages/OpenGL/extensions.py__init__zExtensionQuerier.__init__\   s    &    c                 B    | j                   D ]  } ||      }|s|c S  y)NF)r?   )rB   	specifierr?   results       rC   hasExtensionzExtensionQuerier.hasExtension_   s,    // 	J,F	 rE   c                    t        |      j                  t        d      t        d            }|j                  t        | j                              sy |j                  t        | j                              rr|t        | j                        d  j                  t        d            D cg c]  }t        |       }}|d d | j                  k  ry| j                         }|s|S ||k  S | j                         }|xr ||v S c c}w )N._r   T)r   replace
startswithprefixversion_prefixlensplitintassumed_version
getVersiongetExtensions)rB   rG   xversion
extensionss        rC   __call__zExtensionQuerier.__call__g   s    Y'//hsmL	##Xdkk%:<$*=*=!>@ #C(;(;$<$=>DDXc]S AI  !} 4 44oo'G''++-J9)z"99s   )Dc                 \    | j                   s| j                         | _         | j                   S r>   )rX   pullVersionrA   s    rC   rU   zExtensionQuerier.getVersionz   s#    ||++-DL||rE   c                 \    | j                   s| j                         | _         | j                   S r>   )rY   pullExtensionsrA   s    rC   rV   zExtensionQuerier.getExtensions~   s#    "113DOrE   )__name__
__module____qualname__rO   rP   rT   rX   rY   version_stringextensions_stringr?   rD   classmethodrI   rZ   rU   rV    rE   rC   r<   r<   S   sW    FNeOGj)--N&J'  :&rE   r<   c                   @    e Zd Z ed      Z ed      ZddgZd Zd Zy)
_GLQuerierGL_r   r   c                 $   ddl m} |j                  j                         syddlm} ddlm}  ||      }|| _        |rM|j                  t        d      d      d   j                  t        d            D cg c]  }t        |       c}S yc c}w )	z}Retrieve 2-int declaration of major/minor GL version

        returns [int(major),int(minor)] or False if not loaded
        r   platformF)glGetString)
GL_VERSION r   rK   )OpenGLrk   PLATFORMCurrentContextIsValidOpenGL.raw.GL.VERSION.GL_1_1rl   rm   rb   rR   r   rS   )rB   rk   rl   rm   newrW   s         rC   r\   z_GLQuerier.pullVersion   s    
 	$  668<;:'! #		(3- :1 = C CXc] TA  	s   7Bc                    ddl m} |j                  j                         syddlm} ddlm}m} ddlm	} ddl m
} 	  ||      } |       r|j                         |r|j                         }ny	 | j+                         }|s|S t-        |d d
       }t.        D ]3  \  }}||k  r'|D ]!  }||vs|j)                  t1        |             # 2 |S  |S # t        |j                  f$ rW ddlm}m}	 dd	lm}
  |       } |
||       g }t%        |j&                        D ]  } |	||      }|j)                  |        Y w xY w)Nr   rj   F)GLint)rl   
glGetError)GL_EXTENSIONSerror)GL_NUM_EXTENSIONSglGetStringi)glGetIntegervr   )ro   rk   rp   rq   OpenGL.raw.GL._typesru   rr   rl   rv   rw   ry   GLErrorrR   AttributeErrorOpenGL.raw.GL.VERSION.GL_3_0rz   r{   r|   rangevaluer@   rU   tupleVERSION_EXTENSIONSr   )rB   rk   ru   rl   rv   rw   ry   rY   rz   r{   r|   counti	extensionrX   checkvv_extsv_exts                      rC   r^   z_GLQuerier.pullExtensions   sG   #  668.H> 	$m5J|mmo%'--/
   //#Nwr{$, 	JQvEz# =EJ."))8E?<= 	 3 . 	TBGE,e5JEKK) (-<	!!	s   2C A)D=<D=N)	r_   r`   ra   r   rO   rP   rT   r\   r^   re   rE   rC   rg   rg      s)    e_F./NeO&)rE   rg   c                   8    e Zd Z ed      Z ed      Zd Zd Zy)_GLUQuerierGLU_GLU_VERSION_GL_c                     ddl m}m}  ||      j                  t	        d            D cg c]  }|j                         rt        |       c}S c c}w )Nr   )gluGetStringGLU_VERSIONrL   )
OpenGL.GLUr   r   rR   r   isdigitrS   )rB   r   r   rW   s       rC   r\   z_GLUQuerier.pullVersion   sF    7(+7==hsmL
yy{ F
 	
 
s   "Ac                 >    ddl m}m}  ||      j                         S )Nr   )r   GLU_EXTENSIONS)r   r   r   rR   )rB   r   r   s      rC   r^   z_GLUQuerier.pullExtensions   s    :^-3355rE   N)r_   r`   ra   r   rO   rP   r\   r^   re   rE   rC   r   r      s!    fF/0N
6rE   r   c                 ,    t         j                  |       S r>   )r<   rI   )rG   s    rC   rI   rI      s    (()55rE   c                   "    e Zd Zd Zd ZeZd Zy)
_Alternatec                    || _         || _        t        j                  rft	        j
                         j                  }|rE|j                  r8d|j                  j                  v r|j                  j                  d   | _        yyyyy)zBInitialize set of alternative implementations of the same functionr_   N)	r_   _alternativesrootMODULE_ANNOTATIONSsys	_getframef_back	f_globalsr`   )rB   name
alternatesframes       rC   rD   z_Alternate.__init__   sj    '""MMO**E*8N8N*N"',,"8"8"D +Ou #rE   c                 z    ddl m} 	 t        | j                               S # |j                  $ r
}Y d }~yd }~ww xY w)Nr   rx   F)ro   ry   boolgetFinalCallNullFunctionError)rB   ry   errs      rC   __bool__z_Alternate.__bool__   s7     	**,--&& 		s   ! ::c           	          | j                   D ]  }|s|c S  ddlm} |j                  ddj	                  | j                   D cg c]  }|j
                   c}      d| j
                  d      c c}w )z<Call, doing a late lookup and bind to find an implementationr   rx   z1Attempt to call an undefined alternate function (z, z), check for bool(z) before calling)r   ro   ry   r   joinr_   )rB   	alternatery   rW   s       rC   finalisez_Alternate.finalise   sj    ++ 	!I ! 	! 	!%%		t/A/AB!1::BC
 	
Bs   A1N)r_   r`   ra   rD   r   __nonzero__r   re   rE   rC   r   r      s    E K
rE   r   c                     t        | t        t        f      s| f|z   }| j                  }  t	        | t
        fi       | g| 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_   typer   )r   	functionss     rC   r   r      sD    
 teG_-GI%	}}*4
}b*D>9>>rE   )__doc__OpenGL.latebindr   OpenGL._bytesr   r   r   ro   r   r   logging	getLogger_logVERSION_PREFIXCURRENT_GL_VERSIONAVAILABLE_GL_EXTENSIONSAVAILABLE_GLU_EXTENSIONSr   objectr<   rg   	GLQuerierr   
GLUQuerierrI   hasGLExtensionhasGLUExtensionr   r   re   rE   rC   <module>r      s  
 % 0 0  
 w-/*+    -./0,-*+	  %&/0  34*+-.	  -.-.)*23*+-.,-)*%&45  +,'(%&)*+,-.5601()-.-.  +,,-12*+-.()  '(2367:;,-././011223)* e? B. .`@" @B L	6# 6 ]
6#/ / 
(  
B?rE   