34 #ifdef G4VIS_BUILD_OPENGL_DRIVER
51 G4OpenGLImmediateSceneHandler::G4OpenGLImmediateSceneHandler
53 G4OpenGLSceneHandler (system, fSceneIdCount++, name)
56 G4OpenGLImmediateSceneHandler::~G4OpenGLImmediateSceneHandler ()
61 G4bool G4OpenGLImmediateSceneHandler::AddPrimitivePreamble(
const G4VMarker& visible)
63 return AddPrimitivePreambleInternal(visible,
true,
false);
65 G4bool G4OpenGLImmediateSceneHandler::AddPrimitivePreamble(
const G4Polyline& visible)
67 return AddPrimitivePreambleInternal(visible,
false,
true);
69 G4bool G4OpenGLImmediateSceneHandler::AddPrimitivePreamble(
const G4Polyhedron& visible)
71 return AddPrimitivePreambleInternal(visible,
false,
false);
74 G4bool G4OpenGLImmediateSceneHandler::AddPrimitivePreambleInternal(
const G4Visible& visible,
bool isMarker,
bool isPolyline)
76 const G4Colour& c = GetColour (visible);
79 G4bool transparency_enabled =
true;
80 G4bool isMarkerNotHidden =
true;
81 G4OpenGLViewer* pViewer =
dynamic_cast<G4OpenGLViewer*
>(fpViewer);
83 transparency_enabled = pViewer->transparency_enabled;
84 isMarkerNotHidden = pViewer->fVP.IsMarkerNotHidden();
87 G4bool isMarkerOrPolyline = isMarker || isPolyline;
88 G4bool treatAsTransparent = transparency_enabled && opacity < 1.;
89 G4bool treatAsNotHidden = isMarkerNotHidden && (isMarker || isPolyline);
91 if (fProcessing2D) glDisable (GL_DEPTH_TEST);
93 if (isMarkerOrPolyline && isMarkerNotHidden)
94 glDisable (GL_DEPTH_TEST);
95 else {glEnable (GL_DEPTH_TEST); glDepthFunc (GL_LEQUAL);}
98 if (fThreePassCapable) {
103 if (!(fSecondPassForTransparency || fThirdPassForNonHiddenMarkers)) {
105 if (treatAsTransparent) {
106 fSecondPassForTransparencyRequested =
true;
108 if (treatAsNotHidden) {
109 fThirdPassForNonHiddenMarkersRequested =
true;
112 if (treatAsTransparent || treatAsNotHidden) {
118 if (fSecondPassForTransparency) {
119 if (!treatAsTransparent) {
125 if (fThirdPassForNonHiddenMarkers) {
126 if (!treatAsNotHidden) {
133 if (fpViewer->GetViewParameters().IsPicking()) {
134 glLoadName(++fPickName);
136 LoadAtts(visible, holder);
137 fPickMap[fPickName] = holder;
140 if (transparency_enabled) {
149 void G4OpenGLImmediateSceneHandler::AddPrimitive (
const G4Polyline& polyline)
151 G4bool furtherprocessing = AddPrimitivePreamble(polyline);
152 if (furtherprocessing) {
153 G4OpenGLSceneHandler::AddPrimitive(polyline);
157 void G4OpenGLImmediateSceneHandler::AddPrimitive (
const G4Polymarker& polymarker)
159 G4bool furtherprocessing = AddPrimitivePreamble(polymarker);
160 if (furtherprocessing) {
161 G4OpenGLSceneHandler::AddPrimitive(polymarker);
165 void G4OpenGLImmediateSceneHandler::AddPrimitive (
const G4Text& text)
169 G4bool furtherprocessing = AddPrimitivePreamble(text);
170 if (furtherprocessing) {
171 G4OpenGLSceneHandler::AddPrimitive(text);
175 void G4OpenGLImmediateSceneHandler::AddPrimitive (
const G4Circle& circle)
177 G4bool furtherprocessing = AddPrimitivePreamble(circle);
178 if (furtherprocessing) {
179 G4OpenGLSceneHandler::AddPrimitive(circle);
183 void G4OpenGLImmediateSceneHandler::AddPrimitive (
const G4Square& square)
185 G4bool furtherprocessing = AddPrimitivePreamble(square);
186 if (furtherprocessing) {
187 G4OpenGLSceneHandler::AddPrimitive(square);
191 void G4OpenGLImmediateSceneHandler::AddPrimitive (
const G4Scale& scale)
193 G4bool furtherprocessing = AddPrimitivePreamble(scale);
194 if (furtherprocessing) {
195 G4OpenGLSceneHandler::AddPrimitive(scale);
199 void G4OpenGLImmediateSceneHandler::AddPrimitive (
const G4Polyhedron& polyhedron)
203 G4bool furtherprocessing = AddPrimitivePreamble(polyhedron);
204 if (furtherprocessing) {
205 G4OpenGLSceneHandler::AddPrimitive(polyhedron);
209 void G4OpenGLImmediateSceneHandler::BeginPrimitives
212 G4OpenGLSceneHandler::BeginPrimitives (objectTransformation);
214 G4OpenGLTransform3D oglt (objectTransformation);
228 glMultMatrixd (oglt.GetGLMatrix ());
231 void G4OpenGLImmediateSceneHandler::EndPrimitives ()
238 G4OpenGLSceneHandler::EndPrimitives ();
241 void G4OpenGLImmediateSceneHandler::BeginPrimitives2D
244 G4OpenGLSceneHandler::BeginPrimitives2D(objectTransformation);
248 glMatrixMode (GL_PROJECTION);
251 #ifndef G4OPENGL_VERSION_2
252 glOrtho (-1., 1., -1., 1., -G4OPENGL_FLT_BIG, G4OPENGL_FLT_BIG);
254 glMatrixMode (GL_MODELVIEW);
257 G4OpenGLTransform3D oglt (objectTransformation);
258 glMultMatrixd (oglt.GetGLMatrix ());
259 glDisable(GL_DEPTH_TEST);
260 #ifndef G4OPENGL_VERSION_2
261 glDisable (GL_LIGHTING);
265 void G4OpenGLImmediateSceneHandler::EndPrimitives2D()
268 glMatrixMode (GL_PROJECTION);
270 glMatrixMode (GL_MODELVIEW);
276 G4OpenGLSceneHandler::EndPrimitives2D ();
279 void G4OpenGLImmediateSceneHandler::BeginModeling () {
283 void G4OpenGLImmediateSceneHandler::EndModeling () {
287 void G4OpenGLImmediateSceneHandler::ClearTransientStore ()
291 fpViewer -> SetView ();
292 fpViewer -> ClearView ();
293 fpViewer -> DrawView ();
297 G4int G4OpenGLImmediateSceneHandler::fSceneIdCount = 0;
G4double GetAlpha() const
virtual void BeginModeling()
G4double GetGreen() const
virtual void EndModeling()