MultiPipe component for rendering Open Inventor scene graphs. More...
#include <Inventor/MP/Win/SoWinMPRenderArea.h>
This is the MultiPipe version of SoWinRenderArea.
NOTE: This class does not exist in Open Inventor 10.0 and later.NOTE: Since Open Inventor version 8.0 we recommend using the ScaleViz extension, rather than SoWinMP classes, for multi-GPU rendering (multiple graphics boards in the same machine). Using ScaleViz you can continue to use the standard render area or view classes, and conveniently adapt to the hardware configuration using a ScaleViz configuration file.
General:
This class provides Open Inventor rendering and message handling inside a Windows window. There is a routine to specify the scene to render. The scene is automatically rendered whenever anything under it changes (a data sensor is attached to the root of the scene), unless explicitly told not to do so (manual redraws). Users can also set Open Inventor rendering attributes such as the transparency type, antialiasing on or off, etc. This class employs an SoSceneManager to manage rendering and message handling.
Windows messages that occur in the render area can be handled by the application, by the viewer (if this is really a viewer), or by the nodes in the scene graph. When a message occurs, it is first passed to the application message callback function registered with the setEventCallback() method on SoWinRenderArea. If this function does not exist or returns FALSE, the message is either used directly by the viewer or translated to an SoEvent for further scene graph processing. If the viewer does not handle the message, and an overlay scene graph exists, the SoEvent is sent to that scene graph by way of an SoHandleEventAction. If no node in the overlay scene graph handles the message (i.e., calls setHandled() on the SoHandleEventAction), the SoEvent is passed to the normal scene graph in the same manner.
Overlay rendering:
This class supports overlay rendering on graphics boards with hardware overlay planes, for example NVIDIA Quadro boards. Open Inventor creates a 8 bit indexed overlay context when this option is enabled in the graphics hardware configuration of your system. To render a scene graph in the overlay context just call the setOverlaySceneGraph function.
For Linux based systems you must modify the "display" section of your Xorg.conf. Add the following lines and restart your X server:
Option "UBB" "1" Option "CIOverlay" "1"
For Microsoft Windows platforms just enable overlay support in the control panel for your graphics board.
SoWinMPRenderArea::SoWinMPRenderArea | ( | SoWidget | parent = NULL , |
|
const char * | name = NULL , |
|||
SbBool | buildInsideParent = TRUE , |
|||
SbBool | getMouseInput = TRUE , |
|||
SbBool | getKeyboardInput = TRUE | |||
) |
Constructor to build one (default) or more subwindows.
Constructor is passed arguments which tell it whether to register the mouse and keyboard devices by default (SoWinMouse and SoWinKeyboard). [WIN32] Note: On Windows, the constructor will not create a new top level window -- you must pass a valid window handle for the parent parameter and pass TRUE for buildInsideParent .
SoWinMPRenderArea::~SoWinMPRenderArea | ( | ) |
Destructor.
virtual void SoWinMPRenderArea::actualRendering | ( | ) | [inline, virtual] |
This method is called automatically when the viewer requests that its SoBaseStereo object perform stereo rendering.
actualRendering() may then be called twice (once for each eye view) and therefore must not take into account any stereo-specific settings. It should behave as if it were a rendering method for a monoscopic view.
Implements SoStereoViewer.
static void SoWinMPRenderArea::addThreadInitCB | ( | SoWinMPRenderAreaThreadInitCB * | fcn, | |
void * | userData | |||
) | [static] |
static void SoWinMPRenderArea::addThreadPostRenderCB | ( | SoWinMPRenderAreaThreadRenderCB * | fcn, | |
void * | userData | |||
) | [static] |
static void SoWinMPRenderArea::addThreadPreRenderCB | ( | SoWinMPRenderAreaThreadRenderCB * | fcn, | |
void * | userData | |||
) | [static] |
virtual SoDEPRECATED void SoWinMPRenderArea::adjustClippingPlanes | ( | ) | [virtual] |
Implements SoStereoViewer.
SoDEPRECATED void SoWinMPRenderArea::getAntialiasing | ( | SbBool & | smoothing, | |
int & | numPasses | |||
) | const |
Gets the antialiasing used for rendering.
const SbColor& SoWinMPRenderArea::getBackgroundColor | ( | ) | const [inline] |
Gets the background color for this window.
int SoWinMPRenderArea::getBackgroundIndex | ( | ) | const [inline] |
Gets the window background color when in color index mode.
virtual const SbVec2s& SoWinMPRenderArea::getBottomRight | ( | ) | [virtual] |
Returns the position of the OpenGL drawing window in absolute screen coordinates (not relative to parent window) of the native window system (typically Y increasing downward).
Returns "Bottom" in the first value of the vector and "Right" in the second value (reverse of the usual X,Y ordering).
Implements SoStereoViewer.
SoDEPRECATED HDC SoWinMPRenderArea::getCurrentDC | ( | ) | [inline, virtual] |
Implements SoStereoViewer.
Reimplemented in SoWinMPViewer.
static unsigned long SoWinMPRenderArea::getDefaultRedrawPriority | ( | ) | [inline, static] |
Gets the default priority number of the redraw sensor.
SoGLRenderAction* SoWinMPRenderArea::getGLRenderAction | ( | int | i | ) | const [inline] |
Gets the GL render action to use for the specified subwindow.
SoGLRenderAction* SoWinMPRenderArea::getGLRenderAction | ( | ) | const [inline] |
Gets the GL render action to use.
This is used to set selection highlighting with the SoBoxHighlightRenderAction and SoLineHighlightRenderAction classes.
float SoWinMPRenderArea::getInterEyeDistance | ( | void | ) | [inline] |
gets the inter-eye-distance
SoDEPRECATED int SoWinMPRenderArea::getOverlayBackgroundIndex | ( | ) | const [inline] |
Gets the overlay window background color index.
SoDEPRECATED SoGLRenderAction* SoWinMPRenderArea::getOverlayGLRenderAction | ( | ) | const [inline] |
Gets the GL render action for the overlay window.
SoDEPRECATED SoNode* SoWinMPRenderArea::getOverlaySceneGraph | ( | ) | [inline] |
Gets the scene graph to be rendered in the overlay plane.
NOTE: This feature requires a graphics board that supports an overlay plane.
SoDEPRECATED SoSceneManager* SoWinMPRenderArea::getOverlaySceneManager | ( | ) | const [inline] |
Gets the overlay plane scene manager.
Note: For convenience most of the SoSceneManager methods have already been added to this class.
unsigned long SoWinMPRenderArea::getRedrawPriority | ( | ) | const [inline] |
Gets the priority of the redraw sensor.
virtual SoNode* SoWinMPRenderArea::getSceneGraph | ( | ) | [virtual] |
Gets the scene graph to be rendered in this component's window.
Reimplemented in SoWinMPViewer.
SoSceneManager* SoWinMPRenderArea::getSceneManager | ( | ) | const [inline] |
Gets the normal scene manager.
Note: For convenience most of the SoSceneManager methods have already been added to this class.
virtual const SbVec2s& SoWinMPRenderArea::getSize | ( | ) | [virtual] |
Returns the size of the OpenGL drawing window in absolute screen coordinates (not relative to parent window) of the native window system.
Implements SoStereoViewer.
virtual float SoWinMPRenderArea::getStereoBalance | ( | ) | [virtual] |
Queries the stereo balance (the position of the zero parallax plane).
Implements SoStereoViewer.
float SoWinMPRenderArea::getStereoOffset | ( | ) | [inline, virtual] |
SoBaseStereo* SoWinMPRenderArea::getStereoViewType | ( | ) | [virtual] |
Returns the stereo view type.
Implements SoStereoViewer.
virtual const SbVec2s& SoWinMPRenderArea::getTopLeft | ( | ) | [virtual] |
Returns the position of the OpenGL drawing window in absolute screen coordinates (not relative to parent window) of the native window system (typically Y increasing downward).
Returns "Top" in the first value of the vector and "Left" in the second value (reverse of the usual X,Y ordering).
Implements SoStereoViewer.
SoTimerSensor* SoWinMPRenderArea::getTrackerSensor | ( | ) | [inline] |
gets the timer sensor that reads the tracking data
SoGLRenderAction::TransparencyType SoWinMPRenderArea::getTransparencyType | ( | ) | const [inline] |
Gets the quality level for rendering transparent objects.
See SoGLRenderAction for possible transparency types.
void* SoWinMPRenderArea::getViewer | ( | void | ) | [virtual] |
Reimplemented from SoStereoViewer.
virtual SoCamera* SoWinMPRenderArea::getViewerCamera | ( | ) | [virtual] |
Returning the camera allows the SoBaseStereo to manipulate it to achieve the stereo effect.
Implements SoStereoViewer.
virtual SoGLContext* SoWinMPRenderArea::getViewerContext | ( | ) | [inline, virtual] |
Returns the OpenGL context.
Implements SoStereoViewer.
virtual SoSceneManager* SoWinMPRenderArea::getViewerSceneManager | ( | ) | [inline, virtual] |
Returns the Scene Manager.
Implements SoStereoViewer.
void SoWinMPRenderArea::getViewport | ( | short & | left, | |
short & | bottom, | |||
short & | width, | |||
short & | height | |||
) | [virtual] |
Returns viewport region with origin (lower-left corner) and size, given as pixel coordinates.
Implements SoStereoViewer.
const SbViewportRegion& SoWinMPRenderArea::getViewportRegion | ( | ) | const [inline] |
Gets current viewport region to use for rendering.
const SbViewportRegion& SoWinMPRenderArea::getViewportRegion | ( | int | id | ) | const [inline] |
Gets current viewport region of the specified subwindow.
SbBool SoWinMPRenderArea::isAutoRedraw | ( | ) | const [inline] |
Queries whether the render area will automatically redraw whenever something in the scene graph changes.
SoDEPRECATED SbBool SoWinMPRenderArea::isClearBeforeOverlayRender | ( | ) | const [inline] |
Queries whether the overlay window will be cleared before rendering starts.
SbBool SoWinMPRenderArea::isClearBeforeRender | ( | ) | const [inline] |
Queries whether the window will be cleared before rendering starts.
SbBool SoWinMPRenderArea::isClearZBufferBeforeRender | ( | ) | const [inline] |
Queries whether the depth buffer (sometimes called the Z buffer) will be cleared before rendering starts.
virtual SbBool SoWinMPRenderArea::isStereoAbsoluteAdjustments | ( | ) | const [inline, virtual] |
Queries if the stereo adjustments are absolute.
Not virtual pure for compatibity reasons.
Reimplemented from SoStereoViewer.
virtual SbBool SoWinMPRenderArea::isStereoActive | ( | ) | [virtual] |
Queries stereo activation.
Implements SoStereoViewer.
virtual SbBool SoWinMPRenderArea::isStereoBalanceNearFrac | ( | ) | [virtual] |
Returns TRUE when the stereo balance adjustement is defined as a fraction of the camera near distance.
Implements SoStereoViewer.
virtual SbBool SoWinMPRenderArea::isStereoViewing | ( | ) | [virtual] |
SbBool SoWinMPRenderArea::isStereoViewReversed | ( | ) | [virtual] |
Queries reversal of the left and right views.
Implements SoStereoViewer.
virtual SbBool SoWinMPRenderArea::isViewerDoubleBuffer | ( | ) | [virtual] |
Queries if viewer is double buffered.
Implements SoStereoViewer.
void SoWinMPRenderArea::redrawOnSelectionChange | ( | SoSelection * | s | ) |
Call this convenience method to have this render area redraw whenever the selection list changes in the passed node.
This is useful if using a highlight render action like the SoBoxHighlightRenderAction to correctly render whenever the selection changes. Pass NULL to turn this off.
SoDEPRECATED void SoWinMPRenderArea::redrawOverlayOnSelectionChange | ( | SoSelection * | s | ) |
Call this convenience method to have this render area overlay planes redraw whenever the selection list changes in the passed node.
This is useful if using a highlight render action like the SoBoxHighlightRenderAction to correctly render whenever the selection changes. Pass NULL to turn this off.
void SoWinMPRenderArea::registerDevice | ( | SoWinDevice * | d | ) |
Registers interest in devices.
When a device is registered, messages from that device will be processed by the render area, and passed into the scene graph. Messages from unregistered devices will be ignored.
static void SoWinMPRenderArea::removeThreadInitCB | ( | SoWinMPRenderAreaThreadInitCB * | fcn, | |
void * | userData | |||
) | [static] |
static void SoWinMPRenderArea::removeThreadPostRenderCB | ( | SoWinMPRenderAreaThreadRenderCB * | fcn, | |
void * | userData | |||
) | [static] |
static void SoWinMPRenderArea::removeThreadPreRenderCB | ( | SoWinMPRenderAreaThreadRenderCB * | fcn, | |
void * | userData | |||
) | [static] |
void SoWinMPRenderArea::render | ( | ) | [inline] |
Calling this forces the render area to be redrawn now.
It is not necessary to call this method if auto redraw is enabled (which is the default).
SoDEPRECATED void SoWinMPRenderArea::renderOverlay | ( | ) |
Calling this forces the render area overlay planes to be redrawn now.
It is not necessary to call this method if auto redraw is enabled (which is the default).
void SoWinMPRenderArea::reverseStereoView | ( | SbBool | reverse | ) | [virtual] |
Sets reversal of the left and right views.
Implements SoStereoViewer.
SoDEPRECATED void SoWinMPRenderArea::scheduleOverlayRedraw | ( | ) |
Schedules a redraw of the overlay planes to happen sometime soon (as opposed to immediately).
This can be used to compress multiple redraws.
void SoWinMPRenderArea::scheduleRedraw | ( | ) |
Schedules a redraw to happen sometime soon (as opposed to immediately).
This can be used to compress multiple redraws.
SoDEPRECATED void SoWinMPRenderArea::setAntialiasing | ( | SbBool | smoothing, | |
int | numPasses | |||
) |
Enables smoothing and/or multi-pass antialiasing for rendering.
There are two kinds of antialiasing available: smoothing and multipass antialiasing. If smoothing is set to TRUE, smoothing is enabled. Smoothing uses OpenGL's line- and point-smoothing features to provide cheap antialiasing of lines and points. The value of numPasses controls multipass antialiasing. Each time a render action is applied, Open Inventor renders the scene numPasses times from slightly different camera positions, averaging the results. numPasses can be from one to 255, inclusive. Setting numPasses to one disables multipass antialiasing. You can use either, both, or neither of these antialiasing techniques. By default, both smoothing and multipass antialiasing are disabled.
void SoWinMPRenderArea::setAutoRedraw | ( | SbBool | trueOrFalse | ) |
The render area will automatically redraw whenever something in the scene graph changes.
Passing FALSE will disable this feature. NOTE: the render area will always redraw in response to window system events (e.g. resize, exposure) regardless of the setting of the auto redraw flag.
void SoWinMPRenderArea::setBackgroundColor | ( | const SbColor & | c | ) | [inline] |
Sets the background color for this window.
Default is black (0,0,0).
The default value can be set using the environment variable OIV_BACKGROUND_COLOR. Specify three floats (R, G, B) in the range 0. to 1., separated by spaces.
void SoWinMPRenderArea::setBackgroundIndex | ( | int | index | ) | [inline] |
Sets the window background color when in color index mode.
Default is black (index 0)).
SoDEPRECATED void SoWinMPRenderArea::setClearBeforeOverlayRender | ( | SbBool | trueOrFalse | ) | [inline] |
Enables/prevents overlay window clearing from happening before a rendering starts (default is clear TRUE).
void SoWinMPRenderArea::setClearBeforeRender | ( | SbBool | trueOrFalse, | |
SbBool | zbTrueOrFalse = TRUE | |||
) | [inline] |
Enables/prevents window clearing from happening before a rendering starts (default is clear TRUE).
This can be useful to limit flickering when doing single buffering and geometry covers the entire window (used in the material editor). Also controls whether the depth buffer (sometimes called the Z buffer) is cleared before rendering.
void SoWinMPRenderArea::setColorMap | ( | int | startIndex, | |
int | num, | |||
const SbColor * | colors | |||
) |
Sets the colors to use when displaying in color index mode.
This will load the color map with the given colors at the starting index.
void SoWinMPRenderArea::setEventCallback | ( | SoWinMPRenderAreaEventCB * | fcn, | |
void * | userData = NULL | |||
) | [inline] |
Windows messages which occur in the render area window are either directly handled by the viewer (when this is really a viewer) or automatically translated to SoEvents, then passed into the scene graph (via the SoHandleEventAction) so that live scene graph objects can handle the message (when viewers are not in viewing mode).
This method allows the application to register a callback for handling messages that occur in the window, instead of sending them to the viewers or down the graph. The callback is passed the Windows message, and should return TRUE if it handled the message. If the callback returns FALSE, then the message will be handled by the render area.
void SoWinMPRenderArea::setGLRenderAction | ( | SoGLRenderAction * | ra, | |
int | i | |||
) | [inline] |
Sets the GL render action to use for the specified subwindow.
This is used to set selection highlighting with the SoBoxHighlightRenderAction and SoLineHighlightRenderAction classes.
void SoWinMPRenderArea::setGLRenderAction | ( | SoGLRenderAction * | ra | ) | [inline] |
Sets the GL render action to use.
This is used to set selection highlighting with the SoBoxHighlightRenderAction and SoLineHighlightRenderAction classes.
void SoWinMPRenderArea::setInterEyeDistance | ( | float | value | ) | [inline] |
sets the inter-eye-distance.
This parameter is used for stereo when the headtracking is enabled
SoDEPRECATED void SoWinMPRenderArea::setOverlayBackgroundIndex | ( | int | index | ) | [inline] |
Sets the overlay window background color index.
Default is 0 (clear color).
SoDEPRECATED void SoWinMPRenderArea::setOverlayColorMap | ( | int | startIndex, | |
int | num, | |||
const SbColor * | colors | |||
) |
Sets the colors to use for overlay bit planes.
This will load the color map with the given colors at the starting index.
SoDEPRECATED void SoWinMPRenderArea::setOverlayGLRenderAction | ( | SoGLRenderAction * | ra | ) | [inline] |
Sets the GL render action for the overlay window.
SoDEPRECATED void SoWinMPRenderArea::setOverlaySceneGraph | ( | SoNode * | newScene | ) |
Sets the scene graph to be rendered in the overlay plane.
NOTE: This feature requires a graphics board that supports an overlay plane.
SoDEPRECATED void SoWinMPRenderArea::setOverlaySceneManager | ( | SoSceneManager * | sm | ) | [inline] |
Sets the overlay plane scene manager.
Note: For convenience most of the SoSceneManager methods have already been added to this class.
void SoWinMPRenderArea::setRedrawPriority | ( | unsigned long | priority | ) | [inline] |
Sets the priority of the redraw sensor.
virtual void SoWinMPRenderArea::setSceneGraph | ( | SoNode * | newScene | ) | [virtual] |
Sets the scene graph to be rendered in this component's window.
Reimplemented in SoWinMPViewer.
void SoWinMPRenderArea::setSceneManager | ( | SoSceneManager * | sm | ) |
Sets the normal scene manager.
Note: For convenience most of the SoSceneManager methods have already been added to this class.
virtual void SoWinMPRenderArea::setStereoAbsoluteAdjustments | ( | SbBool | ) | [virtual] |
Specifies if stereo adjustments are absolute.
FALSE by default.
The default non-absolute mode allows the stereo settings to be valid over a range of different view volume settings. If you chose absolute mode, you are responsible for modifying the stereo settings (if necessary) when the view volume changes.
When absolute mode is TRUE, stereo offset and balance are used as follows for the right eye view:
StereoCameraOffset = getStereoAdjustment(); FrustumAsymmetry = getBalanceAdjustment(); glTranslated (-StereoCameraOffset, 0, 0); glFrustum (FrustumLeft + FrustumAsymmetry, FrustumRight + FrustumAsymmetry, FrustumBottom, FrustumTop, NearClipDistance, FarClipDistance);
The left eye view is symmetric.
When absolute mode is FALSE, stereo offset and balance are used as follows for the right eye view:
Xrange is right minus left (i.e., first two arguments of glFrustum) and multiply that difference by the ratio of the distance to the desired plane of zero parallax to the near clipping plane distance.
StereoCameraOffset = Xrange * 0.035 * getStereoAdjustment(); FrustumAsymmetry = -StereoCameraOffset * getBalanceAdjustment(); ZeroParallaxDistance = (NearClipDistance + FarClipDistance)/0.5; FrustumAsymmetry *= NearClipDistance / ZeroParallaxDistance; glTranslated (-StereoCameraOffset, 0, 0); glFrustum (FrustumLeft + FrustumAsymmetry, FrustumRight + FrustumAsymmetry, FrustumBottom, FrustumTop, NearClipDistance, FarClipDistance);
The left eye view is symmetric.
Not virtual pure for compatiblity reasons.
Reimplemented from SoStereoViewer.
virtual void SoWinMPRenderArea::setStereoActive | ( | SbBool | activate | ) | [virtual] |
Sets stereo activation.
Default is FALSE. The default can be set using the OIV_STEREO_ACTIVE environment variable.
Implements SoStereoViewer.
virtual void SoWinMPRenderArea::setStereoBalance | ( | float | balance, | |
SbBool | nearFrac = false | |||
) | [virtual] |
Sets the stereo balance (the position of the zero parallax plane) and specifies whether the balance value is defined as a fraction of the camera near distance.
Note: Since the projection matrix always depends on the camera's near plane, in some cases it may be necessary to detect changes to the camera near plane and adjust by setting a new stereo balance value. Open Inventor will make these adjustments automatically if the nearFrac parameter is set to TRUE. In this case the stereo balance value is defined as a fraction of the camera near distance.
Default balance is 1.0. The default can be set using the OIV_STEREO_BALANCE environment variable. Default nearFrac is FALSE. The default can be set using the OIV_STEREO_BALANCE_NEAR_FRAC environment variable.
Implements SoStereoViewer.
void SoWinMPRenderArea::setStereoOffset | ( | float | dist | ) | [inline, virtual] |
virtual void SoWinMPRenderArea::setStereoViewing | ( | SbBool | onOrOff | ) | [virtual] |
void SoWinMPRenderArea::setStereoViewType | ( | SoBaseStereo * | stereoViewType | ) | [virtual] |
If stereoViewType is NULL, the stereo is inactivated (see setStereoActive).
Default is SoAnaglyphStereo with RED_CYAN color filter. The default can be set using the OIV_STEREO_TYPE environment variable.
Implements SoStereoViewer.
void SoWinMPRenderArea::setTransparencyType | ( | SoGLRenderAction::TransparencyType | type | ) |
Sets the quality level for rendering transparent objects.
See SoGLRenderAction for possible transparency types.
void SoWinMPRenderArea::setViewport | ( | short | left, | |
short | bottom, | |||
short | width, | |||
short | height | |||
) | [virtual] |
Sets viewport region with given origin (lower-left corner) and size, given as pixel coordinates.
Implements SoStereoViewer.
void SoWinMPRenderArea::setViewportRegion | ( | const SbViewportRegion & | newRegion | ) |
Sets viewport region to use for rendering.
void SoWinMPRenderArea::setViewportRegion | ( | const SbViewportRegion & | newRegion, | |
int | id | |||
) | [inline] |
Sets viewport region of the specified subwindow.
void SoWinMPRenderArea::unregisterDevice | ( | SoWinDevice * | d | ) |
Unregisters interest in devices.
When a device is registered, messages from that device will be processed by the render area, and passed into the scene graph. Messages from unregistered devices will be ignored.