
    3j#                     
   S r SSKJrJrJr  SSKJrJr  SSKrSSKJ	r	J
r
  SSK7  SSKJr  S r\R                  " \5      R                  S	S
5      r\R                  " \5      R                  S	S
5      r\R                  " \5      R                  S	S
5      r\R                  " \5      R                  S	S5      r\R                  " \5      R                  S	S5      r\R                  " \5      R                  S	S5      r\R                  " \5      R                  S	S5      r\R                  " \5      R                  S	S5      r\R                  " \5      R                  S	S5      r\R                  " \5      R                  S	S5      r\R                  " \5      R                  S	S5      r\R                  " \5      R                  S	S5      r\R                  " \5      R                  S	S5      r\R                  " \5      R                  S	S5      r\R                  " \5      R                  S	S5      r\R                  " \5      R                  S	S5      r\R                  " \5      R                  S	S5      r\R                  " \ 5      R                  S	S5      r \R                  " \!5      R                  S	S5      r!\R                  " \"5      R                  S	S5      r"\R                  " \#5      R                  S	S5      r#\R                  " \$5      R                  S	S5      r$\R                  " \%5      R                  S	S5      r%\R                  " \&5      R                  SS5      r&\R                  " \'5      R                  SS5      r'\R                  " \(5      RS                  SS SSS9r(\R                  " \*5      R                  SS5      r*\R                  " \+5      R                  SS5      r+\R                  " \,5      R                  SS5      r,\R                  " \-5      R                  SS5      r-\R                  " \.5      RS                  SSSS9r.\R                  " \/5      RS                  SSSS9r/\R                  " \05      RS                  SSSS9r0\R                  " \15      RS                  SSSS9r1\R                  " \25      RS                  SSSS9r2\R                  " \35      RS                  SSSS9r3\R                  " \45      RS                  SSSS9r4\R                  " \55      RS                  SSSS9r5\R                  " \65      RS                  SSSS9r6SSK7J8r9  SSKJ:r:J;r;J<r<  SSK=J>r>  \9" \?5      S 5       r?g)a  OpenGL extension ARB.vertex_program

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

Overview (from the spec)
        
        Unextended OpenGL mandates a certain set of configurable per-vertex
        computations defining vertex transformation, texture coordinate generation
        and transformation, and lighting.  Several extensions have added further
        per-vertex computations to OpenGL.  For example, extensions have defined
        new texture coordinate generation modes (ARB_texture_cube_map,
        NV_texgen_reflection, NV_texgen_emboss), new vertex transformation modes
        (ARB_vertex_blend, EXT_vertex_weighting), new lighting modes (OpenGL 1.2's
        separate specular and rescale normal functionality), several modes for fog
        distance generation (NV_fog_distance), and eye-distance point size
        attenuation (EXT/ARB_point_parameters).
        
        Each such extension adds a small set of relatively inflexible
        per-vertex computations.
        
        This inflexibility is in contrast to the typical flexibility provided by
        the underlying programmable floating point engines (whether micro-coded
        vertex engines, DSPs, or CPUs) that are traditionally used to implement
        OpenGL's per-vertex computations.  The purpose of this extension is to
        expose to the OpenGL application writer a significant degree of per-vertex
        programmability for computing vertex parameters.
        
        For the purposes of discussing this extension, a vertex program is a
        sequence of floating-point 4-component vector operations that determines
        how a set of program parameters (defined outside of OpenGL's Begin/End
        pair) and an input set of per-vertex parameters are transformed to a set
        of per-vertex result parameters.
        
        The per-vertex computations for standard OpenGL given a particular set of
        lighting and texture coordinate generation modes (along with any state for
        extensions defining per-vertex computations) is, in essence, a vertex
        program.  However, the sequence of operations is defined implicitly by the
        current OpenGL state settings rather than defined explicitly as a sequence
        of instructions.
        
        This extension provides an explicit mechanism for defining vertex program
        instruction sequences for application-defined vertex programs.  In order
        to define such vertex programs, this extension defines a vertex
        programming model including a floating-point 4-component vector
        instruction set and a relatively large set of floating-point 4-component
        registers.
        
        The extension's vertex programming model is designed for efficient
        hardware implementation and to support a wide variety of vertex programs.
        By design, the entire set of existing vertex programs defined by existing
        OpenGL per-vertex computation extensions can be implemented using the
        extension's vertex programming model.

The official definition of this extension is available here:
http://www.opengl.org/registry/specs/ARB/vertex_program.txt
    )platformconstantarrays)
