ó
¹™Jc        .   @   s‰  d  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 d d l m Z d d l Z d d l Z e j Z e j Z e j Z e j d d ƒ Z dF Z d
 e j e j e j d5 d6 f d e j e j e j d5 d6 f d e j e j e j d5 d6 f d e j e j e j d5 d6 f d e j e j e j d5 d6 f d	 e j e j  e j d5 d6 f d e j e j! e j d5 d6 f d e j e j" e j d5 d6 f d e j# e j  e j$ d7 d f d e j& e j e j' d8 d f d e j& e j e j' d8 d f d e j& e j e j' d8 d f d e j& e j e j' d8 d f d e j& e j e j' d8 d f d e j& e j  e j' d8 d f d e j( e j e j) d8 d f d e j( e j e j) d8 d f d e j( e j e j) d8 d f d e j( e j  e j) d8 d f d e j( e j e j) d8 d f d" e j* e j e j+ d5 d7 f d# e j* e j e j+ d5 d7 f d$ e j* e j e j+ d5 d7 f d! e j* e j  e j+ d5 d7 f d% e j* e j e j+ d5 d7 f d( e j, e j e j- d5 d6 f d) e j, e j e j- d5 d6 f d* e j, e j e j- d5 d6 f d' e j, e j e j- d5 d6 f d+ e j, e j e j- d5 d6 f g Z. d9 „  Z/ x: g  e. D] Z0 e/ e0 Œ  ^ qHD] \ Z1 Z2 e2 e3 ƒ  e1 <q^W[1 [2 e j e j, ƒ j4 d: e j5 d: d; ƒ ƒ j6 e j7 d: e j- ƒ ƒ j8 e j9 d: ƒ ƒ Z, e j e j* ƒ j4 d: e j5 d: d; ƒ ƒ j6 e j7 d: e j+ ƒ ƒ j8 e j9 d: ƒ ƒ Z* e j e j( ƒ j4 d: e j5 d: d; ƒ ƒ j6 e j7 d: e j) ƒ ƒ j8 e j9 d: ƒ ƒ Z( e j e j& ƒ j4 d: e j5 d: d; ƒ ƒ j6 e j7 d: e j' ƒ ƒ j8 e j9 d: ƒ ƒ Z& e j e j# ƒ j4 d: e j: d: e j; ƒ ƒ j6 e j7 d: e j$ ƒ ƒ j8 e j9 d: ƒ ƒ Z# e j e j ƒ j4 d: e j5 d: d; ƒ ƒ j6 e j7 d: e j ƒ ƒ j8 e j9 d: ƒ ƒ Z e j e j< ƒ j6 e j7 d: e ƒ ƒ j8 e j9 d: ƒ ƒ Z< e j e j= ƒ j4 d< e j5 d< d; ƒ ƒ j8 e j9 d< ƒ ƒ Z= d= „  Z> xU e j d> f e j! d? f e j" d@ f f D]) \ Z? Z@ e> e? e@ ƒ e3 ƒ  dA e3 ƒ  <q%W[? [@ [> d dB „ ZA d dC „ ZB dD „  ZC dE „  ZD d S(G   s£  Implementations for "held-pointers" of various types

This argument type is special because it is stored, that is, it 
needs to be cached on our side so that the memory address does not
go out-of-scope

storedPointers = {}
def glVertexPointerd( array ):
    "Natural writing of glVertexPointerd using standard ctypes"
    arg2 = GL_DOUBLE
    arg3 = 0 # stride
    arg4 = arrays.asArray(array, GL_DOUBLE)
    arg1 = arrays.arraySize( arg4, 'd' )
    platform.OpenGL.glVertexPointer( arg1, arg2, arg3, arrays.ArrayDatatype.dataPointer(arg4) )
    glCheckError()
    # only store if we successfully set the value...
    storedPointers[ GL_VERTEX_ARRAY ] = arg4
    return arg4
