- Timestamp:
- Aug 14, 2007, 4:57:01 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/geant4/visualization/OpenGL/src/G4OpenGLStoredQtViewer.cc
r555 r564 25 25 // 26 26 // 27 // $Id: G4OpenGLStoredQtViewer.cc,v 1.1 8 2007/06/25 12:07:59$27 // $Id: G4OpenGLStoredQtViewer.cc,v 1.16 2007/06/25 16:38:13 $ 28 28 // GEANT4 tag $Name: geant4-08-02-patch-01 $ 29 29 // 30 // 30 // 31 31 // Class G4OpenGLStoredQtViewer : a class derived from G4OpenGLQtViewer and 32 // G4OpenGLStoredViewer.32 // G4OpenGLStoredViewer. 33 33 34 34 #ifdef G4VIS_BUILD_OPENGLQT_DRIVER 35 35 36 36 #include "G4OpenGLStoredQtViewer.hh" 37 #include "G4VisManager.hh" 37 38 38 39 #include "G4ios.hh" … … 41 42 (G4OpenGLStoredSceneHandler& sceneHandler, 42 43 const G4String& name): 43 G4OpenGLViewer (sceneHandler), 44 G4OpenGLQtViewer (sceneHandler), 45 G4OpenGLStoredViewer (sceneHandler), 46 G4VViewer (sceneHandler, sceneHandler.IncrementViewCount (), name) { 47 44 G4VViewer (sceneHandler, sceneHandler.IncrementViewCount (), name), 45 G4OpenGLViewer (sceneHandler), 46 G4OpenGLQtViewer (sceneHandler), 47 G4OpenGLStoredViewer (sceneHandler), 48 QGLWidget() // FIXME : gerer le pb du parent ! 49 { 50 nbPaint =0; 51 hasToRepaint =false; 48 52 if (fViewId < 0) return; // In case error in base class instantiation. 49 53 } 50 54 51 void G4OpenGLStoredQtViewer::Initialise () { 52 53 //Check that G4OpenGLQtViewer got a double buffered colour visual 54 55 CreateGLQtContext (); 56 CreateMainWindow (); 57 CreateFontLists (); 58 59 // clear the buffers and window. 60 ClearView (); 61 FinishView (); 62 63 glDepthFunc (GL_LEQUAL); 64 glDepthMask (GL_TRUE); 65 } 55 G4OpenGLStoredQtViewer::~G4OpenGLStoredQtViewer() { 56 printf("GLWidget::~GLWidget \n"); 57 makeCurrent(); 58 printf("GLWidget::~GLWidget END\n"); 59 } 60 61 void G4OpenGLStoredQtViewer::Initialise() { 62 printf("GLWidget::Initialise \n"); 63 readyToPaint = false; 64 CreateGLQtContext (); 65 printf("G4OpenGLStoredQtViewer::Initialise () 2\n"); 66 67 CreateMainWindow (this); 68 printf("G4OpenGLStoredQtViewer::Initialise () 3\n"); 69 70 CreateFontLists (); // FIXME Does nothing! 71 72 printf("readyToPaint = true \n"); 73 readyToPaint = true; 74 75 // First Draw 76 SetView(); 77 printf(" ClearView\n"); 78 ClearView (); //ok, put the background correct 79 ShowView(); 80 FinishView(); 81 } 82 83 void G4OpenGLStoredQtViewer::initializeGL () { 84 85 InitializeGLView (); 86 87 printf("G4OpenGLStoredQtViewer::InitialiseGL () 1\n"); 88 89 // clear the buffers and window. 90 ClearView (); 91 // printf("G4OpenGLStoredQtViewer::InitialiseGL () 2\n"); 92 FinishView (); 93 94 glDepthFunc (GL_LEQUAL); 95 glDepthMask (GL_TRUE); 96 97 hasToRepaint =true; 98 99 printf("G4OpenGLStoredQtViewer::InitialiseGL -------------------------------------------------------------------------------------\n"); 100 } 101 66 102 67 103 void G4OpenGLStoredQtViewer::DrawView () { 68 104 69 //Make sure current viewer is attached and clean... 70 //Qt version needed 71 // glXMakeCurrent (dpy, win, cx); 72 glViewport (0, 0, WinSize_x, WinSize_y); 73 74 G4ViewParameters::DrawingStyle style = GetViewParameters().GetDrawingStyle(); 75 76 //See if things have changed from last time and remake if necessary... 77 // The fNeedKernelVisit flag might have been set by the user in 78 // /vis/viewer/rebuild, but if not, make decision and set flag only 79 // if necessary... 80 if (!fNeedKernelVisit) KernelVisitDecision (); 81 G4bool kernelVisitWasNeeded = fNeedKernelVisit; // Keep (ProcessView resets). 82 ProcessView (); 83 84 if(style!=G4ViewParameters::hlr && 85 haloing_enabled) { 86 87 HaloingFirstPass (); 88 DrawDisplayLists (); 89 glFlush (); 90 91 HaloingSecondPass (); 92 93 DrawDisplayLists (); 94 FinishView (); 95 96 } else { 97 98 // If kernel visit was needed, drawing and FinishView will already 99 // have been done, so... 100 if (!kernelVisitWasNeeded) { 101 DrawDisplayLists (); 102 FinishView (); 103 } else { 104 // However, union cutaways are implemented in DrawDisplayLists, so make 105 // an extra pass... 106 if (fVP.IsCutaway() && 107 fVP.GetCutawayMode() == G4ViewParameters::cutawayUnion) { 108 ClearView(); 109 DrawDisplayLists (); 110 FinishView (); 111 } 112 } 113 } 114 } 105 printf("G4OpenGLStoredQtViewer::DrawView %d %d VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV\n",WinSize_x, WinSize_y); 106 107 G4ViewParameters::DrawingStyle style = GetViewParameters().GetDrawingStyle(); 108 109 //Make sure current viewer is attached and clean... 110 //Qt version needed 111 glViewport (0, 0, WinSize_x, WinSize_y); 112 113 //See if things have changed from last time and remake if necessary... 114 // The fNeedKernelVisit flag might have been set by the user in 115 // /vis/viewer/rebuild, but if not, make decision and set flag only 116 // if necessary... 117 if (!fNeedKernelVisit) KernelVisitDecision (); 118 G4bool kernelVisitWasNeeded = fNeedKernelVisit; // Keep (ProcessView resets). 119 ProcessView (); 120 121 122 if(style!=G4ViewParameters::hlr && 123 haloing_enabled) { 124 printf("G4OpenGLStoredQtViewer::DrawView DANS LE IF\n"); 125 126 HaloingFirstPass (); 127 DrawDisplayLists (); 128 glFlush (); 129 130 HaloingSecondPass (); 131 132 DrawDisplayLists (); 133 134 } else { 135 136 // If kernel visit was needed, drawing and FinishView will already 137 // have been done, so... 138 if (!kernelVisitWasNeeded) { 139 DrawDisplayLists (); 140 } else { 141 // However, union cutaways are implemented in DrawDisplayLists, so make 142 // an extra pass... 143 if (fVP.IsCutaway() && 144 fVP.GetCutawayMode() == G4ViewParameters::cutawayUnion) { 145 ClearView(); 146 DrawDisplayLists (); 147 } 148 } 149 } 150 151 FinishView (); 152 printf("G4OpenGLStoredQtViewer::DrawView %d %d ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ \n",WinSize_x, WinSize_y); 153 hasToRepaint =true; 154 } 155 115 156 116 157 ////////////////////////////////////////////////////////////////////////////// … … 120 161 //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!// 121 162 { 122 printf("................G4OpenGLStoredQtViewer::FinishView"); 123 if(!fWindow) return; 163 printf("G4OpenGLStoredQtViewer::FinishView VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV\n"); 124 164 125 165 glFlush (); 126 fWindow->swapBuffers (); 127 printf("................G4OpenGLStoredQtViewer::FinishView END"); 166 swapBuffers (); 167 printf("G4OpenGLStoredQtViewer::FinishView ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ \n"); 168 169 } 170 171 172 /** 173 - Lors du resize de la fenetre, on doit non pas redessiner le detecteur, mais aussi les evenements 174 */ 175 void G4OpenGLStoredQtViewer::resizeGL( 176 int aWidth 177 ,int aHeight) 178 { 179 glViewport(0, 0, aWidth, aHeight); 180 glMatrixMode(GL_PROJECTION); 181 glMatrixMode(GL_MODELVIEW); 182 183 if (((WinSize_x != (G4int)aWidth)) || (WinSize_y != (G4int) aHeight)) { 184 hasToRepaint =true; 185 } 186 WinSize_x = (G4int) aWidth; 187 WinSize_y = (G4int) aHeight; 188 189 printf("G4OpenGLStoredQtViewer::resizeGL ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ %d %d=%d %d=%d\n",hasToRepaint,width(),aWidth,height(),aHeight); 190 } 191 192 193 194 void G4OpenGLStoredQtViewer::paintGL() 195 { 196 if (!readyToPaint) { 197 printf("\n\nG4OpenGLStoredQtViewer::paintGL ============ Not ready %d\n",readyToPaint); 198 readyToPaint= true; 199 return; 200 } 201 // DO NOT RESIZE IF SIZE HAS NOT CHANGE : 202 // WHEN CLICK ON THE FRAME FOR EXAMPLE 203 // EXECEPT WHEN MOUSE MOVE EVENT 204 if ( !hasToRepaint) { 205 if (((WinSize_x == (G4int)width())) &&(WinSize_y == (G4int) height())) { 206 printf("\n\nG4OpenGLStoredQtViewer::paintGL ============ Dont repaint\n"); 207 return; 208 } 209 } 210 nbPaint++; 211 printf("\n\nG4OpenGLStoredQtViewer::paintGL VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV %d ready %d\n",nbPaint,readyToPaint); 212 WinSize_x = (G4int) width(); 213 WinSize_y = (G4int) height(); 214 215 glViewport (0, 0, width(), height()); 216 // glLoadIdentity(); 217 218 219 SetView(); 220 221 // // printf("before ClearView\n"); 222 printf(" ClearView\n"); 223 224 ClearView (); //ok, put the background correct 225 DrawView(); 226 227 hasToRepaint =false; 228 229 printf("G4OpenGLStoredQtViewer::paintGL ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ %d ready %d\n\n\n",nbPaint,readyToPaint); 230 } 231 232 void G4OpenGLStoredQtViewer::mousePressEvent(QMouseEvent *event) 233 { 234 printf("G4OpenGLStoredQtViewer::mousePressEvent\n"); 235 G4MousePressEvent(event->pos()); 236 } 237 238 void G4OpenGLStoredQtViewer::mouseMoveEvent(QMouseEvent *event) 239 { 240 G4MouseMoveEvent(event->x(),event->y(),event->buttons()); 241 // DrawView(); 242 } 243 244 245 void G4OpenGLStoredQtViewer::contextMenuEvent(QContextMenuEvent *e) 246 { 247 manageContextMenuEvent(e); 248 } 249 250 void G4OpenGLStoredQtViewer::updateQWidget() { 251 hasToRepaint= true; 252 updateGL(); 253 hasToRepaint= false; 128 254 } 129 255
Note: See TracChangeset
for help on using the changeset viewer.