00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #ifdef G4VIS_BUILD_OPENGL_DRIVER
00034
00035 #ifndef G4OPENGLSTOREDSCENEHANDLER_HH
00036 #define G4OPENGLSTOREDSCENEHANDLER_HH
00037
00038 #include "globals.hh"
00039 #include "G4OpenGLSceneHandler.hh"
00040 #include "G4Text.hh"
00041 #include <map>
00042 #include <vector>
00043
00044 class G4OpenGLStored;
00045
00046 class G4OpenGLStoredSceneHandler: public G4OpenGLSceneHandler {
00047
00048 friend class G4OpenGLStoredViewer;
00049
00050 public:
00051
00052 G4OpenGLStoredSceneHandler (G4VGraphicsSystem& system, const G4String& name = "");
00053 virtual ~G4OpenGLStoredSceneHandler ();
00054 void BeginPrimitives (const G4Transform3D& objectTransformation);
00055 void EndPrimitives ();
00056 void BeginPrimitives2D (const G4Transform3D& objectTransformation);
00057 void EndPrimitives2D ();
00058 void BeginModeling ();
00059 void EndModeling ();
00060 void AddPrimitive (const G4Polyline&);
00061 void AddPrimitive (const G4Polymarker&);
00062 void AddPrimitive (const G4Circle&);
00063 void AddPrimitive (const G4Square&);
00064 void AddPrimitive (const G4Text&);
00065 void AddPrimitive (const G4Scale&);
00066 void AddPrimitive (const G4Polyhedron&);
00067 void AddPrimitive (const G4NURBS&);
00068 void ClearStore ();
00069 void ClearTransientStore ();
00070
00071 static G4int GetDisplayListLimit() {return fDisplayListLimit;}
00072 static void SetDisplayListLimit(G4int lim) {fDisplayListLimit = lim;}
00073
00074 protected:
00075
00076 G4bool AddPrimitivePreamble(const G4Visible& visible);
00077
00078
00079 void AddPrimitivePostamble();
00080
00081
00082
00083
00084
00085
00086
00087 virtual G4bool ExtraPOProcessing
00088 (const G4Visible&, size_t ) {return true;}
00089 virtual G4bool ExtraTOProcessing
00090 (const G4Visible&, size_t ) {return true;}
00091
00092 static G4int fSceneIdCount;
00093
00094 static G4int fDisplayListId;
00095 static G4bool fMemoryForDisplayLists;
00096 static G4int fDisplayListLimit;
00097
00098
00099
00100
00101
00102 GLint fTopPODL;
00103
00104
00105 struct G4TextPlus {
00106 G4TextPlus(const G4Text& text): fG4Text(text), fProcessing2D(false) {}
00107 G4Text fG4Text;
00108 G4bool fProcessing2D;
00109 };
00110
00111
00112 struct PO {
00113 PO();
00114 PO(const PO&);
00115 PO(G4int id, const G4Transform3D& tr = G4Transform3D());
00116 ~PO();
00117 PO& operator= (const PO&);
00118 G4int fDisplayListId;
00119 G4Transform3D fTransform;
00120 GLuint fPickName;
00121 G4Colour fColour;
00122 G4TextPlus* fpG4TextPlus;
00123 G4bool fMarkerOrPolyline;
00124 };
00125 std::vector<PO> fPOList;
00126
00127
00128 struct TO {
00129 TO();
00130 TO(const TO&);
00131 TO(G4int id, const G4Transform3D& tr = G4Transform3D());
00132 ~TO();
00133 TO& operator= (const TO&);
00134 G4int fDisplayListId;
00135 G4Transform3D fTransform;
00136 GLuint fPickName;
00137 G4double fStartTime, fEndTime;
00138 G4Colour fColour;
00139 G4TextPlus* fpG4TextPlus;
00140 G4bool fMarkerOrPolyline;
00141 };
00142 std::vector<TO> fTOList;
00143
00144
00145
00146 std::map <const G4VSolid*, G4int, std::less <const G4VSolid*> > fSolidMap;
00147
00148 };
00149
00150 #endif
00151
00152 #endif