'''OpenGL extension NV.gpu_program4

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

Overview (from the spec)
	
	This specification documents the common instruction set and basic
	functionality provided by NVIDIA's 4th generation of assembly instruction
	sets supporting programmable graphics pipeline stages.  
	
	The instruction set builds upon the basic framework provided by the
	ARB_vertex_program and ARB_fragment_program extensions to expose
	considerably more capable hardware.  In addition to new capabilities for
	vertex and fragment programs, this extension provides a new program type
	(geometry programs) further described in the NV_geometry_program4
	specification.
	
	NV_gpu_program4 provides a unified instruction set -- all instruction set
	features are available for all program types, except for a small number of
	features that make sense only for a specific program type.  It provides
	fully capable signed and unsigned integer data types, along with a set of
	arithmetic, logical, and data type conversion instructions capable of
	operating on integers.  It also provides a uniform set of structured
	branching constructs (if tests, loops, and subroutines) that fully support
	run-time condition testing.
	
	This extension provides several new texture mapping capabilities.  Shadow
	cube maps are supported, where cube map faces can encode depth values.
	Texture lookup instructions can include an immediate texel offset, which
	can assist in advanced filtering.  New instructions are provided to fetch
	a single texel by address in a texture map (TXF) and query the size of a
	specified texture level (TXQ).
	
	By and large, vertex and fragment programs written to ARB_vertex_program
	and ARB_fragment_program can be ported directly by simply changing the
	program header from "!!ARBvp1.0" or "!!ARBfp1.0" to "!!NVvp4.0" or
	"!!NVfp4.0", and then modifying the code to take advantage of the expanded
	feature set.  There are a small number of areas where this extension is
	not a functional superset of previous vertex program extensions, which are
	documented in this specification.
	

The official definition of this extension is available here:
http://www.opengl.org/registry/specs/NV/gpu_program4.txt
'''
from OpenGL import platform, constant, arrays
from OpenGL import extensions, wrapper
import ctypes
from OpenGL.raw.GL import _types, _glgets
from OpenGL.raw.GL.NV.gpu_program4 import *
from OpenGL.raw.GL.NV.gpu_program4 import _EXTENSION_NAME

def glInitGpuProgram4NV():
    '''Return boolean indicating whether this extension is available'''
    from OpenGL import extensions
    return extensions.hasGLExtension( _EXTENSION_NAME )

glProgramLocalParameterI4ivNV=wrapper.wrapper(glProgramLocalParameterI4ivNV).setInputArraySize(
    'params', 4
)
# INPUT glProgramLocalParametersI4ivNV.params size not checked against count*4
glProgramLocalParametersI4ivNV=wrapper.wrapper(glProgramLocalParametersI4ivNV).setInputArraySize(
    'params', None
)
glProgramLocalParameterI4uivNV=wrapper.wrapper(glProgramLocalParameterI4uivNV).setInputArraySize(
    'params', 4
)
# INPUT glProgramLocalParametersI4uivNV.params size not checked against count*4
glProgramLocalParametersI4uivNV=wrapper.wrapper(glProgramLocalParametersI4uivNV).setInputArraySize(
    'params', None
)
glProgramEnvParameterI4ivNV=wrapper.wrapper(glProgramEnvParameterI4ivNV).setInputArraySize(
    'params', 4
)
# INPUT glProgramEnvParametersI4ivNV.params size not checked against count*4
glProgramEnvParametersI4ivNV=wrapper.wrapper(glProgramEnvParametersI4ivNV).setInputArraySize(
    'params', None
)
glProgramEnvParameterI4uivNV=wrapper.wrapper(glProgramEnvParameterI4uivNV).setInputArraySize(
    'params', 4
)
# INPUT glProgramEnvParametersI4uivNV.params size not checked against count*4
glProgramEnvParametersI4uivNV=wrapper.wrapper(glProgramEnvParametersI4uivNV).setInputArraySize(
    'params', None
)
glGetProgramLocalParameterIivNV=wrapper.wrapper(glGetProgramLocalParameterIivNV).setOutput(
    'params',size=(4,),orPassIn=True
)
glGetProgramLocalParameterIuivNV=wrapper.wrapper(glGetProgramLocalParameterIuivNV).setOutput(
    'params',size=(4,),orPassIn=True
)
glGetProgramEnvParameterIivNV=wrapper.wrapper(glGetProgramEnvParameterIivNV).setOutput(
    'params',size=(4,),orPassIn=True
)
glGetProgramEnvParameterIuivNV=wrapper.wrapper(glGetProgramEnvParameterIuivNV).setOutput(
    'params',size=(4,),orPassIn=True
)
### END AUTOGENERATED SECTION