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