Open Inventor Release 2025.1.0
 
Loading...
Searching...
No Matches
SoWinRenderArea.h
1/*=======================================================================
2 *** THE CONTENT OF THIS WORK IS PROPRIETARY TO FEI S.A.S, (FEI S.A.S.), ***
3 *** AND IS DISTRIBUTED UNDER A LICENSE AGREEMENT. ***
4 *** ***
5 *** REPRODUCTION, DISCLOSURE, OR USE, IN WHOLE OR IN PART, OTHER THAN AS ***
6 *** SPECIFIED IN THE LICENSE ARE NOT TO BE UNDERTAKEN EXCEPT WITH PRIOR ***
7 *** WRITTEN AUTHORIZATION OF FEI S.A.S. ***
8 *** ***
9 *** RESTRICTED RIGHTS LEGEND ***
10 *** USE, DUPLICATION, OR DISCLOSURE BY THE GOVERNMENT OF THE CONTENT OF THIS ***
11 *** WORK OR RELATED DOCUMENTATION IS SUBJECT TO RESTRICTIONS AS SET FORTH IN ***
12 *** SUBPARAGRAPH (C)(1) OF THE COMMERCIAL COMPUTER SOFTWARE RESTRICTED RIGHT ***
13 *** CLAUSE AT FAR 52.227-19 OR SUBPARAGRAPH (C)(1)(II) OF THE RIGHTS IN ***
14 *** TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 52.227-7013. ***
15 *** ***
16 *** COPYRIGHT (C) 1996-2024 BY FEI S.A.S, ***
17 *** BORDEAUX, FRANCE ***
18 *** ALL RIGHTS RESERVED ***
19**=======================================================================*/
20/*=======================================================================
21** Author : VSG (MMM YYYY)
22**=======================================================================*/
23
24#ifndef _SO_WIN_RENDER_AREA_H_
25#define _SO_WIN_RENDER_AREA_H_
26
27#include <Inventor/Win/SoWinBeginStrict.h>
28#include <windows.h>
29#include <Inventor/Win/SoWinDef.h>
30
31#include <climits>
32
33#include <Inventor/SbColor.h>
34#include <Inventor/sensors/SoNodeSensor.h>
35#include <Inventor/SoSceneManager.h>
36#include <Inventor/Win/SoWinGLWidget.h>
37#include <Inventor/actions/SoGLRenderAction.h>
38
39#include <Inventor/nodes/SoCamera.h> // stereo settings
40#include <Inventor/elements/SoStereoElement.h>
41#include <Inventor/nodes/SoFullSceneAntialiasing.h>
42#include <Inventor/SbElapsedTime.h>
43
44
45#include <Inventor/Gui/SoGuiRenderArea.h>
46
48class SoWinDevice;
49class SoNode;
50class SoWinMouse;
51class SoWinKeyboard;
52class SoSelection;
53class SoWinRenderArea;
56
62typedef SbBool SoWinRenderAreaEventCB( void* userData, XAnyEvent* anyevent );
63
69typedef SbBool SoWinRenderAreaRenderCB( void* userData, SoWinRenderArea* rendArea );
70
72//
73// Class: SoWinRenderArea
74//
75// Class to do Inventor rendering in a GLX Motif widget.
76//
78
113class SoWinRenderArea : public SoWinGLWidget
114{
115 public:
116
125 SoWinRenderArea( SoWidget parent = NULL,
126 const char* name = NULL,
127 SbBool buildInsideParent = TRUE,
128 SbBool getMouseInput = TRUE,
129 SbBool getKeyboardInput = TRUE );
134
140 virtual void setSceneGraph( SoNode *newScene );
141
146
161
168 void setBackgroundColor( const SbColor& c );
169
173 SbColor getBackgroundColor() const { return m_guiRenderArea->getBackgroundColor(); }
174
179 void setBackgroundIndex( int index ) { m_guiRenderArea->setBackgroundIndex( index ); }
180
184 int getBackgroundIndex() const { return m_guiRenderArea->getBackgroundIndex(); }
185
191 void setColorMap( int startIndex, int num, const SbColor* colors );
192
196 void setViewportRegion( const SbViewportRegion& newRegion )
197 { m_guiRenderArea->setViewportRegion( newRegion ); }
198
203 { return m_guiRenderArea->getViewportRegion(); }
204
215
221 { return m_guiRenderArea->getTransparencyType(); }
222
232 SbBool fastEditDelayedObjects = FALSE);
233
238 { return m_guiRenderArea->getFastEditSavePolicy(); }
239
256
261
269 void setClearBeforeRender( SbBool trueOrFalse, SbBool zbTrueOrFalse = TRUE )
270 { m_guiRenderArea->setClearBeforeRender( trueOrFalse, zbTrueOrFalse ); }
271
275 SbBool isClearBeforeRender() const { return m_guiRenderArea->isClearBeforeRender(); }
276
281 SbBool isClearZBufferBeforeRender() const { return m_guiRenderArea->isClearZBufferBeforeRender(); }
282
290 void setAutoRedraw( SbBool trueOrFalse );
291
296 SbBool isAutoRedraw() const { return m_guiRenderArea->isAutoRedraw(); }
297
301 void setRedrawPriority( unsigned long priority ) { m_guiRenderArea->setRedrawPriority(priority); }
302
306 unsigned long getRedrawPriority() const { return m_guiRenderArea->getRedrawPriority(); }
307
312
317 void render() { redraw(); }
318
324
336
374 void setEventCallback( SoWinRenderAreaEventCB* fcn, void* userData = NULL );
375
383
390 SoSceneManager* getSceneManager() const { return m_guiRenderArea->getSceneManager(); }
391
402
406 SoGLRenderAction* getGLRenderAction() const { return m_guiRenderArea->getGLRenderAction(); }
407
413
429 void setPostRenderCallback( SoWinRenderAreaRenderCB* fcn, void* userData = NULL )
430 { appPostRenderCB = fcn; appPostRenderData = userData; }
431
437 SoWinRenderAreaRenderCB* getPostRenderCallback( const void* &userData ) const
438 { userData = appPostRenderData; return appPostRenderCB; }
439
443 void sendEvent( XAnyEvent* anEvent );
444
450 virtual void setMPEGRecorder( SoMPEGRenderer* recorder )
451 { m_guiRenderArea->setMPEGRecorder( recorder ); }
452
457 { return m_guiRenderArea->getMPEGRecorder(); }
458
459private:
460 SoWinRenderArea( SoWidget parent,
461 const char* name,
462 SbBool buildInsideParent,
463 SbBool getMouseInput,
464 SbBool getKeyboardInput,
465 SoGuiAlgoViewers* guiAlgos );
466
467 //Equivalent to the SoExtender constructor
468 SoWinRenderArea( SoWidget parent,
469 const char* name,
470 SbBool buildInsideParent,
471 SbBool getMouseInput,
472 SbBool getKeyboardInput,
473 SbBool buildNow,
474 SbBool sync,
475 SoGuiAlgoViewers* guiAlgos );
476
477 //Equivalent to the protected constructor
478 SoWinRenderArea( SoWidget parent,
479 const char* name,
480 SbBool buildInsideParent,
481 SbBool getMouseInput,
482 SbBool getKeyboardInput,
483 SbBool buildNow,
484 SoGuiAlgoViewers* guiAlgos );
485
489 SoGuiAlgoViewers* getGuiAlgoViewers() const { return (SoGuiAlgoViewers*)m_guiRenderArea; }
490
491private:
492
493 SoGuiRenderArea* getGuiRenderArea() const;
494
495 void setStereoMode( SoCamera::StereoMode stMode );
496 void setStereoElement();
497
498 virtual void setDoubleBuffer( SbBool db );
499
500 virtual SbBool isInteractive() const;
501
502 SoWinRenderArea( SoWidget parent,
503 const char* name,
504 SbBool buildInsideParent,
505 SbBool getMouseInput,
506 SbBool getKeyboardInput,
507 SbBool buildNow,
508 SbBool sync );
509
510 // Retro compatibility only.
511 // These members shouldn't be used directly, instead call their accessors
512 float stereoBalance, stereoOffset;
513 SbBool stereoAbsoluteAdjustments;
514 SoCamera::StereoMode stereoMode;
515 SbBool stereoReversed;
516
517private:
518
519 //
520 // This constructor takes a boolean whether to build the widget now.
521 // Subclasses can pass FALSE, then call SoWinRenderArea::buildWidget()
522 // when they are ready for it to be built.
523
524 SoWinRenderArea( SoWidget parent,
525 const char* name,
526 SbBool buildInsideParent,
527 SbBool getMouseInput,
528 SbBool getKeyboardInput,
529 SbBool buildNow );
530
531 //Constructors provided to avoid multiple instance of implementation objects
532 //Equivalent to the public constructor
533 SoWinRenderArea( SoWidget parent,
534 const char* name,
535 SbBool buildInsideParent,
536 SbBool getMouseInput,
537 SbBool getKeyboardInput,
538 SoGuiRenderArea* guiRenderArea );
539
540 //Equivalent to the SoExtender constructor
541 SoWinRenderArea( SoWidget parent,
542 const char* name,
543 SbBool buildInsideParent,
544 SbBool getMouseInput,
545 SbBool getKeyboardInput,
546 SbBool buildNow,
547 SbBool sync,
548 SoGuiRenderArea* guiRenderArea );
549
550 //Equivalent to the protected constructor
551 SoWinRenderArea( SoWidget parent,
552 const char* name,
553 SbBool buildInsideParent,
554 SbBool getMouseInput,
555 SbBool getKeyboardInput,
556 SbBool buildNow,
557 SoGuiRenderArea* guiRenderArea );
558
559 // redraw() calls actualRedraw(), followed by swapbuffers if necessary.
560 // actualRedraw will have the scene manager render the scene. Rendering
561 // is broken up into two routines like this so that subclasses can
562 // redefine or simply add to rendering (in actualRedraw) without having
563 // to worry about being visible, seting up the window or
564 // single/double buffer swapping.
565 //
566 virtual void redraw();
567 virtual void actualRedraw();
568
569 //
570 // Redefine these to do Inventor-specific things
571 //
572 virtual void processEvent( XAnyEvent* anyevent );
573 virtual void initGraphic();
574 virtual void sizeChanged( const SbVec2s& );
575 virtual void posChanged( const SbVec2i32&, const SbVec2i32& );
576 virtual void widgetChanged( SoWidget );
577
578 SoWidget buildWidget( SoWidget parent );
579
580 // redefine these
581 virtual SbString getDefaultWidgetName() const;
582 virtual SbString getDefaultTitle() const;
583 virtual SbString getDefaultIconTitle() const;
584
585 // subclasses have access to the device list for event processing
586 SbPList* m_deviceList; // list of devices
587
588 // application event callbacks variables
589 SoWinRenderAreaEventCB *defaultAppEventHandler;
590 void *defaultAppEventHandlerData;
591 SoWinRenderAreaEventCB *appEventHandler;
592 void *appEventHandlerData;
593 // invoke the application event callback - returns what the app cb returns
594 SbBool invokeAppCB( XAnyEvent* anyevent );
595 SbBool processInventorEvent( XAnyEvent* anyevent );
596 const SoEvent* translateAnyEvent( XAnyEvent* anyevent );
597
598 // application pre/post render callback variables
599 SoWinRenderAreaRenderCB *appPostRenderCB;
600 void *appPostRenderData;
601
602private:
603#if defined(__linux__)
604 XColor* m_mapColors; // saved colors
605 int m_mapColorNum; // number of saved colors
606#endif
607
608 SoWinMouse* m_mouseDevice;
609 SoWinKeyboard* m_keybdDevice;
610 void reinstallDevices( SoWidget newWidget );
611
612 static void selectionChangeCB( void* userData, SoSelection* s );
613 SoWidget m_deviceWidget;
614
615 // static callbacks
616 SbBool m_firstEvent;
617
618private:
619 static void windowEventCB( SoWidget w, SoWinRenderArea* wra, XAnyEvent* e, Boolean* b );
620private:
621 static void renderCB( void* v, SoSceneManager* sm );
622
623 static void visibilityChangeCB( void* pt, SbBool visible );
624
625 // this is called by constructors
626 void constructorCommon( SbBool getMouseInput,
627 SbBool getKeyboardInput,
628 SbBool buildNow );
629
630 // this is called by constructorCommon
631 void constructorCommon2( SbBool getMouseInput,
632 SbBool getKeyboardInput,
633 SbBool buildNow );
634
635 void activate();
636 void deactivate();
637
638 SbVec2i32 getWindowPosition() { return SbVec2i32( INT_MAX, INT_MAX ); }
639
640 int inRedraw;
641
642 SoGuiRenderArea* m_guiRenderArea; // Implementation class for SoXxRendeArea
643
644 // this is the default implementation of the hasRenderAbortCallback passed to the scenemanager
645 // at construction. Implementation is common to all created renderArea.
646 // If an event is received to one renderArea, all renderArea of the process will consider it as
647 // a candidate for abortion (only implemented on Windows)
648 static SbBool s_abortRenderCallback(SoAction*,void*);
649
650 SoAntialiasingParameters* m_accumulationParameters;
651
652 bool m_firstStdRedraw;
653 bool m_firstConnectedRedraw;
654 SoTimerSensor* m_viewerUpdaterSensor;
655 static void viewerUpdaterCB( void*, SoSensor* );
656 void updateFirstFrame();
657
658};
659
660#include <Inventor/Win/SoWinEndStrict.h>
661
662#endif /* _SO_WIN_RENDER_AREA_H_ */
663
664
Color vector class.
Definition SbColor.h:82
Class encapsulating information about an OpenGL context: a handle on an OpenGL context and its id.
Class for representing a viewport.
<a href="IconLegend.html"><img src="extTGS.gif" alt="VSG extension" border="0"></a> Antialiasing par...
StereoMode
Stereo mode.
Definition SoCamera.h:607
Renders a scene graph using Open Inventor's Render Engine.
FastEditSavePolicy
Fast edit traversal types.
InvalidateCacheMode
Invalidate cache mode.
TransparencyType
Transparency rendering algorithm.
<a href="IconLegend.html"><img src="extTGS.gif" alt="VSG extension" border="0"></a> Common algorithm...
Allows nodes in a graph to receive input events.
<a href="IconLegend.html"><img src="extTGS.gif" alt="VSG extension" border="0"></a> Base class for g...
Abstract base class for all database nodes.
Definition SoNode.h:145
Manages scene graph rendering and event handling.
static uint32_t getDefaultRedrawPriority()
Gets the default priority of the redraw sensor.
Manages a list of selected objects.
<a href="IconLegend.html"><img src="extTGS.gif" alt="VSG extension" border="0"></a> Abstract base cl...
Definition SoWinDevice.h:58
<a href="IconLegend.html"><img src="extTGS.gif" alt="VSG extension" border="0"></a> Translates and r...
<a href="IconLegend.html"><img src="extTGS.gif" alt="VSG extension" border="0"></a> Translates and r...
Definition SoWinMouse.h:56
<a href="IconLegend.html"><img src="extTGS.gif" alt="VSG extension" border="0"></a> Component for re...
void setSceneManager(SoSceneManager *sm)
Sets the normal scene manager.
int getBackgroundIndex() const
Gets the window background color when in color index mode.
virtual void setMPEGRecorder(SoMPEGRenderer *recorder)
Sets the recorder used for MPEG encoding.
void redrawOnSelectionChange(SoSelection *s)
Call this convenience method to have this render area redraw whenever the selection list changes in t...
const SbGLShareContext getShareContext()
Returns the information needed to make OpenGL render contexts share OpenGL objects,...
const SbViewportRegion & getViewportRegion() const
Gets current viewport region to use for rendering.
void setColorMap(int startIndex, int num, const SbColor *colors)
Sets the colors to use when displaying in color index mode.
unsigned long getRedrawPriority() const
Gets the priority of the redraw sensor.
SoSceneManager * getSceneManager() const
Gets the normal scene manager.
SoWinRenderArea(SoWidget parent=NULL, const char *name=NULL, SbBool buildInsideParent=TRUE, SbBool getMouseInput=TRUE, SbBool getKeyboardInput=TRUE)
Constructor which is passed arguments which tell it whether to register the mouse and keyboard device...
void setPostRenderCallback(SoWinRenderAreaRenderCB *fcn, void *userData=NULL)
Specifies a function to be called after the Open Inventor render traversal and immediately before the...
virtual void setSceneGraph(SoNode *newScene)
Sets the scene graph to be rendered in this component's window.
void setRedrawPriority(unsigned long priority)
Sets the priority of the redraw sensor.
void render()
Calling this forces the render area to be redrawn now.
void setTransparencyType(SoGLRenderAction::TransparencyType type)
Sets the algorithm for rendering transparent objects.
SoGLRenderAction::InvalidateCacheMode getInvalidateCacheMode()
Returns the current cache invalidation mode.
void setBackgroundIndex(int index)
Sets the window background color when in color index mode.
SoWinRenderAreaRenderCB * getPostRenderCallback(const void *&userData) const
Gets the post-render callback function and data.
~SoWinRenderArea()
Destructor.
SbColor getBackgroundColor() const
Gets the background color for this window.
void setClearBeforeRender(SbBool trueOrFalse, SbBool zbTrueOrFalse=TRUE)
Enables/prevents window clearing from happening before a rendering starts (default is clear TRUE).
void setAutoRedraw(SbBool trueOrFalse)
The render area will automatically redraw whenever something in the scene graph changes.
void sendEvent(XAnyEvent *anEvent)
Sends the event to be processed by the renderArea.
SbBool isClearZBufferBeforeRender() const
Queries whether the depth buffer (sometimes called the Z buffer) will be cleared before rendering sta...
SbBool isClearBeforeRender() const
Queries whether the window will be cleared before rendering starts.
void registerDevice(SoWinDevice *d)
Registers interest in devices.
void scheduleRedraw()
Schedules a redraw to happen sometime soon (as opposed to immediately).
void unregisterDevice(SoWinDevice *d)
Unregisters interest in devices.
SoGLRenderAction::TransparencyType getTransparencyType() const
Gets the algorithm for rendering transparent objects.
static unsigned long getDefaultRedrawPriority()
Gets the default priority number of the redraw sensor.
SbBool isAutoRedraw() const
Queries whether the render area will automatically redraw whenever something in the scene graph chang...
void setFastEditSavePolicy(SoGLRenderAction::FastEditSavePolicy policy, SbBool fastEditDelayedObjects=FALSE)
Sets fast editing save policy to use when rendering.
virtual SoNode * getSceneGraph()
Gets the scene graph to be rendered in this component's window.
virtual SoMPEGRenderer * getMPEGRecorder() const
Returns the recorder used for MPEG encoding.
void setViewportRegion(const SbViewportRegion &newRegion)
Sets viewport region to use for rendering.
SbBool SoWinRenderAreaRenderCB(void *userData, SoWinRenderArea *rendArea)
SoGLRenderAction::FastEditSavePolicy getFastEditSavePolicy() const
Returns fast editing save policy used when rendering.
void setGLRenderAction(SoGLRenderAction *ra)
Sets the GL render action to use.
void setBackgroundColor(const SbColor &c)
Sets the background color for this window.
SbBool SoWinRenderAreaEventCB(void *userData, XAnyEvent *anyevent)
void setEventCallback(SoWinRenderAreaEventCB *fcn, void *userData=NULL)
Windows messages which occur in the render area window are either directly handled by the viewer (whe...
SoGLRenderAction * getGLRenderAction() const
Gets the current GL render action.
void setInvalidateCacheMode(SoGLRenderAction::InvalidateCacheMode icm)
Enables or disables the invalidation of render caches.
int SbBool
Boolean type.
Definition SbBase.h:87