OpenGL extension NV.geometry_program4
This module customises the behaviour of the
OpenGL.raw.GL.NV.geometry_program4 to provide a more
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
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:
|EXTENSION_NAME = 'GL_NV_geometry_program4'|
GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT = GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT
GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT = GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT
GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT = GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT
GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT = GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT
GL_GEOMETRY_INPUT_TYPE_EXT = GL_GEOMETRY_INPUT_TYPE_EXT
GL_GEOMETRY_OUTPUT_TYPE_EXT = GL_GEOMETRY_OUTPUT_TYPE_EXT
GL_GEOMETRY_PROGRAM_NV = GL_GEOMETRY_PROGRAM_NV
GL_GEOMETRY_VERTICES_OUT_EXT = GL_GEOMETRY_VERTICES_OUT_EXT
GL_LINES_ADJACENCY_EXT = GL_LINES_ADJACENCY_EXT
GL_LINE_STRIP_ADJACENCY_EXT = GL_LINE_STRIP_ADJACENCY_EXT
GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT = GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT
GL_MAX_PROGRAM_OUTPUT_VERTICES_NV = GL_MAX_PROGRAM_OUTPUT_VERTICES_NV
GL_MAX_PROGRAM_TOTAL_OUTPUT_COMPONENTS_NV = GL_MAX_PROGRAM_TOTAL_OUTPUT_COMPONENTS_NV
GL_PROGRAM_POINT_SIZE_EXT = GL_PROGRAM_POINT_SIZE_EXT
GL_TRIANGLES_ADJACENCY_EXT = GL_TRIANGLES_ADJACENCY_EXT
GL_TRIANGLE_STRIP_ADJACENCY_EXT = GL_TRIANGLE_STRIP_ADJACENCY_EXT
__file__ = '/home/mcfletch/pylive/OpenGL/GL/NV/geometry_program4.pyc'
__name__ = 'OpenGL.GL.NV.geometry_program4'
__package__ = 'OpenGL.GL.NV'
glFramebufferTextureEXT = <OpenGL.platform.baseplatform.glFramebufferTextureEXT object at 0x78e8910>
glFramebufferTextureFaceEXT = <OpenGL.platform.baseplatform.glFramebufferTextureFaceEXT object at 0x78e89d0>
glFramebufferTextureLayerEXT = <OpenGL.platform.baseplatform.glFramebufferTextureLayerEXT object at 0x78e8950>
glProgramVertexLimitNV = <OpenGL.platform.baseplatform.glProgramVertexLimitNV object at 0x78e88d0>