Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/visualization/OpenGL/src/G4OpenGLStoredViewer.cc

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

Diff markup

Differences between /visualization/OpenGL/src/G4OpenGLStoredViewer.cc (Version 11.3.0) and /visualization/OpenGL/src/G4OpenGLStoredViewer.cc (Version 3.2)


  1 //                                                  1 //
  2 // *******************************************      2 // ********************************************************************
  3 // * License and Disclaimer                    <<   3 // * DISCLAIMER                                                       *
  4 // *                                                4 // *                                                                  *
  5 // * The  Geant4 software  is  copyright of th <<   5 // * The following disclaimer summarizes all the specific disclaimers *
  6 // * the Geant4 Collaboration.  It is provided <<   6 // * of contributors to this software. The specific disclaimers,which *
  7 // * conditions of the Geant4 Software License <<   7 // * govern, are listed with their locations in:                      *
  8 // * LICENSE and available at  http://cern.ch/ <<   8 // *   http://cern.ch/geant4/license                                  *
  9 // * include a list of copyright holders.      << 
 10 // *                                                9 // *                                                                  *
 11 // * Neither the authors of this software syst     10 // * Neither the authors of this software system, nor their employing *
 12 // * institutes,nor the agencies providing fin     11 // * institutes,nor the agencies providing financial support for this *
 13 // * work  make  any representation or  warran     12 // * work  make  any representation or  warranty, express or implied, *
 14 // * regarding  this  software system or assum     13 // * regarding  this  software system or assume any liability for its *
 15 // * use.  Please see the license in the file  <<  14 // * use.                                                             *
 16 // * for the full disclaimer and the limitatio << 
 17 // *                                               15 // *                                                                  *
 18 // * This  code  implementation is the result  <<  16 // * This  code  implementation is the  intellectual property  of the *
 19 // * technical work of the GEANT4 collaboratio <<  17 // * GEANT4 collaboration.                                            *
 20 // * By using,  copying,  modifying or  distri <<  18 // * By copying,  distributing  or modifying the Program (or any work *
 21 // * any work based  on the software)  you  ag <<  19 // * based  on  the Program)  you indicate  your  acceptance of  this *
 22 // * use  in  resulting  scientific  publicati <<  20 // * statement, and all its terms.                                    *
 23 // * acceptance of all terms of the Geant4 Sof << 
 24 // *******************************************     21 // ********************************************************************
 25 //                                                 22 //
 26 //                                                 23 //
                                                   >>  24 // $Id: G4OpenGLStoredViewer.cc,v 1.5.2.1 2001/06/28 19:15:43 gunter Exp $
                                                   >>  25 // GEANT4 tag $Name:  $
 27 //                                                 26 //
 28 //                                             <<  27 // 
 29 // Andrew Walkden  7th February 1997               28 // Andrew Walkden  7th February 1997
 30 // Class G4OpenGLStoredViewer : Encapsulates t     29 // Class G4OpenGLStoredViewer : Encapsulates the `storedness' of
 31 //                            an OpenGL view,      30 //                            an OpenGL view, for inheritance by
 32 //                            derived (X, Xm..     31 //                            derived (X, Xm...) classes.
 33                                                    32 
                                                   >>  33 #ifdef G4VIS_BUILD_OPENGL_DRIVER
                                                   >>  34 
 34 #include "G4OpenGLStoredViewer.hh"                 35 #include "G4OpenGLStoredViewer.hh"
 35                                                    36 
 36 #include "G4PhysicalConstants.hh"              <<  37 #include <GL/gl.h>
 37 #include "G4OpenGLStoredSceneHandler.hh"       <<  38 #include <GL/glx.h>
 38 #include "G4Text.hh"                           <<  39 #include <GL/glu.h>
 39 #include "G4Circle.hh"                         <<  40 
 40 #include "G4UnitsTable.hh"                     <<  41 #include "G4ios.hh"
 41 #include "G4Scene.hh"                          <<  42 #include <assert.h>
 42 #include "G4OpenGLTransform3D.hh"              <<  43 #include <unistd.h>
 43                                                <<  44 
 44 G4OpenGLStoredViewer::G4OpenGLStoredViewer     <<  45 class G4OpenGLStoredSceneHandler;
 45 (G4OpenGLStoredSceneHandler& sceneHandler):    <<  46 
 46 G4VViewer (sceneHandler, -1),                  <<  47 G4OpenGLStoredViewer::G4OpenGLStoredViewer (G4OpenGLStoredSceneHandler& scene):
 47 G4OpenGLViewer (sceneHandler),                 <<  48 G4VViewer (scene, -1),  
 48 fG4OpenGLStoredSceneHandler (sceneHandler),    <<  49 G4OpenGLViewer (scene), 
 49 fDepthTestEnable(true)                         <<  50 fSceneHandler (scene)
 50 {                                              <<  51 {}
 51   fLastVP = fDefaultVP;  // Update in sub-clas << 
 52 }                                              << 
 53                                                    52 
 54 G4OpenGLStoredViewer::~G4OpenGLStoredViewer ()     53 G4OpenGLStoredViewer::~G4OpenGLStoredViewer () {}
 55                                                    54 
 56 void G4OpenGLStoredViewer::KernelVisitDecision     55 void G4OpenGLStoredViewer::KernelVisitDecision () {
 57                                                    56   
 58   // If there's a significant difference with  <<  57   // Trigger a display List refresh if necessary.  This is a checklist
 59   // of either the scene handler or this viewe <<  58   // of relevant view parameters.
 60                                                <<  59 
 61   if (!fG4OpenGLStoredSceneHandler.fTopPODL || <<  60   static G4ViewParameters lastVP;  // Initialised to default.
 62       CompareForKernelVisit(fLastVP)) {        <<  61   G4bool need = false;
 63     NeedKernelVisit ();                        << 
 64   }                                            << 
 65 }                                              << 
 66                                                    62 
 67 G4bool G4OpenGLStoredViewer::CompareForKernelV << 
 68                                                << 
 69   if (                                             63   if (
 70       (lastVP.GetDrawingStyle ()    != fVP.Get     64       (lastVP.GetDrawingStyle ()    != fVP.GetDrawingStyle ())    ||
 71       (lastVP.GetNumberOfCloudPoints()  != fVP <<  65       (lastVP.GetRepStyle ()        != fVP.GetRepStyle ())        ||
 72       (lastVP.IsAuxEdgeVisible ()   != fVP.IsA << 
 73       (lastVP.IsCulling ()          != fVP.IsC     66       (lastVP.IsCulling ()          != fVP.IsCulling ())          ||
 74       (lastVP.IsCullingInvisible () != fVP.IsC     67       (lastVP.IsCullingInvisible () != fVP.IsCullingInvisible ()) ||
 75       (lastVP.IsDensityCulling ()   != fVP.IsD     68       (lastVP.IsDensityCulling ()   != fVP.IsDensityCulling ())   ||
 76       (lastVP.IsCullingCovered ()   != fVP.IsC     69       (lastVP.IsCullingCovered ()   != fVP.IsCullingCovered ())   ||
 77       (lastVP.GetCBDAlgorithmNumber() !=       << 
 78        fVP.GetCBDAlgorithmNumber())            << 
 79       // Note: Section and Cutaway can reveal  << 
 80       // backface culling is implemented, the  << 
 81       // the back-facing faces are not there.  << 
 82       // (commented out) backface culling (it  << 
 83       // in fact, performance seems to improve << 
 84       (lastVP.IsSection ()          != fVP.IsS     70       (lastVP.IsSection ()          != fVP.IsSection ())          ||
 85       // Section (DCUT) is NOT implemented loc <<  71       // No need if section plane changes.
 86       // (lastVP.IsCutaway ()          != fVP. <<  72       (lastVP.IsCutaway ()          != fVP.IsCutaway ())          ||
 87       // Cutaways are implemented locally so w <<  73       (lastVP.GetCutawayPlanes ().size () !=
                                                   >>  74                                  fVP.GetCutawayPlanes ().size ()) ||
                                                   >>  75       // No need if cutaway planes change.
 88       (lastVP.IsExplode ()          != fVP.IsE     76       (lastVP.IsExplode ()          != fVP.IsExplode ())          ||
 89       (lastVP.GetNoOfSides ()       != fVP.Get <<  77       (lastVP.GetNoOfSides ()       != fVP.GetNoOfSides ())
 90       (lastVP.GetGlobalMarkerScale()    != fVP <<  78       ) {
 91       (lastVP.GetGlobalLineWidthScale() != fVP <<  79     need = true;
 92       (lastVP.IsMarkerNotHidden ()  != fVP.IsM << 
 93       (lastVP.GetDefaultVisAttributes()->GetCo << 
 94        fVP.GetDefaultVisAttributes()->GetColou << 
 95       (lastVP.GetDefaultTextVisAttributes()->G << 
 96        fVP.GetDefaultTextVisAttributes()->GetC << 
 97       (lastVP.GetBackgroundColour ()!= fVP.Get << 
 98       (lastVP.IsPicking ()          != fVP.IsP << 
 99       (lastVP.GetVisAttributesModifiers() !=   << 
100        fVP.GetVisAttributesModifiers())        << 
101       (lastVP.IsSpecialMeshRendering() !=      << 
102        fVP.IsSpecialMeshRendering())           << 
103       (lastVP.GetSpecialMeshRenderingOption()  << 
104        fVP.GetSpecialMeshRenderingOption())    << 
105       )                                        << 
106   return true;                                 << 
107                                                << 
108   if (lastVP.IsDensityCulling () &&            << 
109       (lastVP.GetVisibleDensity () != fVP.GetV << 
110   return true;                                 << 
111                                                << 
112 //  /***************************************** << 
113 //   If section (DCUT) is implemented locally, << 
114   if (lastVP.IsSection () &&                   << 
115       (lastVP.GetSectionPlane () != fVP.GetSec << 
116     return true;                               << 
117 //   ***************************************** << 
118                                                << 
119   /******************************************* << 
120    If cutaways are implemented locally, commen << 
121    if (lastVP.IsCutaway ()) {                  << 
122    if (vp.GetCutawayMode() != fVP.GetCutawayMo << 
123    if (lastVP.GetCutawayPlanes ().size () !=   << 
124    fVP.GetCutawayPlanes ().size ()) return tru << 
125    for (size_t i = 0; i < lastVP.GetCutawayPla << 
126    if (lastVP.GetCutawayPlanes()[i] != fVP.Get << 
127    return true;                                << 
128    }                                           << 
129    ******************************************* << 
130                                                << 
131   if (lastVP.GetCBDAlgorithmNumber() > 0) {    << 
132     if (lastVP.GetCBDParameters().size() != fV << 
133     else if (lastVP.GetCBDParameters() != fVP. << 
134   }                                                80   }
135                                                    81 
136   if (lastVP.IsExplode () &&                   <<  82   if (!need && lastVP.IsDensityCulling () &&
137       (lastVP.GetExplodeFactor () != fVP.GetEx <<  83       (lastVP.GetVisibleDensity () != fVP.GetVisibleDensity ()))
138     return true;                               <<  84     need = true;
139                                                << 
140   if (lastVP.IsSpecialMeshRendering() &&       << 
141       (lastVP.GetSpecialMeshVolumes() != fVP.G << 
142     return true;                               << 
143                                                    85 
144   // Time window parameters operate on the exi <<  86   if (!need && lastVP.IsExplode () &&
145   // to rebuild even if they change.           <<  87       (lastVP.GetExplodeFactor () != fVP.GetExplodeFactor ()))
146                                                <<  88     need = true;
147   return false;                                <<  89       
                                                   >>  90   if (need) {
                                                   >>  91     lastVP = fVP;
                                                   >>  92     NeedKernelVisit ();
                                                   >>  93   }
148 }                                                  94 }
149                                                    95 
150 void G4OpenGLStoredViewer::DrawDisplayLists ()     96 void G4OpenGLStoredViewer::DrawDisplayLists () {
151                                                    97   
152   // We moved these from G4OpenGLViewer to G4V <<  98   if (fSceneHandler.fTopPODL) glCallList (fSceneHandler.fTopPODL);
153   // editing many lines below we introduce the << 
154 #define CONVENIENT_DOUBLE_ALIAS(q) const G4dou << 
155 #define CONVENIENT_BOOL_ALIAS(q) const G4bool& << 
156   CONVENIENT_DOUBLE_ALIAS(StartTime)           << 
157   CONVENIENT_DOUBLE_ALIAS(EndTime)             << 
158   CONVENIENT_DOUBLE_ALIAS(FadeFactor)          << 
159   CONVENIENT_BOOL_ALIAS(DisplayHeadTime)       << 
160   CONVENIENT_DOUBLE_ALIAS(DisplayHeadTimeX)    << 
161   CONVENIENT_DOUBLE_ALIAS(DisplayHeadTimeY)    << 
162   CONVENIENT_DOUBLE_ALIAS(DisplayHeadTimeSize) << 
163   CONVENIENT_DOUBLE_ALIAS(DisplayHeadTimeRed)  << 
164   CONVENIENT_DOUBLE_ALIAS(DisplayHeadTimeGreen << 
165   CONVENIENT_DOUBLE_ALIAS(DisplayHeadTimeBlue) << 
166   CONVENIENT_BOOL_ALIAS(DisplayLightFront)     << 
167   CONVENIENT_DOUBLE_ALIAS(DisplayLightFrontX)  << 
168   CONVENIENT_DOUBLE_ALIAS(DisplayLightFrontY)  << 
169   CONVENIENT_DOUBLE_ALIAS(DisplayLightFrontZ)  << 
170   CONVENIENT_DOUBLE_ALIAS(DisplayLightFrontT)  << 
171   CONVENIENT_DOUBLE_ALIAS(DisplayLightFrontRed << 
172   CONVENIENT_DOUBLE_ALIAS(DisplayLightFrontGre << 
173   CONVENIENT_DOUBLE_ALIAS(DisplayLightFrontBlu << 
174                                                << 
175   const G4Planes& cutaways = fVP.GetCutawayPla << 
176   G4bool cutawayUnion = fVP.IsCutaway() &&     << 
177   fVP.GetCutawayMode() == G4ViewParameters::cu << 
178   const size_t nCutaways = cutawayUnion? cutaw << 
179   G4int iPass = 1;                             << 
180   G4bool secondPassForTransparencyRequested =  << 
181   G4bool thirdPassForNonHiddenMarkersRequested << 
182   fDepthTestEnable = true;                     << 
183   glEnable (GL_DEPTH_TEST); glDepthFunc (GL_LE << 
184   do {                                         << 
185     for (size_t iCutaway = 0; iCutaway < nCuta << 
186                                                << 
187       if (cutawayUnion) {                      << 
188         double a[4];                           << 
189         a[0] = cutaways[iCutaway].a();         << 
190         a[1] = cutaways[iCutaway].b();         << 
191         a[2] = cutaways[iCutaway].c();         << 
192         a[3] = cutaways[iCutaway].d();         << 
193         glClipPlane (GL_CLIP_PLANE2, a);       << 
194         glEnable (GL_CLIP_PLANE2);             << 
195       }                                        << 
196                                                << 
197       G4bool isPicking = fVP.IsPicking();      << 
198                                                << 
199       for (size_t iPO = 0;                     << 
200            iPO < fG4OpenGLStoredSceneHandler.f << 
201         if (POSelected(iPO)) {                 << 
202           G4OpenGLStoredSceneHandler::PO& po = << 
203           fG4OpenGLStoredSceneHandler.fPOList[ << 
204           G4Colour c = po.fColour;             << 
205           DisplayTimePOColourModification(c,iP << 
206           const G4bool isTransparent = c.GetAl << 
207           if ( iPass == 1) {                   << 
208             if (isTransparent && transparency_ << 
209               secondPassForTransparencyRequest << 
210               continue;                        << 
211             }                                  << 
212             if (po.fMarkerOrPolyline && fVP.Is << 
213               thirdPassForNonHiddenMarkersRequ << 
214               continue;                        << 
215             }                                  << 
216           } else if (iPass == 2) {  // Second  << 
217             if (!isTransparent) {              << 
218               continue;                        << 
219             }                                  << 
220           } else {  // Third pass for non-hidd << 
221             if (!po.fMarkerOrPolyline) {       << 
222               continue;                        << 
223             }                                  << 
224           }                                    << 
225           if (isPicking) glLoadName(po.fPickNa << 
226           if (transparency_enabled) {          << 
227             glColor4d(c.GetRed(),c.GetGreen(), << 
228           } else {                             << 
229             glColor3d(c.GetRed(),c.GetGreen(), << 
230           }                                    << 
231           if (po.fMarkerOrPolyline && fVP.IsMa << 
232             if (fDepthTestEnable !=false) {    << 
233               glDisable (GL_DEPTH_TEST);       << 
234               fDepthTestEnable = false;        << 
235             }                                  << 
236           } else {                             << 
237             if (fDepthTestEnable !=true) {     << 
238               glEnable (GL_DEPTH_TEST); glDept << 
239               fDepthTestEnable = true;         << 
240             }                                  << 
241           }                                    << 
242           if (po.fpG4TextPlus) {               << 
243             if (po.fpG4TextPlus->fProcessing2D << 
244               glMatrixMode (GL_PROJECTION);    << 
245               glPushMatrix();                  << 
246               glLoadIdentity();                << 
247               g4GlOrtho (-1., 1., -1., 1., -G4 << 
248               glMatrixMode (GL_MODELVIEW);     << 
249               glPushMatrix();                  << 
250               glLoadIdentity();                << 
251               G4OpenGLTransform3D oglt (po.fTr << 
252               glMultMatrixd (oglt.GetGLMatrix  << 
253               // This text is from a PODL. We  << 
254               AddPrimitiveForASingleFrame(po.f << 
255             } else {                           << 
256               glPushMatrix();                  << 
257               G4OpenGLTransform3D oglt (po.fTr << 
258               glMultMatrixd (oglt.GetGLMatrix  << 
259               // This text is from a PODL. We  << 
260               AddPrimitiveForASingleFrame(po.f << 
261               glPopMatrix();                   << 
262             }                                  << 
263                                                << 
264             if (po.fpG4TextPlus->fProcessing2D << 
265               glMatrixMode (GL_PROJECTION);    << 
266               glPopMatrix();                   << 
267               glMatrixMode (GL_MODELVIEW);     << 
268               glPopMatrix();                   << 
269             }                                  << 
270           } else {                             << 
271             glPushMatrix();                    << 
272             G4OpenGLTransform3D oglt (po.fTran << 
273             glMultMatrixd (oglt.GetGLMatrix () << 
274             glCallList (po.fDisplayListId);    << 
275             glPopMatrix();                     << 
276           }                                    << 
277         }                                      << 
278       }                                        << 
279                                                << 
280       G4Transform3D lastMatrixTransform;       << 
281       G4bool first = true;                     << 
282                                                << 
283       for (size_t iTO = 0;                     << 
284            iTO < fG4OpenGLStoredSceneHandler.f << 
285         if (TOSelected(iTO)) {                 << 
286           G4OpenGLStoredSceneHandler::TO& to = << 
287           fG4OpenGLStoredSceneHandler.fTOList[ << 
288           const G4Colour& c = to.fColour;      << 
289           const G4bool isTransparent = c.GetAl << 
290           if ( iPass == 1) {                   << 
291             if (isTransparent && transparency_ << 
292               secondPassForTransparencyRequest << 
293               continue;                        << 
294             }                                  << 
295             if (to.fMarkerOrPolyline && fVP.Is << 
296               thirdPassForNonHiddenMarkersRequ << 
297               continue;                        << 
298             }                                  << 
299           } else if (iPass == 2) {  // Second  << 
300             if (!isTransparent) {              << 
301               continue;                        << 
302             }                                  << 
303           } else {  // Third pass for non-hidd << 
304             if (!to.fMarkerOrPolyline) {       << 
305               continue;                        << 
306             }                                  << 
307           }                                    << 
308           if (to.fMarkerOrPolyline && fVP.IsMa << 
309             if (fDepthTestEnable !=false) {    << 
310               glDisable (GL_DEPTH_TEST);       << 
311               fDepthTestEnable = false;        << 
312             }                                  << 
313           } else {                             << 
314             if (fDepthTestEnable !=true) {     << 
315               glEnable (GL_DEPTH_TEST); glDept << 
316               fDepthTestEnable = true;         << 
317             }                                  << 
318           }                                    << 
319           if (to.fEndTime >= fStartTime && to. << 
320             if (fVP.IsPicking()) glLoadName(to << 
321             if (to.fpG4TextPlus) {             << 
322               if (to.fpG4TextPlus->fProcessing << 
323                 glMatrixMode (GL_PROJECTION);  << 
324                 glPushMatrix();                << 
325                 glLoadIdentity();              << 
326                 g4GlOrtho (-1., 1., -1., 1., - << 
327                 glMatrixMode (GL_MODELVIEW);   << 
328                 glPushMatrix();                << 
329                 glLoadIdentity();              << 
330               }                                << 
331               G4OpenGLTransform3D oglt (to.fTr << 
332               glMultMatrixd (oglt.GetGLMatrix  << 
333               // This text is from a TODL. We  << 
334               AddPrimitiveForASingleFrame(to.f << 
335               if (to.fpG4TextPlus->fProcessing << 
336                 glMatrixMode (GL_PROJECTION);  << 
337                 glPopMatrix();                 << 
338                 glMatrixMode (GL_MODELVIEW);   << 
339                 glPopMatrix();                 << 
340               }                                << 
341             } else {                           << 
342               if (to.fTransform != lastMatrixT << 
343                 if (! first) {                 << 
344                   glPopMatrix();               << 
345                 }                              << 
346                 first = false;                 << 
347                 glPushMatrix();                << 
348                 G4OpenGLTransform3D oglt (to.f << 
349                 glMultMatrixd (oglt.GetGLMatri << 
350               }                                << 
351               const G4Colour& cc = to.fColour; << 
352               if (fFadeFactor > 0. && to.fEndT << 
353                 // Brightness scaling factor   << 
354                 G4double bsf = 1. - fFadeFacto << 
355                 ((fEndTime - to.fEndTime) / (f << 
356                 const G4Colour& bg = fVP.GetBa << 
357                 if (transparency_enabled) {    << 
358                   glColor4d                    << 
359                   (bsf * cc.GetRed() + (1. - b << 
360                    bsf * cc.GetGreen() + (1. - << 
361                    bsf * cc.GetBlue() + (1. -  << 
362                    bsf * cc.GetAlpha() + (1. - << 
363                 } else {                       << 
364                   glColor3d                    << 
365                   (bsf * cc.GetRed() + (1. - b << 
366                    bsf * cc.GetGreen() + (1. - << 
367                    bsf * cc.GetBlue() + (1. -  << 
368                 }                              << 
369               } else {                         << 
370                 if (transparency_enabled) {    << 
371                   glColor4d(cc.GetRed(),cc.Get << 
372                 } else {                       << 
373                   glColor3d(cc.GetRed(),cc.Get << 
374                 }                              << 
375               }                                << 
376               glCallList (to.fDisplayListId);  << 
377             }                                  << 
378             if (to.fTransform != lastMatrixTra << 
379               lastMatrixTransform = to.fTransf << 
380             }                                  << 
381           }                                    << 
382         }                                      << 
383       }                                        << 
384       if (! first) {                           << 
385         glPopMatrix();                         << 
386       }                                        << 
387                                                << 
388       if (cutawayUnion) glDisable (GL_CLIP_PLA << 
389     }  // iCutaway                             << 
390                                                << 
391     if (iPass == 2) secondPassForTransparencyR << 
392     if (iPass == 3) thirdPassForNonHiddenMarke << 
393                                                << 
394     if (secondPassForTransparencyRequested) iP << 
395     else if (thirdPassForNonHiddenMarkersReque << 
396     else break;                                << 
397                                                << 
398   } while (true);                              << 
399                                                    99   
400   // Display time at "head" of time range, whi << 100   G4int nTODLs = fSceneHandler.fTODLList.size ();
401   if (fDisplayHeadTime && fEndTime < G4VisAttr << 101   for (int i = 0; i < nTODLs; i++) {
402     glMatrixMode (GL_PROJECTION);              << 
403     glPushMatrix();                            << 
404     glLoadIdentity();                          << 
405     g4GlOrtho (-1., 1., -1., 1., -G4OPENGL_FLT << 
406     glMatrixMode (GL_MODELVIEW);               << 
407     glPushMatrix();                               102     glPushMatrix();
408     glLoadIdentity();                          << 103     G4OpenGLTransform3D oglt (fSceneHandler.fTODLTransformList [i]);
409     G4Text headTimeText(G4BestUnit(fEndTime,"T << 104     glMultMatrixd (oglt.GetGLMatrix ());
410                         G4Point3D(fDisplayHead << 105     glCallList (fSceneHandler.fTODLList[i]);
411     headTimeText.SetScreenSize(fDisplayHeadTim << 
412     G4VisAttributes visAtts (G4Colour          << 
413                              (fDisplayHeadTime << 
414                               fDisplayHeadTime << 
415                               fDisplayHeadTime << 
416     headTimeText.SetVisAttributes(&visAtts);   << 
417     AddPrimitiveForASingleFrame(headTimeText); << 
418     glMatrixMode (GL_PROJECTION);              << 
419     glPopMatrix();                                106     glPopMatrix();
420     glMatrixMode (GL_MODELVIEW);               << 
421     glPopMatrix();                             << 
422   }                                            << 
423                                                << 
424   // Display light front...                    << 
425   if (fDisplayLightFront && fEndTime < G4VisAt << 
426     G4double lightFrontRadius = (fEndTime - fD << 
427     if (lightFrontRadius > 0.) {               << 
428       G4Point3D lightFrontCentre(fDisplayLight << 
429       G4Point3D circleCentre = lightFrontCentr << 
430       G4double circleRadius = lightFrontRadius << 
431       if (fVP.GetFieldHalfAngle() > 0.) {      << 
432         // Perspective view.  Find horizon cen << 
433         G4Point3D targetPoint = fSceneHandler. << 
434         fVP.GetCurrentTargetPoint();           << 
435         G4double sceneRadius = fSceneHandler.G << 
436         if(sceneRadius <= 0.) sceneRadius = 1. << 
437         G4double cameraDistance = fVP.GetCamer << 
438         G4Point3D cameraPosition = targetPoint << 
439         G4Vector3D lightFrontToCameraDirection << 
440         G4double lightFrontCentreDistance = li << 
441         /*                                     << 
442          G4cout << "cameraPosition: " << camer << 
443          << ", lightFrontCentre: " << lightFro << 
444          << ", lightFrontRadius: " << lightFro << 
445          << ", lightFrontCentreDistance: " <<  << 
446          << ", dot: " << lightFrontToCameraDir << 
447          << G4endl;                            << 
448          */                                    << 
449         if (lightFrontToCameraDirection * fVP. << 
450           // Light front in front of camera... << 
451           G4double sineHorizonAngle = lightFro << 
452           circleCentre = lightFrontCentre + (l << 
453           circleRadius = lightFrontRadius * st << 
454           /*                                   << 
455            G4cout << "sineHorizonAngle: " << s << 
456            << ", circleCentre: " << circleCent << 
457            << ", circleRadius: " << circleRadi << 
458            << G4endl;                          << 
459            */                                  << 
460         } else {                               << 
461           circleRadius = -1.;                  << 
462         }                                      << 
463       }                                        << 
464       if (circleRadius > 0.) {                 << 
465         G4Circle lightFront(circleCentre);     << 
466         lightFront.SetWorldRadius(circleRadius << 
467         G4VisAttributes visAtts(G4Colour       << 
468          (fDisplayLightFrontRed,               << 
469           fDisplayLightFrontGreen,             << 
470           fDisplayLightFrontBlue));            << 
471         lightFront.SetVisAttributes(visAtts);  << 
472         AddPrimitiveForASingleFrame(lightFront << 
473       }                                        << 
474     }                                          << 
475   }                                               107   }
476 }                                                 108 }
477                                                   109 
478 void G4OpenGLStoredViewer::AddPrimitiveForASin << 110 #endif
479 {                                              << 
480   // We don't want this to get into a display  << 
481   // use the fMemoryForDisplayLists flag.      << 
482   fG4OpenGLStoredSceneHandler.fDoNotUseDisplay << 
483   fG4OpenGLStoredSceneHandler.G4OpenGLStoredSc << 
484   fG4OpenGLStoredSceneHandler.fDoNotUseDisplay << 
485 }                                              << 
486                                                << 
487 void G4OpenGLStoredViewer::AddPrimitiveForASin << 
488 {                                              << 
489   // We don't want this to get into a display  << 
490   // use the fMemoryForDisplayLists flag.      << 
491   fG4OpenGLStoredSceneHandler.fDoNotUseDisplay << 
492   fG4OpenGLStoredSceneHandler.G4OpenGLStoredSc << 
493   fG4OpenGLStoredSceneHandler.fDoNotUseDisplay << 
494 }                                              << 
495                                                   111