Blender  V3.3
GHOST_Test.cpp
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later
2  * Copyright 2001-2002 NaN Holding BV. All rights reserved. */
3 
12 #include <iostream>
13 #include <math.h>
14 #include <string>
15 
16 #if defined(WIN32) || defined(__APPLE__)
17 # ifdef WIN32
18 # include <atlbase.h>
19 # include <windows.h>
20 
21 # include <GL/gl.h>
22 # else // WIN32 \
23  // __APPLE__ is defined
24 # include <AGL/gl.h>
25 # endif // WIN32
26 #else // defined(WIN32) || defined(__APPLE__)
27 # include <GL/gl.h>
28 #endif // defined(WIN32) || defined(__APPLE__)
29 
30 #include "GHOST_Rect.h"
31 
32 #include "GHOST_IEvent.h"
33 #include "GHOST_IEventConsumer.h"
34 #include "GHOST_ISystem.h"
35 
36 #define LEFT_EYE 0
37 #define RIGHT_EYE 1
38 
39 static bool nVidiaWindows; // very dirty but hey, it's for testing only
40 
42 
43 static class Application *fApp;
44 static GLfloat view_rotx = 20.0, view_roty = 30.0, view_rotz = 0.0;
45 static GLfloat fAngle = 0.0;
46 static GHOST_ISystem *fSystem = 0;
47 
48 void StereoProjection(float left,
49  float right,
50  float bottom,
51  float top,
52  float nearplane,
53  float farplane,
54  float zero_plane,
55  float dist,
56  float eye);
57 
58 static void testTimerProc(GHOST_ITimerTask * /*task*/, uint64_t time)
59 {
60  std::cout << "timer1, time=" << (int)time << "\n";
61 }
62 
63 static void gearGL(
64  GLfloat inner_radius, GLfloat outer_radius, GLfloat width, GLint teeth, GLfloat tooth_depth)
65 {
66  GLint i;
67  GLfloat r0, r1, r2;
68  GLfloat angle, da;
69  GLfloat u, v, len;
70 
71  r0 = inner_radius;
72  r1 = outer_radius - tooth_depth / 2.0;
73  r2 = outer_radius + tooth_depth / 2.0;
74 
75  const double pi = 3.14159264;
76  da = 2.0 * pi / teeth / 4.0;
77 
78  glShadeModel(GL_FLAT);
79  glNormal3f(0.0, 0.0, 1.0);
80 
81  /* draw front face */
82  glBegin(GL_QUAD_STRIP);
83  for (i = 0; i <= teeth; i++) {
84  angle = i * 2.0 * pi / teeth;
85  glVertex3f(r0 * cos(angle), r0 * sin(angle), width * 0.5);
86  glVertex3f(r1 * cos(angle), r1 * sin(angle), width * 0.5);
87  glVertex3f(r0 * cos(angle), r0 * sin(angle), width * 0.5);
88  glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), width * 0.5);
89  }
90  glEnd();
91 
92  /* draw front sides of teeth */
93  glBegin(GL_QUADS);
94  da = 2.0 * pi / teeth / 4.0;
95  for (i = 0; i < teeth; i++) {
96  angle = i * 2.0 * pi / teeth;
97  glVertex3f(r1 * cos(angle), r1 * sin(angle), width * 0.5);
98  glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), width * 0.5);
99  glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da), width * 0.5);
100  glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), width * 0.5);
101  }
102  glEnd();
103 
104  glNormal3f(0.0, 0.0, -1.0);
105 
106  /* draw back face */
107  glBegin(GL_QUAD_STRIP);
108  for (i = 0; i <= teeth; i++) {
109  angle = i * 2.0 * pi / teeth;
110  glVertex3f(r1 * cos(angle), r1 * sin(angle), -width * 0.5);
111  glVertex3f(r0 * cos(angle), r0 * sin(angle), -width * 0.5);
112  glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), -width * 0.5);
113  glVertex3f(r0 * cos(angle), r0 * sin(angle), -width * 0.5);
114  }
115  glEnd();
116 
117  /* draw back sides of teeth */
118  glBegin(GL_QUADS);
119  da = 2.0 * pi / teeth / 4.0;
120  for (i = 0; i < teeth; i++) {
121  angle = i * 2.0 * pi / teeth;
122  glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), -width * 0.5);
123  glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da), -width * 0.5);
124  glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), -width * 0.5);
125  glVertex3f(r1 * cos(angle), r1 * sin(angle), -width * 0.5);
126  }
127  glEnd();
128 
129  /* draw outward faces of teeth */
130  glBegin(GL_QUAD_STRIP);
131  for (i = 0; i < teeth; i++) {
132  angle = i * 2.0 * pi / teeth;
133  glVertex3f(r1 * cos(angle), r1 * sin(angle), width * 0.5);
134  glVertex3f(r1 * cos(angle), r1 * sin(angle), -width * 0.5);
135  u = r2 * cos(angle + da) - r1 * cos(angle);
136  v = r2 * sin(angle + da) - r1 * sin(angle);
137  len = sqrt(u * u + v * v);
138  u /= len;
139  v /= len;
140  glNormal3f(v, -u, 0.0);
141  glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), width * 0.5);
142  glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), -width * 0.5);
143  glNormal3f(cos(angle), sin(angle), 0.0);
144  glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da), width * 0.5);
145  glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da), -width * 0.5);
146  u = r1 * cos(angle + 3 * da) - r2 * cos(angle + 2 * da);
147  v = r1 * sin(angle + 3 * da) - r2 * sin(angle + 2 * da);
148  glNormal3f(v, -u, 0.0);
149  glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), width * 0.5);
150  glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), -width * 0.5);
151  glNormal3f(cos(angle), sin(angle), 0.0);
152  }
153  glVertex3f(r1 * cos(0.0), r1 * sin(0.0), width * 0.5);
154  glVertex3f(r1 * cos(0.0), r1 * sin(0.0), -width * 0.5);
155  glEnd();
156 
157  glShadeModel(GL_SMOOTH);
158 
159  /* draw inside radius cylinder */
160  glBegin(GL_QUAD_STRIP);
161  for (i = 0; i <= teeth; i++) {
162  angle = i * 2.0 * pi / teeth;
163  glNormal3f(-cos(angle), -sin(angle), 0.0);
164  glVertex3f(r0 * cos(angle), r0 * sin(angle), -width * 0.5);
165  glVertex3f(r0 * cos(angle), r0 * sin(angle), width * 0.5);
166  }
167  glEnd();
168 }
169 
170 static void drawGearGL(int id)
171 {
172  static GLfloat pos[4] = {5.0f, 5.0f, 10.0f, 1.0f};
173  static GLfloat ared[4] = {0.8f, 0.1f, 0.0f, 1.0f};
174  static GLfloat agreen[4] = {0.0f, 0.8f, 0.2f, 1.0f};
175  static GLfloat ablue[4] = {0.2f, 0.2f, 1.0f, 1.0f};
176 
177  glLightfv(GL_LIGHT0, GL_POSITION, pos);
178  glEnable(GL_CULL_FACE);
179  glEnable(GL_LIGHTING);
180  glEnable(GL_LIGHT0);
181  glEnable(GL_DEPTH_TEST);
182 
183  switch (id) {
184  case 1:
185  glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, ared);
186  gearGL(1.0f, 4.0f, 1.0f, 20, 0.7f);
187  break;
188  case 2:
189  glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, agreen);
190  gearGL(0.5f, 2.0f, 2.0f, 10, 0.7f);
191  break;
192  case 3:
193  glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, ablue);
194  gearGL(1.3f, 2.0f, 0.5f, 10, 0.7f);
195  break;
196  default:
197  break;
198  }
199  glEnable(GL_NORMALIZE);
200 }
201 
203 {
204  glRotatef(view_rotx, 1.0, 0.0, 0.0);
205  glRotatef(view_roty, 0.0, 1.0, 0.0);
206  glRotatef(view_rotz, 0.0, 0.0, 1.0);
207 }
208 
210 {
211  glPushMatrix();
212  glTranslatef(-3.0, -2.0, 0.0);
213  glRotatef(fAngle, 0.0, 0.0, 1.0);
214  drawGearGL(1);
215  glPopMatrix();
216 
217  glPushMatrix();
218  glTranslatef(3.1f, -2.0f, 0.0f);
219  glRotatef(-2.0 * fAngle - 9.0, 0.0, 0.0, 1.0);
220  drawGearGL(2);
221  glPopMatrix();
222 
223  glPushMatrix();
224  glTranslatef(-3.1f, 2.2f, -1.8f);
225  glRotatef(90.0f, 1.0f, 0.0f, 0.0f);
226  glRotatef(2.0 * fAngle - 2.0, 0.0, 0.0, 1.0);
227  drawGearGL(3);
228  glPopMatrix();
229 }
230 
231 static void View(GHOST_IWindow *window, bool stereo, int eye = 0)
232 {
233  window->activateDrawingContext();
234  GHOST_Rect bnds;
235  int noOfScanlines = 0, lowerScanline = 0;
236  /* hard coded for testing purposes, display device dependent */
237  int verticalBlankingInterval = 32;
238  float left, right, bottom, top;
239  float nearplane, farplane, zeroPlane, distance;
240  float eyeSeparation = 0.62f;
241  window->getClientBounds(bnds);
242 
243  // viewport
244  if (stereo) {
245  if (nVidiaWindows) {
246  // handled by nVidia driver so act as normal (explicitly put here since
247  // it -is- stereo)
248  glViewport(0, 0, bnds.getWidth(), bnds.getHeight());
249  }
250  else { // generic cross platform above-below stereo
251  noOfScanlines = (bnds.getHeight() - verticalBlankingInterval) / 2;
252  switch (eye) {
253  case LEFT_EYE:
254  // upper half of window
255  lowerScanline = bnds.getHeight() - noOfScanlines;
256  break;
257  case RIGHT_EYE:
258  // lower half of window
259  lowerScanline = 0;
260  break;
261  }
262  }
263  }
264  else {
265  noOfScanlines = bnds.getHeight();
266  lowerScanline = 0;
267  }
268 
269  glViewport(0, lowerScanline, bnds.getWidth(), noOfScanlines);
270 
271  // projection
272  left = -6.0;
273  right = 6.0;
274  bottom = -4.8f;
275  top = 4.8f;
276  nearplane = 5.0;
277  farplane = 60.0;
278 
279  if (stereo) {
280  zeroPlane = 0.0;
281  distance = 14.5;
282  switch (eye) {
283  case LEFT_EYE:
285  right,
286  bottom,
287  top,
288  nearplane,
289  farplane,
290  zeroPlane,
291  distance,
292  -eyeSeparation / 2.0);
293  break;
294  case RIGHT_EYE:
296  right,
297  bottom,
298  top,
299  nearplane,
300  farplane,
301  zeroPlane,
302  distance,
303  eyeSeparation / 2.0);
304  break;
305  }
306  }
307  else {
308  // left = -w;
309  // right = w;
310  // bottom = -h;
311  // top = h;
312  glMatrixMode(GL_PROJECTION);
313  glLoadIdentity();
314  glFrustum(left, right, bottom, top, 5.0, 60.0);
315  glMatrixMode(GL_MODELVIEW);
316  glLoadIdentity();
317  glTranslatef(0.0, 0.0, -40.0);
318  }
319 
320  glClearColor(.2f, 0.0f, 0.0f, 0.0f);
321 }
322 
324  float right,
325  float bottom,
326  float top,
327  float nearplane,
328  float farplane,
329  float zero_plane,
330  float dist,
331  float eye)
332 /* Perform the perspective projection for one eye's sub-field.
333  * The projection is in the direction of the negative z axis.
334  *
335  * -6.0, 6.0, -4.8, 4.8,
336  * left, right, bottom, top = the coordinate range, in the plane of zero
337  * parallax setting, which will be displayed on the screen. The
338  * ratio between (right-left) and (top-bottom) should equal the aspect
339  * ratio of the display.
340  *
341  * 6.0, -6.0,
342  * near, far = the z-coordinate values of the clipping planes.
343  *
344  * 0.0,
345  * zero_plane = the z-coordinate of the plane of zero parallax setting.
346  *
347  * 14.5,
348  * dist = the distance from the center of projection to the plane
349  * of zero parallax.
350  *
351  * -0.31
352  * eye = half the eye separation; positive for the right eye sub-field,
353  * negative for the left eye sub-field.
354  */
355 {
356  float xmid, ymid, clip_near, clip_far, topw, bottomw, leftw, rightw, dx, dy, n_over_d;
357 
358  dx = right - left;
359  dy = top - bottom;
360 
361  xmid = (right + left) / 2.0;
362  ymid = (top + bottom) / 2.0;
363 
364  clip_near = dist + zero_plane - nearplane;
365  clip_far = dist + zero_plane - farplane;
366 
367  n_over_d = clip_near / dist;
368 
369  topw = n_over_d * dy / 2.0;
370  bottomw = -topw;
371  rightw = n_over_d * (dx / 2.0 - eye);
372  leftw = n_over_d * (-dx / 2.0 - eye);
373 
374  /* Need to be in projection mode for this. */
375  glLoadIdentity();
376  glFrustum(leftw, rightw, bottomw, topw, clip_near, clip_far);
377 
378  glTranslatef(-xmid - eye, -ymid, -zero_plane - dist);
379 }
380 
382  public:
383  Application(GHOST_ISystem *system);
384  ~Application(void);
385  virtual bool processEvent(GHOST_IEvent *event);
386 
394 
395  bool stereo;
396 };
397 
399  : m_system(system),
400  m_mainWindow(0),
401  m_secondaryWindow(0),
402  m_fullScreenWindow(0),
403  m_gearsTimer(0),
404  m_testTimer(0),
406  m_exitRequested(false),
407  stereo(false)
408 {
409  GHOST_GLSettings glSettings = {0};
410  fApp = this;
411 
412  // Create the main window
413  m_mainWindow = system->createWindow("gears - main window",
414  10,
415  64,
416  320,
417  200,
420  glSettings);
421 
422  if (!m_mainWindow) {
423  std::cout << "could not create main window\n";
424  exit(-1);
425  }
426 
427  // Create a secondary window
428  m_secondaryWindow = system->createWindow("gears - secondary window",
429  340,
430  64,
431  320,
432  200,
435  glSettings);
436  if (!m_secondaryWindow) {
437  std::cout << "could not create secondary window\n";
438  exit(-1);
439  }
440 
441  // Install a timer to have the gears running
442  m_gearsTimer = system->installTimer(0 /*delay*/, 20 /*interval*/, gearsTimerProc, m_mainWindow);
443 }
444 
446 {
447  // Dispose windows
450  }
453  }
454 }
455 
457 {
458  GHOST_IWindow *window = event->getWindow();
459  bool handled = true;
460 
461  switch (event->getType()) {
462 #if 0
463  case GHOST_kEventUnknown:
464  break;
465  case GHOST_kEventCursorButton:
466  std::cout << "GHOST_kEventCursorButton";
467  break;
469  std::cout << "GHOST_kEventCursorMove";
470  break;
471 #endif
472  case GHOST_kEventWheel: {
473  GHOST_TEventWheelData *wheelData = (GHOST_TEventWheelData *)event->getData();
474  if (wheelData->z > 0) {
475  view_rotz += 5.f;
476  }
477  else {
478  view_rotz -= 5.f;
479  }
480  } break;
481 
482  case GHOST_kEventKeyUp:
483  break;
484 
485  case GHOST_kEventKeyDown: {
486  GHOST_TEventKeyData *keyData = (GHOST_TEventKeyData *)event->getData();
487  switch (keyData->key) {
488  case GHOST_kKeyC: {
489  int cursor = m_cursor;
490  cursor++;
491  if (cursor >= GHOST_kStandardCursorNumCursors) {
493  }
495  window->setCursorShape(m_cursor);
496  } break;
497 
498  case GHOST_kKeyE: {
499  int x = 200, y = 200;
501  break;
502  }
503 
504  case GHOST_kKeyF:
505  if (!m_system->getFullScreen()) {
506  // Begin fullscreen mode
507  GHOST_DisplaySetting setting;
508 
509  setting.bpp = 16;
510  setting.frequency = 50;
511  setting.xPixels = 640;
512  setting.yPixels = 480;
513  m_system->beginFullScreen(setting, &m_fullScreenWindow, false /* stereo flag */);
514  }
515  else {
517  m_fullScreenWindow = 0;
518  }
519  break;
520 
521  case GHOST_kKeyH:
522  window->setCursorVisibility(!window->getCursorVisibility());
523  break;
524 
525  case GHOST_kKeyM: {
526  bool down = false;
528  if (down) {
529  std::cout << "left shift down\n";
530  }
532  if (down) {
533  std::cout << "right shift down\n";
534  }
536  if (down) {
537  std::cout << "left Alt down\n";
538  }
540  if (down) {
541  std::cout << "right Alt down\n";
542  }
544  if (down) {
545  std::cout << "left control down\n";
546  }
548  if (down) {
549  std::cout << "right control down\n";
550  }
551  } break;
552 
553  case GHOST_kKeyQ:
554  if (m_system->getFullScreen()) {
556  m_fullScreenWindow = 0;
557  }
558  m_exitRequested = true;
559  break;
560 
561  case GHOST_kKeyS: // toggle mono and stereo
562  if (stereo)
563  stereo = false;
564  else
565  stereo = true;
566  break;
567 
568  case GHOST_kKeyT:
569  if (!m_testTimer) {
571  }
572 
573  else {
575  m_testTimer = 0;
576  }
577 
578  break;
579 
580  case GHOST_kKeyW:
581  if (m_mainWindow) {
582  std::string title = m_mainWindow->getTitle();
583  title += "-";
584  m_mainWindow->setTitle(title);
585  }
586  break;
587 
588  default:
589  break;
590  }
591  } break;
592 
594  GHOST_IWindow *window2 = event->getWindow();
595  if (window2 == m_mainWindow) {
596  m_exitRequested = true;
597  }
598  else {
599  m_system->disposeWindow(window2);
600  }
601  } break;
602 
604  handled = false;
605  break;
606 
608  handled = false;
609  break;
610 
612  GHOST_IWindow *window2 = event->getWindow();
613  if (!m_system->validWindow(window2))
614  break;
615 
616  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
617 
618  if (stereo) {
619  View(window2, stereo, LEFT_EYE);
620  glPushMatrix();
621  RenderCamera();
622  RenderScene();
623  glPopMatrix();
624 
625  View(window2, stereo, RIGHT_EYE);
626  glPushMatrix();
627  RenderCamera();
628  RenderScene();
629  glPopMatrix();
630  }
631  else {
632  View(window2, stereo);
633  glPushMatrix();
634  RenderCamera();
635  RenderScene();
636  glPopMatrix();
637  }
638  window2->swapBuffers();
639  } break;
640 
641  default:
642  handled = false;
643  break;
644  }
645  return handled;
646 }
647 
648 int main(int /*argc*/, char ** /*argv*/)
649 {
650  nVidiaWindows = false;
651  // nVidiaWindows = true;
652 
653 #ifdef WIN32
654  /* Set a couple of settings in the registry for the nVidia detonator driver.
655  * So this is very specific...
656  */
657  if (nVidiaWindows) {
658  LONG lresult;
659  HKEY hkey = 0;
660  DWORD dwd = 0;
661  // unsigned char buffer[128];
662 
663  CRegKey regkey;
664  // DWORD keyValue;
665  // lresult = regkey.Open(
666  // HKEY_LOCAL_MACHINE, "SOFTWARE\\NVIDIA Corporation\\Global\\Stereo3D\\StereoEnable");
667  lresult = regkey.Open(HKEY_LOCAL_MACHINE,
668  "SOFTWARE\\NVIDIA Corporation\\Global\\Stereo3D\\StereoEnable",
669  KEY_ALL_ACCESS);
670 
671  if (lresult == ERROR_SUCCESS)
672  printf("Successfully opened key\n");
673 # if 0
674  lresult = regkey.QueryValue(&keyValue, "StereoEnable");
675  if (lresult == ERROR_SUCCESS)
676  printf("Successfully queried key\n");
677 # endif
678  lresult = regkey.SetValue(
679  HKEY_LOCAL_MACHINE, "SOFTWARE\\NVIDIA Corporation\\Global\\Stereo3D\\StereoEnable", "1");
680  if (lresult == ERROR_SUCCESS)
681  printf("Successfully set value for key\n");
682  regkey.Close();
683  if (lresult == ERROR_SUCCESS)
684  printf("Successfully closed key\n");
685  // regkey.Write("2");
686  }
687 #endif // WIN32
688 
689  // Create the system
692 
693  if (fSystem) {
694  // Create an application object
695  Application app(fSystem);
696 
697  // Add the application as event consumer
698  fSystem->addEventConsumer(&app);
699 
700  // Enter main loop
701  while (!app.m_exitRequested) {
702  // printf("main: loop\n");
703  fSystem->processEvents(true);
705  }
706 
707  // Remove so ghost doesn't do a double free
709  }
710 
711  // Dispose the system
713 
714  return 0;
715 }
716 
718 {
719  fAngle += 2.0;
720  view_roty += 1.0;
721  GHOST_IWindow *window = (GHOST_IWindow *)task->getUserData();
722  if (fApp->m_fullScreenWindow) {
723  // Running full screen
725  }
726  else {
727  if (fSystem->validWindow(window)) {
728  window->invalidate();
729  }
730  }
731 }
sqrt(x)+1/max(0
static GLfloat fAngle
Definition: GHOST_Test.cpp:45
static void gearsTimerProc(GHOST_ITimerTask *task, uint64_t time)
Definition: GHOST_Test.cpp:717
static GHOST_ISystem * fSystem
Definition: GHOST_Test.cpp:46
int main(int, char **)
Definition: GHOST_Test.cpp:648
void RenderScene()
Definition: GHOST_Test.cpp:209
static GLfloat view_roty
Definition: GHOST_Test.cpp:44
static GLfloat view_rotz
Definition: GHOST_Test.cpp:44
void StereoProjection(float left, float right, float bottom, float top, float nearplane, float farplane, float zero_plane, float dist, float eye)
Definition: GHOST_Test.cpp:323
static void gearGL(GLfloat inner_radius, GLfloat outer_radius, GLfloat width, GLint teeth, GLfloat tooth_depth)
Definition: GHOST_Test.cpp:63
#define RIGHT_EYE
Definition: GHOST_Test.cpp:37
static void testTimerProc(GHOST_ITimerTask *, uint64_t time)
Definition: GHOST_Test.cpp:58
void RenderCamera()
Definition: GHOST_Test.cpp:202
static bool nVidiaWindows
Definition: GHOST_Test.cpp:39
#define LEFT_EYE
Definition: GHOST_Test.cpp:36
static GLfloat view_rotx
Definition: GHOST_Test.cpp:44
static void drawGearGL(int id)
Definition: GHOST_Test.cpp:170
static void View(GHOST_IWindow *window, bool stereo, int eye=0)
Definition: GHOST_Test.cpp:231
static class Application * fApp
Definition: GHOST_Test.cpp:43
@ GHOST_kWindowStateNormal
Definition: GHOST_Types.h:130
GHOST_TStandardCursor
Definition: GHOST_Types.h:214
@ GHOST_kStandardCursorFirstCursor
Definition: GHOST_Types.h:215
@ GHOST_kStandardCursorNumCursors
Definition: GHOST_Types.h:256
@ GHOST_kEventWindowClose
Definition: GHOST_Types.h:189
@ GHOST_kEventWheel
Definition: GHOST_Types.h:175
@ GHOST_kEventCursorMove
Definition: GHOST_Types.h:172
@ GHOST_kEventWindowActivate
Definition: GHOST_Types.h:190
@ GHOST_kEventWindowUpdate
Definition: GHOST_Types.h:192
@ GHOST_kEventWindowDeactivate
Definition: GHOST_Types.h:191
@ GHOST_kEventKeyDown
Definition: GHOST_Types.h:183
@ GHOST_kEventUnknown
Definition: GHOST_Types.h:170
@ GHOST_kEventKeyUp
Definition: GHOST_Types.h:184
@ GHOST_kKeyT
Definition: GHOST_Types.h:311
@ GHOST_kKeyW
Definition: GHOST_Types.h:314
@ GHOST_kKeyC
Definition: GHOST_Types.h:294
@ GHOST_kKeyQ
Definition: GHOST_Types.h:308
@ GHOST_kKeyF
Definition: GHOST_Types.h:297
@ GHOST_kKeyM
Definition: GHOST_Types.h:304
@ GHOST_kKeyS
Definition: GHOST_Types.h:310
@ GHOST_kKeyH
Definition: GHOST_Types.h:299
@ GHOST_kKeyE
Definition: GHOST_Types.h:296
@ GHOST_kDrawingContextTypeOpenGL
Definition: GHOST_Types.h:150
@ GHOST_kModifierKeyRightControl
Definition: GHOST_Types.h:124
@ GHOST_kModifierKeyLeftControl
Definition: GHOST_Types.h:123
@ GHOST_kModifierKeyRightAlt
Definition: GHOST_Types.h:122
@ GHOST_kModifierKeyRightShift
Definition: GHOST_Types.h:120
@ GHOST_kModifierKeyLeftAlt
Definition: GHOST_Types.h:121
@ GHOST_kModifierKeyLeftShift
Definition: GHOST_Types.h:119
#define glEnable
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint y
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble right
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei width
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble top
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble bottom
ATTR_WARN_UNUSED_RESULT const BMVert * v
SIMD_FORCE_INLINE btScalar angle(const btVector3 &v) const
Return the angle between this and another vector.
Definition: btVector3.h:356
GHOST_IWindow * m_secondaryWindow
Definition: GHOST_Test.cpp:389
Application(GHOST_ISystem *system)
Definition: GHOST_Test.cpp:398
~Application(void)
Definition: GHOST_Test.cpp:445
GHOST_TStandardCursor m_cursor
Definition: GHOST_Test.cpp:392
virtual bool processEvent(GHOST_IEvent *event)
Definition: GHOST_Test.cpp:456
GHOST_ITimerTask * m_testTimer
Definition: GHOST_Test.cpp:391
GHOST_IWindow * m_fullScreenWindow
Definition: GHOST_Test.cpp:390
GHOST_IWindow * m_mainWindow
Definition: GHOST_Test.cpp:388
bool m_exitRequested
Definition: GHOST_Test.cpp:393
GHOST_ITimerTask * m_gearsTimer
Definition: GHOST_Test.cpp:391
GHOST_ISystem * m_system
Definition: GHOST_Test.cpp:387
virtual GHOST_TEventDataPtr getData()=0
virtual GHOST_TEventType getType()=0
static GHOST_ISystem * getSystem()
virtual GHOST_TSuccess beginFullScreen(const GHOST_DisplaySetting &setting, GHOST_IWindow **window, const bool stereoVisual, const bool alphaBackground=0)=0
virtual bool validWindow(GHOST_IWindow *window)=0
virtual GHOST_TSuccess addEventConsumer(GHOST_IEventConsumer *consumer)=0
virtual GHOST_TSuccess getModifierKeyState(GHOST_TModifierKey mask, bool &isDown) const =0
virtual GHOST_TSuccess removeTimer(GHOST_ITimerTask *timerTask)=0
static GHOST_TSuccess disposeSystem()
virtual bool getFullScreen(void)=0
static GHOST_TSuccess createSystem()
virtual void dispatchEvents()=0
virtual GHOST_IWindow * createWindow(const char *title, int32_t left, int32_t top, uint32_t width, uint32_t height, GHOST_TWindowState state, GHOST_TDrawingContextType type, GHOST_GLSettings glSettings, const bool exclusive=false, const bool is_dialog=false, const GHOST_IWindow *parentWindow=NULL)=0
virtual GHOST_TSuccess endFullScreen(void)=0
virtual GHOST_ITimerTask * installTimer(uint64_t delay, uint64_t interval, GHOST_TimerProcPtr timerProc, GHOST_TUserDataPtr userData=NULL)=0
virtual GHOST_TSuccess disposeWindow(GHOST_IWindow *window)=0
virtual GHOST_TSuccess setCursorPosition(int32_t x, int32_t y)=0
virtual GHOST_TSuccess removeEventConsumer(GHOST_IEventConsumer *consumer)=0
virtual bool processEvents(bool waitForEvent)=0
virtual void setTitle(const char *title)=0
virtual void getClientBounds(GHOST_Rect &bounds) const =0
virtual GHOST_TSuccess activateDrawingContext()=0
virtual std::string getTitle() const =0
virtual GHOST_TSuccess setCursorShape(GHOST_TStandardCursor cursorShape)=0
virtual GHOST_TSuccess setCursorVisibility(bool visible)=0
virtual bool getCursorVisibility() const =0
virtual GHOST_TSuccess invalidate()=0
virtual GHOST_TSuccess swapBuffers()=0
virtual int32_t getHeight() const
Definition: GHOST_Rect.h:174
virtual int32_t getWidth() const
Definition: GHOST_Rect.h:169
double time
int len
Definition: draw_manager.c:108
#define glBegin
Definition: gl-deprecated.h:18
#define glMaterialfv
#define glTranslatef
#define glPopMatrix
#define glFrustum
#define glVertex3f
#define glMatrixMode
#define glRotatef
#define glPushMatrix
#define glShadeModel
#define glNormal3f
#define glEnd
#define glLightfv
#define glLoadIdentity
uint pos
static int left
INLINE Rall1d< T, V, S > cos(const Rall1d< T, V, S > &arg)
Definition: rall1d.h:319
INLINE Rall1d< T, V, S > sin(const Rall1d< T, V, S > &arg)
Definition: rall1d.h:311
struct blender::compositor::@179::@181 task
T distance(const T &a, const T &b)
unsigned __int64 uint64_t
Definition: stdint.h:90