2006-11-29 10:04:40 -07:00
|
|
|
.\" **
|
|
|
|
.\" ** (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
|
2007-07-23 07:33:04 -06:00
|
|
|
\fB#include <GL/GLwDrawA.h>
|
2006-11-29 10:04:40 -07:00
|
|
|
.br
|
|
|
|
\fBld ... -lGLw -lGL -l<anywidgetlibrary> -lXext -lXt -lX11 -lm
|
|
|
|
.sp
|
2007-07-23 07:33:04 -06:00
|
|
|
\fB#include <GL/GLwMDrawA.h>
|
2006-11-29 10:04:40 -07:00
|
|
|
.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>
|
2007-07-23 07:33:04 -06:00
|
|
|
#include <GL/GLwDrawA.h>
|
2006-11-29 10:04:40 -07:00
|
|
|
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.
|