60159c1b09
Windows/DOS users should enable core.autocrlf from now on: git config --global core.autocrlf true
233 lines
6.5 KiB
C++
233 lines
6.5 KiB
C++
|
|
/* 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 */
|