a
    i‚jÇ7  ã                #   @   sb  d Z ddlmZmZmZmZmZmZ ddlm	Z	m
Z
 ddlmZ ddlZejZejZejZe dd¡ZdZd	ejejejdd
fdejejejdd
fdejejejdd
fdejejejdd
fdejejejdd
fdejejejdd
fdejejejdd
fdejej ejdd
fdej!ejej"ddfdej#ejej$ddfdej#ejej$ddfdej#ejej$ddfdej#ejej$ddfdej#ejej$ddfdej#ejej$ddfdej%ejej&ddfdej%ejej&ddfdej%ejej&ddfdej%ejej&ddfdej%ejej&ddfd ej'ejej(ddfd!ej'ejej(ddfd"ej'ejej(ddfd#ej'ejej(ddfd$ej'ejej(ddfd%ej)ejej*dd
fd&ej)ejej*dd
fd'ej)ejej*dd
fd(ej)ejej*dd
fd)ej)ejej*dd
fgZ+d*d+„ Z,d,d-„ e+D ƒD ]\Z-Z.e.e/ƒ e-< qÜz[-[.W n& e0y  Z1 zW Y dZ1[1n
dZ1[10 0 e ej)¡ 2d.e	 3d.d/¡¡ 4e	 5d.ej*¡¡ 6e 7d.¡¡Z)e ej'¡ 2d.e	 3d.d/¡¡ 4e	 5d.ej(¡¡ 6e 7d.¡¡Z'e ej%¡ 2d.e	 3d.d/¡¡ 4e	 5d.ej&¡¡ 6e 7d.¡¡Z%e ej#¡ 2d.e	 3d.d/¡¡ 4e	 5d.ej$¡¡ 6e 7d.¡¡Z#e ej!¡ 2d.e	 8d.e
j9¡¡ 4e	 5d.ej"¡¡ 6e 7d.¡¡Z!e ej¡ 2d.e	 3d.d/¡¡ 4e	 5d.ej¡¡ 6e 7d.¡¡Ze ej:¡ 4e	 5d.e¡¡ 6e 7d.¡¡Z:e ej;¡ 2d0e	 3d0d/¡¡ 6e 7d0¡¡Z;d1d2„ Z<ejd3fejd4fej d5ffD ] \Z=Z>e<e=e>ƒe/ƒ d6e/ƒ  < qæz
[=[>[<W n& e0y8 Z1 zW Y dZ1[1n
dZ1[10 0 d?d7d8„Z?d@d9d:„Z@d;d<„ ZAd=d>„ ZBdS )Aa”  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.PLATFORM.GL.glVertexPointer( arg1, arg2, arg3, arrays.ArrayDatatype.dataPointer(arg4) )
    # only store if we successfully set the value...
    storedPointers[ GL_VERTEX_ARRAY ] = arg4
    return arg4
é    )ÚplatformÚerrorÚwrapperÚcontextdataÚ
convertersÚconstant)ÚarrayhelpersÚarraydatatype)ÚGL_1_1NÚGL_INTERLEAVED_ARRAY_POINTERirÿÿ).ÚglColorPointerÚglColorPointerbÚglColorPointerdÚglColorPointerfÚglColorPointeriÚglColorPointersÚglColorPointerubÚglColorPointeruiÚglColorPointerusÚglEdgeFlagPointerÚglEdgeFlagPointerbÚglIndexPointerÚglIndexPointerbÚglIndexPointerdÚglIndexPointerfÚglIndexPointeriÚglIndexPointersÚglIndexPointerubÚglNormalPointerÚglNormalPointerbÚglNormalPointerdÚglNormalPointerfÚglNormalPointeriÚglNormalPointersÚglTexCoordPointerÚglTexCoordPointerbÚglTexCoordPointerdÚglTexCoordPointerfÚglTexCoordPointeriÚglTexCoordPointersÚglVertexPointerÚglVertexPointerbÚglVertexPointerdÚglVertexPointerfÚglVertexPointeriÚglVertexPointersÚglDrawElementsZglDrawElementsuiZglDrawElementsubZglDrawElementsusÚglFeedbackBufferÚglSelectBufferÚglRenderModeÚglGetPointervÚglInterleavedArraysr   r   é   r   r   r   r   r   r   r   r   é   r   é   r   r   r   r   r   r    r!   r"   r   r#   r&   r'   r(   r%   r)   r,   r-   r.   r+   r/   c           	      C   s  t   |¡}d|jv rd}nd}t|ddƒr2J dƒ‚|rTtj| }| |t |¡¡ n| |t |d¡¡ | 	|t
 |¡¡ d|jv r¢| d¡ | 	dt ||¡¡ d|jv rÂ| d¡ | 	d|¡ d|jv râ| d¡ | 	dd	¡ | t ||¡¡ | t  |¡¡ | |fS )
z'Wrap the given pointer-setting functionZptrÚpointerZpyConvertersNzReusing wrappers?ÚtypeÚsizeZstrider   )r   ZargNamesÚgetattrr	   ÚGL_CONSTANT_TO_ARRAY_TYPEÚsetPyConverterr   ZasArrayTypeÚAsArrayOfTypeÚsetCConverterr   ZgetPyArgsNameZarraySizeOfFirstTypeÚsetStoreValuesÚstorePointerTypeÚsetReturnValuesÚreturnPyArgument)	ÚnameZbaseFunctionZglTypeÚ	arrayTypeZ	startArgsZdefaultSizeÚfunctionZpointer_nameZarrayModuleType© rH   úP/home/ghrups/robot-bench/.venv/lib/python3.9/site-packages/OpenGL/GL/pointers.pyÚwrapPointerFunctione   s,    








rJ   c                 C   s   g | ]}t |Ž ‘qS rH   )rJ   )Ú.0ÚargsrH   rH   rI   Ú
<listcomp>‚   s   ÿrM   r9   r:   Úindicesc                 C   sZ   t j|  }t tj¡ d¡ d| ¡ d¡ dt d|¡¡ dt 	d|¡¡ 
t d¡¡}|S )Nr:   ÚcountrN   )r	   r=   r   Ú_simpler0   r>   r@   r   ZAsArrayTypedSizeÚAsArrayTypedrC   rD   )r:   ÚsuffixrF   rG   rH   rH   rI   ÚglDrawElementsTypedÄ   s"    
ÿþýüûù	÷rS   ZubZuiÚuszglDrawElements%(suffix)sc                 C   s4   |du rt j | f¡}t | |¡ t tj|¡ |S )ú0Create a selection buffer of the given size
    N)r	   ZGLuintArrayÚzerosrP   r2   r   ÚsetValueÚGL_SELECTION_BUFFER_POINTER)r;   ÚbufferrH   rH   rI   r2   Ü   s
    r2   c                 C   sB   |du rt j | f¡}t | ||¡ t tj|¡ t d|¡ |S )rU   NZGL_FEEDBACK_BUFFER_TYPE)r	   ZGLfloatArrayrV   rP   r1   r   rW   ÚGL_FEEDBACK_BUFFER_POINTER)r;   r:   rY   rH   rH   rI   r1   ä   s    r1   c              
   C   s@  ddl m} ddl m}m} |tjƒ}z|d }W n* tttfy\ } zW Y d}~n
