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);