
    3jg,                     
   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 SSS9r\R                  " \5      R%                  S\
R(                  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      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                  " \05      R                  SS5      r0\R                  " \15      R                  SS5      r1\R                  " \25      R                  SS5      r2\R                  " \35      R                  SS5      r3\R                  " \45      R                  SS5      r4\R                  " \55      R                  SS5      r5\R                  " \65      R                  SS5      r6\R                  " \75      R%                  SS SSS9R%                  SSSS9r7g)a  OpenGL extension ARB.separate_shader_objects

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

Overview (from the spec)
        
        Conventional GLSL requires multiple shader stages (vertex,
        fragment, geometry, tessellation control, and tessellation
        evaluation) to be linked into a single monolithic program object to
        specify a GLSL shader for each stage.
        
        While GLSL's monolithic approach has some advantages for
        optimizing shaders as a unit that span multiple stages, all
        existing GPU hardware supports the more flexible mix-and-match
        approach.
        
        Shaders written for HLSL9, Cg, the prior OpenGL assembly program
        extensions, and game console favor a more flexible "mix-and-match"
        approach to specifying shaders independently for these different
        shader stages.  Many developers build their shader content around
        the mix-and-match approach where they can use a single vertex shader
        with multiple fragment shaders (or vice versa).
        
        This extension adopts a "mix-and-match" shader stage model for GLSL
        allowing multiple different GLSL program objects to be bound at once
        each to an individual rendering pipeline stage independently of
        other stage bindings. This allows program objects to contain only
        the shader stages that best suit the applications needs.
        
        This extension introduces the program pipeline object that serves as
        a container for the program bound to any particular rendering stage.
        It can be bound, unbound, and rebound to simply save and restore the
        complete shader stage to program object bindings.  Like framebuffer
        and vertex array objects, program pipeline objects are "container"
        objects that are not shared between contexts.
        
        To bind a program object to a specific shader stage or set of
        stages, UseProgramStages is used.  The VERTEX_SHADER_BIT,
        GEOMETRY_SHADER_BIT, FRAGMENT_SHADER_BIT, TESS_CONTROL_SHADER_BIT,
        and TESS_EVALUATION_SHADER_BIT tokens refer to the conventional
        vertex, geometry, fragment, tessellation control and tessellation
        evaluation stages respectively. ActiveShaderProgram specifies the
        program that Uniform* commands will update.
        
        While ActiveShaderProgram allows the use of conventional Uniform*
        commands to update uniform variable values for separable program
        objects, this extension provides a preferrable interface in a set
        of ProgramUniform* commands that update the same uniform variables
        but take a parameter indicating the program object to be updated,
        rather than updating the currently active program object. These
        commands mirror those introduced in EXT_direct_state_access.
        
        While glActiveShaderProgram provides a selector for setting and
        querying uniform values of a program object, the glProgramUniform*
        commands provide a selector-free way to modify uniforms of a GLSL
        program object without an explicit bind. This selector-free model
        reduces API overhead and provides a cleaner interface for
        applications.
        
        Separate linking creates the possibility that certain output varyings
        of a shader may go unread by the subsequent shader inputting varyings.
        In this case, the output varyings are simply ignored.  It is also
        possible input varyings from a shader may not be written as output
        varyings of a preceding shader.  In this case, the unwritten input
        varying values are undefined.
        
        This extension builds on the proof-of-concept provided by
        EXT_separate_shader_objects which demonstrated that separate
        shader objects can work for GLSL.  EXT_separate_shader_objects
        was a response to repeated requests for this functionality from
        3D developers.
        
        This ARB version addresses several "loose ends" in the prior
        EXT extension.  In particular, it allows user-defined varyings
        with explicitly defined locations or implicitly assigned locations.
        
        This ARB extension extends the GLSL language's use of layout
        qualifiers to provide cross-stage interfacing.

The official definition of this extension is available here:
http://www.opengl.org/registry/specs/ARB/separate_shader_objects.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    _/home/wildlama/miniconda3/lib/python3.13/site-packages/OpenGL/GL/ARB/separate_shader_objects.pyglInitSeparateShaderObjectsARBr   \   s    !$$o77    strings	pipelinesc                     U 4$ N xs    r   <lambda>r   j   s    qdr   nT)sizepnameArgorPassInparamspnamevalueinfoLogc                     U 4$ r   r   r   s    r   r   r      s    QDr   bufSizelength)   )r   r   )8__doc__r   r   r   r   r   r   ctypesOpenGL.raw.GLr   r	   )OpenGL.raw.GL.ARB.separate_shader_objectsr   r   glCreateShaderProgramvsetInputArraySizeglDeleteProgramPipelinesglGenProgramPipelines	setOutputglGetProgramPipelineiv_glget_size_mappingglProgramUniform1ivglProgramUniform1fvglProgramUniform1dvglProgramUniform1uivglProgramUniform2ivglProgramUniform2fvglProgramUniform2dvglProgramUniform2uivglProgramUniform3ivglProgramUniform3fvglProgramUniform3dvglProgramUniform3uivglProgramUniform4ivglProgramUniform4fvglProgramUniform4dvglProgramUniform4uivglProgramUniformMatrix2fvglProgramUniformMatrix3fvglProgramUniformMatrix4fvglProgramUniformMatrix2dvglProgramUniformMatrix3dvglProgramUniformMatrix4dvglProgramUniformMatrix2x3fvglProgramUniformMatrix3x2fvglProgramUniformMatrix2x4fvglProgramUniformMatrix4x2fvglProgramUniformMatrix3x4fvglProgramUniformMatrix4x3fvglProgramUniformMatrix2x3dvglProgramUniformMatrix3x2dvglProgramUniformMatrix2x4dvglProgramUniformMatrix4x2dvglProgramUniformMatrix3x4dvglProgramUniformMatrix4x3dvglGetProgramPipelineInfoLogr   r   r   <module>rU      s  Sh . - &  ) 7 E8 '=>PPt  !)ABTT  oo&;<FF]C G   '=>HH'--w I   OO$78JJT  OO$78JJT  OO$78JJT  __%9:LLT  OO$78JJT  OO$78JJT  OO$78JJT  __%9:LLT  OO$78JJT  OO$78JJT  OO$78JJT  __%9:LLT  OO$78JJT  OO$78JJT  OO$78JJT  __%9:LLT  "//*CDVVT  "//*CDVVT  "//*CDVVT  "//*CDVVT  "//*CDVVT  "//*CDVVT  $OO,GHZZT  $OO,GHZZT  $OO,GHZZT  $OO,GHZZT  $OO,GHZZT  $OO,GHZZT  $OO,GHZZT  $OO,GHZZT  $OO,GHZZT  $OO,GHZZT  $OO,GHZZT  $OO,GHZZT  $OO,GHRR=)T S )$   r   