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