*nix Documentation Project
·  Home
 +   man pages
·  Linux HOWTOs
·  FreeBSD Tips
·  *niX Forums

  man pages->IRIX man pages -> OpenGL/glxintro (3)              
Title
Content
Arch
Section
 

Contents


glXIntro(3G)		    OpenGL Reference - GLX		  glXIntro(3G)


NAME    [Toc]    [Back]

     glXIntro -	Introduction to	OpenGL in the X	window system


OVERVIEW    [Toc]    [Back]

     OpenGL (called GL in other	pages) is a high-performance 3D-oriented
     renderer.	It is available	in the X window	system through the GLX
     extension.	 To determine whether the GLX extension	is supported by	an X
     server, and if so,	what version is	supported, call	glXQueryExtension and
     glXQueryVersion.

     GLX extended X servers make a subset of their visuals available for
     OpenGL rendering.	Drawables created with these visual can	also be
     rendered into using the core X renderer and or any	other X	extension that
     is	compatible with	all core X visuals.

     GLX extends a drawable's standard color buffer with additional buffers.
     These buffers include back	and auxiliary color buffers, a depth buffer, a
     stencil buffer, and a color accumulation buffer.  Some or all of the
     buffers listed are	included in each X visual that supports	OpenGL.

     GLX supports rendering into three types of	drawables: windows, pixmaps
     and pbuffers (pixel buffers). GLX windows and pixmaps are X resources,
     and capable of accepting core X rendering as well as OpenGL rendering.
     GLX pbuffers are GLX only resources, and might not	accept core X
     rendering.

     To	render using OpenGL into a GLX drawable, you must determine the
     appropriate GLXFBConfig which supports the	rendering features your
     application requires. glXChooseFBConfig returns a GLXFBConfig matching
     the required attributes, or NULL if no match is found.  A complete	list
     of	GLXFBConfigs supported by a server can be obtained by calling
     glXGetFBConfigs.  Attributes of a particular GLXFBConfig can be queried
     by	calling	glXGetFBConfigAttrib.

     For GLX windows and pixmaps, a suitable X drawable	(using either
     XCreateWindow or XCreatePixmap, respectively) with	a matching visual must
     be	created	first.	Call glXGetVisualFromFBConfig to obtain	the necessary
     XVisualInfo structure for creating	the X drawable.	 For pbuffers, no
     underlying	X drawable is required.

     To	create a GLX window from an X window, call glXCreateWindow.  Likewise,
     to	create a GLX pixmap, call glXCreatePixmap. Pbuffers are	created	by
     calling glXCreatePbuffer.	Use glXDestroyWindow, glXDestroyPixmap,	and
     glXDestroyPbuffer to release previously allocated resources.

     A GLX context is required to bind OpenGL rendering	to a GLX resource.  A
     GLX resource and rendering	context	must have compatible GLXFBConfigs.  To
     create a GLX context, call	glXCreateNewContext.  A	context	may be bound
     to	a GLX drawable by using	glXMakeContextCurrent.	This context/drawable
     pair becomes the current context and current drawable, and	is used	by all



									Page 1






glXIntro(3G)		    OpenGL Reference - GLX		  glXIntro(3G)



     OpenGL rendering commands until glXMakeContextCurrent is called with
     different arguments.

     Both core X and OpenGL commands can be used to operate on drawables,
     however, the X and	OpenGL command streams are not synchronized.
     Synchronization can be explicitly specified using by calling glXWaitGL,
     glXWaitX, XSync, and XFlush.

