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( __glutCurrentWindow->vis, attrib, &value); \
60 glXGetConfig(__glutCurrentWindow->overlay->vis, attrib, &value); \
65 #define GET_CONFIG(attrib) { \
66 if (__glutCurrentWindow->renderWin == __glutCurrentWindow->win) { \
67 glXGetConfig(__glutDisplay, __glutCurrentWindow->vis, \
70 glXGetConfig(__glutDisplay, __glutCurrentWindow->overlay->vis, \
76 case GLUT_WINDOW_BUFFER_SIZE
:
77 GET_CONFIG(GLX_BUFFER_SIZE
);
79 case GLUT_WINDOW_STENCIL_SIZE
:
80 GET_CONFIG(GLX_STENCIL_SIZE
);
82 case GLUT_WINDOW_DEPTH_SIZE
:
83 GET_CONFIG(GLX_DEPTH_SIZE
);
85 case GLUT_WINDOW_RED_SIZE
:
86 GET_CONFIG(GLX_RED_SIZE
);
88 case GLUT_WINDOW_GREEN_SIZE
:
89 GET_CONFIG(GLX_GREEN_SIZE
);
91 case GLUT_WINDOW_BLUE_SIZE
:
92 GET_CONFIG(GLX_BLUE_SIZE
);
94 case GLUT_WINDOW_ALPHA_SIZE
:
95 GET_CONFIG(GLX_ALPHA_SIZE
);
97 case GLUT_WINDOW_ACCUM_RED_SIZE
:
98 GET_CONFIG(GLX_ACCUM_RED_SIZE
);
100 case GLUT_WINDOW_ACCUM_GREEN_SIZE
:
101 GET_CONFIG(GLX_ACCUM_GREEN_SIZE
);
103 case GLUT_WINDOW_ACCUM_BLUE_SIZE
:
104 GET_CONFIG(GLX_ACCUM_BLUE_SIZE
);
106 case GLUT_WINDOW_ACCUM_ALPHA_SIZE
:
107 GET_CONFIG(GLX_ACCUM_ALPHA_SIZE
);
109 case GLUT_WINDOW_DOUBLEBUFFER
:
110 GET_CONFIG(GLX_DOUBLEBUFFER
);
112 case GLUT_WINDOW_RGBA
:
113 GET_CONFIG(GLX_RGBA
);
115 case GLUT_WINDOW_COLORMAP_SIZE
:
116 GET_CONFIG(GLX_RGBA
);
120 #if defined(_WIN32) || defined(__OS2__)
121 /* KLUDGE: we always assume 256 colors in CI mode on
125 if (__glutCurrentWindow
->renderWin
== __glutCurrentWindow
->win
) {
126 return __glutCurrentWindow
->vis
->visual
->map_entries
;
128 return __glutCurrentWindow
->overlay
->vis
->visual
->map_entries
;
132 case GLUT_WINDOW_PARENT
:
133 return __glutCurrentWindow
->parent
?
134 __glutCurrentWindow
->parent
->num
+ 1 : 0;
135 case GLUT_WINDOW_NUM_CHILDREN
:
138 GLUTwindow
*children
= __glutCurrentWindow
->children
;
142 children
= children
->siblings
;
146 case GLUT_WINDOW_NUM_SAMPLES
:
147 #if defined(GLX_VERSION_1_1) && defined(GLX_SGIS_multisample)
148 if (__glutIsSupportedByGLX("GLX_SGIS_multisample")) {
149 GET_CONFIG(GLX_SAMPLES_SGIS
);
155 /* Independent of GLX server support, multisampling not
156 supported by GLX client-side. */
159 case GLUT_WINDOW_STEREO
:
160 GET_CONFIG(GLX_STEREO
);
162 case GLUT_WINDOW_CURSOR
:
163 return __glutCurrentWindow
->cursor
;
164 case GLUT_SCREEN_WIDTH
:
165 return DisplayWidth(__glutDisplay
, __glutScreen
);
166 case GLUT_SCREEN_HEIGHT
:
167 return DisplayHeight(__glutDisplay
, __glutScreen
);
168 case GLUT_SCREEN_WIDTH_MM
:
169 return DisplayWidthMM(__glutDisplay
, __glutScreen
);
170 case GLUT_SCREEN_HEIGHT_MM
:
171 return DisplayHeightMM(__glutDisplay
, __glutScreen
);
172 case GLUT_MENU_NUM_ITEMS
:
173 return __glutCurrentMenu
->num
;
174 case GLUT_DISPLAY_MODE_POSSIBLE
:
177 Bool dummy
, visAlloced
;
181 /* Our fake glXChooseVisual (which is called by
182 __glutDetermineVisual) needs an HDC to work with, so grab one
183 from the "root" window. */
184 XHDC
= GetDC(GetDesktopWindow());
186 vi
= __glutDetermineWindowVisual(&dummy
, &visAlloced
, &fbc
);
188 ReleaseDC(GetDesktopWindow(), XHDC
);
197 case GLUT_ELAPSED_TIME
:
200 struct timeval6 elapsed
, beginning
, now
;
202 struct timeval elapsed
, beginning
, now
;
205 __glutInitTime(&beginning
);
207 TIMEDELTA(elapsed
, now
, beginning
);
208 /* Return elapsed milliseconds. */
209 #if defined(__vms) && ( __VMS_VER < 70000000 )
210 return (int) (elapsed
.val
/ TICKS_PER_MILLISECOND
);
212 return (int) ((elapsed
.tv_sec
* 1000) + (elapsed
.tv_usec
/ 1000));
215 case GLUT_WINDOW_FORMAT_ID
:
217 return wglGetPixelFormat(__glutCurrentWindow
->hdc
);
218 #elif defined(_WIN32)
219 return GetPixelFormat(__glutCurrentWindow
->hdc
);
221 if (__glutCurrentWindow
->renderWin
== __glutCurrentWindow
->win
) {
222 return (int) __glutCurrentWindow
->vis
->visualid
;
224 return (int) __glutCurrentWindow
->overlay
->vis
->visualid
;
228 __glutWarning("invalid glutGet parameter: %d", param
);