1'''OpenGL extension NV.vertex_program
2
3This module customises the behaviour of the
4OpenGL.raw.GL.NV.vertex_program to provide a more
5Python-friendly API
6
7Overview (from the spec)
8
9	Unextended OpenGL mandates a certain set of configurable per-vertex
10	computations defining vertex transformation, texture coordinate
11	generation and transformation, and lighting.  Several extensions
12	have added further per-vertex computations to OpenGL.  For example,
13	extensions have defined new texture coordinate generation modes
14	(ARB_texture_cube_map, NV_texgen_reflection, NV_texgen_emboss), new
15	vertex transformation modes (EXT_vertex_weighting), new lighting modes
16	(OpenGL 1.2's separate specular and rescale normal functionality),
17	several modes for fog distance generation (NV_fog_distance), and
18	eye-distance point size attenuation (EXT_point_parameters).
19
20	Each such extension adds a small set of relatively inflexible
21	per-vertex computations.
22
23	This inflexibility is in contrast to the typical flexibility provided
24	by the underlying programmable floating point engines (whether
25	micro-coded vertex engines, DSPs, or CPUs) that are traditionally used
26	to implement OpenGL's per-vertex computations.  The purpose of this
27	extension is to expose to the OpenGL application writer a significant
28	degree of per-vertex programmability for computing vertex parameters.
29
30	For the purposes of discussing this extension, a vertex program is
31	a sequence of floating-point 4-component vector operations that
32	determines how a set of program parameters (defined outside of
33	OpenGL's begin/end pair) and an input set of per-vertex parameters
34	are transformed to a set of per-vertex output parameters.
35
36	The per-vertex computations for standard OpenGL given a particular
37	set of lighting and texture coordinate generation modes (along with
38	any state for extensions defining per-vertex computations) is, in
39	essence, a vertex program.  However, the sequence of operations is
40	defined implicitly by the current OpenGL state settings rather than
41	defined explicitly as a sequence of instructions.
42
43	This extension provides an explicit mechanism for defining vertex
44	program instruction sequences for application-defined vertex programs.
45	In order to define such vertex programs, this extension defines
46	a vertex programming model including a floating-point 4-component
47	vector instruction set and a relatively large set of floating-point
48	4-component registers.
49
50	The extension's vertex programming model is designed for efficient
51	hardware implementation and to support a wide variety of vertex
52	programs.  By design, the entire set of existing vertex programs
53	defined by existing OpenGL per-vertex computation extensions can be
54	implemented using the extension's vertex programming model.
55
56The official definition of this extension is available here:
57http://www.opengl.org/registry/specs/NV/vertex_program.txt
58'''
59from OpenGL import platform, constant, arrays
60from OpenGL import extensions, wrapper
61import ctypes
62from OpenGL.raw.GL import _types, _glgets
63from OpenGL.raw.GL.NV.vertex_program import *
64from OpenGL.raw.GL.NV.vertex_program import _EXTENSION_NAME
65
66def glInitVertexProgramNV():
67    '''Return boolean indicating whether this extension is available'''
68    from OpenGL import extensions
69    return extensions.hasGLExtension( _EXTENSION_NAME )
70
71# INPUT glAreProgramsResidentNV.programs size not checked against n
72glAreProgramsResidentNV=wrapper.wrapper(glAreProgramsResidentNV).setOutput(
73    'residences',size=lambda x:(x,),pnameArg='n',orPassIn=True
74).setInputArraySize(
75    'programs', None
76)
77# INPUT glDeleteProgramsNV.programs size not checked against n
78glDeleteProgramsNV=wrapper.wrapper(glDeleteProgramsNV).setInputArraySize(
79    'programs', None
80)
81glExecuteProgramNV=wrapper.wrapper(glExecuteProgramNV).setInputArraySize(
82    'params', 4
83)
84glGenProgramsNV=wrapper.wrapper(glGenProgramsNV).setOutput(
85    'programs',size=lambda x:(x,),pnameArg='n',orPassIn=True
86)
87glGetProgramParameterdvNV=wrapper.wrapper(glGetProgramParameterdvNV).setOutput(
88    'params',size=(4,),orPassIn=True
89)
90glGetProgramParameterfvNV=wrapper.wrapper(glGetProgramParameterfvNV).setOutput(
91    'params',size=(4,),orPassIn=True
92)
93glGetProgramivNV=wrapper.wrapper(glGetProgramivNV).setOutput(
94    'params',size=(4,),orPassIn=True
95)
96# OUTPUT glGetProgramStringNV.program COMPSIZE(id,pname)
97glGetTrackMatrixivNV=wrapper.wrapper(glGetTrackMatrixivNV).setOutput(
98    'params',size=(1,),orPassIn=True
99)
100glGetVertexAttribdvNV=wrapper.wrapper(glGetVertexAttribdvNV).setOutput(
101    'params',size=(1,),orPassIn=True
102)
103glGetVertexAttribfvNV=wrapper.wrapper(glGetVertexAttribfvNV).setOutput(
104    'params',size=(1,),orPassIn=True
105)
106glGetVertexAttribivNV=wrapper.wrapper(glGetVertexAttribivNV).setOutput(
107    'params',size=(1,),orPassIn=True
108)
109glGetVertexAttribPointervNV=wrapper.wrapper(glGetVertexAttribPointervNV).setOutput(
110    'pointer',size=(1,),orPassIn=True
111)
112# INPUT glLoadProgramNV.program size not checked against len
113glLoadProgramNV=wrapper.wrapper(glLoadProgramNV).setInputArraySize(
114    'program', None
115)
116glProgramParameter4dvNV=wrapper.wrapper(glProgramParameter4dvNV).setInputArraySize(
117    'v', 4
118)
119glProgramParameter4fvNV=wrapper.wrapper(glProgramParameter4fvNV).setInputArraySize(
120    'v', 4
121)
122# INPUT glProgramParameters4dvNV.v size not checked against None
123glProgramParameters4dvNV=wrapper.wrapper(glProgramParameters4dvNV).setInputArraySize(
124    'v', None
125)
126# INPUT glProgramParameters4fvNV.v size not checked against None
127glProgramParameters4fvNV=wrapper.wrapper(glProgramParameters4fvNV).setInputArraySize(
128    'v', None
129)
130# INPUT glRequestResidentProgramsNV.programs size not checked against n
131glRequestResidentProgramsNV=wrapper.wrapper(glRequestResidentProgramsNV).setInputArraySize(
132    'programs', None
133)
134# INPUT glVertexAttribPointerNV.pointer size not checked against 'fsize,type,stride'
135glVertexAttribPointerNV=wrapper.wrapper(glVertexAttribPointerNV).setInputArraySize(
136    'pointer', None
137)
138glVertexAttrib1dvNV=wrapper.wrapper(glVertexAttrib1dvNV).setInputArraySize(
139    'v', 1
140)
141glVertexAttrib1fvNV=wrapper.wrapper(glVertexAttrib1fvNV).setInputArraySize(
142    'v', 1
143)
144glVertexAttrib1svNV=wrapper.wrapper(glVertexAttrib1svNV).setInputArraySize(
145    'v', 1
146)
147glVertexAttrib2dvNV=wrapper.wrapper(glVertexAttrib2dvNV).setInputArraySize(
148    'v', 2
149)
150glVertexAttrib2fvNV=wrapper.wrapper(glVertexAttrib2fvNV).setInputArraySize(
151    'v', 2
152)
153glVertexAttrib2svNV=wrapper.wrapper(glVertexAttrib2svNV).setInputArraySize(
154    'v', 2
155)
156glVertexAttrib3dvNV=wrapper.wrapper(glVertexAttrib3dvNV).setInputArraySize(
157    'v', 3
158)
159glVertexAttrib3fvNV=wrapper.wrapper(glVertexAttrib3fvNV).setInputArraySize(
160    'v', 3
161)
162glVertexAttrib3svNV=wrapper.wrapper(glVertexAttrib3svNV).setInputArraySize(
163    'v', 3
164)
165glVertexAttrib4dvNV=wrapper.wrapper(glVertexAttrib4dvNV).setInputArraySize(
166    'v', 4
167)
168glVertexAttrib4fvNV=wrapper.wrapper(glVertexAttrib4fvNV).setInputArraySize(
169    'v', 4
170)
171glVertexAttrib4svNV=wrapper.wrapper(glVertexAttrib4svNV).setInputArraySize(
172    'v', 4
173)
174glVertexAttrib4ubvNV=wrapper.wrapper(glVertexAttrib4ubvNV).setInputArraySize(
175    'v', 4
176)
177# INPUT glVertexAttribs1dvNV.v size not checked against count
178glVertexAttribs1dvNV=wrapper.wrapper(glVertexAttribs1dvNV).setInputArraySize(
179    'v', None
180)
181# INPUT glVertexAttribs1fvNV.v size not checked against count
182glVertexAttribs1fvNV=wrapper.wrapper(glVertexAttribs1fvNV).setInputArraySize(
183    'v', None
184)
185# INPUT glVertexAttribs1svNV.v size not checked against count
186glVertexAttribs1svNV=wrapper.wrapper(glVertexAttribs1svNV).setInputArraySize(
187    'v', None
188)
189# INPUT glVertexAttribs2dvNV.v size not checked against None
190glVertexAttribs2dvNV=wrapper.wrapper(glVertexAttribs2dvNV).setInputArraySize(
191    'v', None
192)
193# INPUT glVertexAttribs2fvNV.v size not checked against None
194glVertexAttribs2fvNV=wrapper.wrapper(glVertexAttribs2fvNV).setInputArraySize(
195    'v', None
196)
197# INPUT glVertexAttribs2svNV.v size not checked against None
198glVertexAttribs2svNV=wrapper.wrapper(glVertexAttribs2svNV).setInputArraySize(
199    'v', None
200)
201# INPUT glVertexAttribs3dvNV.v size not checked against None
202glVertexAttribs3dvNV=wrapper.wrapper(glVertexAttribs3dvNV).setInputArraySize(
203    'v', None
204)
205# INPUT glVertexAttribs3fvNV.v size not checked against None
206glVertexAttribs3fvNV=wrapper.wrapper(glVertexAttribs3fvNV).setInputArraySize(
207    'v', None
208)
209# INPUT glVertexAttribs3svNV.v size not checked against None
210glVertexAttribs3svNV=wrapper.wrapper(glVertexAttribs3svNV).setInputArraySize(
211    'v', None
212)
213# INPUT glVertexAttribs4dvNV.v size not checked against None
214glVertexAttribs4dvNV=wrapper.wrapper(glVertexAttribs4dvNV).setInputArraySize(
215    'v', None
216)
217# INPUT glVertexAttribs4fvNV.v size not checked against None
218glVertexAttribs4fvNV=wrapper.wrapper(glVertexAttribs4fvNV).setInputArraySize(
219    'v', None
220)
221# INPUT glVertexAttribs4svNV.v size not checked against None
222glVertexAttribs4svNV=wrapper.wrapper(glVertexAttribs4svNV).setInputArraySize(
223    'v', None
224)
225# INPUT glVertexAttribs4ubvNV.v size not checked against None
226glVertexAttribs4ubvNV=wrapper.wrapper(glVertexAttribs4ubvNV).setInputArraySize(
227    'v', None
228)
229### END AUTOGENERATED SECTION