ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4OpenGLStoredXViewer.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4OpenGLStoredXViewer.cc
1 //
2 // ********************************************************************
3 // * License and Disclaimer *
4 // * *
5 // * The Geant4 software is copyright of the Copyright Holders of *
6 // * the Geant4 Collaboration. It is provided under the terms and *
7 // * conditions of the Geant4 Software License, included in the file *
8 // * LICENSE and available at http://cern.ch/geant4/license . These *
9 // * include a list of copyright holders. *
10 // * *
11 // * Neither the authors of this software system, nor their employing *
12 // * institutes,nor the agencies providing financial support for this *
13 // * work make any representation or warranty, express or implied, *
14 // * regarding this software system or assume any liability for its *
15 // * use. Please see the license in the file LICENSE and URL above *
16 // * for the full disclaimer and the limitation of liability. *
17 // * *
18 // * This code implementation is the result of the scientific and *
19 // * technical work of the GEANT4 collaboration. *
20 // * By using, copying, modifying or distributing the software (or *
21 // * any work based on the software) you agree to acknowledge its *
22 // * use in resulting scientific publications, and indicate your *
23 // * acceptance of all terms of the Geant4 Software license. *
24 // ********************************************************************
25 //
26 //
27 //
28 //
29 // Andrew Walkden 7th February 1997
30 // Class G4OpenGLStoredXViewer : a class derived from G4OpenGLXViewer and
31 // G4OpenGLStoredViewer.
32 
33 #ifdef G4VIS_BUILD_OPENGLX_DRIVER
34 
35 #include "G4OpenGLStoredXViewer.hh"
36 
38 #include "G4ios.hh"
39 #include "G4Threading.hh"
40 
41 G4OpenGLStoredXViewer::
42 G4OpenGLStoredXViewer (G4OpenGLStoredSceneHandler& sceneHandler,
43  const G4String& name)
44  : G4VViewer (sceneHandler, sceneHandler.IncrementViewCount (), name),
45  G4OpenGLViewer (sceneHandler),
46  G4OpenGLXViewer (sceneHandler),
47  G4OpenGLStoredViewer (sceneHandler)
48 {
49  if (fViewId < 0) return; // In case error in base class instantiation.
50 
51  if (!vi_stored) {
52  fViewId = -1; // This flags an error.
53  G4cerr << "G4OpenGLStoredXViewer::G4OpenGLStoredXViewer -"
54  " G4OpenGLXViewer couldn't get a visual." << G4endl;
55  return;
56  }
57 }
58 
59 G4OpenGLStoredXViewer::~G4OpenGLStoredXViewer () {}
60 
61 void G4OpenGLStoredXViewer::Initialise () {
62 
63 #ifdef G4DEBUG_VIS_OGL
64  printf("G4OpenGLStoredXViewer::Initialise\n");
65 #endif
66  CreateGLXContext (vi_stored);
67  CreateMainWindow ();
68  CreateFontLists ();
69 
70  InitializeGLView ();
71 
72  glDrawBuffer (GL_BACK);
73 }
74 
75 void G4OpenGLStoredXViewer::DrawView () {
76 
77 #ifdef G4DEBUG_VIS_OGL
78  printf("G4OpenGLStoredXViewer::DrawView\n");
79 #endif
80 
81  G4ViewParameters::DrawingStyle style = GetViewParameters().GetDrawingStyle();
82 
83  // See if things have changed from last time and remake if necessary...
84  // The fNeedKernelVisit flag might have been set by the user in
85  // /vis/viewer/rebuild, but if not, make decision and set flag only
86  // if necessary...
87  if (!fNeedKernelVisit) KernelVisitDecision ();
88  G4bool kernelVisitWasNeeded = fNeedKernelVisit; // Keep (ProcessView resets).
89  ProcessView ();
90 
91  if(style!=G4ViewParameters::hlr && haloing_enabled) {
92 
93  HaloingFirstPass ();
94  DrawDisplayLists ();
95 #ifdef G4DEBUG_VIS_OGL
96  printf("G4OpenGLStoredXViewer::DrawView flush \n");
97 #endif
98  glFlush ();
99 
100  HaloingSecondPass ();
101 
102  DrawDisplayLists ();
103 
104  } else {
105 
106  if (!kernelVisitWasNeeded) {
107 #ifdef G4DEBUG_VIS_OGL
108  printf("G4OpenGLStoredXViewer::DrawView NO need kernel visit\n");
109 #endif
110  DrawDisplayLists ();
111 
112  } else {
113 
114 #ifdef G4DEBUG_VIS_OGL
115  printf("G4OpenGLStoredXViewer::DrawView NEED kernel visit\n");
116 #endif
117  // However, union cutaways are implemented in DrawDisplayLists, so make
118  // an extra pass...
119  if (fVP.IsCutaway() &&
120  fVP.GetCutawayMode() == G4ViewParameters::cutawayUnion) {
121  ClearView();
122  DrawDisplayLists ();
123  } else { // ADD TO AVOID KernelVisit=1 and nothing to display
124  DrawDisplayLists ();
125  }
126  }
127  }
128 
129  FinishView ();
130 
131 }
132 
133 void G4OpenGLStoredXViewer::FinishView () {
134 #ifdef G4DEBUG_VIS_OGL
135  printf("G4OpenGLStoredXViewer::FinishView\n");
136 #endif
137  glXWaitGL (); //Wait for effects of all previous OpenGL commands to
138  //be propogated before progressing.
139 
140 #ifdef G4DEBUG_VIS_OGL
141  printf("G4OpenGLStoredXViewer::FinishView flush \n");
142 #endif
143  glFlush (); //FIXME
144 
145  GLint renderMode;
146  glGetIntegerv(GL_RENDER_MODE, &renderMode);
147  if (renderMode == GL_RENDER) glXSwapBuffers (dpy, win);
148 }
149 
150 #endif