Name

glFeedbackBuffer - controls feedback mode

Python Specification

glFeedbackBuffer
	glFeedbackBuffer(size, type) -> None

The buffer is returned by glRenderMode when the mode changed to a mode other
than GL_FEEDBACK.  If the buffer is overrun then glRenderMode will return
None.  Each item in the buffer returned by glRenderMode is a 2-tuple of the
form (token, vertices)

C Specification

void glFeedbackBuffer( GLsizei size,
                       GLenum	type,
                       GLfloat *buffer )

Parameters

size	  Specifies the	maximum	number of values that can be
        written into buffer.

type	  Specifies a symbolic constant	that describes the
        information that will	be returned for	each vertex.
        GL_2D, GL_3D,	GL_3D_COLOR, GL_3D_COLOR_TEXTURE, and
        GL_4D_COLOR_TEXTURE are accepted.

buffer  Returns the feedback data.

Description

     The glFeedbackBuffer function	controls feedback.  Feedback,
     like selection, is a GL mode.	 The mode is selected by
     calling glRenderMode with GL_FEEDBACK.  When the GL is in
     feedback mode, no pixels are produced	by rasterization.
     Instead, information about primitives	that would have	been
     rasterized is	fed back to the	application using the GL.

     glFeedbackBuffer has three arguments:	 buffer	is a pointer
     to an	array of floating-point	values into which feedback
     information is placed.  size indicates the size of the
     array.  type is a symbolic constant describing the
     information that is fed back for each	vertex.
     glFeedbackBuffer must	be issued before feedback mode is
     enabled (by calling glRenderMode with	argument GL_FEEDBACK).
     Setting GL_FEEDBACK without establishing the feedback
     buffer, or calling glFeedbackBuffer while the	GL is in
     feedback mode, is an error.

     When glRenderMode is called while in feedback	mode, it
     returns the number of	entries	placed in the feedback array,
     and resets the feedback array	pointer	to the base of the
     feedback buffer. The returned	value never exceeds size. If
     the feedback data required more room than was	available in
     buffer, glRenderMode returns a negative value.  To take the
     GL out of feedback mode, call	glRenderMode with a parameter
     value	other than GL_FEEDBACK.

     While	in feedback mode, each primitive, bitmap, or pixel
     rectangle that would be rasterized generates a block of
     values that are copied into the feedback array.  If doing so
     would	cause the number of entries to exceed the maximum, the
     block	is partially written so	as to fill the array (if there
     is any room left at all), and	an overflow flag is set.  Each
     block	begins with a code indicating the primitive type,
     followed by values that describe the primitive's vertices
     and associated data.	Entries	are also written for bitmaps
     and pixel rectangles.	 Feedback occurs after polygon culling
     and glPolygonMode interpretation of polygons has taken
     place, so polygons that are culled are not returned in the
     feedback buffer.  It can also	occur after polygons with more
     than three edges are broken up into triangles, if the	GL
     implementation renders polygons by performing	this
     decomposition.

     The glPassThrough command can	be used	to insert a marker
     into the feedback buffer.  See glPassThrough.

     Following is the grammar for the blocks of values written
     into the feedback buffer.  Each primitive is indicated with
     a unique identifying value followed by some number of
     vertices.  Polygon entries include an	integer	value
     indicating how many vertices follow.	A vertex is fed	back
     as some number of floating-point values, as determined by
     type.	 Colors	are fed	back as	four values in RGBA mode and
     one value in color index mode.

          feedbackList <- feedbackItem feedbackList |
          feedbackItem

          feedbackItem <- point | lineSegment | polygon | bitmap
          | pixelRectangle	| passThru

          point <-	GL_POINT_TOKEN vertex

          lineSegment <- GL_LINE_TOKEN vertex vertex |
          GL_LINE_RESET_TOKEN vertex vertex

          polygon <- GL_POLYGON_TOKEN n polySpec

          polySpec	<- polySpec vertex | vertex vertex vertex

          bitmap <- GL_BITMAP_TOKEN vertex

          pixelRectangle <- GL_DRAW_PIXEL_TOKEN vertex |
          GL_COPY_PIXEL_TOKEN vertex

          passThru	<- GL_PASS_THROUGH_TOKEN value

          vertex <- 2d | 3d | 3dColor | 3dColorTexture |
          4dColorTexture

          2d <- value value
          3d <- value value value

          3dColor	<- value value value color

          3dColorTexture <- value value value color tex

          4dColorTexture <- value value value value color tex

          color <-	rgba | index

          rgba <- value value value value

          index <-	value

          tex <- value value value	value

     value	is a floating-point number, and	n is a floating-point
     integer giving the number of vertices	in the polygon.
     GL_POINT_TOKEN, GL_LINE_TOKEN, GL_LINE_RESET_TOKEN,
     GL_POLYGON_TOKEN, GL_BITMAP_TOKEN, GL_DRAW_PIXEL_TOKEN,
     GL_COPY_PIXEL_TOKEN and GL_PASS_THROUGH_TOKEN	are symbolic
     floating-point constants.  GL_LINE_RESET_TOKEN is returned
     whenever the line stipple pattern is reset.  The data
     returned as a	vertex depends on the feedback type.

     The following	table gives the	correspondence between type
     and the number of values per vertex.	k is 1 in color	index
     mode and 4 in	RGBA mode.

______________________________________________________________________________
|       type	  | coordinates	| color	| texture | total number of values |
|____________________|_____________|_______|_________|________________________|
|       GL_2D	  |    x, y	|	|	  |	      2		   |
|       GL_3D	  |   x, y, z	|	|	  |	      3		   |
|    GL_3D_COLOR	  |   x, y, z	|   k	|	  |	     3+k	   |
|GL_3D_COLOR_TEXTURE |  x,	y, z,	|   k	|    4	  |	     7+k	   |
|GL_4D_COLOR_TEXTURE | x, y, z, w	|   k	|    4	  |	     8+k	   |
|____________________|_____________|_______|_________|________________________|

     Feedback vertex coordinates are in window coordinates,
     except w, which is in	clip coordinates.  Feedback colors are
     lighted, if lighting is enabled.  Feedback texture
     coordinates are generated, if	texture	coordinate generation
     is enabled.  They are	always transformed by the texture
     matrix.

Notes

glFeedbackBuffer, when used in a display list, is not
compiled into	the display list but is	executed immediately.

Errors

GL_INVALID_ENUM is generated if type is not an accepted
value.

GL_INVALID_VALUE is generated	if size	is negative.

GL_INVALID_OPERATION is generated if glFeedbackBuffer	is
called while the render mode is GL_FEEDBACK, or if
glRenderMode is called with argument GL_FEEDBACK before
glFeedbackBuffer is called at	least once.

GL_INVALID_OPERATION is generated if glFeedbackBuffer	is
executed between the execution of glBegin and	the
corresponding	execution of glEnd.

Associated Gets

glGet	with argument GL_RENDER_MODE

See Also

glBegin, glLineStipple, glPassThrough, glPolygonMode,
glRenderMode,	glSelectBuffer

:: Documentation :: References :: GL ::
:: Index (n/a) ::