glFeedbackBuffer.3gl







Name

  glFeedbackBuffer - controls feedback mode





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.



  The GL is taken out of feedback mode by calling glRenderMode with a

  parameter value other	than GL_FEEDBACK.  When	this is	done while the GL is

  in feedback mode, glRenderMode returns the number of entries placed in the

  feedback array.  The returned	value never exceeds size. If the feedback

  data required	more room than was available in	buffer,	glRenderMode returns

  a negative value.



  While	in feedback mode, each primitive that would be rasterized generates a

  block	of values that get 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 glPolyMode

  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 rather 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








Introduction | Alphabetic | Specification

Last Edited: Mon, May 22, 1995

AFV