- switch (attribute) {
- case GLX_FBCONFIG_ID:
- case GLX_BUFFER_SIZE:
- if (v->mesa_visual.rgbMode)
- *value = v->mesa_visual.redBits + v->mesa_visual.greenBits +
- v->mesa_visual.blueBits + v->mesa_visual.alphaBits;
- else
- *value = v->mesa_visual.indexBits;
- break;
- case GLX_LEVEL:
- *value = v->level;
- break;
- case GLX_DOUBLEBUFFER:
- *value = v->mesa_visual.doubleBufferMode;
- break;
- case GLX_STEREO:
- *value = v->mesa_visual.stereoMode;
- break;
- case GLX_AUX_BUFFERS:
- *value = v->mesa_visual.numAuxBuffers;
- break;
- case GLX_RED_SIZE:
- *value = v->mesa_visual.redBits;
- break;
- case GLX_GREEN_SIZE:
- *value = v->mesa_visual.greenBits;
- break;
- case GLX_BLUE_SIZE:
- *value = v->mesa_visual.blueBits;
- break;
- case GLX_ALPHA_SIZE:
- *value = v->mesa_visual.alphaBits;
- break;
- case GLX_DEPTH_SIZE:
- *value = v->mesa_visual.depthBits;
- break;
- case GLX_STENCIL_SIZE:
- *value = v->mesa_visual.stencilBits;
- break;
- case GLX_ACCUM_RED_SIZE:
- *value = v->mesa_visual.accumRedBits;
- break;
- case GLX_ACCUM_GREEN_SIZE:
- *value = v->mesa_visual.accumGreenBits;
- break;
- case GLX_ACCUM_BLUE_SIZE:
- *value = v->mesa_visual.accumBlueBits;
- break;
- case GLX_ACCUM_ALPHA_SIZE:
- *value = v->mesa_visual.accumAlphaBits;
- break;
- case GLX_RENDER_TYPE:
- *value = 0; /* XXX ??? */
- break;
- case GLX_DRAWABLE_TYPE:
- *value = GLX_PBUFFER_BIT; /* XXX fix? */
- break;
- case GLX_X_RENDERABLE:
- *value = False; /* XXX ??? */
- break;
- case GLX_X_VISUAL_TYPE:
-#if defined(__cplusplus) || defined(c_plusplus)
- switch (v->vishandle->c_class) {
-#else
- switch (v->vishandle->class) {
-#endif
- case GrayScale:
- *value = GLX_GRAY_SCALE;
- break;
- case StaticGray:
- *value = GLX_STATIC_GRAY;
- break;
- case StaticColor:
- *value = GLX_STATIC_COLOR;
- break;
- case PseudoColor:
- *value = GLX_PSEUDO_COLOR;
- break;
- case TrueColor:
- *value = GLX_TRUE_COLOR;
- break;
- case DirectColor:
- *value = GLX_DIRECT_COLOR;
- break;
- default:
- *value = 0;
- }
- break;
- case GLX_CONFIG_CAVEAT:
- *value = 0; /* XXX ??? */
- break;
- case GLX_TRANSPARENT_TYPE:
- if (v->level == 0) {
- /* normal planes */
- *value = GLX_NONE_EXT;
- }
- else if (v->level > 0) {
- /* overlay */
- if (v->mesa_visual.rgbMode) {
- *value = GLX_TRANSPARENT_RGB_EXT;
- }
- else {
- *value = GLX_TRANSPARENT_INDEX_EXT;
- }
- }
- else if (v->level < 0) {
- /* underlay */
- *value = GLX_NONE_EXT;
- }
- break;
- case GLX_TRANSPARENT_INDEX_VALUE:
- *value = transparent_pixel( v );
- break;
- case GLX_TRANSPARENT_RED_VALUE:
- *value = 0; /* not implemented */
- break;
- case GLX_TRANSPARENT_GREEN_VALUE:
- *value = 0; /* not implemented */
- break;
- case GLX_TRANSPARENT_BLUE_VALUE:
- *value = 0; /* not implemented */
- break;
- case GLX_TRANSPARENT_ALPHA_VALUE:
- *value = 0; /* not implemented */
- break;
- case GLX_MAX_PBUFFER_WIDTH:
- *value = DisplayWidth(dpy, v->vishandle->screen);
- break;
- case GLX_MAX_PBUFFER_HEIGHT:
- *value = DisplayHeight(dpy, v->vishandle->screen);
- break;
- case GLX_MAX_PBUFFER_PIXELS:
- *value = DisplayWidth(dpy, v->vishandle->screen) *
- DisplayHeight(dpy, v->vishandle->screen);
- break;
- case GLX_VISUAL_ID:
- *value = v->vishandle->visualid;
- break;
- default:
- return GLX_BAD_ATTRIBUTE;
- }
-
- return Success;