| | '''OpenGL extension NV.geometry_program4 |
| | |
| | This module customises the behaviour of the |
| | OpenGL.raw.GL.NV.geometry_program4 to provide a more |
| | Python-friendly API |
| | |
| | Overview (from the spec) |
| | |
| | NV_geometry_program4 defines a new type of program available to be run on |
| | the GPU, called a geometry program. Geometry programs are run on full |
| | primitives after vertices are transformed, but prior to flat shading and |
| | clipping. |
| | |
| | A geometry program begins with a single primitive - a point, line, or |
| | triangle. Quads and polygons are allowed, but are decomposed into |
| | individual triangles prior to geometry program execution. It can read the |
| | attributes of any of the vertex in the primitive and use them to generate |
| | new primitives. A geometry program has a fixed output primitive type, |
| | either a point, a line strip, or a triangle strip. It emits vertices |
| | (using the EMIT opcode) to define the output primitive. The attributes of |
| | emitted vertices are specified by writing to the same set of result |
| | bindings (e.g., "result.position") provided for vertex programs. |
| | Additionally, a geometry program can emit multiple disconnected primitives |
| | by using the ENDPRIM opcode, which is roughly equivalent to calling End |
| | and then Begin again. The primitives emitted by the geometry program are |
| | then clipped and then processed like an equivalent OpenGL primitive |
| | specified by the application. |
| | |
| | This extension provides four additional primitive types: lines with |
| | adjacency, line strips with adjacency, separate triangles with adjacency, |
| | and triangle strips with adjacency. Some of the vertices specified in |
| | these new primitive types are not part of the ordinary primitives. |
| | Instead, they represent neighboring vertices that are adjacent to the two |
| | line segment end points (lines/strips) or the three triangle edges |
| | (triangles/tstrips). These "adjacency" vertices can be accessed by |
| | geometry programs and used to match up the outputs of the geometry program |
| | with those of neighboring primitives. |
| | |
| | Additionally, geometry programs allow for layered rendering, where entire |
| | three-dimensional, cube map, or array textures (EXT_texture_array) can be |
| | bound to the current framebuffer. Geometry programs can use the |
| | "result.layer" binding to select a layer or cube map face to render to. |
| | Each primitive emitted by such a geometry program is rendered to the layer |
| | taken from its provoking vertex. |
| | |
| | Since geometry programs expect a specific input primitive type, an error |
| | will occur if the application presents primtives of a different type. For |
| | example, if an enabled geometry program expects points, an error will |
| | occur at Begin() time, if a primitive mode of TRIANGLES is specified. |
| | |
| | The official definition of this extension is available here: |
| | http://www.opengl.org/registry/specs/NV/geometry_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.geometry_program4 import * |
| | from OpenGL.raw.GL.NV.geometry_program4 import _EXTENSION_NAME |
| |
|
| | def glInitGeometryProgram4NV(): |
| | '''Return boolean indicating whether this extension is available''' |
| | from OpenGL import extensions |
| | return extensions.hasGLExtension( _EXTENSION_NAME ) |
| |
|
| |
|
| | |