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_OPENGLWIN32_DRIVER
00034
00035 #include "G4OpenGLStoredWin32Viewer.hh"
00036
00037 #include "G4OpenGLStoredSceneHandler.hh"
00038
00039 #include "G4ios.hh"
00040
00041 G4OpenGLStoredWin32Viewer::G4OpenGLStoredWin32Viewer
00042 (G4OpenGLStoredSceneHandler& sceneHandler,
00043 const G4String& name):
00044 G4OpenGLViewer (sceneHandler),
00045 G4OpenGLWin32Viewer (sceneHandler),
00046 G4OpenGLStoredViewer (sceneHandler),
00047 G4VViewer (sceneHandler, sceneHandler.IncrementViewCount (), name) {
00048
00049 if (fViewId < 0) return;
00050 }
00051
00052 void G4OpenGLStoredWin32Viewer::Initialise () {
00053
00054
00055
00056 CreateGLWin32Context ();
00057 CreateMainWindow ();
00058 CreateFontLists ();
00059
00060
00061 ClearView ();
00062 FinishView ();
00063
00064 glDepthFunc (GL_LEQUAL);
00065 glDepthMask (GL_TRUE);
00066 }
00067
00068 void G4OpenGLStoredWin32Viewer::DrawView () {
00069
00070
00071
00072
00073 glViewport (0, 0, getWinWidth(), getWinHeight());
00074
00075 G4ViewParameters::DrawingStyle style = GetViewParameters().GetDrawingStyle();
00076
00077
00078
00079
00080
00081 if (!fNeedKernelVisit) KernelVisitDecision ();
00082 G4bool kernelVisitWasNeeded = fNeedKernelVisit;
00083 ProcessView ();
00084
00085 if(style!=G4ViewParameters::hlr &&
00086 haloing_enabled) {
00087
00088 HaloingFirstPass ();
00089 DrawDisplayLists ();
00090 glFlush ();
00091
00092 HaloingSecondPass ();
00093
00094 DrawDisplayLists ();
00095 FinishView ();
00096
00097 } else {
00098
00099
00100
00101 if (!kernelVisitWasNeeded) {
00102 DrawDisplayLists ();
00103 FinishView ();
00104 } else {
00105
00106
00107 if (fVP.IsCutaway() &&
00108 fVP.GetCutawayMode() == G4ViewParameters::cutawayUnion) {
00109 ClearView();
00110 DrawDisplayLists ();
00111 FinishView ();
00112 } else {
00113 DrawDisplayLists ();
00114 FinishView ();
00115 }
00116 }
00117 }
00118 }
00119
00121 void G4OpenGLStoredWin32Viewer::FinishView (
00122 )
00123
00124
00125 {
00126 if(!fHDC) return;
00127
00128 glFlush ();
00129 GLint renderMode;
00130 glGetIntegerv(GL_RENDER_MODE, &renderMode);
00131 if (renderMode == GL_RENDER) ::SwapBuffers(fHDC);
00132
00133
00134 MSG event;
00135 while ( ::PeekMessage(&event, NULL, 0, 0, PM_REMOVE) ) {
00136 ::TranslateMessage(&event);
00137 ::DispatchMessage (&event);
00138 }
00139 }
00140
00141 #endif