
    _e                        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j                  e      Z	 e dxZZej,                  dd	 d
kD  rej.                  r		 ddlmZ eZes G d de	j8                        Zej:                  Zej<                  Zy# e$ rZddlmZ Y dZ[kdZ[ww xY w# e$ r,Z ej4                          ej7                  d       Y dZ[tdZ[ww xY w)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                      e Zd ZdZdZej                  Zej                  d   dk\  r
e	dd       Z
n	e	dd       Z
d Z ee      Ze	dd	       Ze	dd
       Ze	d        Ze	dd       Ze	dd       Ze	dd       Ze	dd       Ze	dd       Zy)BufferHandlerz,Buffer-protocol data-type handler for OpenGLFr      Nc                     t        |t        j                        s| j                  |      }t	        j
                  |j                        S N)
isinstancer   	Py_bufferasArrayr   GLvoidpbufclsvaluetypeCodes      7/usr/lib/python3/dist-packages/OpenGL/arrays/buffers.py
from_paramzBufferHandler.from_param(   s5    !5(*<*<>KK0E ~~uyy22    c                 p    t        |t        j                        s| j                  |      }|j                  S r   )r   r   r   r   r   r   s      r   r   zBufferHandler.from_param1   s*    !5(*<*<>KK0Eyy r   c                     t        | t        j                        st        j                  j                  |       } | j                  S r   )r   r   r   from_objectr   )r   s    r   dataPointerzBufferHandler.dataPointer7   s2    uh&8&8: **66?99r   c                     t        d      ).Currently don't allow strings as output types!z3Generic buffer type does not have output capability)NotImplementedErrorr   	bytearrayr   operatormul
BYTE_SIZESr   dimsr   s      r   zeroszBufferHandler.zeros<   s     &'\^^r   c                     t        d      )r"   z)Have not implemented ones for buffer type)r#   r(   s      r   oneszBufferHandler.onesA   s     &'VXXr   c                 X    |j                   }|t        v r	t        |   S t        d|      )z=Given a value, guess OpenGL type of the corresponding pointerzUnknown format: )formatARRAY_TO_GL_TYPE_MAPPING	TypeError)r   r   r.   s      r   arrayToGLTypezBufferHandler.arrayToGLTypeE   s/     \\F11/776;<<r   c                 4    |j                   |j                  z  S )z9Given a data-value, calculate ravelled size for the array)lenitemsizer   s      r   	arraySizezBufferHandler.arraySizeL   s     99..r   c                     |j                   S )zCGiven a data-value, calculate number of bytes required to represent)r3   r   s      r   arrayByteCountzBufferHandler.arrayByteCountP   s     99r   c                      |j                   d   S )Nr)   )r   r   defaults      r   unitSizezBufferHandler.unitSizeT   s    ::b>!r   c                 D    t         j                  j                  |      }|S )z7Convert given value to an array value of given typeCode)r   r   r   )r   r   r   r   s       r   r   zBufferHandler.asArrayW   s     $$00%9CJr   c                     |j                   S )z<Determine dimensions of the passed array value (if possible)r:   r   s      r   
dimensionszBufferHandler.dimensions\   s     ::r   r   )__name__
__module____qualname____doc__isOutputr   ERROR_ON_COPYsysversion_infoclassmethodr   r    staticmethodr*   r,   r1   r5   r7   r<   r   r?    r   r   r   r   #   s    :$22A!#3 3 ! !
	 #K1		f 
	f 
	Y 
	Y 
	= 
	= 
	/ 
	/ 
	 
	 
	" 
	"		 
	 
	 
	r   r   )rC   rF   r%   logging	tracebackOpenGL.arraysr   OpenGL.raw.GLr   r   OpenGLr   r   	getLoggerr@   _logr   	NameErrorerr	functoolsr   r   rG   ACCELERATE_AVAILABLE'OpenGL_accelerate.buffers_formathandlerImportError	print_excwarningFormatHandlerr/   r'   rJ   r   r   <module>r[      s   
 & % "   '  $w($!
 %) ( MBQ% --	.Q .M<44 <| $<<   
c  !  !  	I!LLY 	s0   B! )B9 !B6&B11B69C*>"C%%C*