2 /* Copyright (c) Mark J. Kilgard, 1994, 1997, 1998. */
4 /* This program is freely distributable without licensing fees
5 and is provided without guarantee or warrantee expressed or
6 implied. This program is -not- in the public domain. */
9 #include <stdlib.h> /* SunOS 4 needs NULL defined for GETTIMEOFDAY macro. */
18 unsigned int width, height, border, depth;
21 case GLUT_INIT_WINDOW_X:
23 case GLUT_INIT_WINDOW_Y:
25 case GLUT_INIT_WINDOW_WIDTH:
26 return __glutInitWidth;
27 case GLUT_INIT_WINDOW_HEIGHT:
28 return __glutInitHeight;
29 case GLUT_INIT_DISPLAY_MODE:
30 return __glutDisplayMode;
32 XTranslateCoordinates(__glutDisplay, __glutCurrentWindow->win,
33 __glutRoot, 0, 0, &x, &y, &win);
36 XTranslateCoordinates(__glutDisplay, __glutCurrentWindow->win,
37 __glutRoot, 0, 0, &x, &y, &win);
39 case GLUT_WINDOW_WIDTH:
40 if (!__glutCurrentWindow->reshape) {
41 XGetGeometry(__glutDisplay, __glutCurrentWindow->win,
43 &width, &height, &border, &depth);
46 return __glutCurrentWindow->width;
47 case GLUT_WINDOW_HEIGHT:
48 if (!__glutCurrentWindow->reshape) {
49 XGetGeometry(__glutDisplay, __glutCurrentWindow->win,
51 &width, &height, &border, &depth);
54 return __glutCurrentWindow->height;
56 #define GET_CONFIG(attrib) { \
57 if (__glutCurrentWindow->renderWin == __glutCurrentWindow->win) { \
58 glXGetConfig(__glutDisplay, __glutCurrentWindow->vis, \
61 glXGetConfig(__glutDisplay, __glutCurrentWindow->overlay->vis, \
66 case GLUT_WINDOW_BUFFER_SIZE:
67 GET_CONFIG(GLX_BUFFER_SIZE);
69 case GLUT_WINDOW_STENCIL_SIZE:
70 GET_CONFIG(GLX_STENCIL_SIZE);
72 case GLUT_WINDOW_DEPTH_SIZE:
73 GET_CONFIG(GLX_DEPTH_SIZE);
75 case GLUT_WINDOW_RED_SIZE:
76 GET_CONFIG(GLX_RED_SIZE);
78 case GLUT_WINDOW_GREEN_SIZE:
79 GET_CONFIG(GLX_GREEN_SIZE);
81 case GLUT_WINDOW_BLUE_SIZE:
82 GET_CONFIG(GLX_BLUE_SIZE);
84 case GLUT_WINDOW_ALPHA_SIZE:
85 GET_CONFIG(GLX_ALPHA_SIZE);
87 case GLUT_WINDOW_ACCUM_RED_SIZE:
88 GET_CONFIG(GLX_ACCUM_RED_SIZE);
90 case GLUT_WINDOW_ACCUM_GREEN_SIZE:
91 GET_CONFIG(GLX_ACCUM_GREEN_SIZE);
93 case GLUT_WINDOW_ACCUM_BLUE_SIZE:
94 GET_CONFIG(GLX_ACCUM_BLUE_SIZE);
96 case GLUT_WINDOW_ACCUM_ALPHA_SIZE:
97 GET_CONFIG(GLX_ACCUM_ALPHA_SIZE);
99 case GLUT_WINDOW_DOUBLEBUFFER:
100 GET_CONFIG(GLX_DOUBLEBUFFER);
102 case GLUT_WINDOW_RGBA:
103 GET_CONFIG(GLX_RGBA);
105 case GLUT_WINDOW_COLORMAP_SIZE:
106 GET_CONFIG(GLX_RGBA);
111 /* KLUDGE: we always assume 256 colors in CI mode on
115 if (__glutCurrentWindow->renderWin == __glutCurrentWindow->win) {
116 return __glutCurrentWindow->vis->visual->map_entries;
118 return __glutCurrentWindow->overlay->vis->visual->map_entries;
122 case GLUT_WINDOW_PARENT:
123 return __glutCurrentWindow->parent ?
124 __glutCurrentWindow->parent->num + 1 : 0;
125 case GLUT_WINDOW_NUM_CHILDREN:
128 GLUTwindow *children = __glutCurrentWindow->children;
132 children = children->siblings;
136 case GLUT_WINDOW_NUM_SAMPLES:
137 #if defined(GLX_VERSION_1_1) && defined(GLX_SGIS_multisample)
138 if (__glutIsSupportedByGLX("GLX_SGIS_multisample")) {
139 GET_CONFIG(GLX_SAMPLES_SGIS);
145 /* Independent of GLX server support, multisampling not
146 supported by GLX client-side. */
149 case GLUT_WINDOW_STEREO:
150 GET_CONFIG(GLX_STEREO);
152 case GLUT_WINDOW_CURSOR:
153 return __glutCurrentWindow->cursor;
154 case GLUT_SCREEN_WIDTH:
155 return DisplayWidth(__glutDisplay, __glutScreen);
156 case GLUT_SCREEN_HEIGHT:
157 return DisplayHeight(__glutDisplay, __glutScreen);
158 case GLUT_SCREEN_WIDTH_MM:
159 return DisplayWidthMM(__glutDisplay, __glutScreen);
160 case GLUT_SCREEN_HEIGHT_MM:
161 return DisplayHeightMM(__glutDisplay, __glutScreen);
162 case GLUT_MENU_NUM_ITEMS:
163 return __glutCurrentMenu->num;
164 case GLUT_DISPLAY_MODE_POSSIBLE:
167 Bool dummy, visAlloced;
171 /* Our fake glXChooseVisual (which is called by
172 __glutDetermineVisual) needs an HDC to work with, so grab one
173 from the "root" window. */
174 XHDC = GetDC(GetDesktopWindow());
176 vi = __glutDetermineWindowVisual(&dummy, &visAlloced, &fbc);
178 ReleaseDC(GetDesktopWindow(), XHDC);
187 case GLUT_ELAPSED_TIME:
190 struct timeval6 elapsed, beginning, now;
192 struct timeval elapsed, beginning, now;
195 __glutInitTime(&beginning);
197 TIMEDELTA(elapsed, now, beginning);
198 /* Return elapsed milliseconds. */
199 #if defined(__vms) && ( __VMS_VER < 70000000 )
200 return (int) (elapsed.val / TICKS_PER_MILLISECOND);
202 return (int) ((elapsed.tv_sec * 1000) + (elapsed.tv_usec / 1000));
205 case GLUT_WINDOW_FORMAT_ID:
207 return GetPixelFormat(__glutCurrentWindow->hdc);
209 if (__glutCurrentWindow->renderWin == __glutCurrentWindow->win) {
210 return (int) __glutCurrentWindow->vis->visualid;
212 return (int) __glutCurrentWindow->overlay->vis->visualid;
216 __glutWarning("invalid glutGet parameter: %d", param);