-\r
-/* Copyright (c) Mark J. Kilgard, 1994, 1997, 1998. */\r
-\r
-/* This program is freely distributable without licensing fees\r
- and is provided without guarantee or warrantee expressed or\r
- implied. This program is -not- in the public domain. */\r
-\r
-#include <assert.h>\r
-#include <stdlib.h> /* SunOS 4 needs NULL defined for GETTIMEOFDAY macro. */\r
-#include "glutint.h"\r
-\r
-/* CENTRY */\r
-int GLUTAPIENTRY\r
-glutGet(GLenum param)\r
-{\r
- Window win, root;\r
- int x, y, value;\r
- unsigned int width, height, border, depth;\r
-\r
- switch (param) {\r
- case GLUT_INIT_WINDOW_X:\r
- return __glutInitX;\r
- case GLUT_INIT_WINDOW_Y:\r
- return __glutInitY;\r
- case GLUT_INIT_WINDOW_WIDTH:\r
- return __glutInitWidth;\r
- case GLUT_INIT_WINDOW_HEIGHT:\r
- return __glutInitHeight;\r
- case GLUT_INIT_DISPLAY_MODE:\r
- return __glutDisplayMode;\r
- case GLUT_WINDOW_X:\r
- XTranslateCoordinates(__glutDisplay, __glutCurrentWindow->win,\r
- __glutRoot, 0, 0, &x, &y, &win);\r
- return x;\r
- case GLUT_WINDOW_Y:\r
- XTranslateCoordinates(__glutDisplay, __glutCurrentWindow->win,\r
- __glutRoot, 0, 0, &x, &y, &win);\r
- return y;\r
- case GLUT_WINDOW_WIDTH:\r
- if (!__glutCurrentWindow->reshape) {\r
- XGetGeometry(__glutDisplay, __glutCurrentWindow->win,\r
- &root, &x, &y,\r
- &width, &height, &border, &depth);\r
- return width;\r
- }\r
- return __glutCurrentWindow->width;\r
- case GLUT_WINDOW_HEIGHT:\r
- if (!__glutCurrentWindow->reshape) {\r
- XGetGeometry(__glutDisplay, __glutCurrentWindow->win,\r
- &root, &x, &y,\r
- &width, &height, &border, &depth);\r
- return height;\r
- }\r
- return __glutCurrentWindow->height;\r
-#ifdef __OS2__\r
- #define GET_CONFIG(attrib) \\r
- { if (__glutCurrentWindow->renderWin == __glutCurrentWindow->win) \\r
- glXGetConfig( __glutCurrentWindow->vis, attrib, &value); \\r
- else \\r
- glXGetConfig(__glutCurrentWindow->overlay->vis, attrib, &value); \\r
- } \\r
-\r
-#else\r
-\r
-#define GET_CONFIG(attrib) { \\r
- if (__glutCurrentWindow->renderWin == __glutCurrentWindow->win) { \\r
- glXGetConfig(__glutDisplay, __glutCurrentWindow->vis, \\r
- attrib, &value); \\r
- } else { \\r
- glXGetConfig(__glutDisplay, __glutCurrentWindow->overlay->vis, \\r
- attrib, &value); \\r
- } \\r
-}\r
-#endif\r
-\r
- case GLUT_WINDOW_BUFFER_SIZE:\r
- GET_CONFIG(GLX_BUFFER_SIZE);\r
- return value;\r
- case GLUT_WINDOW_STENCIL_SIZE:\r
- GET_CONFIG(GLX_STENCIL_SIZE);\r
- return value;\r
- case GLUT_WINDOW_DEPTH_SIZE:\r
- GET_CONFIG(GLX_DEPTH_SIZE);\r
- return value;\r
- case GLUT_WINDOW_RED_SIZE:\r
- GET_CONFIG(GLX_RED_SIZE);\r
- return value;\r
- case GLUT_WINDOW_GREEN_SIZE:\r
- GET_CONFIG(GLX_GREEN_SIZE);\r
- return value;\r
- case GLUT_WINDOW_BLUE_SIZE:\r
- GET_CONFIG(GLX_BLUE_SIZE);\r
- return value;\r
- case GLUT_WINDOW_ALPHA_SIZE:\r
- GET_CONFIG(GLX_ALPHA_SIZE);\r
- return value;\r
- case GLUT_WINDOW_ACCUM_RED_SIZE:\r
- GET_CONFIG(GLX_ACCUM_RED_SIZE);\r
- return value;\r
- case GLUT_WINDOW_ACCUM_GREEN_SIZE:\r
- GET_CONFIG(GLX_ACCUM_GREEN_SIZE);\r
- return value;\r
- case GLUT_WINDOW_ACCUM_BLUE_SIZE:\r
- GET_CONFIG(GLX_ACCUM_BLUE_SIZE);\r
- return value;\r
- case GLUT_WINDOW_ACCUM_ALPHA_SIZE:\r
- GET_CONFIG(GLX_ACCUM_ALPHA_SIZE);\r
- return value;\r
- case GLUT_WINDOW_DOUBLEBUFFER:\r
- GET_CONFIG(GLX_DOUBLEBUFFER);\r
- return value;\r
- case GLUT_WINDOW_RGBA:\r
- GET_CONFIG(GLX_RGBA);\r
- return value;\r
- case GLUT_WINDOW_COLORMAP_SIZE:\r
- GET_CONFIG(GLX_RGBA);\r
- if (value) {\r
- return 0;\r
- } else {\r
-#if defined(_WIN32) || defined(__OS2__)\r
- /* KLUDGE: we always assume 256 colors in CI mode on\r
- Win32 */\r
- return 256;\r
-#else\r
- if (__glutCurrentWindow->renderWin == __glutCurrentWindow->win) {\r
- return __glutCurrentWindow->vis->visual->map_entries;\r
- } else {\r
- return __glutCurrentWindow->overlay->vis->visual->map_entries;\r
- }\r
-#endif /* _WIN32 */\r
- }\r
- case GLUT_WINDOW_PARENT:\r
- return __glutCurrentWindow->parent ?\r
- __glutCurrentWindow->parent->num + 1 : 0;\r
- case GLUT_WINDOW_NUM_CHILDREN:\r
- {\r
- int num = 0;\r
- GLUTwindow *children = __glutCurrentWindow->children;\r
-\r
- while (children) {\r
- num++;\r
- children = children->siblings;\r
- }\r
- return num;\r
- }\r
- case GLUT_WINDOW_NUM_SAMPLES:\r
-#if defined(GLX_VERSION_1_1) && defined(GLX_SGIS_multisample)\r
- if (__glutIsSupportedByGLX("GLX_SGIS_multisample")) {\r
- GET_CONFIG(GLX_SAMPLES_SGIS);\r
- return value;\r
- } else {\r
- return 0;\r
- }\r
-#else\r
- /* Independent of GLX server support, multisampling not\r
- supported by GLX client-side. */\r
- return 0;\r
-#endif\r
- case GLUT_WINDOW_STEREO:\r
- GET_CONFIG(GLX_STEREO);\r
- return value;\r
- case GLUT_WINDOW_CURSOR:\r
- return __glutCurrentWindow->cursor;\r
- case GLUT_SCREEN_WIDTH:\r
- return DisplayWidth(__glutDisplay, __glutScreen);\r
- case GLUT_SCREEN_HEIGHT:\r
- return DisplayHeight(__glutDisplay, __glutScreen);\r
- case GLUT_SCREEN_WIDTH_MM:\r
- return DisplayWidthMM(__glutDisplay, __glutScreen);\r
- case GLUT_SCREEN_HEIGHT_MM:\r
- return DisplayHeightMM(__glutDisplay, __glutScreen);\r
- case GLUT_MENU_NUM_ITEMS:\r
- return __glutCurrentMenu->num;\r
- case GLUT_DISPLAY_MODE_POSSIBLE:\r
- {\r
- XVisualInfo *vi;\r
- Bool dummy, visAlloced;\r
- void *fbc;\r
-\r
-#if defined(_WIN32)\r
- /* Our fake glXChooseVisual (which is called by\r
- __glutDetermineVisual) needs an HDC to work with, so grab one\r
- from the "root" window. */\r
- XHDC = GetDC(GetDesktopWindow());\r
-#endif\r
- vi = __glutDetermineWindowVisual(&dummy, &visAlloced, &fbc);\r
-#if defined(_WIN32)\r
- ReleaseDC(GetDesktopWindow(), XHDC);\r
-#endif\r
- if (vi) {\r
- if (visAlloced)\r
- XFree(vi);\r
- return 1;\r
- }\r
- return 0;\r
- }\r
- case GLUT_ELAPSED_TIME:\r
- {\r
-#ifdef OLD_VMS\r
- struct timeval6 elapsed, beginning, now;\r
-#else\r
- struct timeval elapsed, beginning, now;\r
-#endif\r
-\r
- __glutInitTime(&beginning);\r
- GETTIMEOFDAY(&now);\r
- TIMEDELTA(elapsed, now, beginning);\r
- /* Return elapsed milliseconds. */\r
-#if defined(__vms) && ( __VMS_VER < 70000000 )\r
- return (int) (elapsed.val / TICKS_PER_MILLISECOND);\r
-#else\r
- return (int) ((elapsed.tv_sec * 1000) + (elapsed.tv_usec / 1000));\r
-#endif\r
- }\r
- case GLUT_WINDOW_FORMAT_ID:\r
-#if defined(__OS2__)\r
- return wglGetPixelFormat(__glutCurrentWindow->hdc);\r
-#elif defined(_WIN32)\r
- return GetPixelFormat(__glutCurrentWindow->hdc);\r
-#else\r
- if (__glutCurrentWindow->renderWin == __glutCurrentWindow->win) {\r
- return (int) __glutCurrentWindow->vis->visualid;\r
- } else {\r
- return (int) __glutCurrentWindow->overlay->vis->visualid;\r
- }\r
-#endif\r
- default:\r
- __glutWarning("invalid glutGet parameter: %d", param);\r
- return -1;\r
- }\r
-}\r
-/* ENDCENTRY */\r
+
+/* Copyright (c) Mark J. Kilgard, 1994, 1997, 1998. */
+
+/* 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. */
+
+#include <assert.h>
+#include <stdlib.h> /* SunOS 4 needs NULL defined for GETTIMEOFDAY macro. */
+#include "glutint.h"
+
+/* CENTRY */
+int GLUTAPIENTRY
+glutGet(GLenum param)
+{
+ Window win, root;
+ int x, y, value;
+ unsigned int width, height, border, depth;
+
+ switch (param) {
+ case GLUT_INIT_WINDOW_X:
+ return __glutInitX;
+ case GLUT_INIT_WINDOW_Y:
+ return __glutInitY;
+ case GLUT_INIT_WINDOW_WIDTH:
+ return __glutInitWidth;
+ case GLUT_INIT_WINDOW_HEIGHT:
+ return __glutInitHeight;
+ case GLUT_INIT_DISPLAY_MODE:
+ return __glutDisplayMode;
+ case GLUT_WINDOW_X:
+ XTranslateCoordinates(__glutDisplay, __glutCurrentWindow->win,
+ __glutRoot, 0, 0, &x, &y, &win);
+ return x;
+ case GLUT_WINDOW_Y:
+ XTranslateCoordinates(__glutDisplay, __glutCurrentWindow->win,
+ __glutRoot, 0, 0, &x, &y, &win);
+ return y;
+ case GLUT_WINDOW_WIDTH:
+ if (!__glutCurrentWindow->reshape) {
+ XGetGeometry(__glutDisplay, __glutCurrentWindow->win,
+ &root, &x, &y,
+ &width, &height, &border, &depth);
+ return width;
+ }
+ return __glutCurrentWindow->width;
+ case GLUT_WINDOW_HEIGHT:
+ if (!__glutCurrentWindow->reshape) {
+ XGetGeometry(__glutDisplay, __glutCurrentWindow->win,
+ &root, &x, &y,
+ &width, &height, &border, &depth);
+ return height;
+ }
+ return __glutCurrentWindow->height;
+#ifdef __OS2__
+ #define GET_CONFIG(attrib) \
+ { if (__glutCurrentWindow->renderWin == __glutCurrentWindow->win) \
+ glXGetConfig( __glutCurrentWindow->vis, attrib, &value); \
+ else \
+ glXGetConfig(__glutCurrentWindow->overlay->vis, attrib, &value); \
+ } \
+
+#else
+
+#define GET_CONFIG(attrib) { \
+ if (__glutCurrentWindow->renderWin == __glutCurrentWindow->win) { \
+ glXGetConfig(__glutDisplay, __glutCurrentWindow->vis, \
+ attrib, &value); \
+ } else { \
+ glXGetConfig(__glutDisplay, __glutCurrentWindow->overlay->vis, \
+ attrib, &value); \
+ } \
+}
+#endif
+
+ case GLUT_WINDOW_BUFFER_SIZE:
+ GET_CONFIG(GLX_BUFFER_SIZE);
+ return value;
+ case GLUT_WINDOW_STENCIL_SIZE:
+ GET_CONFIG(GLX_STENCIL_SIZE);
+ return value;
+ case GLUT_WINDOW_DEPTH_SIZE:
+ GET_CONFIG(GLX_DEPTH_SIZE);
+ return value;
+ case GLUT_WINDOW_RED_SIZE:
+ GET_CONFIG(GLX_RED_SIZE);
+ return value;
+ case GLUT_WINDOW_GREEN_SIZE:
+ GET_CONFIG(GLX_GREEN_SIZE);
+ return value;
+ case GLUT_WINDOW_BLUE_SIZE:
+ GET_CONFIG(GLX_BLUE_SIZE);
+ return value;
+ case GLUT_WINDOW_ALPHA_SIZE:
+ GET_CONFIG(GLX_ALPHA_SIZE);
+ return value;
+ case GLUT_WINDOW_ACCUM_RED_SIZE:
+ GET_CONFIG(GLX_ACCUM_RED_SIZE);
+ return value;
+ case GLUT_WINDOW_ACCUM_GREEN_SIZE:
+ GET_CONFIG(GLX_ACCUM_GREEN_SIZE);
+ return value;
+ case GLUT_WINDOW_ACCUM_BLUE_SIZE:
+ GET_CONFIG(GLX_ACCUM_BLUE_SIZE);
+ return value;
+ case GLUT_WINDOW_ACCUM_ALPHA_SIZE:
+ GET_CONFIG(GLX_ACCUM_ALPHA_SIZE);
+ return value;
+ case GLUT_WINDOW_DOUBLEBUFFER:
+ GET_CONFIG(GLX_DOUBLEBUFFER);
+ return value;
+ case GLUT_WINDOW_RGBA:
+ GET_CONFIG(GLX_RGBA);
+ return value;
+ case GLUT_WINDOW_COLORMAP_SIZE:
+ GET_CONFIG(GLX_RGBA);
+ if (value) {
+ return 0;
+ } else {
+#if defined(_WIN32) || defined(__OS2__)
+ /* KLUDGE: we always assume 256 colors in CI mode on
+ Win32 */
+ return 256;
+#else
+ if (__glutCurrentWindow->renderWin == __glutCurrentWindow->win) {
+ return __glutCurrentWindow->vis->visual->map_entries;
+ } else {
+ return __glutCurrentWindow->overlay->vis->visual->map_entries;
+ }
+#endif /* _WIN32 */
+ }
+ case GLUT_WINDOW_PARENT:
+ return __glutCurrentWindow->parent ?
+ __glutCurrentWindow->parent->num + 1 : 0;
+ case GLUT_WINDOW_NUM_CHILDREN:
+ {
+ int num = 0;
+ GLUTwindow *children = __glutCurrentWindow->children;
+
+ while (children) {
+ num++;
+ children = children->siblings;
+ }
+ return num;
+ }
+ case GLUT_WINDOW_NUM_SAMPLES:
+#if defined(GLX_VERSION_1_1) && defined(GLX_SGIS_multisample)
+ if (__glutIsSupportedByGLX("GLX_SGIS_multisample")) {
+ GET_CONFIG(GLX_SAMPLES_SGIS);
+ return value;
+ } else {
+ return 0;
+ }
+#else
+ /* Independent of GLX server support, multisampling not
+ supported by GLX client-side. */
+ return 0;
+#endif
+ case GLUT_WINDOW_STEREO:
+ GET_CONFIG(GLX_STEREO);
+ return value;
+ case GLUT_WINDOW_CURSOR:
+ return __glutCurrentWindow->cursor;
+ case GLUT_SCREEN_WIDTH:
+ return DisplayWidth(__glutDisplay, __glutScreen);
+ case GLUT_SCREEN_HEIGHT:
+ return DisplayHeight(__glutDisplay, __glutScreen);
+ case GLUT_SCREEN_WIDTH_MM:
+ return DisplayWidthMM(__glutDisplay, __glutScreen);
+ case GLUT_SCREEN_HEIGHT_MM:
+ return DisplayHeightMM(__glutDisplay, __glutScreen);
+ case GLUT_MENU_NUM_ITEMS:
+ return __glutCurrentMenu->num;
+ case GLUT_DISPLAY_MODE_POSSIBLE:
+ {
+ XVisualInfo *vi;
+ Bool dummy, visAlloced;
+ void *fbc;
+
+#if defined(_WIN32)
+ /* Our fake glXChooseVisual (which is called by
+ __glutDetermineVisual) needs an HDC to work with, so grab one
+ from the "root" window. */
+ XHDC = GetDC(GetDesktopWindow());
+#endif
+ vi = __glutDetermineWindowVisual(&dummy, &visAlloced, &fbc);
+#if defined(_WIN32)
+ ReleaseDC(GetDesktopWindow(), XHDC);
+#endif
+ if (vi) {
+ if (visAlloced)
+ XFree(vi);
+ return 1;
+ }
+ return 0;
+ }
+ case GLUT_ELAPSED_TIME:
+ {
+#ifdef OLD_VMS
+ struct timeval6 elapsed, beginning, now;
+#else
+ struct timeval elapsed, beginning, now;
+#endif
+
+ __glutInitTime(&beginning);
+ GETTIMEOFDAY(&now);
+ TIMEDELTA(elapsed, now, beginning);
+ /* Return elapsed milliseconds. */
+#if defined(__vms) && ( __VMS_VER < 70000000 )
+ return (int) (elapsed.val / TICKS_PER_MILLISECOND);
+#else
+ return (int) ((elapsed.tv_sec * 1000) + (elapsed.tv_usec / 1000));
+#endif
+ }
+ case GLUT_WINDOW_FORMAT_ID:
+#if defined(__OS2__)
+ return wglGetPixelFormat(__glutCurrentWindow->hdc);
+#elif defined(_WIN32)
+ return GetPixelFormat(__glutCurrentWindow->hdc);
+#else
+ if (__glutCurrentWindow->renderWin == __glutCurrentWindow->win) {
+ return (int) __glutCurrentWindow->vis->visualid;
+ } else {
+ return (int) __glutCurrentWindow->overlay->vis->visualid;
+ }
+#endif
+ default:
+ __glutWarning("invalid glutGet parameter: %d", param);
+ return -1;
+ }
+}
+/* ENDCENTRY */