Doxygen Source Code Documentation
Main Page Alphabetical List Data Structures File List Data Fields Globals Search
glut_get.c
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008 #include <GL/glut.h>
00009 #include "glutint.h"
00010
00011 int
00012 glutGet(GLenum param)
00013 {
00014 Window win, root;
00015 int x, y, value;
00016 unsigned int width, height, border, depth;
00017
00018 switch (param) {
00019 case GLUT_INIT_WINDOW_X:
00020 return __glutInitX;
00021 case GLUT_INIT_WINDOW_Y:
00022 return __glutInitY;
00023 case GLUT_INIT_WINDOW_WIDTH:
00024 return __glutInitWidth;
00025 case GLUT_INIT_WINDOW_HEIGHT:
00026 return __glutInitHeight;
00027 case GLUT_INIT_DISPLAY_MODE:
00028 return __glutDisplayMode;
00029 case GLUT_WINDOW_X:
00030 XTranslateCoordinates(__glutDisplay, __glutCurrentWindow->win,
00031 __glutRoot, 0, 0, &x, &y, &win);
00032 return x;
00033 case GLUT_WINDOW_Y:
00034 XTranslateCoordinates(__glutDisplay, __glutCurrentWindow->win,
00035 __glutRoot, 0, 0, &x, &y, &win);
00036 return y;
00037 case GLUT_WINDOW_WIDTH:
00038 if (!__glutCurrentWindow->reshape) {
00039 XGetGeometry(__glutDisplay, __glutCurrentWindow->win,
00040 &root, &x, &y,
00041 &width, &height, &border, &depth);
00042 return width;
00043 }
00044 return __glutCurrentWindow->width;
00045 case GLUT_WINDOW_HEIGHT:
00046 if (!__glutCurrentWindow->reshape) {
00047 XGetGeometry(__glutDisplay, __glutCurrentWindow->win,
00048 &root, &x, &y,
00049 &width, &height, &border, &depth);
00050 return height;
00051 }
00052 return __glutCurrentWindow->height;
00053
00054 #define GET_CONFIG(attrib) { \
00055 if (__glutCurrentWindow->renderWin == __glutCurrentWindow->win) { \
00056 glXGetConfig(__glutDisplay, __glutCurrentWindow->vis, \
00057 attrib, &value); \
00058 } else { \
00059 glXGetConfig(__glutDisplay, __glutCurrentWindow->overlay->vis, \
00060 attrib, &value); \
00061 } \
00062 }
00063
00064 case GLUT_WINDOW_BUFFER_SIZE:
00065 GET_CONFIG(GLX_BUFFER_SIZE);
00066 return value;
00067 case GLUT_WINDOW_STENCIL_SIZE:
00068 GET_CONFIG(GLX_STENCIL_SIZE);
00069 return value;
00070 case GLUT_WINDOW_DEPTH_SIZE:
00071 GET_CONFIG(GLX_DEPTH_SIZE);
00072 return value;
00073 case GLUT_WINDOW_RED_SIZE:
00074 GET_CONFIG(GLX_RED_SIZE);
00075 return value;
00076 case GLUT_WINDOW_GREEN_SIZE:
00077 GET_CONFIG(GLX_GREEN_SIZE);
00078 return value;
00079 case GLUT_WINDOW_BLUE_SIZE:
00080 GET_CONFIG(GLX_BLUE_SIZE);
00081 return value;
00082 case GLUT_WINDOW_ALPHA_SIZE:
00083 GET_CONFIG(GLX_ALPHA_SIZE);
00084 return value;
00085 case GLUT_WINDOW_ACCUM_RED_SIZE:
00086 GET_CONFIG(GLX_ACCUM_RED_SIZE);
00087 return value;
00088 case GLUT_WINDOW_ACCUM_GREEN_SIZE:
00089 GET_CONFIG(GLX_ACCUM_GREEN_SIZE);
00090 return value;
00091 case GLUT_WINDOW_ACCUM_BLUE_SIZE:
00092 GET_CONFIG(GLX_ACCUM_BLUE_SIZE);
00093 return value;
00094 case GLUT_WINDOW_ACCUM_ALPHA_SIZE:
00095 GET_CONFIG(GLX_ACCUM_ALPHA_SIZE);
00096 return value;
00097 case GLUT_WINDOW_DOUBLEBUFFER:
00098 GET_CONFIG(GLX_DOUBLEBUFFER);
00099 return value;
00100 case GLUT_WINDOW_RGBA:
00101 GET_CONFIG(GLX_RGBA);
00102 return value;
00103 case GLUT_WINDOW_COLORMAP_SIZE:
00104 GET_CONFIG(GLX_RGBA);
00105 if (value) {
00106 return 0;
00107 } else {
00108 return __glutCurrentWindow->vis->visual->map_entries;
00109 }
00110 case GLUT_WINDOW_PARENT:
00111 return __glutCurrentWindow->parent ?
00112 __glutCurrentWindow->parent->num + 1 : 0;
00113 case GLUT_WINDOW_NUM_CHILDREN:
00114 {
00115 int num = 0;
00116 GLUTwindow *children = __glutCurrentWindow->children;
00117
00118 while (children) {
00119 num++;
00120 children = children->siblings;
00121 }
00122 return num;
00123 }
00124 case GLUT_WINDOW_NUM_SAMPLES:
00125 #if defined(GLX_VERSION_1_1) && defined(GLX_SGIS_multisample)
00126 if (__glutIsSupportedByGLX("GLX_SGIS_multisample")) {
00127 GET_CONFIG(GLX_SAMPLES_SGIS);
00128 return value;
00129 } else {
00130 return 0;
00131 }
00132 #else
00133
00134
00135 return 0;
00136 #endif
00137 case GLUT_WINDOW_STEREO:
00138 GET_CONFIG(GLX_STEREO);
00139 return value;
00140 case GLUT_WINDOW_CURSOR:
00141 return __glutCurrentWindow->cursor;
00142 case GLUT_SCREEN_WIDTH:
00143 return DisplayWidth(__glutDisplay, __glutScreen);
00144 case GLUT_SCREEN_HEIGHT:
00145 return DisplayHeight(__glutDisplay, __glutScreen);
00146 case GLUT_SCREEN_WIDTH_MM:
00147 return DisplayWidthMM(__glutDisplay, __glutScreen);
00148 case GLUT_SCREEN_HEIGHT_MM:
00149 return DisplayHeightMM(__glutDisplay, __glutScreen);
00150 case GLUT_MENU_NUM_ITEMS:
00151 return __glutCurrentMenu->num;
00152 case GLUT_DISPLAY_MODE_POSSIBLE:
00153 {
00154 XVisualInfo *vi;
00155 Bool dummy;
00156
00157 vi = __glutDetermineVisual(__glutDisplayMode, &dummy, __glutGetVisualInfo);
00158 if (vi) {
00159 XFree(vi);
00160 return 1;
00161 }
00162 return 0;
00163 }
00164 case GLUT_ELAPSED_TIME:
00165 {
00166 struct timeval elapsed, beginning, now;
00167
00168 __glutInitTime(&beginning);
00169 GETTIMEOFDAY(&now);
00170 TIMEDELTA(elapsed, now, beginning);
00171
00172 #if defined(__vms)
00173 return (int) (elapsed.val / TICKS_PER_MILLISECOND);
00174 #else
00175 return (int) ((elapsed.tv_sec * 1000) + (elapsed.tv_usec / 1000));
00176 #endif
00177 }
00178 default:
00179 __glutWarning("invalid glutGet parameter: %d", param);
00180 return -1;
00181 }
00182 }