EXAMPLES    [Toc]    [Back]

     Below is a	minimal	example	of creating an RGBA-format, X window that's
     compatible	with OpenGL using GLX 1.3 commands.  The window	is cleared to
     yellow when the program runs.  The	program	does minimal error checking;
     all return	values should be checked.

	  #include <stdio.h>
	  #include <stdlib.h>
	  #include <GL/gl.h>
	  #include <GL/glx.h>

	  int singleBufferAttributess[]	= {
	      GLX_DRAWABLE_TYPE, GLX_WINDOW_BIT,
	      GLX_RENDER_TYPE,	 GLX_RGBA_BIT,
	      GLX_RED_SIZE,	 1,   /* Request a single buffered color buffer	*/
	      GLX_GREEN_SIZE,	 1,   /* with the maximum number of color bits	*/
	      GLX_BLUE_SIZE,	 1,   /* for each component			*/
	      None
	  };

	  int doubleBufferAttributes[] = {
	      GLX_DRAWABLE_TYPE, GLX_WINDOW_BIT,
	      GLX_RENDER_TYPE,	 GLX_RGBA_BIT,
	      GLX_DOUBLEBUFFER,	 True,	/* Request a double-buffered color buffer with */
	      GLX_RED_SIZE,	 1,	/* the maximum number of bits per component    */
	      GLX_GREEN_SIZE,	 1,
	      GLX_BLUE_SIZE,	 1,
	      None
	  };


	  static Bool WaitForNotify( Display *dpy, XEvent *event, XPointer arg ) {
	      return (event->type == MapNotify)	&& (event->xmap.window == (Window) arg);
	  }













									Page 2






glXIntro(3G)		    OpenGL Reference - GLX		  glXIntro(3G)



	  int main( int	argc, char *argv[] )
	  {
	      Display		   *dpy;
	      Window		    xWin;
	      XEvent		    event;
	      XVisualInfo	   *vInfo;
	      XSetWindowAttributes  swa;
	      GLXFBConfig	   *fbConfigs;
	      GLXContext	    context;
	      GLXWindow		    glxWin;
	      int		    swaMask;
	      int		    numReturned;
	      int		    swapFlag = True;

	      /* Open a	connection to the X server */
	      dpy = XOpenDisplay( NULL );
	      if ( dpy == NULL ) {
		  printf( "Unable to open a connection to the X	server\n" );
		  exit(	EXIT_FAILURE );
	      }

	      /* Request a suitable framebuffer	configuration -	try for	a double
	      ** buffered configuration	first */
	      fbConfigs	= glXChooseFBConfig( dpy, DefaultScreen(dpy),
					     doubleBufferAttributes, &numReturned );

	      if ( fbConfigs ==	NULL ) {  /* no	double buffered	configs	available */
		fbConfigs = glXChooseFBConfig( dpy, DefaultScreen(dpy),
					       singleBufferAttributess,	&numReturned );
		swapFlag = False;
	      }

	      /* Create	an X colormap and window with a	visual matching	the first
	      ** returned framebuffer config */
	      vInfo = glXGetVisualFromFBConfig(	dpy, fbConfigs[0] );

	      swa.border_pixel = 0;
	      swa.event_mask = StructureNotifyMask;
	      swa.colormap = XCreateColormap( dpy, RootWindow(dpy, vInfo->screen),
					      vInfo->visual, AllocNone );

	      swaMask =	CWBorderPixel |	CWColormap | CWEventMask;

	      xWin = XCreateWindow( dpy, RootWindow(dpy, vInfo->screen), 0, 0, 256, 256,
				    0, vInfo->depth, InputOutput, vInfo->visual,
				    swaMask, &swa );

	      /* Create	a GLX context for OpenGL rendering */
	      context =	glXCreateNewContext( dpy, fbConfigs[0],	GLX_RGBA_TYPE,
			       NULL, True );

	      /* Create	a GLX window to	associate the frame buffer configuration



									Page 3






glXIntro(3G)		    OpenGL Reference - GLX		  glXIntro(3G)



	      ** with the created X window */
	      glxWin = glXCreateWindow(	dpy, fbConfigs[0], xWin, NULL );

	      /* Map the window	to the screen, and wait	for it to appear */
	      XMapWindow( dpy, xWin );
	      XIfEvent(	dpy, &event, WaitForNotify, (XPointer) xWin );

	      /* Bind the GLX context to the Window */
	      glXMakeContextCurrent( dpy, glxWin, glxWin, context );

	      /* OpenGL	rendering ... */
	      glClearColor( 1.0, 1.0, 0.0, 1.0 );
	      glClear( GL_COLOR_BUFFER_BIT );

	      glFlush();

	      if ( swapFlag )
		  glXSwapBuffers( dpy, glxWin );

	      sleep( 10	);
	      exit( EXIT_SUCCESS );
	  }

