Open Inventor Release 2023.2.3
 
Loading...
Searching...
No Matches
SoWinRenderArea.h
Go to the documentation of this file.
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-2020 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
28#include <windows.h>
30
31#include <climits>
32
33#include <Inventor/SbColor.h>
38
39#include <Inventor/nodes/SoCamera.h> // stereo settings
43
44
46
48class SoWinDevice;
49class SoNode;
50class SoWinMouse;
51class SoWinKeyboard;
52class SoSelection;
53class SoWinRenderArea;
56
60typedef SbBool SoWinRenderAreaEventCB( void* userData, XAnyEvent* anyevent );
61
65typedef SbBool SoWinRenderAreaRenderCB( void* userData, SoWinRenderArea* rendArea );
66
68//
69// Class: SoWinRenderArea
70//
71// Class to do Inventor rendering in a GLX Motif widget.
72//
74
110{
111 public:
112
121 SoWinRenderArea( SoWidget parent = NULL,
122 const char* name = NULL,
123 SbBool buildInsideParent = TRUE,
124 SbBool getMouseInput = TRUE,
125 SbBool getKeyboardInput = TRUE );
130
136 virtual void setSceneGraph( SoNode *newScene );
137
142
157
164 void setBackgroundColor( const SbColor& c );
165
169 SbColor getBackgroundColor() const { return m_guiRenderArea->getBackgroundColor(); }
170
175 void setBackgroundIndex( int index ) { m_guiRenderArea->setBackgroundIndex( index ); }
176
180 int getBackgroundIndex() const { return m_guiRenderArea->getBackgroundIndex(); }
181
187 void setColorMap( int startIndex, int num, const SbColor* colors );
188
192 void setViewportRegion( const SbViewportRegion& newRegion )
193 { m_guiRenderArea->setViewportRegion( newRegion ); }
194
199 { return m_guiRenderArea->getViewportRegion(); }
200
211
217 { return m_guiRenderArea->getTransparencyType(); }
218
228 SbBool fastEditDelayedObjects = FALSE);
229
234 { return m_guiRenderArea->getFastEditSavePolicy(); }
235
252
257
265 void setClearBeforeRender( SbBool trueOrFalse, SbBool zbTrueOrFalse = TRUE )
266 { m_guiRenderArea->setClearBeforeRender( trueOrFalse, zbTrueOrFalse ); }
267
271 SbBool isClearBeforeRender() const { return m_guiRenderArea->isClearBeforeRender(); }
272
277 SbBool isClearZBufferBeforeRender() const { return m_guiRenderArea->isClearZBufferBeforeRender(); }
278
286 void setAutoRedraw( SbBool trueOrFalse );
287
292 SbBool isAutoRedraw() const { return m_guiRenderArea->isAutoRedraw(); }
293
297 void setRedrawPriority( unsigned long priority ) { m_guiRenderArea->setRedrawPriority(priority); }
298
302 unsigned long getRedrawPriority() const { return m_guiRenderArea->getRedrawPriority(); }
303
308
313 void render() { redraw(); }
314
320
332
370 void setEventCallback( SoWinRenderAreaEventCB* fcn, void* userData = NULL );
371
379
386 SoSceneManager* getSceneManager() const { return m_guiRenderArea->getSceneManager(); }
387
398
402 SoGLRenderAction* getGLRenderAction() const { return m_guiRenderArea->getGLRenderAction(); }
403
409
425 void setPostRenderCallback( SoWinRenderAreaRenderCB* fcn, void* userData = NULL )
426 { appPostRenderCB = fcn; appPostRenderData = userData; }
427
433 SoWinRenderAreaRenderCB* getPostRenderCallback( const void* &userData ) const
434 { userData = appPostRenderData; return appPostRenderCB; }
435
439
442
447
451 void sendEvent( XAnyEvent* anEvent );
452
458 virtual void setMPEGRecorder( SoMPEGRenderer* recorder )
459 { m_guiRenderArea->setMPEGRecorder( recorder ); }
460
465 { return m_guiRenderArea->getMPEGRecorder(); }
466
467private:
469 const char* name,
470 SbBool buildInsideParent,
471 SbBool getMouseInput,
472 SbBool getKeyboardInput,
473 SoGuiAlgoViewers* guiAlgos );
474
475 //Equivalent to the SoExtender constructor
477 const char* name,
478 SbBool buildInsideParent,
479 SbBool getMouseInput,
480 SbBool getKeyboardInput,
481 SbBool buildNow,
482 SbBool sync,
483 SoGuiAlgoViewers* guiAlgos );
484
485 //Equivalent to the protected constructor
487 const char* name,
488 SbBool buildInsideParent,
489 SbBool getMouseInput,
490 SbBool getKeyboardInput,
491 SbBool buildNow,
492 SoGuiAlgoViewers* guiAlgos );
493
497 SoGuiAlgoViewers* getGuiAlgoViewers() const { return (SoGuiAlgoViewers*)m_guiRenderArea; }
498
499private:
500
501 SoGuiRenderArea* getGuiRenderArea() const;
502
503 void setStereoMode( SoCamera::StereoMode stMode );
504 void setStereoElement();
505
506 virtual void setDoubleBuffer( SbBool db );
507
508 virtual SbBool isInteractive() const;
509
511 const char* name,
512 SbBool buildInsideParent,
513 SbBool getMouseInput,
514 SbBool getKeyboardInput,
515 SbBool buildNow,
516 SbBool sync );
517
518 // Retro compatibility only.
519 // These members shouldn't be used directly, instead call their accessors
520 float stereoBalance, stereoOffset;
521 SbBool stereoAbsoluteAdjustments;
522 SoCamera::StereoMode stereoMode;
523 SbBool stereoReversed;
524
525private:
526
527 //
528 // This constructor takes a boolean whether to build the widget now.
529 // Subclasses can pass FALSE, then call SoWinRenderArea::buildWidget()
530 // when they are ready for it to be built.
531
533 const char* name,
534 SbBool buildInsideParent,
535 SbBool getMouseInput,
536 SbBool getKeyboardInput,
537 SbBool buildNow );
538
539 //Constructors provided to avoid multiple instance of implementation objects
540 //Equivalent to the public constructor
542 const char* name,
543 SbBool buildInsideParent,
544 SbBool getMouseInput,
545 SbBool getKeyboardInput,
546 SoGuiRenderArea* guiRenderArea );
547
548 //Equivalent to the SoExtender constructor
550 const char* name,
551 SbBool buildInsideParent,
552 SbBool getMouseInput,
553 SbBool getKeyboardInput,
554 SbBool buildNow,
555 SbBool sync,
556 SoGuiRenderArea* guiRenderArea );
557
558 //Equivalent to the protected constructor
560 const char* name,
561 SbBool buildInsideParent,
562 SbBool getMouseInput,
563 SbBool getKeyboardInput,
564 SbBool buildNow,
565 SoGuiRenderArea* guiRenderArea );
566
567 // redraw() calls actualRedraw(), followed by swapbuffers if necessary.
568 // actualRedraw will have the scene manager render the scene. Rendering
569 // is broken up into two routines like this so that subclasses can
570 // redefine or simply add to rendering (in actualRedraw) without having
571 // to worry about being visible, seting up the window or
572 // single/double buffer swapping.
573 //
574 virtual void redraw();
575 virtual void actualRedraw();
576
577 //
578 // Redefine these to do Inventor-specific things
579 //
580 virtual void processEvent( XAnyEvent* anyevent );
581 virtual void initGraphic();
582 virtual void sizeChanged( const SbVec2s& );
583 virtual void posChanged( const SbVec2i32&, const SbVec2i32& );
584 virtual void widgetChanged( SoWidget );
585
586 SoWidget buildWidget( SoWidget parent );
587
588 // redefine these
589 virtual SbString getDefaultWidgetName() const;
590 virtual SbString getDefaultTitle() const;
591 virtual SbString getDefaultIconTitle() const;
592
593 // subclasses have access to the device list for event processing
594 SbPList* m_deviceList; // list of devices
595
596 // application event callbacks variables
597 SoWinRenderAreaEventCB *defaultAppEventHandler;
598 void *defaultAppEventHandlerData;
599 SoWinRenderAreaEventCB *appEventHandler;
600 void *appEventHandlerData;
601 // invoke the application event callback - returns what the app cb returns
602 SbBool invokeAppCB( XAnyEvent* anyevent );
603 SbBool processInventorEvent( XAnyEvent* anyevent );
604 const SoEvent* translateAnyEvent( XAnyEvent* anyevent );
605
606 // application pre/post render callback variables
607 SoWinRenderAreaRenderCB *appPostRenderCB;
608 void *appPostRenderData;
609
610private:
611 // Floating point rendering
612 SbBool m_isFloatingPointRendering;
613 FloatColorBufferSize m_floatingPointRenderingPrecision;
614
615#if defined(__linux__)
616 XColor* m_mapColors; // saved colors
617 int m_mapColorNum; // number of saved colors
618#endif
619
620 SoWinMouse* m_mouseDevice;
621 SoWinKeyboard* m_keybdDevice;
622 void reinstallDevices( SoWidget newWidget );
623
624 static void selectionChangeCB( void* userData, SoSelection* s );
625 SoWidget m_deviceWidget;
626
627 // static callbacks
628 SbBool m_firstEvent;
629
630private:
631 static void windowEventCB( SoWidget w, SoWinRenderArea* wra, XAnyEvent* e, Boolean* b );
632private:
633 static void renderCB( void* v, SoSceneManager* sm );
634
635 static void visibilityChangeCB( void* pt, SbBool visible );
636
637 // this is called by constructors
638 void constructorCommon( SbBool getMouseInput,
639 SbBool getKeyboardInput,
640 SbBool buildNow );
641
642 // this is called by constructorCommon
643 void constructorCommon2( SbBool getMouseInput,
644 SbBool getKeyboardInput,
645 SbBool buildNow );
646
647 void activate();
648 void deactivate();
649
650 SbVec2i32 getWindowPosition() { return SbVec2i32( INT_MAX, INT_MAX ); }
651
652 int inRedraw;
653
654 SoGuiRenderArea* m_guiRenderArea; // Implementation class for SoXxRendeArea
655
656 // this is the default implementation of the hasRenderAbortCallback passed to the scenemanager
657 // at construction. Implementation is common to all created renderArea.
658 // If an event is received to one renderArea, all renderArea of the process will consider it as
659 // a candidate for abortion (only implemented on Windows)
660 static SbBool s_abortRenderCallback(SoAction*,void*);
661
662 SoAntialiasingParameters* m_accumulationParameters;
663
664 bool m_firstStdRedraw;
665 bool m_firstConnectedRedraw;
666 SoTimerSensor* m_viewerUpdaterSensor;
667 static void viewerUpdaterCB( void*, SoSensor* );
668 void updateFirstFrame();
669
670};
671
673
674#endif /* _SO_WIN_RENDER_AREA_H_ */
675
676
#define TRUE
Possible value of SbBool.
Definition SbBase.h:77
#define FALSE
Possible value of SbBool.
Definition SbBase.h:75
char Boolean
Definition SoQtDef.h:119
#define SoWidget
Definition SoQtDef.h:40
virtual void enable(QWidget *w, XtEventHandler f, XtPointer data, void *unused=NULL)
#define XColor
Definition SoWinDef.h:95
#define XAnyEvent
Definition SoWinDef.h:100
SbBool SoWinRenderAreaRenderCB(void *userData, SoWinRenderArea *rendArea)
SbBool SoWinRenderAreaEventCB(void *userData, XAnyEvent *anyevent)
Color vector class.
Definition SbColor.h:82
Class encapsulating information about an OpenGL context: a handle on an OpenGL context and its id.
List of generic (void *) pointers.
Definition SbPList.h:77
Class for smart character strings.
Definition SbString.h:202
2D vector class.
Definition SbVec.h:517
2D vector class.
Definition SbVec.h:700
Class for representing a viewport.
Abstract base class for all actions.
Definition SoAction.h:132
<a href="IconLegend.html"><img src="extTGS.gif" alt="VSG extension" border="0"></a> Antialiasing par...
StereoMode
Stereo mode.
Definition SoCamera.h:518
Base class for all events.
Definition SoEvent.h:116
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.
Abstract base class for Open Inventor sensors.
Definition SoSensor.h:97
Sensor that triggers repeatedly at regular intervals.
<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> Component for Op...
FloatColorBufferSize
FloatColorBufferSize.
@ FLOAT_16_COLOR_BUFFER
16-bit rendering per component.
<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.
static SbBool isFloatingColorBufferSupported()
Returns TRUE if floating point rendering is available.
unsigned long getRedrawPriority() const
Gets the priority of the redraw sensor.
SoSceneManager * getSceneManager() const
Gets the normal scene manager.
void getFloatingColorBuffer(SbBool &enable, FloatColorBufferSize &size)
Returns TRUE if floating point rendering is used and its precision.
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 setFloatingColorBuffer(SbBool enable, FloatColorBufferSize size=FLOAT_16_COLOR_BUFFER)
Enables/disables floating point rendering using 16- or 32-bit components.
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.
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.
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