'\"! tbl | mmdoc '\"macro stdmacro .ie n \{\ . ds Cr \fB . ds Cb \fB .\} .el \{\ . ds Cr \f7 . ds Cb \f8 .\} .TH SoXtGLWidget(3IV) .SH NAME SoXtGLWidget \(em wrapper around GLwMDraw for OpenGL rendering in a motif widget .SH INHERITS FROM SoXtComponent > SoXtGLWidget .SH SYNOPSIS .ps -1 \*(Cr#include .sp .in 1i \f1Methods from class SoXtGLWidget: .in 0.5i .sp .ta 20m .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crvoid .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbsetBorder\*(Cr(SbBool onOrOff) .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrSbBool .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbisBorder\*(Cr() const .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crvirtual void .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbsetDoubleBuffer\*(Cr(SbBool onOrOff) .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrSbBool .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbisDoubleBuffer\*(Cr() .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrWindow .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetNormalWindow\*(Cr() .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrWindow .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetOverlayWindow\*(Cr() .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrGLXContext .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetNormalContext\*(Cr() .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrGLXContext .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetOverlayContext\*(Cr() .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrWidget .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetNormalWidget\*(Cr() .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrWidget .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetOverlayWidget\*(Cr() .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crvirtual void .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbsetNormalVisual\*(Cr(XVisualInfo *vis) .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrXVisualInfo * .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetNormalVisual\*(Cr() .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crvirtual void .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbsetOverlayVisual\*(Cr(XVisualInfo *vis) .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrXVisualInfo * .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetOverlayVisual\*(Cr() .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crvoid .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbsetDrawToFrontBufferEnable\*(Cr(SbBool enableFlag) .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrSbBool .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbisDrawToFrontBufferEnable\*(Cr() const .sp .in 1i \f1Methods from class SoXtComponent: .in 0.5i .sp .ta 24m .in 1i+24n .ti 0.5i .ta 24m .ds Pt \*(Crvirtual void .ie \w'\*(Pt'>=24n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(Cbshow\*(Cr() .br .in 1i+24n .ti 0.5i .ta 24m .ds Pt \*(Crvirtual void .ie \w'\*(Pt'>=24n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(Cbhide\*(Cr() .br .in 1i+24n .ti 0.5i .ta 24m .ds Pt \*(CrSbBool .ie \w'\*(Pt'>=24n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbisVisible\*(Cr() .br .in 1i+24n .ti 0.5i .ta 24m .ds Pt \*(CrWidget .ie \w'\*(Pt'>=24n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetWidget\*(Cr() const .br .in 1i+24n .ti 0.5i .ta 24m .ds Pt \*(CrSbBool .ie \w'\*(Pt'>=24n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbisTopLevelShell\*(Cr() const .br .in 1i+24n .ti 0.5i .ta 24m .ds Pt \*(CrWidget .ie \w'\*(Pt'>=24n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetShellWidget\*(Cr() const .br .in 1i+24n .ti 0.5i .ta 24m .ds Pt \*(CrWidget .ie \w'\*(Pt'>=24n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetParentWidget\*(Cr() const .br .in 1i+24n .ti 0.5i .ta 24m .ds Pt \*(Crvoid .ie \w'\*(Pt'>=24n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbsetSize\*(Cr(const SbVec2s &size) .br .in 1i+24n .ti 0.5i .ta 24m .ds Pt \*(CrSbVec2s .ie \w'\*(Pt'>=24n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetSize\*(Cr() .br .in 1i+24n .ti 0.5i .ta 24m .ds Pt \*(CrDisplay * .ie \w'\*(Pt'>=24n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetDisplay\*(Cr() .br .in 1i+24n .ti 0.5i .ta 24m .ds Pt \*(Crvoid .ie \w'\*(Pt'>=24n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbsetTitle\*(Cr(const char *newTitle) .br .in 1i+24n .ti 0.5i .ta 24m .ds Pt \*(Crconst char * .ie \w'\*(Pt'>=24n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetTitle\*(Cr() const .br .in 1i+24n .ti 0.5i .ta 24m .ds Pt \*(Crvoid .ie \w'\*(Pt'>=24n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbsetIconTitle\*(Cr(const char *newIconTitle) .br .in 1i+24n .ti 0.5i .ta 24m .ds Pt \*(Crconst char * .ie \w'\*(Pt'>=24n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetIconTitle\*(Cr() const .br .in 1i+24n .ti 0.5i .ta 24m .ds Pt \*(Crvoid .ie \w'\*(Pt'>=24n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbsetWindowCloseCallback\*(Cr(SoXtComponentCB *func, void *data = NULL) .br .in 1i+24n .ti 0.5i .ta 24m .ds Pt \*(Crstatic SoXtComponent * .ie \w'\*(Pt'>=24n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetComponent\*(Cr(Widget w) .br .in 1i+24n .ti 0.5i .ta 24m .ds Pt \*(Crconst char * .ie \w'\*(Pt'>=24n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetWidgetName\*(Cr() const .br .in 1i+24n .ti 0.5i .ta 24m .ds Pt \*(Crconst char * .ie \w'\*(Pt'>=24n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetClassName\*(Cr() const .sp .SH DESCRIPTION This abstract base class provides a C++ wrapper around the \f3GLwMDraw\f1 widget. It allows OpenGL rendering to be performed within a motif widget and is used by the \*(CbSoXtRenderArea\f1. \*(CbSoXtGlWidget\f1 uses a form widget around two separate \f3GLwMDraw\f1 widgets \&(one for single and one for double buffering), with routines to return the appropriate windows. .sp Subclasses only need to redefine the \*(Cbredraw()\f1 routine for rendering and \*(CbprocessEvent()\f1 routine if they are interested in receiving X events. .SH METHODS .ta 20m .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crvoid .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbsetBorder\*(Cr(SbBool onOrOff) .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrSbBool .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbisBorder\*(Cr() const .br .in 1i \f1Show and hide the border around the glx widgets (thickness 3). Default is no border (FALSE). (The \*(CbSoXtRenderArea\f1 subclass defaults turns the border on by default.) .sp .in 0.5i .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crvirtual void .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbsetDoubleBuffer\*(Cr(SbBool onOrOff) .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrSbBool .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbisDoubleBuffer\*(Cr() .br .in 1i \f1Routine which dynamically changes between single and double buffering. Default is double buffer off. (The \*(CbSoXtRenderArea\f1 subclass makes it double buffer by default.) .sp .in 0.5i .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrWindow .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetNormalWindow\*(Cr() .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrWindow .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetOverlayWindow\*(Cr() .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrGLXContext .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetNormalContext\*(Cr() .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrGLXContext .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetOverlayContext\*(Cr() .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrWidget .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetNormalWidget\*(Cr() .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrWidget .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetOverlayWidget\*(Cr() .br .in 1i \f1Get the current normal and overlay GLX windows, contexes and widgets, which are needed as arguments to glXMakeCurrent() when doing drawing in the normal or overlay planes. .sp Note: These should \f2not\f1 be cached \&by users because they will change as single/double buffering changes. .sp .in 0.5i .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crvirtual void .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbsetNormalVisual\*(Cr(XVisualInfo *vis) .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrXVisualInfo * .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetNormalVisual\*(Cr() .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crvirtual void .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbsetOverlayVisual\*(Cr(XVisualInfo *vis) .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrXVisualInfo * .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetOverlayVisual\*(Cr() .br .in 1i \f1Specify exactly what the visual should be for the normal and overlay window. This allows the user to create all possible visuals supported by OpenGL. The \f3XVisualInfo\f1 structure should be a valid OpenGL visual returned \&by \f3glXChooseVisual()\f1. This structure will be copied by the \*(CbSoXtGLWidget\f1; the application is responsible for freeing the visual info with \f3XFree()\f1 when done. (The methods for setting the visual are virtual so that derived classes can know when the visual is changing.) .sp .in 0.5i .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crvoid .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbsetDrawToFrontBufferEnable\*(Cr(SbBool enableFlag) .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrSbBool .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbisDrawToFrontBufferEnable\*(Cr() const .br .in 1i \f1Inventor 2.1 changed the behavior of double buffered windows to redraw temporary to the front buffer when an expose event is received or when a new sceneGraph() is set on an SoXtRenderArea. This does not \&apply for general interactive rendering. The idea is that it is better to see something redraw (especially if it is slow) than to see garbage in the window (in the expose case) or an old invalid scene \&graph (in the SoXtRenderArea::setSceneGraph() case). .sp This API enables you to turn this functionality OFF if for some reason you are unable to prevent repeated expose from causing a redraw (which is bad \&and should be fixed, as it gets worse for large scenes). This will be the case for example if you can't create a pulldown menu in the popup planes. .sp NOTE: this api might be removed in some future releases \&and is only intended as a porting help for Inventor 2.0 to 2.1 .sp .in 0.5i .SH SEE ALSO \*(CbSoXtComponent, SoXtRenderArea