NOTES    [Toc]    [Back]

     An	X color	map must be created and	passed to XCreateWindow.

     A GLX context must	be created and bound to	a GLX drawable before OpenGL
     commands can be executed.	OpenGL commands	executed while no
     context/drawable pair is current result in	undefined behavior.

     Exposure events indicate that all buffers associated with the specified
     window may	be damaged and should be repainted. Although certain buffers
     of	some visuals on	some systems may never require repainting (the depth
     buffer, for example), it is incorrect to write a program assuming that
     these buffers will	not be damaged.

     GLX commands utilize XVisualInfo structures rather	than pointers to
     visuals or	visualIDs directly.  XVisualInfo structures contain visual,
     visualID, screen, and depth elements, as well as other X-specific
     information.

GLX EXTENSIONS    [Toc]    [Back]

     The SGI_video_sync	extension provides a means for synchronization with
     the video frame rate of a monitor--or, in the case	of an interlaced
     monitor, with the field rate of the monitor. For more information see:
     glXGetVideoSyncSGI, glXWaitVideoSyncSGI.

     The SGI_swap_control extension provides new parameters that modify	the
     semantics of glXSwapBuffers. With this extension an application can
     specify a minimum periodicity for color buffer swaps, measured in display



									Page 4






glXIntro(3G)		    OpenGL Reference - GLX		  glXIntro(3G)



     retrace periods.  For more	information see	glXSwapIntervalSGI.

     The EXT_import_context allows multiple X clients to share an indirect
     rendering context.	Also, two convenience routines are added: one to get
     the display for the current context and one to retrieve the attributes
     that a context was	created	with. For more information see
     glXGetCurrentDisplayEXT, glXQueryContextInfoEXT, glXGetContextIDEXT,
     glXImportContextEXT, and glXFreeContextEXT.

     The EXT_visual_rating extension allows servers to identify	a particular
     GLX visual	as undesirable.	A new visual attribute is introduced,
     providing a way for servers to specify caveats (e.g., slow	or nonconformant)
 for a visual. The attribute may be queried using
     glXGetConfig; it is also used by glXChooseVisual to discriminate against
     visuals with caveats.

     This extension allows servers to export visuals with improved features or
     image quality, but	lower performance or greater system burden, without
     having to have these visuals selected preferentially.

     The EXT_visual_info extension allows the user to request a	particular X
     visual type to be associated with a GLX visual, and allows	the user to
     query the X visual	type underlying	a GLX visual. In addition, this
     extension provides	a means	to request a visual with a transparent pixel
     and to query whether a visual supports a transparent pixel	value and the
     value of the transparent pixel.

     The SGIX_fbconfig extension introduces a new way to describe the
     capabilities of a GLX drawable (i.e., to describe the depth of color
     buffer components and the type and	size of	ancillary buffers), removes
     the "similarity" requirement when making a	context	current	to a drawable,
     and supports RGBA rendering to one- and two-component Windows and GLX
     Pixmaps. For more information see glXGetFBConfigAttribSGIX,
     glXChooseFBConfigSGIX, glXCreateGLXPixmapWithConfigSGIX,
     glXCreateContextWithConfigSGIX, glXGetVisualFromFBConfigSGIX,
     glXGetFBConfigFromVisualSGIX.

     The SGIX_pbuffer extension	defines	GLX pixel buffers, which are
     additional	non-visible rendering buffers for an OpenGL renderer.  GLX
     pixel buffers are typically allocated in non-visible frame	buffer memory.
     They are intended to be "static" resources, in that a program will
     typically allocate	them only once,	rather than as a part of its rendering
     loop. Also	the frame buffer resources that	are associated with a GLX
     pixel buffer are static, and are deallocated only when the	GLXPbuffer is
     destroyed,	or, in the case	of a unpreserved GLX pixel buffer, as a	result
     of	X server activity that changes its frame buffer	requirements.  For
     more information see glXCreateGLXPbufferSGIX, glXDestroyGLXPbufferSGIX,
     glXQueryGLXPbufferSGIX, glXSelectEventSGIX, glXGetSelectedEventSGIX.
     SGIX_pbuffer is only supported on RealityEngine, RealityEngine2, and VTX
     systems, InfiniteReality systems, Solid Impact systems, High Impact and
     Maximum Impact systems, O2	systems, and Octane2 VPro systems.




									Page 5






