aboutsummaryrefslogtreecommitdiff
path: root/nx-X11/extras/ogl-sample/main/doc/man/manglw/glwdrawingarea.gl
diff options
context:
space:
mode:
Diffstat (limited to 'nx-X11/extras/ogl-sample/main/doc/man/manglw/glwdrawingarea.gl')
-rw-r--r--nx-X11/extras/ogl-sample/main/doc/man/manglw/glwdrawingarea.gl485
1 files changed, 485 insertions, 0 deletions
diff --git a/nx-X11/extras/ogl-sample/main/doc/man/manglw/glwdrawingarea.gl b/nx-X11/extras/ogl-sample/main/doc/man/manglw/glwdrawingarea.gl
new file mode 100644
index 000000000..f25a4f5c6
--- /dev/null
+++ b/nx-X11/extras/ogl-sample/main/doc/man/manglw/glwdrawingarea.gl
@@ -0,0 +1,485 @@
+.\" **
+.\" ** (c) Copyright 1993, 1994, 1995, 1996 Silicon Graphics, Inc.
+.\" **
+.\" ** (c) Copyright 1989, 1990, 1991 Open Software Foundation, Inc.
+.\" ** All Rights Reserved.
+.\" **
+.\" ** (c) Copyright 1987, 1988, 1989, by Hewlett-Packard Company
+.\" **
+.\" ** (c) Copyright 1987, 1988 by Digital Equipment Corporation,
+.\" ** Maynard, MA. All Rights Reserved.
+.\" **
+.\" **
+.TH GLwDrawingArea 3X "" "" "" ""
+.SH NAME
+\fBGLwDrawingArea, GLwMDrawingArea \(em OpenGL drawing widgets.\fP
+.iX "GLwDrawingArea" "GLwMDrawingArea"
+.iX "widget class" "OpenGL" "Draw"
+.sp 1
+.SH SYNOPSIS
+\fB#include <X11/GLw/GLwDrawA.h>
+.br
+\fBld ... -lGLw -lGL -l<anywidgetlibrary> -lXext -lXt -lX11 -lm
+.sp
+\fB#include <X11/GLw/GLwMDrawA.h>
+.br
+\fBld ... -lGLw -lGL -lXm -lXext -lXt -lX11 -lm
+.sp 1
+.SH DESCRIPTION
+\fBGLwDrawingArea\fP and \fBGLwMDrawingArea\fP are widgets suitable
+for OpenGL drawing. They
+provide a window with the appropriate visual and colormaps needed for
+OpenGL, based on supplied parameters. GLwDrawingArea and
+GLwMDrawingArea also provide
+callbacks for redraw, resize, input, and initialization.
+.PP
+GLwDrawingArea is not a part of any widget set, but depends only on Xt.
+GLwDrawingArea can be used with any widget set. GLwMDrawingArea
+is identical to
+GLwDrawingArea except that it is a subclass of the Motif\(Tm widget
+class XmPrimitive and
+has resources and defaults suitable for use with Motif. For example,
+GLwMDrawingArea provides the default Motif background and foreground colors
+for resources, and deals better with keyboard traversal. Although the
+GLwDrawingArea widget can be used in a Motif program, it is recommended that
+GLwMDrawingArea be used instead.
+.PP
+Since both GLwDrawingArea and GLwMDrawingArea
+widgets behave almost identically, the
+remainder of this manual page will refer only to GLwDrawingArea, except when
+the behaviors differ. Unless explicitly stated, all statements
+about GLwDrawingArea also apply to GLwMDrawingArea.
+.PP
+Among the information provided when creating a GLwDrawingArea is
+information necessary to determine the visual. This may be provided
+in three ways, all of them through resources. A specific visualInfo
+structure may be passed in. (This visualInfo must have been obtained
+elsewhere; it is the application designer's responsibility to make
+sure that it is compatible with the OpenGL rendering done by the
+application). Alternatively, an attribute list may be provided. This
+attribute list is formatted identically to that used for direct open
+GL programming. Finally, each attribute can be specified as an
+individual resource. The latter method is the simplest, and is the
+only method that works from resource files.
+.PP
+In addition to allocating the visual, the GLwDrawingArea will also
+allocate the colormap unless one is provided by the application. (If
+one is provided it is the application writer's responsibility to
+guarantee compatibility between the colormap and the visual). If
+an application creates multiple GLwDrawingAreas with the same visual,
+the same colormap will be used. (However the colormap
+will not be shared among separate applications).
+.PP
+Creating the widget does not actually create the window until it is
+realized, and consequently, the application should not perform any
+OpenGL operations
+to the window immediately after creation. Instead the application
+must wait until after it has realized the window. Alternatively, the
+\fBginit\fP callback may be used to indicate when the window has been
+created. Upon receiving this callback, the application can perform
+all OpenGL initialization for the window, and can subsequently perform
+other operations on it. The initialization is discussed in more
+detail below.
+.PP
+Applications select which GLwDrawingArea they are accessing using either
+\fBglXMakeCurrent\fP or the convenience function
+\fBGLwDrawingAreaMakeCurrent\fP which uses a widget instead of a
+display and window. If there is only one GLwDrawingArea this need
+only be called once, however if there is more than one GLwDrawingArea
+it should be called at the start of each callback.
+Callbacks in this case include not only
+callbacks provided by the widget itself, but any other callback that
+leads to GL activity such as a timeout or a workproc.
+.PP
+If an application is using double buffering, it may call
+\fBGLwDrawingAreaSwapBuffers\fP instead of \fBglXSwapBuffers\fP. This
+allows the use of the widget instead of the display and window.
+.ne 5
+.SS "GLwDrawingArea Classes"
+GLwDrawingArea inherits behavior and resources from the \fBCore\fP class.
+.br
+The class pointer is \fBglwDrawingAreaWidgetClass\fP.
+.br
+The class name is \fBGLwDrawingArea\fP.
+.PP
+.ne 5
+.SS "GLwMDrawingArea Classes"
+GLwMDrawingArea inherits behavior and resources from the
+\fBXmPrimitive\fP and \fBCore\fP classes.
+.br
+The class pointer is \fBglwMDrawingAreaWidgetClass\fP.
+.br
+The class name is \fBGLwMDrawingArea\fP.
+.sp 1
+.SS "New Resources"
+The following tables define a set of widget resources used by the programmer
+to specify data. The programmer can also set the resource values for the
+inherited classes to set attributes for this widget. To reference a
+resource by name or by class in a .Xdefaults file, remove the \fBGLwN\fP or
+\fBGLwC\fP prefix and use the remaining letters.
+There are two tables included. The first table includes resources
+that correspond directly to the attributes used by \fBglXChooseVisual\fP.
+As with \fBglXChooseVisual\fP, all Boolean resources default to FALSE
+and all integer resources default to 0, except redSize, greenSize and
+blueSize which default to 1. These resources can all be
+set only at creation time, and are used to determine the visual. If
+either the \fIGLwNattribList\fP or \fIGLwNvisualInfo\fP resource is
+set, these resources are ignored. The specific meaning of these
+resources is discussed in the \fBglXChooseVisual\fP manual page and
+will not be discussed here.
+.sp 1
+.ne 18
+.TS
+center allbox;
+lBp8 lBp8 lBp8 lBp8
+lp8 lp8 lp8 lp8.
+Name Class Type OpenGL attribute
+GLwNbufferSize GLwCBufferSize int GLX_BUFFER_SIZE
+GLwNlevel GLwCLevel int GLX_LEVEL
+GLwNrgba GLwCRgba Boolean GLX_RGBA
+GLwNdoublebuffer GLwCDoublebuffer Boolean GLX_DOUBLEBUFFER
+GLwNstereo GLwCStereo Boolean GLX_STEREO
+GLwNauxBuffers GLwCAuxBuffers Boolean GLX_AUX_BUFFERS
+GLwNredSize GLwCColorSize int GLX_RED_SIZE
+GLwNgreenSize GLwCColorSize int GLX_GREEN_SIZE
+GLwNblueSize GLwCColorSize int GLX_BLUE_SIZE
+GLwNalphaSize GLwCAlphaSize int GLX_ALPHA_SIZE
+GLwNdepthSize GLwCDepthSize int GLX_DEPTH_SIZE
+GLwNstencilSize GLwCStencilSize int GLX_STENCIL_SIZE
+GLwNaccumRedSize GLwCAccumColorSize int GLX_ACCUM_RED_SIZE
+GLwNaccumGreenSize GLwCAccumColorSize int GLX_ACCUM_GREEN_SIZE
+GLwNaccumBlueSize GLwCAccumColorSize int GLX_ACCUM_BLUE_SIZE
+GLwNaccumAlphaSize GLwCAccumAlphaSize int GLX_ACCUM_ALPHA_SIZE
+.TE
+.sp 1
+.PP
+The following table lists other resources of the GLwDrawingArea
+widget. each of these will be described subsequently.
+The codes in the access column indicate if the given resource can be
+set at creation time (\fBC\fP),
+set by using \fBXtSetValues\fP (\fBS\fP),
+retrieved by using \fBXtGetValues\fP (\fBG\fP), or is not applicable
+(\fBN/A\fP).
+.sp 1
+.ne 12
+.TS
+center;
+lp8B lp8B lp8B lp8B lp8B
+lp8 lp8 lp8 lp8 lp8.
+Name Class Type Def Acc
+_
+GLwNallocateBackground GLwCAllocateColors Boolean F CG
+GLwNallocateOtherColors GLwCAllocateColors Boolean F CG
+GLwNattribList GLwCAttribList int * NULL CG
+GLwNexposeCallback GLwCCallback XtCallbackList NULL C
+GLwNginitCallback GLwCCallback XtCallbackList NULL C
+GLwNinputCallback GLwCCallback XtCallbackList NULL C
+GLwNinstallBackground GLwCInstallBackground Boolean T CG
+GLwNinstallColormap GLwCInstallColormap Boolean T CG
+GLwNresizeCallback GLwCCallback XtCallbackList NULL C
+GLwNvisualInfo GLwCVisualInfo XVisualInfo* NULL CG
+.TE
+.sp 1
+.IP "\fBGLwNallocateBackground\fP"
+If TRUE, the background pixel and pixmap will be allocated if
+appropriate using the newly calculated colormap and visual. If FALSE,
+they will retain values calculated using the parent's colormap and
+visual. Applications which wish to have X clear their background for
+them will usually set this to TRUE. Applications clearing their own
+background will often set this to FALSE, although they may set this to
+TRUE if they query the background for their own use. One reason to
+leave this resource FALSE is that if color index mode is in use this
+avoid using up a pixel from the newly allocated colormap. Also, on
+hardware that supports only one colormap, the application may need to
+do more careful color allocation to avoid flashing between the OpenGL
+colormap and the default X colormap.
+(Note that because of the way Xt works, the background colors
+are originally calculated using the default colormap; if this resource
+is set they can be recalculated correctly. If a colormap was
+explicitly supplied to the widget rather than being dynamically
+calculated, these resources are always calculated using that colormap.)
+.IP "\fBGLwNallocateOtherColors\fP"
+This is similar to \fBGLwNallocateBackground\fP, but allocates other
+colors normally allocated by widgets. Although the GLwDrawingArea
+and GLwMDrawingArea widget do not make use of these colors the
+application may choose to query them. For the non-Motif
+GLwDrawingArea widget there are no other colors allocated, so this
+resource is a no-op. For the Motif GLwMDrawingArea are widget, the
+XmPrimitive resources \fBXmNforeground\fP, \fBXmNhighlightColor\fP,
+and \fBXmNhighlightPixmap\fP are calculated.
+.IP "\fBGLwNattribList\fP"
+Contains the list of attributes suitable for a call to
+\fBglXChooseVisual\fP. If this resource is NULL, it is calculated
+based on the attribute resources. If it is not NULL, the attribute
+resources are ignored.
+.IP "\fBGLwNexposeCallback\fP"
+Specifies the list of callbacks that is
+called when the widget receives an exposure event.
+The callback reason is \fBGLwCR_EXPOSE\fP.
+The callback structure also includes the exposure event. The
+application will generally want to redraw the scene.
+.IP "\fBGLwNginitCallback\fP"
+Specifies the list of callbacks that is
+called when the widget is first realized. Since no OpenGL operations can
+be done before the widget is realized, this callback can be used to
+perform any appropriate OpenGL initialization such as creating a context.
+The callback reason is \fBGLwCR_GINIT\fP.
+.IP "\fBGLwNinputCallback\fP"
+Specifies the list of callbacks that is
+called when the widget receives a keyboard
+or mouse event. By default, the input callback is called on each key
+press and key release, on each mouse button press and release, and
+whenever the mouse is moved while a button is pressed. However this
+can be changed by providing a different translation table.
+The callback structure also includes the input event.
+The callback reason is \fBGLwCR_INPUT\fP.
+.IP ""
+The input callback is provided as a programming convenience, as it
+provides a convenient way to catch all input events. However, a more
+modular program can often be obtained by providing specific actions and
+translations in the application rather than using a single catch all
+callback. Use of explicit translations can also provide for more
+customization.
+.IP "\fBGLwNinstallBackground\fP"
+If set to TRUE, the background is installed on the window. If set to
+FALSE, the window has no background. This resource has no effect
+unless \fBGLwNallocateBackground\fP is also TRUE.
+.IP "\fBGLwNinstallColormap\fP"
+If set to TRUE, the widget will call \fIXSetWMColormapWindows\fP to
+tell the window manager to install the colormap when the window's
+shell has focus. If set to FALSE, this will not be called. For
+applications with multiple GLwDrawingAreas sharing a single colormap,
+it is most efficient to set this resource to TRUE for exactly one
+GLwDrawingArea with each colormap. If an application needs
+additional control over the order of colormaps, this resource can be
+set to FALSE, with the application calling \fIXSetWMColormapWindows\fP
+explicitly.
+.IP "\fBGLwNresizeCallback\fP"
+Specifies the list of callbacks that is
+called when the GLwDrawingArea is resized.
+The callback reason is \fBGLwCR_RESIZE\fP.
+.IP "\fBGLwNvisualInfo\fP"
+Contains a pointer to the window's visual info structure. If NULL,
+the visualInfo is calculated at widget creation time based on the
+\fIGLwNattributeList\fP resource (which is itself calculated from the
+various resources). If \fBGLwNvisualInfo\fP is not NULL the
+\fIGLwNattributList\fP and the attribute resources are ignored.
+.sp 1
+.SS "Inherited Resources"
+Both GLwDrawingArea and GLwMDrawingArea inherit behavior and resources
+from the core superclass. Other than the behavior of the colormap and
+background resources described previously, all defaults are the same as
+for core.
+.PP
+In addition, the Motif version GLwMDrawingArea also inherits from XmPrimitive.
+The behavior of the color resources has been described previously.
+The \fITraversalOn\fP resource is disabled for this widget, but if
+keyboard input is required it should be enabled. (Also, the
+application should call \fBXmProcessTraversal(widget, XmTRAVERSE_CURRENT)\fP
+whenever mouse button 1 is clicked in the widget. This is similar to
+the requirements of the Motif Drawing area.) Because Motif gets
+confused by having multiple visuals in one top level shell,
+\fBXmNhighlightOnEnter\fP has been disabled, and
+\fBXmNhighlightThickness\fP has been set to 0.
+.SS "Callback Information"
+A pointer to the following structure is passed to each callback:
+.sp 1
+.ne 6
+.nf
+.ta .25i 1.3i
+\fBtypedef struct\fP
+{
+ \fBint\fP \fIreason\fP;
+ \fBXEvent\fP \fI*event\fP;
+ \fBDimension\fP \fIwidth, height\fP;
+} \fBGLwDrawingAreaCallbackStruct\fP;
+.fi
+.sp 1
+.IP "\fIreason\fP" .75i
+Indicates why the callback was invoked. Appropriate values are
+stated in the above resource descriptions. For Motif programmers, the
+values \fBGLwCR_EXPOSE\fP, \fBGLwCR_RESIZE\fP, and \fBGLwCR_INPUT\fP
+are equal to \fBXmCR_EXPOSE\fP, \fBXmCR_RESIZE\fP, and
+\fBXmCR_INPUT\fP respectively. \fBGLwCR_GINIT\fP does not have a
+Motif equivalent.
+.IP "\fIevent\fP" .75i
+Points to the \fBXEvent\fP that triggered the callback.
+This is NULL for \fBGLwNginitCallback and \fBGLwNresizeCallback\fP.
+.IP "\fIwidth\fP and \fIheight\fP" .75i
+Are set to the width and height of the window.
+.br
+.ne 10
+.sp 1 \"Adds space before the SS
+.SS "Translations"
+GLwDrawingArea has the translations listed below.
+\fB
+.nf
+.ta 1.5i
+.ne 5
+<KeyDown>: glwInput()
+<KeyUp>: glwInput()
+<BtnDown>: glwInput()
+<BtnUp>: glwInput()
+<BtnMotion>: glwInput()
+.fi
+.PP
+GLwMDrawingArea has the following additional translation:
+\fB
+.nf
+.ta 1.5i
+<Key>osfHelp: PrimitiveHelp()
+.fi
+.PP
+An application wishing to catch other events than these defaults can
+do so by installing a different translation table.
+\fP
+.sp 1 \"Adds space before the SS
+.SS "Action Routines"
+The GLwDrawingArea has the following action routine:
+.IP "\fBglwInput()\fP:"
+Called whenever one of the above translations specifies that input has
+occurred. Its sole purpose is to call the input callback.
+.sp 1
+.SH INITIALIZATION
+.PP
+When the widget is initially created (e.g. through
+\fBXtCreateWidget(3X)\fP) the associated window is not actually
+created. Instead, window creation is delayed until the widget is
+realized. However, \fBglXchooseVisual\fP is called immediately, so
+information based on its results is available.
+.PP
+Between the time the widget is created and it is realized,
+the following apply:
+.TP
+\(bu
+No OpenGL operations can be done to the window
+.TP
+\(bu
+No resize callbacks are generated.
+.TP
+\(bu
+The normal window is available (XtWindow returns NULL).
+.TP
+\(bu
+\fBGLwDrawingAreaMakeCurrent\fP (and \fBglXMakeCurrent\fP) should not
+be called.
+.PP
+When the widget is realized, the following actions take place:
+.PP
+.TP
+\(bu
+The window is created.
+.TP
+\(bu
+The \fBginit\fP callback is called. The user may use this callback to
+perform any needed OpenGL initialization to the window.
+.sp 1
+.SH NOTES
+.PP
+When using the input callback to receive keyboard input, the keycode
+in the event must be converted to a KeySym. Use
+\fBXLookupKeysym(3X)\fP or \fBXLookupString(3X)\fP to do the
+conversion. Keyboard input can also be dealt using translations, in
+which case no such conversion is required.
+.PP
+Motif programmers should keep in mind that OSF uses virtual
+bindings and replaces some of the key bindings. As a common example,
+if the ESC key is to be used to exit the program (as it often is in GL
+programs), the translation should specify <key>osfCancel instead of
+<key>Escape.
+.PP
+Motif programmers may also create a GLwMDrawingArea widget with the Motif
+style \fBGLwCreateMDrawingArea\fP.
+.sp 1
+.ne 10
+.SH EXAMPLE
+Here are some code fragments that create a GLwDrawingArea widget, and manage
+the appropriate callbacks.
+.sp
+.nf
+\f(CW
+ #include <stdlib.h>
+ #include <X11/GLw/GLwDrawA.h>
+ static GLXContext glx_context; /* assume only one context */
+ . . .
+
+ main()
+ {
+ Arg args[10];
+ int n;
+
+ Widget parent; /* The parent of the gl widget */
+ Widget glw; /* The GLwDrawingArea widget */
+ . . .
+
+ /* Create the widget using RGB mode. This can also be set
+ * in an X Defaults file
+ */
+ n = 0;
+ XtSetArg(args[n], GLwNrgba, True); n++;
+ glw = XtCreateManagedWidget("glw", glwDrawingAreaWidgetClass,
+ parent, args, n);
+ XtAddCallback(glw, GLwNexposeCallback, exposeCB, NULL);
+ XtAddCallback(glw, GLwNresizeCallback, resizeCB, NULL);
+ XtAddCallback(glw, GLwNginitCallback, ginitCB, NULL);
+ /* Also add input callback if needed */
+ . . .
+ }
+
+ static void
+ exposeCB(Widget w, XtPointer client_data,
+ GLwDrawingAreaCallbackStruct *call_data)
+ {
+ GLwDrawingAreaMakeCurrent(w, glx_context);
+ /* redraw the display */
+ }
+
+ static void
+ resizeCB(Widget w, XtPointer client_data,
+ GLwDrawingAreaCallbackStruct *call_data)
+ {
+ GLwDrawingAreaMakeCurrent(w, glx_context);
+ /* perform any resize actions */
+ }
+
+ static void
+ ginitCB(Widget w, XtPointer client_data,
+ GLwDrawingAreaCallbackStruct *call_data)
+ {
+ Arg args[1];
+ XVisualInfo *vi;
+
+ XtSetArg(args[0], GLwNvisualInfo, &vi);
+ XtGetValues(w, args, 1);
+
+ /* create a visual context */
+ glx_context = glXCreateContext(XtDisplay(w), vi,
+ NULL, GL_FALSE);
+ GLwDrawingAreaMakeCurrent(w, glx_context);
+ /* Perform any necessary graphics initialization.*/
+ }
+\fP
+.fi
+.P
+The Motif program need only differ by including
+\fBGLwMDrawingArea.h\fP instead of \fBGLwDrawingArea.h\fP and by creating a widget of type
+\fBGLwMDrawingAreaWidgetClass\fP instead of \fBGLwDrawingAreaWidgetClass\fP. As an
+alternative, the Motif program could use \fBGLwCreateMDraw(3X)\fP instead.
+.sp 1
+.SH WARNINGS
+.PP
+If a GLwDrawingArea widget is created as a child of an already realized
+widget, the GLwDrawingArea widget will be created immediately, without giving
+the user an opportunity to add the \fBginit\fP callback. In such a
+case, initialization should be done immediately after creating the
+widget rather than by using the callback.
+.PP
+If the non-Motif GLwDrawingArea widget is used in a Motif program and
+keyboard traversal is attempted, the behavior is undefined if the user
+traverses into the GLwDrawingArea widget.
+.SH SEE ALSO
+\fBglXChooseVisual(3G)\fP, \fBGLwDrawingAreaMakeCurrent(3X)\fP,
+\fBglXMakeCurrent(3G)\fP, \fBGLwDrawingAreaSwapBuffers(3X)\fP
+\fBGLwCreateMDraw(3X)\fP, \fBCore(3X)\fP, \fBXmPrimitive(3X)\fP,
+\fBVirtualBindings(3X)\fP, \fBXSetWMColormapWindows(3X11)\fP
+and the OpenGL spec.