glSelectBuffer.3gl




Name

  glSelectBuffer - establish a buffer for selection mode values


C Specification

  void glSelectBuffer( GLsizei size,
		       GLuint *buffer )


Parameters


  size	  Specifies the	size of	buffer.

  buffer  Returns the selection	data.


Description

  glSelectBuffer has two arguments: buffer is a	pointer	to an array of
  unsigned integers, and size indicates	the size of the	array.	buffer
  returns values from the name stack (see glInitNames, glLoadName,
  glPushName) when the rendering mode is GL_SELECT (see	glRenderMode).
  glSelectBuffer must be issued	before selection mode is enabled, and it must
  not be issued	while the rendering mode is GL_SELECT.

  Selection is used by a programmer to determine which primitives are drawn
  into some region of a	window.	 The region is defined by the current
  modelview and	perspective matrices.

  In selection mode, no	pixel fragments	are produced from rasterization.
  Instead, if a	primitive intersects the clipping volume defined by the
  viewing frustum and the user-defined clipping	planes,	this primitive causes
  a selection hit.  (With polygons, no hit occurs if the polygon is culled.)
  When a change	is made	to the name stack, or when glRenderMode	is called, a
  hit record is	copied to buffer if any	hits have occurred since the last
  such event (name stack change	or glRenderMode	call).	The hit	record
  consists of the number of names in the name stack at the time	of the event,
  followed by the minimum and maximum depth values of all vertices that	hit
  since	the previous event, followed by	the name stack contents, bottom	name
  first.

  Returned depth values	are mapped such	that the largest unsigned integer
  value	corresponds to window coordinate depth 1.0, and	zero corresponds to
  window coordinate depth 0.0.

  An internal index into buffer	is reset to zero whenever selection mode is
  entered.  Each time a	hit record is copied into buffer, the index is
  incremented to point to the cell just	past the end of	the block of names -
  that is, to the next available cell.	If the hit record is larger than the
  number of remaining locations	in buffer, as much data	as can fit is copied,
  and the overflow flag	is set.	 If the	name stack is empty when a hit record
  is copied, that record consists of zero followed by the minimum and maximum
  depth	values.

  Selection mode is exited by calling glRenderMode with	an argument other
  than GL_SELECT.  Whenever glRenderMode is called while the render mode is
  GL_SELECT, it	returns	the number of hit records copied to buffer, resets
  the overflow flag and	the selection buffer pointer, and initializes the
  name stack to	be empty.  If the overflow bit was set when glRenderMode was
  called, a negative hit record	count is returned.

Notes

  The contents of buffer are undefined until glRenderMode is called with an
  argument other than GL_SELECT.

  glBegin/glEnd	primitives and calls to	glRasterPos can	result in hits.

Errors

  GL_INVALID_VALUE is generated	if size	is negative.

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

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

Associated Gets

  glGet	with argument GL_NAME_STACK_DEPTH

See Also

  glFeedbackBuffer, glInitNames, glLoadName, glPushName, glRenderMode




Introduction | Alphabetic | Specification

Last Edited: Mon, May 22, 1995

AFV