extensionswrapperN)_types_glgets)*)_EXTENSION_NAMEc                  :    SSK Jn   U R                  " [        5      $ )z=Return boolean indicating whether this extension is availabler   r   )OpenGLr   hasGLExtensionr   r   s    V/home/wildlama/miniconda3/lib/python3.13/site-packages/OpenGL/GL/ARB/vertex_program.pyglInitVertexProgramARBr   B   s    !$$o77    v            stringprogramsc                     U 4$ )N )xs    r   <lambda>r      s    aTr   nT)sizepnameArgorPassInparams)r   )r   r!   )r   pointer)lazy)
converterserrorcontextdata)ArrayDatatypec           
          [         R                  " Xc5      nSU4n[        R                  " X5        U " XUXE[         R                  " U5      5      $ )a  Set an attribute pointer for a given shader (index)

index -- the index of the generic vertex to bind, see 
    glGetAttribLocation for retrieval of the value,
    note that index is a global variable, not per-shader
size -- number of basic elements per record, 1,2,3, or 4
type -- enum constant for data-type 
normalized -- whether to perform int to float 
    normalization on integer-type values
stride -- stride in machine units (bytes) between 
    consecutive records, normally used to create 
    "interleaved" arrays 
pointer -- data-pointer which provides the data-values,
    normally a vertex-buffer-object or offset into the 
    same.

This implementation stores a copy of the data-pointer 
in the contextdata structure in order to prevent null-
reference errors in the renderer.
zvertex-attrib)r(   asArrayr'   setValuevoidDataPointer)	baseOperationindexr   type
normalizedstrider#   arraykeys	            r   glVertexAttribPointerARBr4      sO    2 !!72E5
!C#&T%%u. r   )@__doc__r   r   r   r   r   r   ctypesOpenGL.raw.GLr   r	    OpenGL.raw.GL.ARB.vertex_programr   r   glVertexAttrib1dvARBsetInputArraySizeglVertexAttrib1fvARBglVertexAttrib1svARBglVertexAttrib2dvARBglVertexAttrib2fvARBglVertexAttrib2svARBglVertexAttrib3dvARBglVertexAttrib3fvARBglVertexAttrib3svARBglVertexAttrib4NbvARBglVertexAttrib4NivARBglVertexAttrib4NsvARBglVertexAttrib4NubvARBglVertexAttrib4NuivARBglVertexAttrib4NusvARBglVertexAttrib4bvARBglVertexAttrib4dvARBglVertexAttrib4fvARBglVertexAttrib4ivARBglVertexAttrib4svARBglVertexAttrib4ubvARBglVertexAttrib4uivARBglVertexAttrib4usvARBglProgramStringARBglDeleteProgramsARBglGenProgramsARB	setOutputglProgramEnvParameter4dvARBglProgramEnvParameter4fvARBglProgramLocalParameter4dvARBglProgramLocalParameter4fvARBglGetProgramEnvParameterdvARBglGetProgramEnvParameterfvARBglGetProgramLocalParameterdvARBglGetProgramLocalParameterfvARBglGetProgramivARBglGetVertexAttribdvARBglGetVertexAttribfvARBglGetVertexAttribivARBglGetVertexAttribPointervARBOpenGL.lazywrapperr$   _lazyr%   r&   r'   OpenGL.arrays.arraydatatyper(   r4   r   r   r   <module>re      s  9t . - &  ) . <8
 __%9:LL  __%9:LL  __%9:LL  __%9:LL  __%9:LL  __%9:LL  __%9:LL  __%9:LL  __%9:LL  oo&;<NN  oo&;<NN  oo&;<NN  '=>PP  '=>PP  '=>PP  __%9:LL  __%9:LL  __%9:LL  __%9:LL  __%9:LL  oo&;<NN  oo&;<NN  oo&;<NN  ??#56HHd  OO$78JJ  !12<<M3 =   $OO,GHZZa  $OO,GHZZa  &oo.KL^^a  &oo.KL^^a  &oo.KLVV$ W   &oo.KLVV$ W   !(0O P Z Z$ ![ !  !(0O P Z Z$ ![ !  //"34>>$ ?   '=>HH$ I   '=>HH$ I   '=>HH$ I   %__-IJTT4 U   - 1 1 5  " #r   