Geant4 Cross Reference |
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.10 2003/06/10 17:13:33 gcosmo Exp $ >> 25 // GEANT4 tag $Name: geant4-05-02-patch-01 $ 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 "G4ios.hh" >> 38 37 #include "G4OpenGLStoredSceneHandler.hh" 39 #include "G4OpenGLStoredSceneHandler.hh" 38 #include "G4Text.hh" << 39 #include "G4Circle.hh" << 40 #include "G4UnitsTable.hh" << 41 #include "G4Scene.hh" << 42 #include "G4OpenGLTransform3D.hh" << 43 40 44 G4OpenGLStoredViewer::G4OpenGLStoredViewer 41 G4OpenGLStoredViewer::G4OpenGLStoredViewer 45 (G4OpenGLStoredSceneHandler& sceneHandler): 42 (G4OpenGLStoredSceneHandler& sceneHandler): 46 G4VViewer (sceneHandler, -1), << 43 G4VViewer (sceneHandler, -1), 47 G4OpenGLViewer (sceneHandler), << 44 G4OpenGLViewer (sceneHandler), 48 fG4OpenGLStoredSceneHandler (sceneHandler), << 45 fG4OpenGLStoredSceneHandler (sceneHandler) 49 fDepthTestEnable(true) << 50 { 46 { 51 fLastVP = fDefaultVP; // Update in sub-clas << 47 fLastVP = fDefaultVP; // Not sure if this gets executed before or >> 48 // after G4VViewer::G4VViewer!! Doesn't matter much. 52 } 49 } 53 50 54 G4OpenGLStoredViewer::~G4OpenGLStoredViewer () 51 G4OpenGLStoredViewer::~G4OpenGLStoredViewer () {} 55 52 56 void G4OpenGLStoredViewer::KernelVisitDecision 53 void G4OpenGLStoredViewer::KernelVisitDecision () { 57 54 58 // If there's a significant difference with 55 // If there's a significant difference with the last view parameters 59 // of either the scene handler or this viewe 56 // of either the scene handler or this viewer, trigger a rebuild. 60 << 57 61 if (!fG4OpenGLStoredSceneHandler.fTopPODL || 58 if (!fG4OpenGLStoredSceneHandler.fTopPODL || >> 59 CompareForKernelVisit(fG4OpenGLStoredSceneHandler.fLastVP) || 62 CompareForKernelVisit(fLastVP)) { 60 CompareForKernelVisit(fLastVP)) { 63 NeedKernelVisit (); 61 NeedKernelVisit (); 64 } << 62 } >> 63 fLastVP = fVP; >> 64 fG4OpenGLStoredSceneHandler.fLastVP = fVP; 65 } 65 } 66 66 67 G4bool G4OpenGLStoredViewer::CompareForKernelV 67 G4bool G4OpenGLStoredViewer::CompareForKernelVisit(G4ViewParameters& lastVP) { 68 << 68 69 if ( 69 if ( 70 (lastVP.GetDrawingStyle () != fVP.Get 70 (lastVP.GetDrawingStyle () != fVP.GetDrawingStyle ()) || 71 (lastVP.GetNumberOfCloudPoints() != fVP << 71 (lastVP.GetRepStyle () != fVP.GetRepStyle ()) || 72 (lastVP.IsAuxEdgeVisible () != fVP.IsA << 73 (lastVP.IsCulling () != fVP.IsC 72 (lastVP.IsCulling () != fVP.IsCulling ()) || 74 (lastVP.IsCullingInvisible () != fVP.IsC 73 (lastVP.IsCullingInvisible () != fVP.IsCullingInvisible ()) || 75 (lastVP.IsDensityCulling () != fVP.IsD 74 (lastVP.IsDensityCulling () != fVP.IsDensityCulling ()) || 76 (lastVP.IsCullingCovered () != fVP.IsC 75 (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 76 (lastVP.IsSection () != fVP.IsSection ()) || 85 // Section (DCUT) is NOT implemented loc << 77 // No need to visit kernel if section plane changes. 86 // (lastVP.IsCutaway () != fVP. << 78 (lastVP.IsCutaway () != fVP.IsCutaway ()) || 87 // Cutaways are implemented locally so w << 79 (lastVP.GetCutawayPlanes ().size () != >> 80 fVP.GetCutawayPlanes ().size ()) || >> 81 // No need to visit kernel if cutaway planes change. 88 (lastVP.IsExplode () != fVP.IsE 82 (lastVP.IsExplode () != fVP.IsExplode ()) || 89 (lastVP.GetNoOfSides () != fVP.Get << 83 (lastVP.GetNoOfSides () != fVP.GetNoOfSides ()) 90 (lastVP.GetGlobalMarkerScale() != fVP << 84 ) { 91 (lastVP.GetGlobalLineWidthScale() != fVP << 85 return true; 92 (lastVP.IsMarkerNotHidden () != fVP.IsM << 86 } 93 (lastVP.GetDefaultVisAttributes()->GetCo << 87 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 () && 88 if (lastVP.IsDensityCulling () && 109 (lastVP.GetVisibleDensity () != fVP.GetV 89 (lastVP.GetVisibleDensity () != fVP.GetVisibleDensity ())) 110 return true; << 111 << 112 // /***************************************** << 113 // If section (DCUT) is implemented locally, << 114 if (lastVP.IsSection () && << 115 (lastVP.GetSectionPlane () != fVP.GetSec << 116 return true; 90 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 } << 135 91 136 if (lastVP.IsExplode () && 92 if (lastVP.IsExplode () && 137 (lastVP.GetExplodeFactor () != fVP.GetEx 93 (lastVP.GetExplodeFactor () != fVP.GetExplodeFactor ())) 138 return true; 94 return true; 139 95 140 if (lastVP.IsSpecialMeshRendering() && << 141 (lastVP.GetSpecialMeshVolumes() != fVP.G << 142 return true; << 143 << 144 // Time window parameters operate on the exi << 145 // to rebuild even if they change. << 146 << 147 return false; 96 return false; 148 } 97 } 149 98 150 void G4OpenGLStoredViewer::DrawDisplayLists () 99 void G4OpenGLStoredViewer::DrawDisplayLists () { 151 100 152 // We moved these from G4OpenGLViewer to G4V << 101 if (fG4OpenGLStoredSceneHandler.fTopPODL) 153 // editing many lines below we introduce the << 102 glCallList (fG4OpenGLStoredSceneHandler.fTopPODL); 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 103 400 // Display time at "head" of time range, whi << 104 G4int nTODLs = fG4OpenGLStoredSceneHandler.fTODLList.size (); 401 if (fDisplayHeadTime && fEndTime < G4VisAttr << 105 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(); 106 glPushMatrix(); 408 glLoadIdentity(); << 107 G4OpenGLTransform3D oglt 409 G4Text headTimeText(G4BestUnit(fEndTime,"T << 108 (fG4OpenGLStoredSceneHandler.fTODLTransformList [i]); 410 G4Point3D(fDisplayHead << 109 glMultMatrixd (oglt.GetGLMatrix ()); 411 headTimeText.SetScreenSize(fDisplayHeadTim << 110 glCallList (fG4OpenGLStoredSceneHandler.fTODLList[i]); 412 G4VisAttributes visAtts (G4Colour << 413 (fDisplayHeadTime << 414 fDisplayHeadTime << 415 fDisplayHeadTime << 416 headTimeText.SetVisAttributes(&visAtts); << 417 AddPrimitiveForASingleFrame(headTimeText); << 418 glMatrixMode (GL_PROJECTION); << 419 glPopMatrix(); << 420 glMatrixMode (GL_MODELVIEW); << 421 glPopMatrix(); 111 glPopMatrix(); 422 } 112 } 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 } << 476 } 113 } 477 114 478 void G4OpenGLStoredViewer::AddPrimitiveForASin << 115 #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 116