aboutsummaryrefslogtreecommitdiff
path: root/nx-X11/extras/Mesa_6.4.2/src/glut/beos/glutInit.cpp
diff options
context:
space:
mode:
authorftrapero <frantracer@gmail.com>2017-06-27 12:08:38 +0200
committerftrapero <frantracer@gmail.com>2017-06-27 12:08:38 +0200
commitb30506dface604c78e445905ce263f166945d67b (patch)
tree1c23f91f36eb445850b654daa9c5e30bb47072e5 /nx-X11/extras/Mesa_6.4.2/src/glut/beos/glutInit.cpp
parentc032f0e341c981036e9b3245a0e0710ad61599d0 (diff)
parent663631725ee2d633d9ec5821cd48953ffd188d00 (diff)
downloadnx-libs-b30506dface604c78e445905ce263f166945d67b.tar.gz
nx-libs-b30506dface604c78e445905ce263f166945d67b.tar.bz2
nx-libs-b30506dface604c78e445905ce263f166945d67b.zip
Include mesa-6.4.2 project
Diffstat (limited to 'nx-X11/extras/Mesa_6.4.2/src/glut/beos/glutInit.cpp')
-rw-r--r--nx-X11/extras/Mesa_6.4.2/src/glut/beos/glutInit.cpp263
1 files changed, 263 insertions, 0 deletions
diff --git a/nx-X11/extras/Mesa_6.4.2/src/glut/beos/glutInit.cpp b/nx-X11/extras/Mesa_6.4.2/src/glut/beos/glutInit.cpp
new file mode 100644
index 000000000..401081328
--- /dev/null
+++ b/nx-X11/extras/Mesa_6.4.2/src/glut/beos/glutInit.cpp
@@ -0,0 +1,263 @@
+/***********************************************************
+ * 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: glutInit.cpp
+ *
+ * DESCRIPTION: initialize GLUT state
+ ***********************************************************/
+
+/***********************************************************
+ * Headers
+ ***********************************************************/
+#include <GL/glut.h>
+#include <string.h>
+#include <stdlib.h>
+#include <signal.h>
+#include "glutint.h"
+#include "glutState.h"
+#include "glutBlocker.h"
+#include "beos_x11.h"
+
+/***********************************************************
+ * Global variables
+ ***********************************************************/
+GlutState gState;
+char *__glutProgramName = NULL;
+
+/***********************************************************
+ * Private variables
+ ***********************************************************/
+static int __glutArgc;
+static char **__glutArgv;
+
+/***********************************************************
+ * FUNCTION: __glutInitTime
+ *
+ * DESCRIPTION: set up start time variable
+ ***********************************************************/
+void __glutInitTime(bigtime_t *beginning)
+{
+ static int beenhere = 0;
+ static bigtime_t genesis;
+
+ if (!beenhere) {
+ genesis = system_time();
+ beenhere = 1;
+ }
+ *beginning = genesis;
+}
+
+/***********************************************************
+ * FUNCTION: removeArgs
+ *
+ * DESCRIPTION: helper function for glutInit to remove args
+ * from argv variable passed in
+ ***********************************************************/
+static void
+removeArgs(int *argcp, char **argv, int numToRemove)
+{
+ int i, j;
+
+ for (i = 0, j = numToRemove; argv[j]; i++, j++) {
+ argv[i] = argv[j];
+ }
+ argv[i] = NULL;
+ *argcp -= numToRemove;
+}
+
+/***********************************************************
+ * FUNCTION: bAppThread
+ *
+ * DESCRIPTION: starts the BApplication message loop running
+ ***********************************************************/
+static int32 bAppThread(void *arg) {
+ be_app->Lock();
+ return be_app->Run();
+}
+
+/***********************************************************
+ * FUNCTION: sigHandler
+ *
+ * DESCRIPTION: shuts down the app on CTRL-C
+ ***********************************************************/
+static void sigHandler(int) {
+ gState.quitAll = true;
+ gBlock.NewEvent();
+}
+
+/***********************************************************
+ * FUNCTION: glutInit (2.1)
+ *
+ * DESCRIPTION: create BApplication, parse cmd-line arguments,
+ * and set up gState structure.
+ ***********************************************************/
+void glutInit(int *argcp, char **argv) {
+ char *str, *geometry = NULL;
+ int i;
+
+ if (gState.display) {
+ __glutWarning("glutInit being called a second time.");
+ return;
+ }
+ /* Determine temporary program name. */
+ str = strrchr(argv[0], '/');
+ if (str == NULL) {
+ __glutProgramName = argv[0];
+ } else {
+ __glutProgramName = str + 1;
+ }
+
+ /* Make private copy of command line arguments. */
+ __glutArgc = *argcp;
+ __glutArgv = (char **) malloc(__glutArgc * sizeof(char *));
+ if (!__glutArgv)
+ __glutFatalError("out of memory.");
+ for (i = 0; i < __glutArgc; i++) {
+ __glutArgv[i] = strdup(argv[i]);
+ if (!__glutArgv[i])
+ __glutFatalError("out of memory.");
+ }
+
+ /* determine permanent program name */
+ str = strrchr(__glutArgv[0], '/');
+ if (str == NULL) {
+ __glutProgramName = __glutArgv[0];
+ } else {
+ __glutProgramName = str + 1;
+ }
+
+ /* parse arguments for standard options */
+ for (i = 1; i < __glutArgc; i++) {
+ if (!strcmp(__glutArgv[i], "-display")) {
+ __glutWarning("-display option only valid for X glut.");
+ if (++i >= __glutArgc) {
+ __glutFatalError(
+ "follow -display option with X display name.");
+ }
+ removeArgs(argcp, &argv[1], 2);
+ } else if (!strcmp(__glutArgv[i], "-geometry")) {
+ if (++i >= __glutArgc) {
+ __glutFatalError(
+ "follow -geometry option with geometry parameter.");
+ }
+ geometry = __glutArgv[i];
+ removeArgs(argcp, &argv[1], 2);
+ } else if (!strcmp(__glutArgv[i], "-direct")) {
+ __glutWarning("-direct option only valid for X glut.");
+ removeArgs(argcp, &argv[1], 1);
+ } else if (!strcmp(__glutArgv[i], "-indirect")) {
+ __glutWarning("-indirect option only valid for X glut.");
+ removeArgs(argcp, &argv[1], 1);
+ } else if (!strcmp(__glutArgv[i], "-iconic")) {
+ __glutWarning("-iconic option doesn't make sense in BeOS.");
+ removeArgs(argcp, &argv[1], 1);
+ } else if (!strcmp(__glutArgv[i], "-gldebug")) {
+ gState.debug = true;
+ removeArgs(argcp, &argv[1], 1);
+ } else if (!strcmp(__glutArgv[i], "-sync")) {
+ __glutWarning("-sync option only valid for X glut.");
+ removeArgs(argcp, &argv[1], 1);
+ } else {
+ /* Once unknown option encountered, stop command line
+ processing. */
+ break;
+ }
+ }
+
+ __glutInit(); /* Create BApplication first so DisplayWidth() works */
+ if (geometry) {
+ int flags, x, y, width, height;
+
+ /* Fix bogus "{width|height} may be used before set"
+ warning */
+ width = 0;
+ height = 0;
+
+ flags = XParseGeometry(geometry, &x, &y,
+ (unsigned int *) &width, (unsigned int *) &height);
+ if (WidthValue & flags) {
+ /* Careful because X does not allow zero or negative
+ width windows */
+ if (width > 0)
+ gState.initWidth = width;
+ }
+ if (HeightValue & flags) {
+ /* Careful because X does not allow zero or negative
+ height windows */
+ if (height > 0)
+ gState.initHeight = height;
+ }
+ if (XValue & flags) {
+ if (XNegative & flags)
+ x = DisplayWidth() + x - gState.initWidth;
+ /* Play safe: reject negative X locations */
+ if (x >= 0)
+ gState.initX = x;
+ }
+ if (YValue & flags) {
+ if (YNegative & flags)
+ y = DisplayHeight() + y - gState.initHeight;
+ /* Play safe: reject negative Y locations */
+ if (y >= 0)
+ gState.initY = y;
+ }
+ }
+}
+
+/***********************************************************
+ * FUNCTION: __glutInit
+ *
+ * DESCRIPTION: create BApplication, parse cmd-line arguments,
+ * and set up gState structure.
+ ***********************************************************/
+void __glutInit() {
+ // open BApplication
+ gState.display = new BApplication("application/x-glut-demo");
+ be_app->Unlock();
+ gState.appthread = spawn_thread(bAppThread, "BApplication", B_NORMAL_PRIORITY, 0);
+ resume_thread(gState.appthread);
+
+ bigtime_t unused;
+ __glutInitTime(&unused);
+
+ /* set atexit() function to destroy all windows before exiting */
+ if(atexit(__glutDestroyAllWindows))
+ __glutFatalError("can't set exit handler");
+
+ /* similarly, destroy all windows on CTRL-C */
+ signal(SIGINT, sigHandler);
+}
+
+/***********************************************************
+ * FUNCTION: glutInitWindowPosition (2.2)
+ *
+ * DESCRIPTION: set initial window position
+ ***********************************************************/
+void glutInitWindowPosition(int x, int y) {
+ gState.initX = x;
+ gState.initY = y;
+}
+
+/***********************************************************
+ * FUNCTION: glutInitWindowSize (2.2)
+ *
+ * DESCRIPTION: set initial window size
+ ***********************************************************/
+void glutInitWindowSize(int width, int height) {
+ gState.initWidth = width;
+ gState.initHeight = height;
+}
+
+/***********************************************************
+ * FUNCTION: glutInitDisplayMode (2.3)
+ *
+ * DESCRIPTION: set initial display mode
+ ***********************************************************/
+void glutInitDisplayMode(unsigned int mode) {
+ gState.displayMode = mode;
+}