d}~0 0 |tj	dfv rvt 
| ¡S t 
| ¡}|dk rÐ|tjkr¢t tjd¡‚n.|tjkr¼t tjd¡‚nt tjd|f ¡‚t ¡ }|sæt d¡‚tjtj|jftjtj|jjfi| \}}	t |¡}
|
du r,t|ƒ}
|	r<|	|
|ƒ}
|
S )	z“Change to the given rendering mode

    If the current mode is GL_FEEDBACK or GL_SELECT, return
    the current buffer appropriate to the mode
    r   )ÚglGetIntegerv)Ú	selectionÚfeedbackNz2glSelectBuffer too small to hold selection resultsz4glFeedbackBuffer too small to hold selection resultszDUnknown glRenderMode buffer (%s) too small to hold selection resultsz4Returning from glRenderMode without a valid context!)Z	OpenGL.GLr[   r\   r]   rP   ZGL_RENDER_MODEÚ	TypeErrorÚ
ValueErrorÚ
IndexErrorZ	GL_RENDERr3   Z	GL_SELECTr   ZGLErrorZGL_STACK_OVERFLOWZGL_FEEDBACKr   ZGetCurrentContextÚErrorrZ   ZparseFeedbackrX   ZGLSelectRecordZ	fromArrayr   ÚgetValuer4   )ZnewModer[   r\   r]   ZcurrentModeÚerrÚresultÚcontextZarrayConstantZwrapperFunctionÚcurrentrH   rH   rI   r3   î   sV    



þ
þÿþÿþý


r3   c                 C   sF   t  ¡ }t | t  |¡¡ t | ¡}|durBtj 	|¡|j
krB|S |S )z"Retrieve a stored pointer constantN)ÚctypesZvoidprP   r4   Zbyrefr   rb   r	   ZArrayDatatypeZdataPointerÚvalue)r   Zvprf   rH   rH   rI   r4   )  s    
r4   )N)N)CÚ__doc__ZOpenGLr   r   r   r   r   r   ZOpenGL.arraysr   r	   ZOpenGL.raw.GL.VERSIONr
   rP   rg   Zc_intZGLsizeiZc_uintZGLenumZGLintÚConstantr   Ú__all__r   Z	GL_DOUBLEZGL_COLOR_ARRAY_POINTERZGL_FLOATZGL_INTZGL_SHORTZGL_UNSIGNED_BYTEZGL_BYTEZGL_UNSIGNED_INTZGL_UNSIGNED_SHORTr   ZGL_EDGE_FLAG_ARRAY_POINTERr   ZGL_INDEX_ARRAY_POINTERr   ZGL_NORMAL_ARRAY_POINTERr$   ZGL_TEXTURE_COORD_ARRAY_POINTERr*   ZGL_VERTEX_ARRAY_POINTERZPOINTER_FUNCTION_DATArJ   rE   rG   ÚglobalsÚ	NameErrorrc   r>   r?   rA   rB   rC   rD   rQ   ZGLushortArrayr5   r0   rS   r:   rR   r2   r1   r3   r4   rH   rH   rH   rI   Ú<module>   sà    !Û'þÿýûÿýûÿýûÿýûþüúÿýû
ÿýÿý$



;