iÿÿÿÿ(   t   platformt   arrayst   errort   wrappert   contextdatat
   converterst   constantt   ERROR_ON_COPY(   t   GL(   t   annotationsNt   GL_INTERLEAVED_ARRAY_POINTERirÿÿt   glColorPointert   glColorPointerbt   glColorPointerdt   glColorPointerft   glColorPointerit   glColorPointerst   glColorPointerubt   glColorPointeruit   glColorPointerust   glEdgeFlagPointert   glEdgeFlagPointerbt   glIndexPointert   glIndexPointerbt   glIndexPointerdt   glIndexPointerft   glIndexPointerit   glIndexPointerst   glIndexPointerubt   glNormalPointert   glNormalPointerbt   glNormalPointerdt   glNormalPointerft   glNormalPointerit   glNormalPointerst   glTexCoordPointert   glTexCoordPointerbt   glTexCoordPointerdt   glTexCoordPointerft   glTexCoordPointerit   glTexCoordPointerst   glVertexPointert   glVertexPointerbt   glVertexPointerdt   glVertexPointerft   glVertexPointerit   glVertexPointerst   glDrawElementst   glDrawElementsuit   glDrawElementsubt   glDrawElementsust   glFeedbackBuffert   glSelectBuffert   glRenderModet   glGetPointervt   glInterleavedArraysi    i   i   i   c         C   sa  t  j  | ƒ } t | d d ƒ s+ t d ‚ | rZ t j | } | j d t j | ƒ ƒ n | j d t j d d ƒ ƒ | j	 d t
 j d ƒ ƒ d | j k rÊ | j d ƒ | j	 d t j | | ƒ ƒ n  d | j k rù | j d ƒ | j	 d | ƒ n  d | j k r(| j d ƒ | j	 d d ƒ n  | j t j d | ƒ ƒ | j t  j d ƒ ƒ |  | f S(	   s'   Wrap the given pointer-setting functiont   pyConverterss   Reusing wrappers?t   pointert   typet   sizet   stridei    N(   R   t   getattrt   Nonet   AssertionErrorR   t   GL_CONSTANT_TO_ARRAY_TYPEt   setPyConvertert   asArrayTypet   AsArrayOfTypet   setCConverterR   t   getPyArgsNamet   argNamest   arraySizeOfFirstTypet   setStoreValuest   storePointerTypet   setReturnValuest   returnPyArgument(   t   namet   baseFunctiont   glTypet	   arrayTypet	   startArgst   defaultSizet   functiont   arrayModuleType(    (    s3   C:\Python27\Lib\site-packages\OpenGL\GL\pointers.pyt   wrapPointerFunctiong   s&    R9   R:   t   indicesc         C   sƒ   t  j |  } t j t j ƒ j d ƒ j d |  ƒ j d ƒ j d t  j d | ƒ ƒ j d t  j d | ƒ ƒ j	 t j
 d ƒ ƒ } | S(   NR:   t   countRU   (   R   R@   R   t   simpleR/   RA   RD   t   AsArrayTypedSizet   AsArrayTypedRJ   RK   (   R:   t   suffixRO   RR   (    (    s3   C:\Python27\Lib\site-packages\OpenGL\GL\pointers.pyt   glDrawElementsTyped¿   s    		t   ubt   uit   uss   glDrawElements%(suffix)sc         C   sK   | d k r$ t j j |  f ƒ } n  t j |  | ƒ t j t j | ƒ | S(   s0   Create a selection buffer of the given size
    N(	   R>   R   t   GLuintArrayt   zerosRW   R4   R   t   setValuet   GL_SELECTION_BUFFER_POINTER(   R;   t   buffer(    (    s3   C:\Python27\Lib\site-packages\OpenGL\GL\pointers.pyR4   Ô   s
    c         C   s^   | d k r$ t j j |  f ƒ } n  t j |  | | ƒ t j t j | ƒ t j d | ƒ | S(   s0   Create a selection buffer of the given size
    t   GL_FEEDBACK_BUFFER_TYPEN(	   R>   R   t   GLfloatArrayR`   RW   R3   R   Ra   t   GL_FEEDBACK_BUFFER_POINTER(   R;   R:   Rc   (    (    s3   C:\Python27\Lib\site-packages\OpenGL\GL\pointers.pyR3   Ü   s    c         C   s»  d d l  m } d d l  m } m } | t j ƒ } y | d } Wn t t t f k
 ra } n X| t j	 d f k r„ t j
 |  ƒ St j
 |  ƒ } | d k  r| t j k rÆ t j t j d ƒ ‚ q| t j k rí t j t j d ƒ ‚ qt j t j d | f ƒ ‚ n  t j ƒ  } | d k r6t j d ƒ ‚ n  i t j | j f t j 6t j | j j f t j 6| \ } }	 t j | ƒ }
 |
 d	 k rŸt | ƒ }
 n  |	 r·|	 |
 | ƒ }
 n  |
 S(
   s—   Change to the given rendering mode
    
    If the current mode is GL_FEEDBACK or GL_SELECT, return
    the current buffer appropriate to the mode
    iÿÿÿÿ(   t   glGetIntegerv(   t	   selectiont   feedbacki    s2   glSelectBuffer too small to hold selection resultss4   glFeedbackBuffer too small to hold selection resultssD   Unknown glRenderMode buffer (%s) too small to hold selection resultss4   Returning from glRenderMode without a valid context!N(   t	   OpenGL.GLRg   Rh   Ri   RW   t   GL_RENDER_MODEt	   TypeErrort
   ValueErrort
   IndexErrort	   GL_RENDERR5   t	   GL_SELECTR   t   GLErrort   GL_STACK_OVERFLOWt   GL_FEEDBACKR    t   GetCurrentContextt   ErrorRf   t   parseFeedbackRb   t   GLSelectRecordt	   fromArrayR   t   getValueR>   R6   (   t   newModeRg   Rh   Ri   t   currentModet   errt   resultt   contextt   arrayConstantt   wrapperFunctiont   current(    (    s3   C:\Python27\Lib\site-packages\OpenGL\GL\pointers.pyR5   æ   sJ    c         C   sf   t  j ƒ  } t j |  t  j | ƒ ƒ t j |  ƒ } | d k	 rb t j	 j
 | ƒ | j k rb | Sn  | S(   s"   Retrieve a stored pointer constantN(   t   ctypest   voidpRW   R6   t   byrefR   Ry   R>   R   t   ArrayDatatypet   dataPointert   value(   R   t   vpR   (    (    s3   C:\Python27\Lib\site-packages\OpenGL\GL\pointers.pyR6   !  s    (.   s   glColorPointerR   R   R   R   R   R   R   R   s   glEdgeFlagPointerR   s   glIndexPointerR   R   R   R   R   R   s   glNormalPointerR   R   R    R!   R"   s   glTexCoordPointerR$   R%   R&   R'   R(   s   glVertexPointerR*   R+   R,   R-   R.   s   glDrawElementsR0   R1   R2   s   glFeedbackBuffers   glSelectBuffers   glRenderModes   glGetPointervs   glInterleavedArrayss   GL_INTERLEAVED_ARRAY_POINTER(E   t   __doc__t   OpenGLR    R   R   R   R   R   R   R   t
   OpenGL.rawR   RW   t   OpenGL.raw.GLR	   R‚   t   weakreft   c_intt   GLsizeit   c_uintt   GLenumt   GLintt   ConstantR
   t   __all__R   t	   GL_DOUBLEt   GL_COLOR_ARRAY_POINTERt   GL_FLOATt   GL_INTt   GL_SHORTt   GL_UNSIGNED_BYTEt   GL_BYTEt   GL_UNSIGNED_INTt   GL_UNSIGNED_SHORTR   t   GL_EDGE_FLAG_ARRAY_POINTERR>   R   t   GL_INDEX_ARRAY_POINTERR   t   GL_NORMAL_ARRAY_POINTERR#   t   GL_TEXTURE_COORD_ARRAY_POINTERR)   t   GL_VERTEX_ARRAY_POINTERt   POINTER_FUNCTION_DATART   t   argsRL   RR   t   globalsRA   RC   RH   RI   RJ   RK   RY   t   GLushortArrayR7   R/   R[   R:   RZ   R4   R3   R5   R6   (    (    (    s3   C:\Python27\Lib\site-packages\OpenGL\GL\pointers.pyt   <module>   sÖ   :			                       	$	&	7!	
	;