diff options
Diffstat (limited to 'nx-X11/extras/Mesa_6.4.2/src/glut/beos/glutBlocker.h')
-rw-r--r-- | nx-X11/extras/Mesa_6.4.2/src/glut/beos/glutBlocker.h | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/nx-X11/extras/Mesa_6.4.2/src/glut/beos/glutBlocker.h b/nx-X11/extras/Mesa_6.4.2/src/glut/beos/glutBlocker.h new file mode 100644 index 000000000..fc9e4cc30 --- /dev/null +++ b/nx-X11/extras/Mesa_6.4.2/src/glut/beos/glutBlocker.h @@ -0,0 +1,47 @@ +/*********************************************************** + * Copyright (C) 1997, Be Inc. Copyright (C) 1999, Jake Hamby. + * + * This program is freely distributable without licensing fees + * and is provided without guarantee or warrantee expressed or + * implied. This program is -not- in the public domain. + * + * FILE: glutBlocker.h + * + * DESCRIPTION: helper class for GLUT event loop. + * if a window receives an event, wake up the event loop. + ***********************************************************/ + +/*********************************************************** + * Headers + ***********************************************************/ +#include <kernel/OS.h> + +/*********************************************************** + * CLASS: GlutBlocker + * + * DESCRIPTION: Fairly naive, but safe implementation. + * global semaphore controls access to state + * event semaphore blocks WaitEvent() call if necessary + * (this is basically a condition variable class) + ***********************************************************/ +class GlutBlocker { +public: + GlutBlocker(); + ~GlutBlocker(); + void WaitEvent(); // wait for new event + void WaitEvent(bigtime_t usecs); // wait with timeout + void NewEvent(); // new event from a window (may need to wakeup main thread) + void QuickNewEvent() { events = true; } // new event from main thread + void ClearEvents() { events = false; } // clear counter at beginning of event loop + bool PendingEvent() { return events; } // XPending() equivalent +private: + sem_id gSem; + sem_id eSem; + bool events; // are there any new events? + bool sleeping; // is someone sleeping on eSem? +}; + +/*********************************************************** + * Global variable + ***********************************************************/ +extern GlutBlocker gBlock; |