aboutsummaryrefslogtreecommitdiff
path: root/nx-X11/extras/Mesa_6.4.2/src/glut/beos/glutBlocker.h
diff options
context:
space:
mode:
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.h47
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;