a
    ij                     @   s  d Z ddlmZmZmZ ddlmZmZ ddlZddlm	Z	m
Z
 ddlT ddlmZ dd	 Zeejd
dd dddZeed
dZeejde
jdddZeejde
jdddZeejde
jdddZeeddZeejddd dddZeeddZeeddZeejddd dddZeejde
jdddZeejddddZddlmZ ddl m!Z! ddl"m#Z# eed&ddZeed'ddZeed(d d!Zeed)d"d#Zeed*d$d%ZdS )+a  OpenGL extension VERSION.GL_1_5

This module customises the behaviour of the 
OpenGL.raw.GL.VERSION.GL_1_5 to provide a more 
Python-friendly API

The official definition of this extension is available here:
http://www.opengl.org/registry/specs/VERSION/GL_1_5.txt
    )platformconstantarrays)
extensionswrapperN)_types_glgets)*)_EXTENSION_NAMEc                  C   s   ddl m}  | tS )z=Return boolean indicating whether this extension is availabler   r   )OpenGLr   ZhasGLExtensionr
   r    r   V/home/ghrups/robot-bench/.venv/lib/python3.9/site-packages/OpenGL/GL/VERSION/GL_1_5.pyglInitGl15VERSION   s    r   idsc                 C   s   | fS Nr   xr   r   r   <lambda>       r   nT)sizeZpnameArgorPassInparamspnamebuffersc                 C   s   | fS r   r   r   r   r   r   r   +   r   datac                 C   s   | fS r   r   r   r   r   r   r   6   r   r   )   )r   r   )lazy)ArrayDatatype)integer_typesc                 C   s>   |du r|}|}d}t |}|du r0t |}| ||||S )a2  Copy given data into the currently bound vertex-buffer-data object

    target -- the symbolic constant indicating which buffer type is intended
    size -- if provided, the count-in-bytes of the array
    data -- data-pointer to be used, may be None to initialize without
        copying over a data-set
    usage -- hint to the driver as to how to set up access to the buffer

    Note: parameter "size" can be omitted, which makes the signature
        glBufferData( target, data, usage )
    instead of:
        glBufferData( target, size, data, usage )
    N)r   asArrayarrayByteCount)baseOperationtargetr   r   usager   r   r   glBufferDataC   s    

r&   c                 C   s   |du r|du r4t dnt|ts4|du r4|}d}z|durFt|}W n* t yr   |durft d|}d}Y n0 t|}|du rt|}| ||||S )ap  Copy subset of data into the currently bound vertex-buffer-data object

    target -- the symbolic constant indicating which buffer type is intended
    offset -- offset from beginning of buffer at which to copy bytes
    size -- the count-in-bytes of the array (if an int/long), if None,
        calculate size from data, if an array and data is None, use as
        data (i.e. the parameter can be omitted and calculated)
    data -- data-pointer to be used, may be None to initialize without
        copying over a data-set

    Note that if size is not an int/long it is considered to be data
    *iff* data is None
    NzNeed data or sizez2Expect an integer size *or* a data-array, not both)	TypeError
isinstancer    intr   r!   r"   )r#   r$   offsetr   r   r   r   r   glBufferSubData[   s(    



r+   c                 C   sH   |du r8t |t}tj|ft}| ||t| |S | |||S dS )z*Retrieve a ctypes pointer to buffer's dataN)glGetBufferParameterivZGL_BUFFER_SIZEr   r   zerosZGL_UNSIGNED_BYTEctypesZbyref)r#   r$   r   r   r   r   r   r   r   glGetBufferPointerv   s    
r/   c                 C   s8   |d u r"t j|}t j|}nt j|}| ||S r   )r   GLuintArrayr!   Z	arraySizer#   r   r   r   r   r   glDeleteQueries   s
    r2   c                 C   s2   |du rt j|f}nt j|}| || |S )zOGenerate n queries, if ids is None, is allocated

    returns array of ids
    N)r   r0   r-   r!   r1   r   r   r   glGenQueries   s
    
r3   )NN)NN)N)N)N)$__doc__r   r   r   r   r   r   r.   ZOpenGL.raw.GLr   r   ZOpenGL.raw.GL.VERSION.GL_1_5r
   r   r3   Z	setOutputr2   ZsetInputArraySizeZglGetQueryivZ_glget_size_mappingZglGetQueryObjectivZglGetQueryObjectuivZglDeleteBuffersZglGenBuffersr&   r+   ZglGetBufferSubDatar,   r/   ZOpenGL.lazywrapperr   Z_lazyZOpenGL.arraysr   ZOpenGL._bytesr    r   r   r   r   <module>   sp   	















#
