a
    i‚jŠ  ă                   @   sV  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ˇ 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ˇ ddˇZe eˇ ddˇZe eˇjddddŤZe eˇjddddŤZe eˇjddddŤZe eˇjddddŤZe eˇjddddŤZdS )a|  OpenGL extension ARB.fragment_program

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

Overview (from the spec)
	
	Unextended OpenGL mandates a certain set of configurable per-
	fragment computations defining texture application, texture 
	environment, color sum, and fog operations.  Several extensions have 
	added further per-fragment computations to OpenGL.  For example, 
	extensions have defined new texture environment capabilities 
	(ARB_texture_env_add, ARB_texture_env_combine, ARB_texture_env_dot3,
	ARB_texture_env_crossbar), per-fragment depth comparisons 
	(ARB_depth_texture, ARB_shadow, ARB_shadow_ambient, 
	EXT_shadow_funcs), per-fragment lighting (EXT_fragment_lighting, 
	EXT_light_texture), and environment mapped bump mapping 
	(ATI_envmap_bumpmap).  
	
	Each such extension adds a small set of relatively inflexible per-
	fragment computations.
	
	This inflexibility is in contrast to the typical flexibility 
	provided by the underlying programmable floating point engines 
	(whether micro-coded fragment engines, DSPs, or CPUs) that are 
	traditionally used to implement OpenGL's texturing computations.  
	The purpose of this extension is to expose to the OpenGL application 
	writer a significant degree of per-fragment programmability for 
	computing fragment parameters.
	
	For the purposes of discussing this extension, a fragment program is 
	a sequence of floating-point 4-component vector operations that 
	determines how a set of program parameters (not specific to an
	individual fragment) and an input set of per-fragment parameters are 
	transformed to a set of per-fragment result parameters.
	
	The per-fragment computations for standard OpenGL given a particular 
	set of texture and fog application modes (along with any state for 
	extensions defining per-fragment computations) is, in essence, a 
	fragment 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 fragment 
	program instruction sequences for application-defined fragment 
	programs.  In order to define such fragment programs, this extension 
	defines a fragment 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 fragment programming model is designed for efficient
	hardware implementation and to support a wide variety of fragment 
	programs.  By design, the entire set of existing fragment programs 
	defined by existing OpenGL per-fragment computation extensions can 
	be implemented using the extension's fragment programming model.

The official definition of this extension is available here:
http://www.opengl.org/registry/specs/ARB/fragment_program.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   ú\/home/ghrups/robot-bench/.venv/lib/python3.9/site-packages/OpenGL/GL/ARB/fragment_program.pyÚglInitFragmentProgramARBD   s    r   ÚstringZprogramsc                 C   s   | fS )Nr   )Úxr   r   r   Ú<lambda>R   ó    r   ÚnT)ÚsizeZpnameArgÚorPassInÚparamsé   )r   )r   r   )é   )Ú__doc__r   r   r   r   r   r   ÚctypesZOpenGL.raw.GLr   r   Z"OpenGL.raw.GL.ARB.fragment_programr
   r   ZglProgramStringARBZsetInputArraySizeZglDeleteProgramsARBZglGenProgramsARBZ	setOutputZglProgramEnvParameter4dvARBZglProgramEnvParameter4fvARBZglProgramLocalParameter4dvARBZglProgramLocalParameter4fvARBZglGetProgramEnvParameterdvARBZglGetProgramEnvParameterfvARBZglGetProgramLocalParameterdvARBZglGetProgramLocalParameterfvARBZglGetProgramivARBr   r   r   r   Ú<module>   sV   <
˙
˙
˙
˙
˙
˙
˙
˙
˙
˙
˙
˙