Log of /trunk/graf3d/gl/src/TGLLogicalShape.cxx
Parent Directory
Revision
46372 -
(
view)
(
download)
(
as text)
(
annotate)
-
[select for diffs]
Modified
Sat Oct 6 03:18:11 2012 UTC (2 years, 3 months ago) by
matevz
File length: 14973 byte(s)
Diff to
previous 43018
* TGLMatrix:
Add function Bool_t IsScalingForRender() that returns true if length of base
vectors is significantly different than unity.
* TGLPhysicalShape:
Cache state of fTransform.IsScalingForRender() in a bool member.
When this is true, enable automatic scaling of normals during rendering.
* TGLLogicalShape:
Add static Bool_t fgIgnoreSizeForCameraInterest allowing a user to prevent
RGL from hiding very small objects - at least a pixel is always drawn. One
should invoke:
TGLLogicalShape::SetIgnoreSizeForCameraInterest(kTRUE);
Revision
43018 -
(
view)
(
download)
(
as text)
(
annotate)
-
[select for diffs]
Modified
Thu Feb 16 03:13:21 2012 UTC (2 years, 11 months ago) by
matevz
File length: 14328 byte(s)
Diff to
previous 42981
Rewrite highlight rendering so that the stencil-control logic lives on the
TGLScene level, within new function TGLScene::RenderHighlight(). A set of new
functions called RenderXXXForHighligt() was introduced in TGLViewer/Scene.
This works around the problems with stencil buffer
coherency during multi-pass rendering with multiple clipping planes.
Some tweaking was necessary in TEve-GL classes that implement specialized
DrawHighlight() virtual from TGLLogicalShape.
Revision
42979 -
(
view)
(
download)
(
as text)
(
annotate)
-
[select for diffs]
Modified
Mon Feb 13 03:17:03 2012 UTC (2 years, 11 months ago) by
matevz
File length: 14786 byte(s)
Diff to
previous 42974
Implement highlighting using the stencil buffer.
Produces minor artefacts when more than one clipping plane is active but
performs much better for all other cases.
Revision
42974 -
(
view)
(
download)
(
as text)
(
annotate)
-
[select for diffs]
Modified
Sun Feb 12 07:22:45 2012 UTC (2 years, 11 months ago) by
matevz
File length: 16101 byte(s)
Diff to
previous 40290
Generalize selection handling for scenes:
- By adding TGLLogicalShape* to TGLSelectRecord the scene sub-classes now have
the ability to lie pretty badly to TGLEventHandler about what actually got
selected and thus achieve great flexibility in managment of scenesobject
collections that do not conform to standard ROOT / EVE / TPad paradigms.
Generalize rendering order and selection/highlight handling.
- Rendering order of opaque/transparent and non-selected/selected objects can
be set via TGLRnrCtx::RenderOrder(), enum ERenderOrder.
- Selection of transparent objects via TGLRnrCtx::SelectTransparents(), enum
ESelectabilityOfTransparents.
- Rendering of highlight halo can be controlled via:
- TGLRnrCtx::SetHighlightDepthRangeOffset(Float_t);
- TGLRnrCtx::SetHighlightedObjectDepthRangeOffset(Float_t);
This should really be rewritten either to use stencil buffer or shaders.
Revision
33124 -
(
view)
(
download)
(
as text)
(
annotate)
-
[select for diffs]
Modified
Wed Apr 21 20:04:42 2010 UTC (4 years, 9 months ago) by
matevz
File length: 15321 byte(s)
Diff to
previous 32334
Implement central infractructure to allow eve-elements to support
internal multiple selection and highlightning of their sub-parts.
Use this in TEveDigitSet and its sub-classes TEveQuadSet and
TEveBoxSet.
Extend GL rendering and event-handling to support these operations.
eve/
====
* TEveElement - Add 3 new functions:
virtual TString GetHighlightTooltip();
virtual void UnSelected();
virtual void UnHighlighted();
* TEveSecondarySelectable - New secondary base-class for elements
supporting internal multiple selection / highlight.
* TEveDigitSet, TEveQuadSet, TEveBoxSet
- Sub-class TEveDigitSet from TEveSecondarySelectable.
- Implement functions needed for internal selection.
- Add common base-class TEveDigitSetGL for quad and box-set GL rendering.
* TEveChunkManager - Add support for restricted iteration.
TEveChunkManager::iterator accepts set<Int_t> for that purpose.
* TEveViewer - Add functions to handle additional mouse-hover signals
from TGLViewer.
* Other classes (all GL renderers) - Changes for additional argument
to TGLLogicalShape::DrawHighlight().
gl/
===
* TGLObject - Take AlwaysSecondarySelect() into account when deciding
whether to use DL caching for given draw-pass.
* TGLLogicalShape - Add a new (optional) argument to DrawHighlight()
specifying kind of outline to use (selected or highlighted). This
allows classes with internal selection to properly render outlines
when sub-parts of an object are both selected and highlighted.
* TGLEventHandler - Proparly handle objects with internal selection /
highlight.
* TGLSelectRecord - Add flag to separate GL-selection for selection
and for highlight. This is really used by record handlers.
* TGLViewer - Add two new signal-emitting functions to properly notify
clients about changes in internal object selection:
virtual void ReMouseOver(TObject *obj, UInt_t state); // *SIGNAL*
virtual void UnMouseOver(TObject *obj, UInt_t state); // *SIGNAL*
tutorials/eve
=============
Add instructions for activation of internal selection in
TEveQuad/BoxSet.
Revision
32334 -
(
view)
(
download)
(
as text)
(
annotate)
-
[select for diffs]
Modified
Fri Feb 12 11:52:13 2010 UTC (4 years, 11 months ago) by
matevz
File length: 15155 byte(s)
Diff to
previous 30752
* TGLScene
Optimize DestroyPhysicals() by looping over logical shapes and destroying
all assigned physical shapes via TGLLogicalShape::DestroyPhysicals().
This significantly speeds-up full scene repaints when many replicas of the
same logical volume are present (e.g. when showing geometry).
Change signature -- remove unused arguments.
* TGLScenePad
Modify for changed signature of TGLScene::DestroyPhysicals().
* TGLLogicalShape
In DestroyPhysicals() set fFirstPhysical to null.
This used to be only called from destructor.
* TGLCameraOverlay
Mark a rare bug (existing before) -- requires further investigation.
White-space changes.
Revision
30752 -
(
view)
(
download)
(
as text)
(
annotate)
-
[select for diffs]
Modified
Thu Oct 15 18:55:34 2009 UTC (5 years, 3 months ago) by
matevz
File length: 15123 byte(s)
Diff to
previous 26251
From Alja & Matevz.
Make highlightning configurable on per class basis by introducing a
new virtual function in TGLLogicalShape:
virtual void DrawHighlight(TGLRnrCtx& rnrCtx, const TGLPhysicalShape* pshp) const;
The main use of this functionality will be to support individual
selection of calo towers and potentially other container elements that
support secondary selection.
For now it is used in TEvePolygonSetProjected to highlight only
outline of the polygon.
Revision
26250 -
(
view)
(
download)
(
as text)
(
annotate)
-
[select for diffs]
Modified
Mon Nov 17 20:56:44 2008 UTC (6 years, 2 months ago) by
matevz
File length: 13736 byte(s)
Diff to
previous 24214
TGLContext, TGLWidget
---------------------
Add method ClearCurrent() to set current GL context to 0.
TGLLogicalShape
---------------
Change how number of required display-lists per object is handled:
before it was a virtual function, now it is a data member.
Fixes a severe memory leak due wrong number of released display-lists
when called from the destructor, which was calling a virtual function
to determine their number.
Fix accordingly the following classes: TGLSphere, TGLCylinder,
TEveCaloLegoGL and TEveBoxSetGL.
Revision
24214 -
(
view)
(
download)
(
as text)
(
annotate)
-
[select for diffs]
Modified
Wed Jun 11 14:48:35 2008 UTC (6 years, 7 months ago) by
matevz
File length: 13328 byte(s)
Diff to
previous 23140
TGLObject and subclasses
-----------------------------------------
Introduce new member 'Bool_t TGLObject::fMultiColor' that specifies
whether the class uses multiple colors for its rendering. This
information is important when drawing highlight or outlines around
objects as display-lists can not be used if color-state changes are
stored in them.
With this modification most of the logick for
virtual Bool_t TGLLogicalShape::ShouldDLCache(...)
can be implemented in TGLObject version.
Most of the GL-rendering classes have been fixed to properly set the
fMultiColor state and rely on the TGLObject::ShouldDLCache().
TGLPhysicalShape
----------------
Use TGLLogicalShape::Draw() instead of DirectDraw() when drawing
highlights to allow usage of display-lists for classes that do not use
multiple colors.
TGLUtil
-------
Decrease the default draw-quality for DrawLine/Cylinder/Sphere/Disk to
10. With software rendering the previous value of 60 caused very low
refresh rates.
Introduce two inner classes TDrawQualityModifier and
TDrawQualityScaler allowing easy/safe modification of draw-quality for
the above functions.
Introduce inner class TColorLocker allowing easy/safe modification of
color-lock state.
Revision
23140 -
(
view)
(
download)
(
as text)
(
annotate)
-
[select for diffs]
Modified
Fri Apr 11 11:01:39 2008 UTC (6 years, 9 months ago) by
rdm
File length: 12833 byte(s)
Diff to
previous 21702
move the following directories to "graf2d":
asimage, freetype, gpad, graf, postscript, qt, win32gdk, x11, x11ttf
move the following directories to "graf3d":
eve, ftgl, g3d, gl, x3d
Revision
21702 -
(
view)
(
download)
(
as text)
(
annotate)
-
[select for diffs]
Modified
Mon Jan 14 18:55:14 2008 UTC (7 years ago) by
matevz
Original Path:
trunk/gl/src/TGLLogicalShape.cxx
File length: 12833 byte(s)
Diff to
previous 20882
In TGLScene/TGLViewer add two timeouts for high-quality and
low-quality (during rotation etc) scene rendering. Expose both time
limits via TGLViewerEditor.
In TGLCamera::OfInterest() remove redundant test for physical-shape
bbox volume and optimize the remaining bbox diagonal length test.
Remove blanks from the eols.
Revision
19049 -
(
view)
(
download)
(
as text)
(
annotate)
-
[select for diffs]
Modified
Mon Jun 18 07:02:16 2007 UTC (7 years, 7 months ago) by
brun
Original Path:
trunk/gl/src/TGLLogicalShape.cxx
File length: 12463 byte(s)
Diff to
previous 19000
From Matev and Timur:
Timur:
1. Allow unique identification of shared GL contexts via
TGLContextIdentity class.
Matevz:
1. Improved overlay selection handling.
2. Perform GL context check before rendering, possibly invalidating
registered display-lists.
3. Minimize updates for window expose and resize events.
Revision
19000 -
(
view)
(
download)
(
as text)
(
annotate)
-
[select for diffs]
Modified
Mon Jun 11 19:56:34 2007 UTC (7 years, 7 months ago) by
brun
Original Path:
trunk/gl/src/TGLLogicalShape.cxx
File length: 13028 byte(s)
Diff to
previous 16090
From Matevz:
Major restructuring of GL viewer-scene relationship (Matevz)
===================================================
The main idea was to generalize current GL infrustructure so that the
following features can be done in the future:
1. Full pad rendering via GL including 3D histo/func painters and 2D graphics.
2. Implementation of GL canvas (with independent viewers serving as pads).
3. Multi-view event-visualization front-end.
4. Inclusion of external scenes (non-ROOT-gl) in ROOT viewer.
Rendering of ROOT scenes in external GL frameworks.
Changes on the code level
-------------------------
0. Extend current scene/viewer classes into a 2-level class hierarchy.
New classes TGLViewerBase and TGLSceneBase.
1. Allow scenes to be shared among viewers. View-specific scene-cache
needs to be kept at the viewer side.
2. Viewer now manages a list of scenes. It is possible to put together
a combination of scenes (e.g. one showing geometry, another one tracks
and yet another clusters). Each scene can define its own clipping object.
3. Provide API for fine-grained control over rendered object removal,
creation and update. This allows for efficient scene-updates.
4. Disentangle selection, clipping and other markup objects from
within viewer-scene singleton.
New classes TGLClipSet, TGLManipSet.
6. Disentangle selection management.
7. Separate overlay rendering to allow any number of active GL-GUI
elements (like manipulators are now).
New classes TGLOverlayElement.
8. Trailing white space has been removed in all files.
Restructure low-level interface to OpenGL (Timur)
=========================================
1. Allow sharing GL resources among viewers.
2. Do not bind GL-output (windowed or offscreen) to ROOT GUI.
New classes TGLContext, TGLFormat, TGLWidget.
This oboletes TGLKernel and TVirtualGL classes.
Revision
16090 -
(
view)
(
download)
(
as text)
(
annotate)
-
[select for diffs]
Modified
Wed Aug 23 14:39:40 2006 UTC (8 years, 5 months ago) by
brun
Original Path:
trunk/gl/src/TGLLogicalShape.cxx
File length: 5394 byte(s)
Diff to
previous 15166
From Matevz Tadel:
1) Implementation of two-level (secondary) selection
Rendering objects can provide a new level of interactivity, for
example a TPointSet3D holding a set of clusters can attach a pointer
to original cluster to each point and receive notifications when a
specified cluster was clicked.
Secondary selection is activated by Control-Left clicking into the
GL window.
2) Improve control over camera-reset behaviour
Allow user to prevent camera reset on scene update and
double-click.
3) Improvements in TPointSet3D(GL)
Detailed ChangeLog
==================
* base/inc/TVirtualViewer3D.h:
Added virtual methods 'void ResetCameras(){}' and 'void
ResetCamerasAfterNextUpdate(){}'.
* gl/inc/TGLScene.h:
* gl/src/TGLScene.cxx:
Implemented two-level selection. It is enabled for next selection
pass by calling ActivateSecSelect().
DoSelect() does not change the selected object but only indicates
which object has been selected by setting new member
'TGLPhysicalShape *fSelectionResult'. Caller (TGLViewer) must call
new method 'void ApplySelection()' to actually change the selected
object to the last selection result.
Changed declaration of selection buffer from being a static varable
within DoSelect() to data-member. This allows post-processing of
selection records needed by two-level selection.
* gl/inc/TGLCamera.h:
* gl/inc/TGLOrthoCamera.h:
* gl/inc/TGLPerspectiveCamera.h:
* gl/src/TGLCamera.cxx:
* gl/src/TGLOrthoCamera.cxx:
* gl/src/TGLPerspectiveCamera.cxx:
Added Bool_t argument with default value to:
virtual void TGLCamera::Setup(const TGLBoundingBox & box, Bool_t
reset=kTRUE) = 0;
By setting it to false one can change camera parameters for new
scene bounding-box without repositioning the camera.
Added 'Bool_t checkSize' argument to OfInterest().
This is relevant for marker-classes which can have small
volume/length but are still visible as they are rendered in
pixel-coordinates. Value of this argument is needed in TGLScene
(DestroyPhysicals) and TGLViewer (AddObject). It is obtained by
calling virtual method TGLLogicalShape::IgnoreSizeForOfInterest().
This method returns false by defalut and is overriden in
TGLPolyMarker and TPointSet3DGL.
* gl/inc/TGLViewer.h:
* gl/src/TGLViewer.cxx:
Added controls for camera-reset behaviour.
Data-members: 'Bool_t fResetCamerasOnUpdate', 'Bool_t
fResetCamerasOnNextUpdate', 'Bool_t fResetCameraOnDoubleClick'.
Methods: 'ResetCameras()', 'ResetCamerasAfterNextUpdate()',
'ResetCurrentCamera()'.
Added an argument to 'void PostSceneBuildSetup(Bool_t resetCameras).
Added Bool_t return-value to RequestSelect(). It returns true if
result of the selection is different then fSelectedPhysical.
Added method ApplySelection() to interface with TGLScene
selection state. This is called from event-handling functions in
TGLViewer.
Added key-binding for 'Home': ResetCurrentCamera().
* gl/inc/TGLSAViewer.h:
* gl/src/TGLSAViewer.cxx:
Added description of new functionality to fgHelpText.
MSVC was complaining about fgHelpText being too long: I split it
into fgHelpText1 and fgHelpText2.
* gl/inc/TGLDrawFlags.h:
* gl/src/TGLDrawFlags.cxx:
Added members 'Bool_t fSelection' and 'Bool_t
fSecSelection' allowing passing of current selection state to
renderers. This is needed to allow different render-paths during
(secondary) selection.
We should consider passing TGLScene* and/or TGLViewer* down to
DirectDraw() of individual renderers.
* gl/src/TGLDrawable.cxx:
In ShouldCache() return false if secondary selection is in progress.
* gl/src/TGLPhysicalShape.cxx:
Handle new members in TGLDrawFlags.
* gl/inc/TGLLogicalShape.h:
* gl/src/TGLLogicalShape.cxx:
Added three new functions:
1) virtual Bool_t SupportsSecondarySelect() const { return kFALSE; }
This is called by TGLScene::DoSelect() to check is object that was
the result of primary selection supports secondary selection.
2) virtual void ProcessSelection(UInt_t* ptr, TGLViewer*, TGLScene*);
It is called back from TGLViewer after successful secondary
selection. As the object that does the rendering is the only one
that actually knows how the object sub-parts were named it has
to interpret the results.
Both of these should be overriden in classes that support
secondary selection, for example see TPointSet3DGL.
3) virtual Bool_t IgnoreSizeForOfInterest() const { return kFALSE; }
Signals to TGLScene and TGLViewer that volume/lenght of this
class' bounding box should not be considered when checking if
objects of this class are of interest to current camera.
* gl/inc/TGLObject.h:
* gl/src/TGLObject.cxx:
Changed second argument of function:
Bool_t SetModelCheckClass(TObject* obj, const Text_t* classname);
to 'TClass* cls'. This is much more efficient.
* g3d/inc/TPointSet3D.h:
* g3d/src/TPointSet3D.cxx:
Added support for per-point designations (one TObject* per point;
via casting it can be set to anything).
New virtual method 'void PointSelected(Int_t n)' that is called
back after successful secondary selection in TGLViewer (via
virtual TGLLogicalShape::ProcessSelection()).
* gl/inc/TPointSet3DGL.h:
* gl/src/TPointSet3DGL.cxx:
Added support for per-point selection. Point-sizes are taken into
account during selection (by modifying the projection
matrix).
Implemented 'virtual Bool_t TGLDrawable::ShouldCache()' to disable
caching when in primary selection (point-size improvements).
Cross-like marker types are now supported to some extent.
Improved structure of rendering code.
Override 'virtual Bool_t TGLLogicalShape::IgnoreSizeForOfInterest()'
to return true.
Multiply TAttMarker::GetMarkerSize() by 5 before applying.
* gl/inc/TGLPolyMarker.h:
Override 'virtual Bool_t TGLLogicalShape::IgnoreSizeForOfInterest()'
to return true.
Revision
15134 -
(
view)
(
download)
(
as text)
(
annotate)
-
[select for diffs]
Modified
Tue May 23 04:47:42 2006 UTC (8 years, 8 months ago) by
brun
Original Path:
trunk/gl/src/TGLLogicalShape.cxx
File length: 4615 byte(s)
Diff to
previous 14754
From Federico Carminati:
"I have implemented all copy and equal operators needed to silence all
warnings in AliRoot, as requested. I have implemented shallow copies as
would do the default operators synthetized by the compiler.
Most operators are protected. If users complain, you just have to move
them into the public area, but class derivation is of course supported.
It has been a terrible job, I have modified 278 files, but the changes
are backward compabile, and this goes a long way to permitting user to
use the effc++ flag with root headers."
Revision
14580 -
(
view)
(
download)
(
as text)
(
annotate)
-
[select for diffs]
Modified
Fri Apr 7 08:43:59 2006 UTC (8 years, 9 months ago) by
brun
Original Path:
trunk/gl/src/TGLLogicalShape.cxx
File length: 4052 byte(s)
Diff to
previous 14064
From Matevz Tadel:
Introduce a new set of classes dedicated to event visualisation.
TGLObject: base-class for direct GL renderers
TAttBBox: interface, helps maintain/calculate bounding-box
needed for TGLObject (see TPointSet3D and TPointSet3DGL)
TPointSet3D: a demo class for direct GL rendering
TPointSet3DGL:
Mods in existing classes to interface the new classes
Revision
14064 -
(
view)
(
download)
(
as text)
(
annotate)
-
[select for diffs]
Modified
Mon Feb 20 11:02:19 2006 UTC (8 years, 11 months ago) by
brun
Original Path:
trunk/gl/src/TGLLogicalShape.cxx
File length: 3989 byte(s)
Diff to
previous 13781
From Richard:
Cleanup of shape code:
i) Remaining minodr code from TGLSceneObject moved to TGLLogicalShape or
derv. shape classes.
ii) Remove obsolete TGLSceneObject class.
iii) Move shape classes (TGLFaceSet etc) to own .h/.cxx + now derv. from
TGLogicalShape directly
Plus other minor tidying up.
WARNING!!
if you check-out from CVS, do
rm gl/src/G_*, gl/src/*.o
make
Revision
13781 -
(
view)
(
download)
(
as text)
(
annotate)
-
[select for diffs]
Modified
Thu Jan 5 15:11:27 2006 UTC (9 years ago) by
brun
Original Path:
trunk/gl/src/TGLLogicalShape.cxx
File length: 2982 byte(s)
Diff to
previous 13316
From Richard:
Performance improvements:
i) All drawables now implement SuportsLOD() method to test if they can
respond to LOD (tesselation) quality hint. If not the somewhat costly
projection size calculation can be skipped.
ii) SupportLOD() means low level OpenGL display caching can be enabled
for all shapes (previously only spheres). For shapes which don't support
LOD we create single cache entry using shape ID and kUnsupportedLOD
flag.
Draw times reduced - varries from 10% (Mesa software only GL - no proper
display lists) to about 250% on fast GL card with decent on card memory.
Revision
12892 -
(
view)
(
download)
(
as text)
(
annotate)
-
[select for diffs]
Modified
Mon Oct 3 15:19:35 2005 UTC (9 years, 3 months ago) by
brun
Original Path:
trunk/gl/src/TGLLogicalShape.cxx
File length: 1504 byte(s)
Diff to
previous 11905
From Richard:
First implementation for interactive clipping, using OpenGL clip planes.
Initially we have plane & box - others later. See Help for description.
Known Bugs/Issues:
All in GUI:
i) Edit box takes keyboard focus and does not return to viewer pane when
clicked in. Hence all keys in viewer break - an existing general viewer
problem.
ii) Initial layout does not correctly hide the plane/box properties
panels, or scale for V side scroll bar.
Missing Features:
iii) CSG final pass and/or solid cappings.
iv) Can't rotate the box - need a TGLRotManip class soon.
v) Should be able to show and manipulate plane in similar fashion as
box.
vi) Trans/scale/rotate manipulators should be availible for any selected
object.
Revision
11866 -
(
view)
(
download)
(
as text)
(
annotate)
-
[select for diffs]
Added
Wed May 25 14:25:17 2005 UTC (9 years, 8 months ago) by
brun
Original Path:
trunk/gl/src/TGLLogicalShape.cxx
File length: 1441 byte(s)
From Richard Maunder:
Major changes to GL viewer to support:
i) Logical/Physical shape pairings
ii) Level of detail (LOD) scheme (TGLSphere only using at present)
iii) Common display list cache
iv) Scene rebuilds for large geometries
v) Some basic interactivity improvements - draw timeouts, drop low LOD
shapes etc
vi) New camara interactions:
Left Mouse: Rotate
Middle Mouse: Truck (pan parallel to camera film plane)
Right Mouse: Side-side drag dolly/zoom
Double click any button to reset the camera.
The previous pan with arrow keys, and zoom on mouse wheel are still
supported.
Camera interaction is default in viewer. These extra camera modes mean
there are not enough mouse buttons for previous right context/select.
To select / invoke context menu use Shift+Left Button and Shift+Right
Button respectively.
This form allows you to request diffs between any two revisions of this file.
For each of the two "sides" of the diff,
enter a numeric revision.