a
    ij&                  
   @   s>  d Z ddlZddlZddlZddlZddlmZ ddlmZ ddlm	Z	 ddl
mZ ddl
mZ eeZze W n0 ey Z zddlmZ W Y dZ[n
dZ[0 0 d ZZejdd	 d
krejrzddlmZ W n8 ey Z ze  ed W Y dZ[ndZ[0 0 eZes.G dd de	jZejZejZdS )zTest for a buffer-protocol-based access mechanism

Will *only* work for Python 2.6+, and pretty much just works for strings
under 2.6 (in terms of the common object types).
    N)_buffers)_types)formathandler)_configflags)acceleratesupport)reduce   )r      )MemoryviewHandlerzGUnable to load buffers_formathandler accelerator from OpenGL_acceleratec                   @   s   e Zd ZdZdZejZejd dkr4e	dddZ
ne	dddZ
d	d
 ZeeZe	dddZe	dddZe	dd Ze	dddZe	d ddZe	d!ddZe	d"ddZe	d#ddZdS )$BufferHandlerz,Buffer-protocol data-type handler for OpenGLFr      Nc                 C   s"   t |tjs| |}t|jS N)
isinstancer   	Py_bufferasArrayr   ZGLvoidpbufclsvaluetypeCode r   S/home/ghrups/robot-bench/.venv/lib/python3.9/site-packages/OpenGL/arrays/buffers.py
from_param-   s    
zBufferHandler.from_paramc                 C   s   t |tjs| |}|jS r   )r   r   r   r   r   r   r   r   r   r   8   s    
c                 C   s   t | tjstj| } | jS r   )r   r   r   from_objectr   )r   r   r   r   dataPointer?   s    zBufferHandler.dataPointerc                 C   s*   t d| tdttj| t|  S ).Currently don't allow strings as output types!z3Generic buffer type does not have output capability    )NotImplementedErrorr   	bytearrayr   operatormul
BYTE_SIZESr   dimsr   r   r   r   zerosF   s    zBufferHandler.zerosc                 C   s   t ddS )r   z)Have not implemented ones for buffer typeN)r   r"   r   r   r   onesP   s    zBufferHandler.onesc                 C   s(   |j }|tv rt| S td|f dS )z=Given a value, guess OpenGL type of the corresponding pointerzUnknown format: %rN)formatARRAY_TO_GL_TYPE_MAPPING	TypeError)r   r   r&   r   r   r   arrayToGLTypeU   s    zBufferHandler.arrayToGLTypec                 C   s   |j |j S )z9Given a data-value, calculate ravelled size for the array)lenitemsizer   r   r   r   	arraySize]   s    zBufferHandler.arraySizec                 C   s   |j S )zCGiven a data-value, calculate number of bytes required to represent)r*   r   r   r   r   arrayByteCountb   s    zBufferHandler.arrayByteCountc                 C   s
   |j d S )Nr#   )r   r   defaultr   r   r   unitSizeg   s    zBufferHandler.unitSizec                 C   s   t j|}|S )z7Convert given value to an array value of given typeCode)r   r   r   )r   r   r   r   r   r   r   r   k   s    zBufferHandler.asArrayc                 C   s   |j S )z<Determine dimensions of the passed array value (if possible)r/   r   r   r   r   
dimensionsq   s    zBufferHandler.dimensions)N)N)N)N)N)N)N)N)N)__name__
__module____qualname____doc__ZisOutputr   ZERROR_ON_COPYsysversion_infoclassmethodr   r   staticmethodr$   r%   r)   r,   r-   r1   r   r2   r   r   r   r   r   &   s4   
	
r   )r6   r7   r   logging	tracebackZOpenGL.arraysr   ZOpenGL.raw.GLr   r   ZOpenGLr   r   	getLoggerr3   _logr   	NameErrorerr	functoolsr
   r   r8   ZACCELERATE_AVAILABLEZ'OpenGL_accelerate.buffers_formathandlerImportError	print_excwarningZFormatHandlerr'   r!   r   r   r   r   <module>   s4    
"Q