glXIntro(3G)		    OpenGL Reference - GLX		  glXIntro(3G)



     The SGIX_dm_pbuffer extension, with the addition of a DigitalMedia
     attribute,	defines	a type of GLX pixel buffer that	can acquire one	or
     more of its renderable buffers from a DMbuffer generated by video,
     compression, or other media library. A single DigitalMedia	pixel buffer
     can be associated with a sequence of DMbuffers having the same
     configuration, making them	directly OpenGL	readable and renderable.
     Frame buffer resources that are not acquired from the DMbuffer are
     identical to those	of a standard GLX pixel	buffer.	For more information
     see glXCreateGLXPbufferSGIX, glXAssociateDMPbufferSGIX, DMbuffer,
     dmBufferGetGLPoolParams.  SGIX_dm_pbuffer is only supported on O2
     systems.

     The SGIS_multisample extension provides a mechanism to antialias all
     primitives. (This extension is described in more detail in	glIntro.) In
     order to support multisampling both GLX and OpenGL	had to be extended.
     The GLX portion of	the extension, designated as GLX_SGIS_multisample,
     includes new visual attributes which can be specified when	calling
     glXChooseVisual and glXGetConfig. SGIS_multisample	is only	supported on
     RealityEngine, RealityEngine2, and	VTX systems, and InfiniteReality
     systems.

     The SGI_make_current_read extension allows	OpenGL pixel operations	to
     read pixel	data from the buffers of one drawable and draw into the
     buffers of	another.  For example, pixels can be copied from one window
     into another, or from a GLX pixel buffer into a window.  For more
     information see glXMakeCurrentReadSGI and glXGetCurrentReadDrawableSGI.
     SGI_make_current_read is only supported on	RealityEngine, RealityEngine2,
     and VTX systems, InfiniteReality systems, Solid Impact systems, High
     Impact and	Maximum	Impact systems,	O2 systems, and	Octane2	VPro systems.

     The SGIX_video_source extension allows pixel data to be sourced from a
     video input stream.  It defines a new type	of drawable,
     GLXVideoSourceSGIX, that represents the drain node	of a Video Library
     (VL) path.	 A GLXVideoSourceSGIX may be passed as a parameter to
     glXMakeCurrentReadSGI to indicate that pixel data should be read from the
     specified video source instead of from the	framebuffer.  For more
     information, see glXCreateGLXVideoSourceSGIX and
     glXDestroyGLXVideoSourceSGIX.  SGIX_video_source is only supported	on
     RealityEngine, RealityEngine2, and	VTX systems, and InfiniteReality
     systems.

     The SGIX_video_resize extension allows the	frame buffer to	be resized to
     the output	resolution of the video	channel	when glXSwapBuffers is called
     for the window that is bound to the video channel.	 SGIX_video_resize is
     only supported on InfiniteReality systems.

USING GLX EXTENSIONS    [Toc]    [Back]

     Procedure names and tokens	for GLX	extensions are either suffixed with
     EXT, SGI, SGIS or SGIX. The meaning of these suffixes is described	in
     glIntro.




									Page 6






