1 | #include "main.h"
|
---|
2 |
|
---|
3 | unsigned int EventI = 0;
|
---|
4 |
|
---|
5 | void Loading()
|
---|
6 | {
|
---|
7 | char Buffer[1024];
|
---|
8 |
|
---|
9 | switch(mLoading_I)
|
---|
10 | {
|
---|
11 |
|
---|
12 |
|
---|
13 | case 0:{
|
---|
14 | printf("\n");
|
---|
15 | printf("######################################################################\n");
|
---|
16 | printf("# http://projects.hepforge.org/frog/ #\n");
|
---|
17 | printf("# Please have a look at the website for latest versions and news #\n");
|
---|
18 | printf("# Also register to the Frog mailing list if you are not a member yet #\n");
|
---|
19 | printf("######################################################################\n");
|
---|
20 | #ifndef FROG_LIGHTING
|
---|
21 | printf("# FROG_LIGHTING is not defined --> Lighting effects will not be used #\n");
|
---|
22 | printf("# Modify the MakeFile to define it in order to have nicer pictures #\n");
|
---|
23 | printf("######################################################################\n");
|
---|
24 | #endif
|
---|
25 | printf("\n");
|
---|
26 |
|
---|
27 | start = time ( NULL );
|
---|
28 |
|
---|
29 |
|
---|
30 | // TURN Vertical Synchronisation (VSYNC) OFF
|
---|
31 | // This allow the system to have more than 60 or 75FPS.
|
---|
32 | /*
|
---|
33 | #ifdef windows
|
---|
34 | if(WGL_EXT_swap_control){wglSwapIntervalEXT(0);}else{printf("WGL_EXT_swap_control is NOT OK\n");}
|
---|
35 | #else
|
---|
36 | if(GLX_SGI_swap_control){glXSwapIntervalSGI(0);}else{printf("GLX_SGI_swap_control is NOT OK\n");}
|
---|
37 | #endif
|
---|
38 | */
|
---|
39 |
|
---|
40 |
|
---|
41 | // Init the random number generator
|
---|
42 | srand (time(NULL));
|
---|
43 |
|
---|
44 | Fonts = new FROG_Fonts();
|
---|
45 | ViewScreen = new FROG_View_Screen("Screen");
|
---|
46 | ViewScreen->Reshape(WINDOW_WIDTH,WINDOW_HEIGHT);
|
---|
47 | sprintf(Buffer,"Reading %s",inputConfig.c_str());
|
---|
48 | ViewScreen->LoadingInProgress(0.0f,Buffer,Fonts,LogoTexture);
|
---|
49 |
|
---|
50 |
|
---|
51 | LoadCard(inputConfig.c_str());
|
---|
52 | if(!Card->IsTagPresent("InputGeom") && !Card->IsTagPresent("InputVisFile")){
|
---|
53 | printf("There is no .geom file neither than .vis file in the Config card\n");
|
---|
54 | printf("FROG will stop. Please update the Config card (%s)\n",inputConfig.c_str());
|
---|
55 | exit(0);
|
---|
56 | }
|
---|
57 |
|
---|
58 | }break;
|
---|
59 |
|
---|
60 | case 1:
|
---|
61 | ViewScreen->LoadingInProgress(1.0f,"Downloading Geometry\n(if necessary)",Fonts,LogoTexture);
|
---|
62 |
|
---|
63 | if(Card->IsTagPresent("InputGeom")){
|
---|
64 | inputGeom = Card->GetStringVector("InputGeom");
|
---|
65 | for(unsigned int g=0;g<inputGeom.size();g++){
|
---|
66 | inputGeom[g] = string((char*)DownLoadFile( (char*)inputGeom[g].c_str(), AbsolutePath.c_str() ) );
|
---|
67 | }
|
---|
68 | }
|
---|
69 | break;
|
---|
70 |
|
---|
71 | case 2:
|
---|
72 | /*
|
---|
73 | ViewScreen->LoadingInProgress(10.0f,"Downloading Events\n(if necessary)",Fonts,LogoTexture);
|
---|
74 |
|
---|
75 | if(inputVisFileFromCard.length()<3 && Card->IsTagPresent("InputVisFile")){
|
---|
76 | inputVisFileFromCard = Card->GetString("InputVisFile");
|
---|
77 | }
|
---|
78 | inputVisFile = string((char*)DownLoadFile( (char*)inputVisFileFromCard.c_str(), AbsolutePath.c_str() ) );
|
---|
79 | */
|
---|
80 | break;
|
---|
81 |
|
---|
82 | case 3:{
|
---|
83 | ViewScreen->LoadingInProgress(20.0f,"Loading Geometry",Fonts,LogoTexture);
|
---|
84 | if(geom)delete geom;
|
---|
85 | geom = new FROG_Geometry();
|
---|
86 | if(inputGeom.size()<=0){printf("Error : No Input Geometry File\n");exit(0);}
|
---|
87 |
|
---|
88 | while(inputGeom.size()>0){
|
---|
89 | ViewScreen->LoadingInProgress(20.f+30.f/inputGeom.size(),(char*)inputGeom[inputGeom.size()-1].c_str(),Fonts,LogoTexture);
|
---|
90 | geom->Load((char*)inputGeom[inputGeom.size()-1].c_str());
|
---|
91 | inputGeom.pop_back();
|
---|
92 | }
|
---|
93 | frogObjects_ = new FROG_Objects_Extended(geom,NULL,Card, Fonts);
|
---|
94 |
|
---|
95 |
|
---|
96 | }break;
|
---|
97 |
|
---|
98 | case 4:{
|
---|
99 | ViewScreen->LoadingInProgress(80.0f,"Loading .vis Files",Fonts,LogoTexture);
|
---|
100 |
|
---|
101 | if(events)delete events;
|
---|
102 | events = new FROG_Events(frogObjects_);
|
---|
103 | events->Load(inputVisFileFromCommand);
|
---|
104 | events->readEventToDisplay(Card);
|
---|
105 | if(SCREENSAVER)eventNumber = rand()%((int)events->NumberOfEvents());
|
---|
106 | event = events->GoToEvent(eventNumber);
|
---|
107 | }break;
|
---|
108 |
|
---|
109 | case 5:{
|
---|
110 | ViewScreen->LoadingInProgress(95.0f,"Views Initialisation",Fonts,LogoTexture);
|
---|
111 |
|
---|
112 | ViewScreen->displayFunc_ = displaytext;
|
---|
113 | std::vector<string> ViewsName = Card->GetStringVector("ActiveViews");
|
---|
114 | ViewMain = ViewScreen;
|
---|
115 | for(unsigned int i=0;i<ViewsName.size();i++){
|
---|
116 | char* tmp = new char[ViewsName[i].size()+1];
|
---|
117 | strcpy(tmp,ViewsName[i].c_str());
|
---|
118 | ActiveViews.push_back(FROG_VIEW::Create(tmp,frogObjects_));
|
---|
119 | }
|
---|
120 | ViewScreen->Reshape(WINDOW_WIDTH,WINDOW_HEIGHT);
|
---|
121 |
|
---|
122 | for(unsigned int j=0;j<ActiveViews.size();j++){
|
---|
123 | if(ViewMain==ViewScreen && ActiveViews[j]->IsSwapPossible()){ViewMain = ActiveViews[j];}
|
---|
124 | ActiveViews[j]->Reshape(WINDOW_WIDTH,WINDOW_HEIGHT);
|
---|
125 | ActiveViews[j]->displayFunc_ = &display2;
|
---|
126 | }
|
---|
127 | ViewMain->IsActive = true;
|
---|
128 | geom->updateGeomToDisplay((void*)frogObjects_);
|
---|
129 |
|
---|
130 | ViewMenu = new FROG_View_Menu("ViewMenu2",frogObjects_);
|
---|
131 | ViewMenu->Reshape(WINDOW_WIDTH,WINDOW_HEIGHT);
|
---|
132 | }break;
|
---|
133 |
|
---|
134 |
|
---|
135 | case 20:
|
---|
136 | ViewScreen->LoadingInProgress(99.0f,"Preparation for Display",Fonts,LogoTexture);
|
---|
137 |
|
---|
138 | glEnable (GL_DEPTH_TEST);
|
---|
139 |
|
---|
140 | glFrontFace(GL_CCW);
|
---|
141 | glEnable(GL_CULL_FACE);
|
---|
142 |
|
---|
143 | glEnable(GL_POINT_SMOOTH);
|
---|
144 | glHint(GL_POINT_SMOOTH_HINT, GL_NICEST);
|
---|
145 | //glHint(GL_POINT_SMOOTH_HINT, GL_FASTEST);
|
---|
146 |
|
---|
147 | glEnable(GL_LINE_SMOOTH);
|
---|
148 | glHint(GL_LINE_SMOOTH_HINT, GL_NICEST);
|
---|
149 | //glHint(GL_LINE_SMOOTH_HINT, GL_FASTEST);
|
---|
150 |
|
---|
151 | //glEnable(GL_POLYGON_SMOOTH);
|
---|
152 | //glHint(GL_POLYGON_SMOOTH_HINT, GL_NICEST);
|
---|
153 |
|
---|
154 | glEnable(GL_BLEND) ;
|
---|
155 | glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) ;
|
---|
156 |
|
---|
157 |
|
---|
158 | mLoading = false;
|
---|
159 | end = time ( NULL );
|
---|
160 | printf("Loading Time = %isec\n",(int)(end-start));
|
---|
161 |
|
---|
162 | glutDisplayFunc (display);
|
---|
163 | glutIdleFunc (display);
|
---|
164 |
|
---|
165 | glutKeyboardFunc (processNormalKeys);
|
---|
166 | glutSpecialFunc (processSpecialKeys);
|
---|
167 |
|
---|
168 | glutMouseFunc(processMouse);
|
---|
169 | glutMotionFunc(processMotion);
|
---|
170 | if(SCREENSAVER){
|
---|
171 | eventTime = 20;
|
---|
172 | glutPassiveMotionFunc(processPassiveMotion);
|
---|
173 | glutFullScreen();
|
---|
174 | }
|
---|
175 |
|
---|
176 |
|
---|
177 | if(SHOOTER){
|
---|
178 | mAutomaticShooter_LastEvent = events->Current_Event;
|
---|
179 | do{
|
---|
180 | frogObjects_->selectedObject_ = NULL;//mCLicked_DetId = (unsigned int) -1;
|
---|
181 | for(unsigned int j=0;j<ActiveViews.size();j++){ActiveViews[j]->MarkForUpdate();}
|
---|
182 | for(unsigned int i=0;i<4;i++)display();
|
---|
183 | char temp[255]; sprintf(temp,"AutomaticShooter_%04i.%s",SCREENSHOT,SCREENSHOT_FORMAT);
|
---|
184 | SaveScreenshot(temp,WINDOW_WIDTH,WINDOW_HEIGHT, display);
|
---|
185 | SCREENSHOT++;
|
---|
186 | event = events->NextEvent();
|
---|
187 | }while(events->Current_Event!=mAutomaticShooter_LastEvent);
|
---|
188 | exit(0);
|
---|
189 | }
|
---|
190 |
|
---|
191 | return;
|
---|
192 | break;
|
---|
193 |
|
---|
194 | default:
|
---|
195 | break;
|
---|
196 | }
|
---|
197 |
|
---|
198 | mLoading_I++;
|
---|
199 | }
|
---|
200 |
|
---|
201 | void reshape (int w, int h)
|
---|
202 | {
|
---|
203 | if (h == 0) h = 1;
|
---|
204 |
|
---|
205 | WINDOW_WIDTH = w;
|
---|
206 | WINDOW_HEIGHT = h;
|
---|
207 |
|
---|
208 | if(ViewScreen)ViewScreen->Reshape(WINDOW_WIDTH,WINDOW_HEIGHT);
|
---|
209 | for(unsigned int j=0;j<ActiveViews.size();j++){
|
---|
210 | ActiveViews[j]->Reshape(WINDOW_WIDTH,WINDOW_HEIGHT);
|
---|
211 | }
|
---|
212 | if(ViewMenu)ViewMenu->Reshape(WINDOW_WIDTH,WINDOW_HEIGHT);
|
---|
213 |
|
---|
214 | glutPostRedisplay ();
|
---|
215 | }
|
---|
216 |
|
---|
217 | void displaytext()
|
---|
218 | {
|
---|
219 | glColor4fv (Txt_Color);
|
---|
220 | Fonts->Font_Fixed_9_by_15->glPrint(WINDOW_WIDTH-126,WINDOW_HEIGHT - 30,"% 10i FPS", ViewScreen->FPS);
|
---|
221 | if(mHelpScreen){
|
---|
222 | if(events) Fonts->Font_Fixed_9_by_15->glPrint(0,WINDOW_HEIGHT - 14,"CurrentFile = ...%s",events->CurrentFile());
|
---|
223 |
|
---|
224 | Fonts->Font_Fixed_9_by_15->glPrint(150,WINDOW_HEIGHT - 45 ,"F1 = Open this Screen for Help");
|
---|
225 | Fonts->Font_Fixed_9_by_15->glPrint(150,WINDOW_HEIGHT - 60 ,"F2 = Open the Display Menu");
|
---|
226 | Fonts->Font_Fixed_9_by_15->glPrint(150,WINDOW_HEIGHT - 75 ,"F3 = use only for debug");
|
---|
227 | Fonts->Font_Fixed_9_by_15->glPrint(150,WINDOW_HEIGHT - 90 ,"F4 = Automatic ScreenShooter (Warning)");
|
---|
228 |
|
---|
229 | Fonts->Font_Fixed_9_by_15->glPrint(150,WINDOW_HEIGHT - 125 ,"F5 = SimTrack : ON/OFF");
|
---|
230 | Fonts->Font_Fixed_9_by_15->glPrint(150,WINDOW_HEIGHT - 140 ,"F6 = SimVertex : ON/OFF");
|
---|
231 | Fonts->Font_Fixed_9_by_15->glPrint(150,WINDOW_HEIGHT - 155 ,"F7 = PSimHits : ON/OFF");
|
---|
232 | Fonts->Font_Fixed_9_by_15->glPrint(150,WINDOW_HEIGHT - 170 ,"F8 = RecoTrack : ON/OFF");
|
---|
233 |
|
---|
234 | Fonts->Font_Fixed_9_by_15->glPrint(150,WINDOW_HEIGHT - 205 ,"F9 = SiStripCluster : ON/OFF");
|
---|
235 | Fonts->Font_Fixed_9_by_15->glPrint(150,WINDOW_HEIGHT - 220 ,"F10 = EcalHits : ON/OFF");
|
---|
236 | Fonts->Font_Fixed_9_by_15->glPrint(150,WINDOW_HEIGHT - 235 ,"F11 = HcalHits : ON/OFF");
|
---|
237 | Fonts->Font_Fixed_9_by_15->glPrint(150,WINDOW_HEIGHT - 250 ,"F12 = MuonHit/Seg : ON/OFF");
|
---|
238 |
|
---|
239 | Fonts->Font_Fixed_9_by_15->glPrint(150,WINDOW_HEIGHT - 285 ,"0 = Geometry to Display : NONE");
|
---|
240 | Fonts->Font_Fixed_9_by_15->glPrint(150,WINDOW_HEIGHT - 300 ,"9 = Geometry to Display : FULL");
|
---|
241 |
|
---|
242 | Fonts->Font_Fixed_9_by_15->glPrint(150,WINDOW_HEIGHT - 335 ,"LEFT = Previous Event");
|
---|
243 | Fonts->Font_Fixed_9_by_15->glPrint(150,WINDOW_HEIGHT - 350 ,"RIGHT = Next Event");
|
---|
244 | Fonts->Font_Fixed_9_by_15->glPrint(150,WINDOW_HEIGHT - 375 ,"UP = Increase Rotation");
|
---|
245 | Fonts->Font_Fixed_9_by_15->glPrint(150,WINDOW_HEIGHT - 390 ,"DOWN = Decrease Rotation");
|
---|
246 |
|
---|
247 | Fonts->Font_Fixed_9_by_15->glPrint(500,WINDOW_HEIGHT - 375 ,"PAGE UP = Previous VisFile");
|
---|
248 | Fonts->Font_Fixed_9_by_15->glPrint(500,WINDOW_HEIGHT - 390 ,"PAGE DOWN = Next VisFile");
|
---|
249 |
|
---|
250 | Fonts->Font_Fixed_9_by_15->glPrint(150,WINDOW_HEIGHT - 425 ,"p = Zoom In");
|
---|
251 | Fonts->Font_Fixed_9_by_15->glPrint(150,WINDOW_HEIGHT - 440 ,"m = Zoom Out");
|
---|
252 | Fonts->Font_Fixed_9_by_15->glPrint(150,WINDOW_HEIGHT - 455 ,"f = Maximize the active view");
|
---|
253 | Fonts->Font_Fixed_9_by_15->glPrint(150,WINDOW_HEIGHT - 470 ,"s = SlideShow : ON/OFF");
|
---|
254 | Fonts->Font_Fixed_9_by_15->glPrint(150,WINDOW_HEIGHT - 485 ,"t = TreeMenu : ON/OFF");
|
---|
255 |
|
---|
256 | Fonts->Font_Fixed_9_by_15->glPrint(150,WINDOW_HEIGHT - 515 ,"ENTER = Screenshot");
|
---|
257 | Fonts->Font_Fixed_9_by_15->glPrint(150,WINDOW_HEIGHT - 530 ,"SPACE = Rotation : ON/OFF");
|
---|
258 | Fonts->Font_Fixed_9_by_15->glPrint(150,WINDOW_HEIGHT - 545 ,"ESCAPE = Exit");
|
---|
259 | Fonts->Font_Fixed_9_by_15->glPrint(150,WINDOW_HEIGHT - 560 ,"q = Exit");
|
---|
260 | Fonts->Font_Fixed_9_by_15->glPrint(150,WINDOW_HEIGHT - 575 ,"a = Full Screen");
|
---|
261 |
|
---|
262 | Fonts->Font_Fixed_9_by_15->glPrint(120,3,"This program has been created by Loic Quertenmont, loic.quertenmont@cern.ch");
|
---|
263 | }else{
|
---|
264 | Fonts->Font_Fixed_9_by_15->glPrint(WINDOW_WIDTH-153,WINDOW_HEIGHT - 14,"Press F1 for Help");
|
---|
265 | if(event) Fonts->Font_Fixed_9_by_15->glPrint(0,WINDOW_HEIGHT - 14,"#Run %i #Event %i (%02i/%02i)",event->NRun_, event->NEvent_, events->Current_Event, (int)events->NumberOfEvents()-1);
|
---|
266 | if(event) Fonts->Font_Fixed_9_by_15->glPrint(0,WINDOW_HEIGHT - 29,"%s", event->EventDate_);
|
---|
267 |
|
---|
268 |
|
---|
269 | char temp[255];
|
---|
270 | if(frogObjects_->selectedObject_){
|
---|
271 | frogObjects_->selectedObject_->printInfos(temp);
|
---|
272 | if(frogObjects_->IsSelected_Geometry())sprintf(temp,"%s : Press '1' or '2' or ... to Display the parent object",temp);
|
---|
273 | Fonts->Font_Helvetica_10->glPrint(120,3,temp);
|
---|
274 | }
|
---|
275 |
|
---|
276 | }
|
---|
277 |
|
---|
278 | ViewScreen->DrawLogo(0,0,120,80,LogoTxtTexture, Fonts);
|
---|
279 | }
|
---|
280 |
|
---|
281 | void displayForScreenShot()
|
---|
282 | {
|
---|
283 | display2();
|
---|
284 | ViewMain->DisplayBkgGeom();
|
---|
285 | }
|
---|
286 |
|
---|
287 | void display2()
|
---|
288 | {
|
---|
289 | // Display the FrameWork
|
---|
290 | if(ZAxis_Color[3]>0){
|
---|
291 | glColor4fv (ZAxis_Color);
|
---|
292 | glLineWidth(ZAxis_Thickness);
|
---|
293 | glBegin (GL_LINES);
|
---|
294 | glNormal3f(0,1,0);
|
---|
295 | glVertex3f (0,0,-300);
|
---|
296 | glVertex3f (0,0,300);
|
---|
297 | glEnd();
|
---|
298 | glLineWidth(1);
|
---|
299 | }
|
---|
300 |
|
---|
301 | // Display the 3D Geometry (only if in a 3D View)
|
---|
302 | if(geom!=NULL){// && ViewMain->Type_==VIEW3D){
|
---|
303 | if(Geometry_WireFrame){
|
---|
304 | glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
|
---|
305 | }else{
|
---|
306 | glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
|
---|
307 | }
|
---|
308 | geom->display();
|
---|
309 | }
|
---|
310 |
|
---|
311 | // Display the Event
|
---|
312 | glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
|
---|
313 | if(event!=NULL) event->display();
|
---|
314 | }
|
---|
315 |
|
---|
316 |
|
---|
317 | void display()
|
---|
318 | {
|
---|
319 | //-------- update event file if required ------------
|
---|
320 | //updateEventsFile();
|
---|
321 |
|
---|
322 | glClearColor(BackGround_Color[0],BackGround_Color[1],BackGround_Color[2],1.0);
|
---|
323 | glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Reset le buffer de couleur et de profondeur
|
---|
324 |
|
---|
325 | if(ViewMenu->AlphaFx<1){
|
---|
326 | ViewMain->Display();
|
---|
327 | if(!ViewMain->screen_flag){
|
---|
328 | for(unsigned int j=0;j<ActiveViews.size();j++){
|
---|
329 | if(ActiveViews[j]!=ViewMain && ActiveViews[j]->Type_!=VIEWMENU) ActiveViews[j]->Display();
|
---|
330 | }
|
---|
331 | }
|
---|
332 | if(ViewScreen) ViewScreen->Display();
|
---|
333 | }
|
---|
334 | for(int j=ActiveViews.size()-1;j>=0;j--){
|
---|
335 | if(ActiveViews[j]->Type_==VIEWMENU){ActiveViews[j]->Display();}
|
---|
336 | }
|
---|
337 | ViewMenu->Display();
|
---|
338 |
|
---|
339 | glutSwapBuffers();
|
---|
340 |
|
---|
341 | SelectedObject_Counter++;
|
---|
342 | if(SelectedObject_Counter>25){
|
---|
343 | SelectedObject_Counter = 0;
|
---|
344 | frogObjects_->selectedObject_DisplayFlag = !frogObjects_->selectedObject_DisplayFlag;
|
---|
345 | }
|
---|
346 |
|
---|
347 | fflush(stdout);
|
---|
348 | }
|
---|
349 |
|
---|
350 | void updateEventsFile() {
|
---|
351 | // this function lauch a threat to download the input event file
|
---|
352 | // if required by the variable updateVisFileTime
|
---|
353 |
|
---|
354 | /*
|
---|
355 | #ifdef windows
|
---|
356 | if( updateVisFileTime>0 && !Thread_Run) {
|
---|
357 | char* argtosend = (char*)inputVisFileFromCard.c_str();
|
---|
358 |
|
---|
359 | Thread_H = CreateThread( NULL, 0, WinDownLoadFile, (void*)argtosend, 0, &Thread_Id);
|
---|
360 | if (Thread_H == NULL){
|
---|
361 | printf("Unable to create thread\n");
|
---|
362 | exit(1);
|
---|
363 | }
|
---|
364 | Thread_Run = true;
|
---|
365 | }
|
---|
366 |
|
---|
367 | static time_t upstart = time (NULL );
|
---|
368 | time_t upstop = time( NULL );
|
---|
369 | if(upstop - upstart > updateVisFileTime && Thread_Run) {
|
---|
370 | if(WaitForSingleObject(Thread_H, 0) == WAIT_OBJECT_0){
|
---|
371 | Thread_Run=false;
|
---|
372 | glutDisplayFunc (Loading);
|
---|
373 | glutIdleFunc (Loading);
|
---|
374 |
|
---|
375 | mLoading_I = 30;
|
---|
376 | mLoading = true;
|
---|
377 | start = time ( NULL );
|
---|
378 | }else{
|
---|
379 | // File is not yet fully downloaded
|
---|
380 | }
|
---|
381 | upstart = time (NULL );
|
---|
382 | }
|
---|
383 | #else
|
---|
384 | if( updateVisFileTime>0 && !Thread_Run) {
|
---|
385 | char* argtosend = (char*)inputVisFileFromCard.c_str();
|
---|
386 | if (pthread_create (&Thread_H, NULL, DownLoadFile, (void*)argtosend) < 0) {
|
---|
387 | printf("pthread_create error for Thread_H\n");
|
---|
388 | exit (1);
|
---|
389 | }
|
---|
390 | Thread_Run=true;
|
---|
391 | }
|
---|
392 |
|
---|
393 | static time_t upstart = time (NULL );
|
---|
394 | time_t upstop = time( NULL );
|
---|
395 | if(upstop - upstart > updateVisFileTime && Thread_Run) {
|
---|
396 | (void)pthread_join (Thread_H, NULL);
|
---|
397 |
|
---|
398 | Thread_Run=false;
|
---|
399 | glutDisplayFunc (Loading);
|
---|
400 | glutIdleFunc (Loading);
|
---|
401 |
|
---|
402 | mLoading_I = 30;
|
---|
403 | mLoading = true;
|
---|
404 | start = time ( NULL );
|
---|
405 | }
|
---|
406 |
|
---|
407 | #endif
|
---|
408 | */
|
---|
409 |
|
---|
410 | }
|
---|
411 |
|
---|
412 | void processNormalKeys(unsigned char key, int x, int y)
|
---|
413 | {
|
---|
414 | int Mod = glutGetModifiers();
|
---|
415 | if(Mod==GLUT_ACTIVE_CTRL)key+=96;
|
---|
416 |
|
---|
417 | switch(key){
|
---|
418 | case 'q':
|
---|
419 | case 27 :
|
---|
420 | exit(0);
|
---|
421 | break;
|
---|
422 | case 13 :{
|
---|
423 | char temp[255]; sprintf(temp,"%s%02i.%s",ScreenShotName,SCREENSHOT,SCREENSHOT_FORMAT);
|
---|
424 | SaveScreenshot(temp,WINDOW_WIDTH,WINDOW_HEIGHT, displayForScreenShot );
|
---|
425 | SCREENSHOT++;
|
---|
426 | }break;
|
---|
427 | case ' ':{
|
---|
428 | if(ViewMain->Type_==VIEW3D) ((FROG_View_3D*)ViewMain)->shouldRotate_ = ! ((FROG_View_3D*)ViewMain)->shouldRotate_;
|
---|
429 | }break;
|
---|
430 | case 'p' :
|
---|
431 | ViewMain->cam_->R*=0.95;
|
---|
432 | break;
|
---|
433 | case 'm' :
|
---|
434 | ViewMain->cam_->R*=1.05;
|
---|
435 | break;
|
---|
436 | case 'r' :
|
---|
437 | case 'R' :
|
---|
438 | LoadCard(inputConfig.c_str());
|
---|
439 | /* geom->updateGeomToDisplay(Card);
|
---|
440 | events->prim->setDisplay(0);
|
---|
441 | events->Init(frogObjects_);
|
---|
442 | events->readEventToDisplay(Card);
|
---|
443 | */
|
---|
444 | event = events->GoToEvent(eventNumber);
|
---|
445 |
|
---|
446 | break;
|
---|
447 | case 'T' :
|
---|
448 | case 't' :
|
---|
449 | for(int j=ActiveViews.size()-1;j>=0;j--){
|
---|
450 | if(ActiveViews[j]->Type_==VIEWMENU){((FROG_View_Menu*)ActiveViews[j])->State =! ((FROG_View_Menu*)ActiveViews[j])->State;}
|
---|
451 | }
|
---|
452 | break;
|
---|
453 | case 'F' :
|
---|
454 | case 'f' :
|
---|
455 | ViewMain->FullScreen();
|
---|
456 | break;
|
---|
457 | case 'a':
|
---|
458 | case 'l':
|
---|
459 | if( (key=='l' && Mod == GLUT_ACTIVE_CTRL) || key=='a'){
|
---|
460 | if(FULLSCREEN){
|
---|
461 | glutReshapeWindow(SAVE_WINDOW_W, SAVE_WINDOW_H);
|
---|
462 | glutPositionWindow(SAVE_WINDOW_X,SAVE_WINDOW_Y);
|
---|
463 | }else{
|
---|
464 | SAVE_WINDOW_W = glutGet(GLUT_WINDOW_WIDTH);
|
---|
465 | SAVE_WINDOW_H = glutGet(GLUT_WINDOW_HEIGHT);
|
---|
466 | SAVE_WINDOW_X = glutGet(GLUT_WINDOW_X);
|
---|
467 | SAVE_WINDOW_Y = glutGet(GLUT_WINDOW_Y);
|
---|
468 | glutFullScreen();
|
---|
469 | }
|
---|
470 | FULLSCREEN = !FULLSCREEN;
|
---|
471 | }
|
---|
472 | break;
|
---|
473 | case 's':
|
---|
474 | mEventChanging = !mEventChanging;
|
---|
475 | break;
|
---|
476 | case '0' : geom->prim->setDisplay(0);
|
---|
477 | break;
|
---|
478 |
|
---|
479 | case '9' : geom->prim->setDisplay(1);
|
---|
480 | break;
|
---|
481 |
|
---|
482 | case '1' :
|
---|
483 | case '2' :
|
---|
484 | case '3' :
|
---|
485 | case '4' :
|
---|
486 | case '5' :
|
---|
487 | case '6' :
|
---|
488 | case '7' :
|
---|
489 | case '8' :
|
---|
490 | if(frogObjects_->IsSelected_Geometry()){
|
---|
491 | frogObjects_->selectedObject_->toogleParentDisplay(1,key-48);
|
---|
492 | geom->prim->setDisplay(2);
|
---|
493 | }
|
---|
494 | break;
|
---|
495 | }
|
---|
496 | if(SCREENSAVER)exit(0);
|
---|
497 | }
|
---|
498 |
|
---|
499 |
|
---|
500 | void processSpecialKeys(int key, int x, int y)
|
---|
501 | {
|
---|
502 | if(ViewMenu->State){
|
---|
503 | if(ViewMenu->processSpecialKeys(key,x,y))return;
|
---|
504 | }
|
---|
505 |
|
---|
506 | int Mod = glutGetModifiers();
|
---|
507 | // if(Mod==GLUT_ACTIVE_CTRL)key+=96;
|
---|
508 |
|
---|
509 | switch(key) {
|
---|
510 | case GLUT_KEY_F1 :
|
---|
511 | mHelpScreen = !mHelpScreen;
|
---|
512 | break;
|
---|
513 | case GLUT_KEY_F2 :
|
---|
514 | ViewMenu->State = !ViewMenu->State;
|
---|
515 | ViewMenu->Alpha = 1;
|
---|
516 | break;
|
---|
517 |
|
---|
518 | case GLUT_KEY_F3 :
|
---|
519 | if(event) event->SuperCleardisplayList();
|
---|
520 | break;
|
---|
521 |
|
---|
522 | case GLUT_KEY_F4 :
|
---|
523 | mAutomaticShooter = !mAutomaticShooter;
|
---|
524 | if(mAutomaticShooter){
|
---|
525 | AutomaticEventChanging(0);
|
---|
526 | mAutomaticShooter_LastEvent = events->Current_Event;
|
---|
527 | }
|
---|
528 | break;
|
---|
529 |
|
---|
530 | case GLUT_KEY_F5 :
|
---|
531 | events->updateEventToDisplay(EVTID_SIMTRK);
|
---|
532 | break;
|
---|
533 | case GLUT_KEY_F6 :
|
---|
534 | events->updateEventToDisplay(EVTID_SIMVTX);
|
---|
535 | break;
|
---|
536 | case GLUT_KEY_F7 :
|
---|
537 | events->updateEventToDisplay(EVTID_SIMHIT);
|
---|
538 | break;
|
---|
539 | case GLUT_KEY_F8 :
|
---|
540 | events->updateEventToDisplay(EVTID_TRK);
|
---|
541 | break;
|
---|
542 | case GLUT_KEY_F9 :
|
---|
543 | events->updateEventToDisplay(EVTID_SISTRIPCLUSTER);
|
---|
544 | break;
|
---|
545 | case GLUT_KEY_F10 :
|
---|
546 | events->updateEventToDisplay(EVTID_ECALHIT);
|
---|
547 | break;
|
---|
548 | case GLUT_KEY_F11:
|
---|
549 | events->updateEventToDisplay(EVTID_HCALHIT);
|
---|
550 | break;
|
---|
551 | case GLUT_KEY_F12 :
|
---|
552 | events->updateEventToDisplay(EVTID_MUONHIT);
|
---|
553 | events->updateEventToDisplay(EVTID_MUONSEG);
|
---|
554 | break;
|
---|
555 | case GLUT_KEY_RIGHT :
|
---|
556 | if(Mod==GLUT_ACTIVE_CTRL){
|
---|
557 | ViewMain->cam_->Move(-5,0);
|
---|
558 | }else{
|
---|
559 | frogObjects_->selectedObject_ = NULL;
|
---|
560 | event = events->NextEvent();
|
---|
561 | }
|
---|
562 | break;
|
---|
563 | case GLUT_KEY_LEFT :
|
---|
564 | if(Mod==GLUT_ACTIVE_CTRL){
|
---|
565 | ViewMain->cam_->Move(5,0);
|
---|
566 | }else{
|
---|
567 | frogObjects_->selectedObject_ = NULL;
|
---|
568 | event = events->PreviousEvent();
|
---|
569 | }
|
---|
570 | break;
|
---|
571 | case GLUT_KEY_UP :
|
---|
572 | if(Mod==GLUT_ACTIVE_CTRL){
|
---|
573 | ViewMain->cam_->Move(0,5);
|
---|
574 | }else{
|
---|
575 | if(ViewMain->Type_==VIEW3D) ((FROG_View_3D*)ViewMain)->dphi_ += 0.005f;
|
---|
576 | }
|
---|
577 | break;
|
---|
578 | case GLUT_KEY_DOWN :
|
---|
579 | if(Mod==GLUT_ACTIVE_CTRL){
|
---|
580 | ViewMain->cam_->Move(0,-5);
|
---|
581 | }else{
|
---|
582 | if(ViewMain->Type_==VIEW3D) ((FROG_View_3D*)ViewMain)->dphi_ -= 0.005f;
|
---|
583 | }
|
---|
584 | break;
|
---|
585 |
|
---|
586 | case GLUT_KEY_PAGE_UP :
|
---|
587 | events->NextFile();
|
---|
588 | event = events->GoToEvent(0);
|
---|
589 | break;
|
---|
590 | case GLUT_KEY_PAGE_DOWN :
|
---|
591 | events->PreviousFile();
|
---|
592 | event = events->GoToEvent(0);
|
---|
593 | break;
|
---|
594 |
|
---|
595 | case GLUT_KEY_HOME :
|
---|
596 | if(ViewMain->Type_==VIEW3D) ViewMain->cam_->Reset();
|
---|
597 | break;
|
---|
598 | case GLUT_KEY_END :
|
---|
599 | event = events->GoToEvent(-1);
|
---|
600 | break;
|
---|
601 | }
|
---|
602 | if(SCREENSAVER)exit(0);
|
---|
603 | }
|
---|
604 |
|
---|
605 | void processMouse(int button, int state, int x, int y)
|
---|
606 | {
|
---|
607 | if(ViewMenu->processMouse(button, state,x,y) ){
|
---|
608 | events->keepEventToDisplay(NULL);
|
---|
609 | events->keepOpenedMenu(NULL);
|
---|
610 | return;
|
---|
611 | }
|
---|
612 |
|
---|
613 | for(int j=ActiveViews.size()-1;j>=0;j--){
|
---|
614 | if(ActiveViews[j]->Type_ == VIEWMENU && ActiveViews[j]->IsInViewPort(x,y)){
|
---|
615 | if( ((FROG_View_Menu*)ActiveViews[j])->processMouse(button, state,x,y)){
|
---|
616 | events->keepEventToDisplay(NULL);
|
---|
617 | events->keepOpenedMenu(NULL);
|
---|
618 | return;
|
---|
619 | }
|
---|
620 | }
|
---|
621 | }
|
---|
622 |
|
---|
623 | int K = 0;
|
---|
624 | if(button == GLUT_LEFT_BUTTON){
|
---|
625 | K = 0;
|
---|
626 | if(state == GLUT_DOWN){
|
---|
627 | int ClickedView = -1;
|
---|
628 | for(int j=ActiveViews.size()-1;j>=0;j--){
|
---|
629 | if(ActiveViews[j]!= ViewMain && ActiveViews[j]->IsInViewPort(x,y) && ActiveViews[j]->IsSwapPossible()){
|
---|
630 | ClickedView = j;
|
---|
631 | break;
|
---|
632 | }
|
---|
633 | }
|
---|
634 | if(ClickedView>=0){
|
---|
635 | FROG_VIEW::Swap(ViewMain, ActiveViews[ClickedView]);
|
---|
636 | ViewMain->IsActive = false;
|
---|
637 | ViewMain = ActiveViews[ClickedView];
|
---|
638 | ViewMain->IsActive = true;
|
---|
639 | }else if(ViewMain->IsInViewPort(x,y)){
|
---|
640 | gl_select(x,WINDOW_HEIGHT-y);
|
---|
641 | }
|
---|
642 | }
|
---|
643 | }else if(button == GLUT_MIDDLE_BUTTON ){
|
---|
644 | K = 1;
|
---|
645 | }else if(button == GLUT_RIGHT_BUTTON){
|
---|
646 | K = 2;
|
---|
647 | }else{
|
---|
648 | }
|
---|
649 |
|
---|
650 | bool old_state = MouseStates[K];
|
---|
651 | if(state == GLUT_DOWN) MouseStates[K] = true;
|
---|
652 | if(state == GLUT_UP) MouseStates[K] = false;
|
---|
653 |
|
---|
654 | if( old_state != MouseStates[K]) stateChanged=true;
|
---|
655 | else stateChanged=false;
|
---|
656 | }
|
---|
657 |
|
---|
658 | void processMotion(int x, int y) {
|
---|
659 | static int xold=x, yold=y;
|
---|
660 | if( stateChanged ) { xold=x; yold=y; stateChanged=false; return; }
|
---|
661 |
|
---|
662 | if(MouseStates[2]){
|
---|
663 | if(ViewMain->Is3D()){
|
---|
664 | ViewMain->cam_->phi = ViewMain->cam_->phi + 10.0*((float)(xold-x)/(float)ViewMain->cam_->R);
|
---|
665 | ViewMain->cam_->theta = ViewMain->cam_->theta + 10.0*((float)(yold-y)/(float)ViewMain->cam_->R);
|
---|
666 | }else if(ViewMain->Is2D()){
|
---|
667 | ViewMain->cam_->Move((x-xold),(y-yold));
|
---|
668 | }
|
---|
669 | xold=x; yold=y;
|
---|
670 | }else if(MouseStates[1]){
|
---|
671 | if(yold-y>0){
|
---|
672 | ViewMain->cam_->R*=0.98;
|
---|
673 | }else{
|
---|
674 | ViewMain->cam_->R*=1.02;
|
---|
675 | }
|
---|
676 | }
|
---|
677 | }
|
---|
678 |
|
---|
679 | void processPassiveMotion(int x, int y)
|
---|
680 | {
|
---|
681 | static int xold=x;
|
---|
682 | static int yold=y;
|
---|
683 | if(SCREENSAVER && (abs(x-xold)>3 || abs(y-yold)>3) )exit(0);
|
---|
684 | }
|
---|
685 |
|
---|
686 | void gl_select(int x, int y)
|
---|
687 | {
|
---|
688 | ViewMain->Display_Begin();
|
---|
689 |
|
---|
690 | GLuint buff[1024] = {0};
|
---|
691 | GLint hits, view[4];
|
---|
692 |
|
---|
693 | glSelectBuffer(1024, buff);
|
---|
694 | glGetIntegerv(GL_VIEWPORT, view);
|
---|
695 | glRenderMode(GL_SELECT);
|
---|
696 | glInitNames();
|
---|
697 | glPushName(0);
|
---|
698 |
|
---|
699 | glMatrixMode(GL_PROJECTION);
|
---|
700 | glPushMatrix();
|
---|
701 | glLoadIdentity();
|
---|
702 | gluPickMatrix(x-4, y-4, 8.0, 8.0, view);
|
---|
703 | ViewMain->ProjectionMatrix();
|
---|
704 | glMatrixMode(GL_MODELVIEW);
|
---|
705 | glutSwapBuffers();
|
---|
706 | ViewMain->Display_Core();
|
---|
707 | glMatrixMode(GL_PROJECTION);
|
---|
708 | glPopMatrix();
|
---|
709 |
|
---|
710 | hits = glRenderMode(GL_RENDER);
|
---|
711 | list_hits(hits, buff);
|
---|
712 | glMatrixMode(GL_MODELVIEW);
|
---|
713 | }
|
---|
714 | void list_hits(GLint hits, GLuint *names)
|
---|
715 | {
|
---|
716 | unsigned int i;
|
---|
717 | // names[i * 4 + 0] = 1 names[i * 4 + 1] = MinZ
|
---|
718 | // names[i * 4 + 3] = Name names[i * 4 + 2] = MaxZ
|
---|
719 |
|
---|
720 | //get Min in Z;
|
---|
721 | // unsigned int MinZ = (unsigned int)-1;
|
---|
722 | // unsigned int NearestHit = 0;
|
---|
723 | // for (i = 0; i < hits; i++){
|
---|
724 | // if( names[i*4+1]<MinZ ){MinZ=names[i*4+1]; NearestHit = i;}
|
---|
725 | // }
|
---|
726 |
|
---|
727 | if(hits==0)return;
|
---|
728 | unsigned int NearestHit = rand()%hits;
|
---|
729 |
|
---|
730 | for (i = 0; (int)i < hits; i++) {
|
---|
731 | unsigned int tmp = names[i * 4 + 3];
|
---|
732 | //printf("--> %i/%i > %i\n",i,hits,tmp);
|
---|
733 | if(i == NearestHit && tmp!=0){
|
---|
734 | if(tmp>1000000){
|
---|
735 | frogObjects_->selectedObject_ = dynamic_cast<FROG_Element_Base_With_DetId*>(geom->FindByDetId(tmp));
|
---|
736 | }else if(event && tmp<event->name_map.size()){
|
---|
737 | frogObjects_->selectedObject_ = event->name_map[tmp];
|
---|
738 | }
|
---|
739 | }
|
---|
740 | }
|
---|
741 | }
|
---|
742 |
|
---|
743 | void LoadCard(const char* inputCard ){
|
---|
744 | if(Card)delete Card;
|
---|
745 | Card = new FROG_ReadCards(AbsolutePath.c_str(),inputCard);
|
---|
746 |
|
---|
747 | Card->GetInt (&updateVisFileTime , "updateVisFileTime");
|
---|
748 |
|
---|
749 | Card->GetInt (&eventNumber , "Event_Number");
|
---|
750 | Card->GetInt (&eventTime , "Event_Time");
|
---|
751 | if(eventTime>=0)glutTimerFunc(1+eventTime*1000,AutomaticEventChanging, 0);
|
---|
752 |
|
---|
753 | Card->GetChar (SCREENSHOT_FORMAT,256, "Screenshot_Format");
|
---|
754 | Card->GetChar (ScreenShotName,1024 , "Screenshot_Name");
|
---|
755 |
|
---|
756 | Card->GetColor(BackGround_Color , "BackGround_Color");
|
---|
757 | Card->GetColor(Txt_Color , "Txt_Color");
|
---|
758 | Card->GetColor(Framework_Color , "Framework_Color");
|
---|
759 | Card->GetFloat(&Framework_Thickness , "Framework_Thickness");
|
---|
760 | Card->GetColor(ZAxis_Color , "ZAxis_Color");
|
---|
761 | Card->GetFloat(&ZAxis_Thickness , "ZAxis_Thickness");
|
---|
762 |
|
---|
763 | Geometry_WireFrame = Card->GetBool(Geometry_WireFrame,"Geometry_WireFrame");
|
---|
764 | }
|
---|
765 |
|
---|
766 |
|
---|
767 | void AutomaticEventChanging (int Extra)
|
---|
768 | {
|
---|
769 | if(mLoading || (!mAutomaticShooter && (ViewMenu->State || !mEventChanging))){glutTimerFunc(1+eventTime*1000,AutomaticEventChanging, 0);return;}
|
---|
770 |
|
---|
771 | frogObjects_->selectedObject_ = NULL;
|
---|
772 | if(mAutomaticShooter){
|
---|
773 | for(unsigned int j=0;j<ActiveViews.size();j++){
|
---|
774 | ActiveViews[j]->MarkForUpdate();
|
---|
775 | }
|
---|
776 | display();
|
---|
777 | display();
|
---|
778 | char temp[255]; sprintf(temp,"AutomaticShooter_%04i.%s",SCREENSHOT,SCREENSHOT_FORMAT);
|
---|
779 | SaveScreenshot(temp,WINDOW_WIDTH,WINDOW_HEIGHT, display);
|
---|
780 | SCREENSHOT++;
|
---|
781 | }
|
---|
782 |
|
---|
783 | if(!mLoading && events){
|
---|
784 | if(event && eventNumber>=0){event = events->NextEvent();
|
---|
785 | }else if(eventNumber<0 ){event = events->GoToEvent(-1);}
|
---|
786 | }
|
---|
787 | if(!mAutomaticShooter){
|
---|
788 | if(eventTime>=0)glutTimerFunc(1+eventTime*1000,AutomaticEventChanging, 0);
|
---|
789 | }else{
|
---|
790 | if(mAutomaticShooter_LastEvent == events->Current_Event){
|
---|
791 | mAutomaticShooter = false;
|
---|
792 | }else{
|
---|
793 | glutTimerFunc(25,AutomaticEventChanging, 0);
|
---|
794 | }
|
---|
795 | }
|
---|
796 |
|
---|
797 | EventI++;
|
---|
798 | if(event && events)printf("%8u | Run %4i Event %4i | Event %4i in File Containing %4i Events\n",EventI,event->NRun_,event->NEvent_,events->Current_Event, (int)events->NumberOfEvents());
|
---|
799 | }
|
---|
800 |
|
---|
801 |
|
---|
802 | int main (int argc, char *argv[])
|
---|
803 | {
|
---|
804 | string ExePath = string(argv[0]);
|
---|
805 | unsigned int n = ExePath.rfind("frog");
|
---|
806 | AbsolutePath = ExePath.substr(0,n);
|
---|
807 |
|
---|
808 |
|
---|
809 | for(int i=1;i<argc;i++){
|
---|
810 | unsigned int len = strlen(argv[i]);
|
---|
811 |
|
---|
812 | //Change to lowerCase
|
---|
813 | char LowCase[2048];
|
---|
814 | strcpy(LowCase,argv[i]);
|
---|
815 | for(unsigned int j=0;j<len;j++){
|
---|
816 | if(LowCase[j]>=65 && LowCase[j]<=90)LowCase[j]+=32;
|
---|
817 | }
|
---|
818 |
|
---|
819 | if( strcmp(LowCase,"-shooter" )==0){SHOOTER = true;
|
---|
820 | }else if(strcmp(LowCase,"-s" )==0){SCREENSAVER = true;
|
---|
821 | }else if(strcmp(LowCase,"-v" )==0){
|
---|
822 | printf("Fast and Realistic OpenGl Event Display : FROG\n");
|
---|
823 | printf("Version : %6.3f of %s\n",FROG_VERSION,__DATE__);
|
---|
824 | printf("Authors List : \n");
|
---|
825 | printf("%s\n",FROG_AUTHORLIST);
|
---|
826 | exit(0);
|
---|
827 | }else if(strcmp(LowCase,"-c" )==0 && i+1<argc){
|
---|
828 | i++; inputConfig = string(argv[i]);
|
---|
829 | }else if(len>=4 && strcmp(LowCase+len-4,".vis" )==0){inputVisFileFromCommand.push_back(string(argv[i]));
|
---|
830 | }else if(len>=7 && strcmp(LowCase+len-7,".vis.gz")==0){inputVisFileFromCommand.push_back(string(argv[i]));
|
---|
831 | }else{
|
---|
832 | printf("\n");
|
---|
833 | printf("#######################################################################\n");
|
---|
834 | printf("# http://projects.hepforge.org/frog/ #\n");
|
---|
835 | printf("# Please have a look at the website for latest versions and news #\n");
|
---|
836 | printf("# Also register to the Frog mailing list if you are not a member yet #\n");
|
---|
837 | printf("#######################################################################\n");
|
---|
838 | printf("# HELP SCREEN #\n");
|
---|
839 | printf("#######################################################################\n");
|
---|
840 | printf("# Supported Commands are : #\n");
|
---|
841 | printf("# filename.vis --> open the file : filename.vis #\n");
|
---|
842 | printf("# filename.vis.gz --> open the file : filename.vis.gz #\n");
|
---|
843 | printf("# -help --> Print this screen #\n");
|
---|
844 | printf("# -v --> Print Version and Other Info #\n");
|
---|
845 | printf("# -s --> ScreenSaver Mode #\n");
|
---|
846 | printf("# -c <config.txt> --> Specify the Frog Configuration Card to use #\n");
|
---|
847 | printf("# -shooter --> Scan events, make a screenshot and exit #\n");
|
---|
848 | printf("#######################################################################\n");
|
---|
849 | printf("\n");
|
---|
850 | exit(0);
|
---|
851 | }
|
---|
852 | }
|
---|
853 |
|
---|
854 | // initialisation de GLUT
|
---|
855 | glutInit (&argc, argv);
|
---|
856 |
|
---|
857 | // création d'une fenêtre OpenGL RVBA avec en simple mémoire tampon
|
---|
858 | // avec un tampon de profondeur
|
---|
859 | glutInitDisplayMode (GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);
|
---|
860 | glutInitWindowSize (WINDOW_WIDTH, WINDOW_HEIGHT);
|
---|
861 | glutCreateWindow ("FROG Displayer");
|
---|
862 |
|
---|
863 | // Charge le logo en mémoire
|
---|
864 | LoadTexture((unsigned int*)&LogoTexture ,FROG_PATH::GetGlobalPath("Resources/Frog_Logo.png" ,AbsolutePath.c_str()).c_str());
|
---|
865 | LoadTexture((unsigned int*)&LogoTxtTexture ,FROG_PATH::GetGlobalPath("Resources/Frog_LogoTxt.png",AbsolutePath.c_str()).c_str());
|
---|
866 |
|
---|
867 | // initialisation des fonctions callback appelées par glut
|
---|
868 | // pour respectivement le redimensionnement de la fenêtre
|
---|
869 | // et le rendu de la scène
|
---|
870 | glutReshapeFunc (reshape);
|
---|
871 | glutDisplayFunc (Loading);
|
---|
872 | glutIdleFunc (Loading);
|
---|
873 |
|
---|
874 |
|
---|
875 | // initialisation of GLEW (OpenGL Extension Wrangler Library)
|
---|
876 | GLenum err = glewInit();
|
---|
877 | if(GLEW_OK != err){
|
---|
878 | printf("Problem: glewInit failed, something is seriously wrong\n");
|
---|
879 | printf("Error: %s\n", glewGetErrorString(err));
|
---|
880 | exit(0);
|
---|
881 | }
|
---|
882 |
|
---|
883 | // entre dans la boucle d'évènements
|
---|
884 | glutMainLoop ();
|
---|
885 | return 0;
|
---|
886 | }
|
---|
887 |
|
---|
888 |
|
---|
889 |
|
---|
890 |
|
---|