61 fMarkerOrPolyline(false)
66 fTransform(po.fTransform),
69 fpG4TextPlus(po.fpG4TextPlus? new
G4TextPlus(*po.fpG4TextPlus): 0),
70 fMarkerOrPolyline(po.fMarkerOrPolyline)
78 fMarkerOrPolyline(false)
89 if (&rhs ==
this)
return *
this;
91 fTransform = rhs.fTransform;
93 fColour = rhs.fColour;
94 fpG4TextPlus = rhs.fpG4TextPlus?
new G4TextPlus(*rhs.fpG4TextPlus): 0;
95 fMarkerOrPolyline = rhs.fMarkerOrPolyline;
105 fMarkerOrPolyline(false)
110 fTransform(to.fTransform),
112 fStartTime(to.fStartTime),
113 fEndTime(to.fEndTime),
115 fpG4TextPlus(to.fpG4TextPlus? new
G4TextPlus(*to.fpG4TextPlus): 0),
116 fMarkerOrPolyline(to.fMarkerOrPolyline)
126 fMarkerOrPolyline(false)
137 if (&rhs ==
this)
return *
this;
139 fTransform = rhs.fTransform;
141 fStartTime = rhs.fStartTime;
142 fEndTime = rhs.fEndTime;
143 fColour = rhs.fColour;
144 fpG4TextPlus = rhs.fpG4TextPlus?
new G4TextPlus(*rhs.fpG4TextPlus): 0;
145 fMarkerOrPolyline = rhs.fMarkerOrPolyline;
171 glDrawBuffer (GL_BACK);
186 glDrawBuffer (GL_BACK);
204(
const G4Visible& visible,
bool isMarker,
bool isPolyline)
211 G4bool transparency_enabled =
true;
212 G4bool isMarkerNotHidden =
true;
219 G4bool isTransparent = opacity < 1.;
220 G4bool isMarkerOrPolyline = isMarker || isPolyline;
221 G4bool treatAsTransparent = transparency_enabled && isTransparent;
222 G4bool treatAsNotHidden = isMarkerNotHidden && isMarkerOrPolyline;
226 if (isMarkerOrPolyline && isMarkerNotHidden)
227 glDisable (GL_DEPTH_TEST);
228 else {glEnable (GL_DEPTH_TEST); glDepthFunc (GL_LEQUAL);}
238 if (treatAsTransparent) {
241 if (treatAsNotHidden) {
245 if (treatAsTransparent || treatAsNotHidden) {
252 if (!treatAsTransparent) {
259 if (!treatAsNotHidden) {
280 goto end_of_display_list_reuse_test;
283 goto end_of_display_list_reuse_test;
293 goto end_of_display_list_reuse_test;
302 goto end_of_display_list_reuse_test;
306 goto end_of_display_list_reuse_test;
310 if (pCurrentPV -> IsReplicated ()) {
319 if (!(pCurrentPV -> IsParameterised ()) &&
322 !(pCurrentPV -> IsReplicated () && axis ==
kRho) &&
340end_of_display_list_reuse_test:
348 if (glGetError() == GL_OUT_OF_MEMORY ||
351 "********************* WARNING! ********************"
352 "\n* Display list limit reached in OpenGL."
353 "\n* Continuing drawing WITHOUT STORING. Scene only partially refreshable."
355 ". Change with \"/vis/ogl/set/displayListLimit\"."
356 "\n***************************************************"
381 if (transparency_enabled) {
402 if (transparency_enabled) {
417 if (!usesGLCommands)
return false;
424 if (transparency_enabled) {
434 glMatrixMode (GL_PROJECTION);
440 glMatrixMode (GL_MODELVIEW);
445 glDisable (GL_LIGHTING);
448 glDisable (GL_LIGHTING);
450 glEnable (GL_LIGHTING);
461 glMatrixMode (GL_PROJECTION);
463 glMatrixMode (GL_MODELVIEW);
468 if (glGetError() == GL_OUT_OF_MEMORY) {
470 "ERROR: G4OpenGLStoredSceneHandler::AddPrimitivePostamble: Failure"
471 " to allocate display List for fTopPODL - try OpenGL Immediated mode."
476 if (glGetError() == GL_OUT_OF_MEMORY) {
478 "ERROR: G4OpenGLStoredSceneHandler::AddPrimitivePostamble: Failure"
479 " to allocate display List for fTopPODL - try OpenGL Immediated mode."
491 if (furtherprocessing) {
500 if (furtherprocessing) {
512 if (furtherprocessing) {
521 if (furtherprocessing) {
530 if (furtherprocessing) {
542 if (furtherprocessing) {
559 if (glGetError() == GL_OUT_OF_MEMORY) {
561 "ERROR: G4OpenGLStoredSceneHandler::EndModeling: Failure to allocate"
562 " display List for fTopPODL - try OpenGL Immediated mode."
567 for (
size_t i = 0; i <
fPOList.size (); i++) {
579 if (glGetError() == GL_OUT_OF_MEMORY) {
581 "ERROR: G4OpenGLStoredSceneHandler::EndModeling: Failure to allocate"
582 " display List for fTopPODL - try OpenGL Immediated mode."
597 for (
size_t i = 0; i <
fPOList.size (); i++)
608 for (
size_t i = 0; i <
fTOList.size (); i++)
620 for (
size_t i = 0; i <
fTOList.size (); i++)
G4GLOB_DLL std::ostream G4cerr
G4GLOB_DLL std::ostream G4cout
G4double GetAlpha() const
G4double GetGreen() const
G4VSolid * GetSolid() const
virtual void EndPrimitives()
G4bool fThirdPassForNonHiddenMarkersRequested
void ClearAndDestroyAtts()
virtual void BeginPrimitives2D(const G4Transform3D &objectTransformation)
G4bool fThirdPassForNonHiddenMarkers
void AddPrimitive(const G4Polyline &)
virtual void EndPrimitives2D()
virtual void BeginPrimitives(const G4Transform3D &objectTransformation)
G4bool fSecondPassForTransparency
std::map< GLuint, G4AttHolder * > fPickMap
G4bool fSecondPassForTransparencyRequested
virtual G4bool ExtraPOProcessing(const G4Visible &, size_t)
static G4int fSceneIdCount
bool AddPrimitivePreambleInternal(const G4Visible &visible, bool isMarker, bool isPolyline)
virtual ~G4OpenGLStoredSceneHandler()
std::map< const G4VSolid *, G4int, std::less< const G4VSolid * > > fSolidMap
std::vector< PO > fPOList
static G4int fDisplayListLimit
static G4bool fMemoryForDisplayLists
void AddPrimitive(const G4Polyline &)
G4bool AddPrimitivePreamble(const G4VMarker &visible)
G4OpenGLStoredSceneHandler(G4VGraphicsSystem &system, const G4String &name="")
virtual G4bool ExtraTOProcessing(const G4Visible &, size_t)
void BeginPrimitives(const G4Transform3D &objectTransformation)
static G4int fDisplayListId
void ClearTransientStore()
std::vector< TO > fTOList
void AddPrimitivePostamble()
void BeginPrimitives2D(const G4Transform3D &objectTransformation)
G4bool transparency_enabled
void g4GlOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far)
G4VPhysicalVolume * GetCurrentPV() const
G4LogicalVolume * GetLogicalVolume() const
virtual void GetReplicationData(EAxis &axis, G4int &nReplicas, G4double &width, G4double &offset, G4bool &consuming) const =0
virtual void BeginModeling()
void LoadAtts(const G4Visible &, G4AttHolder *)
const G4Colour & GetColour()
G4Transform3D fObjectTransformation
virtual void EndModeling()
const G4VisAttributes * fpVisAttribs
G4bool fReadyForTransients
virtual void ClearStore()
const G4VisAttributes * GetApplicableVisAttributes(const G4VisAttributes *) const
const G4ViewParameters & GetViewParameters() const
const std::vector< G4ModelingParameters::VisAttributesModifier > & GetVisAttributesModifiers() const
G4bool IsMarkerNotHidden() const
G4double GetStartTime() const
G4double GetEndTime() const
const G4VisAttributes * GetVisAttributes() const
const char * name(G4int ptype)