glXIntro(3G)		    OpenGL Reference - GLX		  glXIntro(3G)



     All supported GLX extensions will have a corresponding definition in
     glx.h and a token in the extension	string returned	by
     glXQueryExtensionsString.	For example, if	the EXT_visual_info extension
     is	supported, then	this token will	be defined in glx.h and
     EXT_visual_info will appear in the	extension string returned by
     glXQueryExtensionsString. The definitions in glx.h	can be used at compile
     time to determine if procedure calls corresponding	to an extension	exist
     in	the library.

     OpenGL itself is capable of being extended.  Refer	to glIntro for more
     information.

GLX 1.1, GLX 1.2, GLX 1.3
     GLX 1.3 is	now supported, and is backward compatible with GLX 1.1 and GLX
     1.2.  It introduces new functionality (namely GLXFBConfigs) that
     supersedes	the GLX	1.2 functionality.  GLX	1.2 commands are supported,
     but their use in new application development is not recommended.

     GLX 1.3 corresponds to OpenGL versions 1.2, and introduces	the following
     new calls:	glXGetFBConfigs, glXGetFBConfigAttrib,
     glXGetVisualFromFBConfig, glXCreateWindow,	glXDestroyWindow,
     glXCreatePixmap, glXDestroyPixmap,	glXCreatePbuffer, glXDestroyPbuffer,
     glXQueryDrawable, glXCreateNewContext, glXMakeContextCurrent,
     glXGetCurrentReadDrawable,	glXGetCurrentDisplay, glXQueryContext,
     glXSelectEvent, glXGetSelectedEvent.

     GLX 1.2 corresponds to OpenGL version 1.1 and introduced the following
     new call: glXGetCurrentDisplay.

     GLX 1.1 corresponds to OpenGL version 1.0 and introduces the following
     new calls:	glXQueryExtensionsString, glXQueryServerString,	and
     glXGetClientString.

     Call glXQueryVersion to determine at runtime what version of GLX is
     available.	glXQueryVersion	returns	the version that is supported on the
     connection. Thus if 1.3 is	returned, both the client and server support
     GLX 1.3.  You can also check the GLX version at compile time:
     GLX_VERSION_1_1 will be defined in	glx.h if GLX 1.1 calls are supported,
     GLX_VERSION_1_2 will be defined if	GLX 1.2	calls are supported, and
     GLX_VERSION_1_3 will be defined if	GLX 1.3	calls are supported.

SEE ALSO    [Toc]    [Back]

      
      
     glXIntro, glXFinish, glXFlush, glXChooseVisual, glXCopyContext,
     glXCreateContext, glXCreateGLXPixmap, glXDestroyContext,
     glXGetClientString, glXGetConfig, glXIsDirect, glXMakeCurrent,
     glXQueryExtension,	glXQueryExtensionsString, glXQueryServerString,
     glXQueryVersion, glXSwapBuffers, glXUseXFont, glXWaitGL, glXWaitX,
     glXGetFBConfigs, glXGetFBConfigAttrib, glXGetVisualFromFBConfig,
     glXCreateWindow, glXDestroyWindow,	glXCreatePixmap, glXDestroyPixmap,
     glXCreatePbuffer, glXDestroyPbuffer, glXQueryDrawable,
     glXCreateNewContext, glXMakeContextCurrent, glXGetCurrentReadDrawable,
     glXGetCurrentDisplay, glXQueryContext, glXSelectEvent,



									Page 7






glXIntro(3G)		    OpenGL Reference - GLX		  glXIntro(3G)



     glXGetSelectedEvent.  XCreateColormap, XCreateWindow, XSync


									PPPPaaaaggggeeee 8888
[ Back ]
 Similar pages
Name OS Title
glintro IRIX Introduction to OpenGL
glsintro IRIX Introduction to the OpenGL Stream Codec
glcintro IRIX Introduction to the OpenGL Character Renderer
eventView IRIX OpenGL Performer
ideas IRIX Ideas in Motion in OpenGL
errno Tru64 Introduction to system calls
intro Linux Introduction to system calls
intro Tru64 Introduction to system calls
intro NetBSD introduction to the system libraries
audit HP-UX introduction to HP-UX Auditing System
Copyright © 2004-2005 DeniX Solutions SRL
newsletter delivery service