Logo ROOT   6.12/07
Reference Guide
TGLSceneBase.h
Go to the documentation of this file.
1 // @(#)root/gl:$Id$
2 // Author: Matevz Tadel, Feb 2007
3 
4 /*************************************************************************
5  * Copyright (C) 1995-2004, Rene Brun and Fons Rademakers. *
6  * All rights reserved. *
7  * *
8  * For the licensing terms see $ROOTSYS/LICENSE. *
9  * For the list of contributors see $ROOTSYS/README/CREDITS. *
10  *************************************************************************/
11 
12 #ifndef ROOT_TGLSceneBase_H
13 #define ROOT_TGLSceneBase_H
14 
15 #include "TGLLockable.h"
16 #include "TGLBoundingBox.h"
17 
18 #include <TString.h>
19 
20 #include <list>
21 
22 class TGLViewerBase;
23 class TGLSceneInfo;
24 class TGLClip;
25 class TGLRnrCtx;
26 class TGLLogicalShape;
27 class TGLSelectRecord;
28 
29 // Avoid TObject inheritance due to clash with TObject::Draw as well
30 // as possible inheritance of TGLPadScene from VierualViewer3D.
31 
32 class TGLSceneBase : public TGLLockable // : public TObject / TNamed
33 {
34 private:
35  TGLSceneBase(const TGLSceneBase&); // Not implemented
36  TGLSceneBase& operator=(const TGLSceneBase&); // Not implemented
37 
39 
40 protected:
41  UInt_t fSceneID; // Unique scene id.
42  TString fName; // Object identifier.
43  TString fTitle; // Object title.
44 
45  UInt_t fTimeStamp; // Counter increased on every update.
46  UInt_t fMinorStamp; // Counter increased on minimal update.
47  Short_t fLOD; // Scene-lod.
48  Short_t fStyle; // Scene-style.
49  Float_t fWFLineW; // Scene wire-frame line-width.
50  Float_t fOLLineW; // Scene outline line-width.
51  TGLClip * fClip; // Scene clipping-plane.
52  Bool_t fSelectable; // Objects in the scene are selectable.
53 
54  // BoundingBox
55  mutable TGLBoundingBox fBoundingBox; // bounding box for scene (axis aligned) - lazy update - use BoundingBox() to access
56  mutable Bool_t fBoundingBoxValid; // bounding box valid?
57 
58  Bool_t fDoFrustumCheck; // Perform global frustum-check in UpdateSceneInfo()
59  Bool_t fDoClipCheck; // Perform global clip-plane-check in UpdateSceneInfo()
60 
61  // Interface to other components
62  typedef std::list<TGLViewerBase*> ViewerList_t;
63  typedef std::list<TGLViewerBase*>::iterator ViewerList_i;
64 
65  ViewerList_t fViewers;
67 
68  // Possible future extensions
69  // TGLMatrix fGlobalTrans;
70 
71 public:
72  TGLSceneBase();
73  virtual ~TGLSceneBase();
74 
75  void AddViewer(TGLViewerBase* viewer);
76  void RemoveViewer(TGLViewerBase* viewer);
77  void TagViewersChanged();
78 
79  virtual const char* LockIdStr() const;
80 
81  virtual const char *GetName() const { return fName; }
82  virtual const char *GetTitle() const { return fTitle; }
83  virtual void SetName (const char *name) { fName = name; }
84  virtual void SetTitle(const char *title) { fTitle = title; }
85  virtual void SetNameTitle(const char *name, const char *title) { SetName(name); SetTitle(title); }
86 
88  virtual void RebuildSceneInfo(TGLRnrCtx& ctx);
89  virtual void UpdateSceneInfo(TGLRnrCtx& ctx);
90  virtual void LodifySceneInfo(TGLRnrCtx& ctx);
91 
92  // Rendering
93  virtual void PreDraw (TGLRnrCtx& rnrCtx);
94  virtual void PreRender (TGLRnrCtx& rnrCtx);
95  virtual void Render (TGLRnrCtx& rnrCtx);
96  virtual void RenderOpaque (TGLRnrCtx& rnrCtx);
97  virtual void RenderTransp (TGLRnrCtx& rnrCtx);
98  virtual void RenderSelOpaque(TGLRnrCtx& rnrCtx);
99  virtual void RenderSelTransp(TGLRnrCtx& rnrCtx);
100  virtual void RenderSelOpaqueForHighlight(TGLRnrCtx& rnrCtx);
101  virtual void RenderSelTranspForHighlight(TGLRnrCtx& rnrCtx);
102  virtual void PostRender(TGLRnrCtx& rnrCtx);
103  virtual void PostDraw (TGLRnrCtx& rnrCtx);
104 
105  virtual TGLLogicalShape* FindLogical(TObject*) const { return 0; }
106 
107  // Selection interface
108  virtual Bool_t ResolveSelectRecord(TGLSelectRecord& rec, Int_t curIdx);
109 
110 
111  // Getters & setters
112 
113  UInt_t GetTimeStamp() const { return fTimeStamp; }
114  void IncTimeStamp() { ++fTimeStamp; fMinorStamp = 1; }
115 
116  UInt_t GetMinorStamp() const { return fMinorStamp; }
118 
119  Short_t LOD() const { return fLOD; }
120  void SetLOD(Short_t lod) { fLOD = lod; }
121 
122  Short_t Style() const { return fStyle; }
123  void SetStyle(Short_t st) { fStyle = st; }
124 
125  TGLClip* Clip() const { return fClip; }
126  void SetClip(TGLClip *p) { fClip = p; }
127 
128  Bool_t GetSelectable() const { return fSelectable; }
129  void SetSelectable(Bool_t a) { fSelectable = a; }
130 
132  void SetAutoDestruct(Bool_t a) { fAutoDestruct = a; }
133 
134  // BoundingBox
135 
136  virtual void CalcBoundingBox() const = 0;
137  void InvalidateBoundingBox() { fBoundingBoxValid = kFALSE; }
139  { if (!fBoundingBoxValid) CalcBoundingBox(); return fBoundingBox; }
140 
141 
142  ClassDef(TGLSceneBase, 0) // Base-class for OpenGL scenes.
143 }; // endclass TGLSceneBase
144 
145 
146 #endif
void AddViewer(TGLViewerBase *viewer)
Add viewer to the list.
Bool_t GetSelectable() const
Definition: TGLSceneBase.h:128
The TGLRnrCtx class aggregates data for a given redering context as needed by various parts of the RO...
Definition: TGLRnrCtx.h:40
virtual void Render(TGLRnrCtx &rnrCtx)
This function does rendering of all stages, the shapes are rendered in the following order: opaque...
virtual TGLSceneInfo * CreateSceneInfo(TGLViewerBase *view)
Create a scene-info instance appropriate for this scene class.
void IncTimeStamp()
Definition: TGLSceneBase.h:114
float Float_t
Definition: RtypesCore.h:53
Short_t Style() const
Definition: TGLSceneBase.h:122
Bool_t fDoClipCheck
Definition: TGLSceneBase.h:59
Bool_t fDoFrustumCheck
Definition: TGLSceneBase.h:58
void RemoveViewer(TGLViewerBase *viewer)
Remove viewer from the list.
Scene base-class – provides basic interface expected by the TGLViewer or its sub-classes: ...
Definition: TGLSceneBase.h:32
virtual void PreRender(TGLRnrCtx &rnrCtx)
Perform pre-render initialization - fill rnrCtx with values stored during PreDraw().
Bool_t GetAutoDestruct() const
Definition: TGLSceneBase.h:131
void SetStyle(Short_t st)
Definition: TGLSceneBase.h:123
Basic string class.
Definition: TString.h:125
Abstract clipping shape - derives from TGLPhysicalShape Adds clip mode (inside/outside) and pure virt...
Definition: TGLClip.h:31
UInt_t fSceneID
Definition: TGLSceneBase.h:41
virtual void RenderSelTransp(TGLRnrCtx &rnrCtx)
Render selected transparent elements for highlight.
int Int_t
Definition: RtypesCore.h:41
bool Bool_t
Definition: RtypesCore.h:59
Bool_t fSelectable
Definition: TGLSceneBase.h:52
void SetAutoDestruct(Bool_t a)
Definition: TGLSceneBase.h:132
virtual void RenderSelOpaque(TGLRnrCtx &rnrCtx)
Render selected opaque elements.
std::list< TGLViewerBase * > ViewerList_t
Definition: TGLSceneBase.h:62
TGLBoundingBox fBoundingBox
Definition: TGLSceneBase.h:55
Float_t fWFLineW
Definition: TGLSceneBase.h:49
Base class for GL viewers.
Definition: TGLViewerBase.h:36
#define ClassDef(name, id)
Definition: Rtypes.h:320
virtual const char * LockIdStr() const
Name printed on locking info messages.
TGLClip * fClip
Definition: TGLSceneBase.h:51
Float_t fOLLineW
Definition: TGLSceneBase.h:50
virtual void UpdateSceneInfo(TGLRnrCtx &ctx)
Fill scene-info with information needed for rendering, take into account the render-context (viewer s...
void IncMinorStamp()
Definition: TGLSceneBase.h:117
virtual ~TGLSceneBase()
Destructor.
TString fTitle
Definition: TGLSceneBase.h:43
static UInt_t fgSceneIDSrc
Definition: TGLSceneBase.h:38
virtual void RenderTransp(TGLRnrCtx &rnrCtx)
Render transparent elements.
virtual void RenderSelOpaqueForHighlight(TGLRnrCtx &rnrCtx)
Render selected opaque elements for highlight.
const TGLBoundingBox & BoundingBox() const
Definition: TGLSceneBase.h:138
virtual void RenderSelTranspForHighlight(TGLRnrCtx &rnrCtx)
Render selected transparent elements.
Short_t LOD() const
Definition: TGLSceneBase.h:119
Short_t fStyle
Definition: TGLSceneBase.h:48
virtual void RebuildSceneInfo(TGLRnrCtx &ctx)
Fill scene-info with very basic information that is practically view independent. ...
UInt_t fTimeStamp
Definition: TGLSceneBase.h:45
auto * a
Definition: textangle.C:12
Short_t fLOD
Definition: TGLSceneBase.h:47
Standard selection record including information about containing scene and details ob out selected ob...
unsigned int UInt_t
Definition: RtypesCore.h:42
virtual Bool_t ResolveSelectRecord(TGLSelectRecord &rec, Int_t curIdx)
Process selection record rec.
short Short_t
Definition: RtypesCore.h:35
virtual void LodifySceneInfo(TGLRnrCtx &ctx)
Setup LOD-dependant values in scene-info.
void InvalidateBoundingBox()
Definition: TGLSceneBase.h:137
virtual void SetName(const char *name)
Definition: TGLSceneBase.h:83
Abstract logical shape - a GL &#39;drawable&#39; - base for all shapes - faceset sphere etc.
const Bool_t kFALSE
Definition: RtypesCore.h:88
Bool_t fAutoDestruct
Definition: TGLSceneBase.h:66
Bool_t fBoundingBoxValid
Definition: TGLSceneBase.h:56
void SetLOD(Short_t lod)
Definition: TGLSceneBase.h:120
virtual void CalcBoundingBox() const =0
TGLClip * Clip() const
Definition: TGLSceneBase.h:125
virtual void SetTitle(const char *title)
Definition: TGLSceneBase.h:84
virtual const char * GetName() const
Definition: TGLSceneBase.h:81
virtual void SetNameTitle(const char *name, const char *title)
Definition: TGLSceneBase.h:85
std::list< TGLViewerBase * >::iterator ViewerList_i
Definition: TGLSceneBase.h:63
UInt_t GetMinorStamp() const
Definition: TGLSceneBase.h:116
Mother of all ROOT objects.
Definition: TObject.h:37
Concrete class describing an orientated (free) or axis aligned box of 8 vertices. ...
void SetSelectable(Bool_t a)
Definition: TGLSceneBase.h:129
virtual TGLLogicalShape * FindLogical(TObject *) const
Definition: TGLSceneBase.h:105
TString fName
Definition: TGLSceneBase.h:42
Base class for extended scene context.
Definition: TGLSceneInfo.h:26
UInt_t fMinorStamp
Definition: TGLSceneBase.h:46
virtual void RenderOpaque(TGLRnrCtx &rnrCtx)
Render opaque elements.
void TagViewersChanged()
Tag all viewers as changed.
virtual void PreDraw(TGLRnrCtx &rnrCtx)
Perform basic pre-render initialization:
ViewerList_t fViewers
Definition: TGLSceneBase.h:65
Simple locking interface used by viewer and scene.
Definition: TGLLockable.h:17
UInt_t GetTimeStamp() const
Definition: TGLSceneBase.h:113
virtual const char * GetTitle() const
Definition: TGLSceneBase.h:82
void SetClip(TGLClip *p)
Definition: TGLSceneBase.h:126
virtual void PostRender(TGLRnrCtx &rnrCtx)
Perform post-render clean-up.
char name[80]
Definition: TGX11.cxx:109
TGLSceneBase & operator=(const TGLSceneBase &)
virtual void PostDraw(TGLRnrCtx &rnrCtx)
Finalize drawing.