#include "glapi.h"
#include "glxclient.h"
#include "glcontextmodes.h"
#define NUM_VISUAL_TYPES 6
GLint
_gl_convert_from_x_visual_type( int visualType )
{
static const int glx_visual_types[ NUM_VISUAL_TYPES ] = {
GLX_STATIC_GRAY, GLX_GRAY_SCALE,
GLX_STATIC_COLOR, GLX_PSEUDO_COLOR,
GLX_TRUE_COLOR, GLX_DIRECT_COLOR
};
return ( (unsigned) visualType < NUM_VISUAL_TYPES )
? glx_visual_types[ visualType ] : GLX_NONE;
}
GLint
_gl_convert_to_x_visual_type( int visualType )
{
static const int x_visual_types[ NUM_VISUAL_TYPES ] = {
StaticGray, GrayScale,
StaticColor, PseudoColor,
TrueColor, DirectColor
};
return ( (unsigned) (visualType - GLX_STATIC_GRAY) <= NUM_VISUAL_TYPES )
? x_visual_types[ visualType - GLX_STATIC_GRAY ] : -1;
}
void
_gl_copy_visual_to_context_mode( __GLcontextModes * mode,
const __GLXvisualConfig * config )
{
(void) memset( mode, 0, sizeof( __GLcontextModes ) );
mode->visualID = config->vid;
mode->visualType = _gl_convert_from_x_visual_type( config->class );
mode->xRenderable = GL_TRUE;
mode->fbconfigID = GLX_DONT_CARE;
mode->drawableType = GLX_WINDOW_BIT;
mode->rgbMode = (config->rgba != 0);
mode->renderType = (mode->rgbMode) ? GLX_RGBA_BIT : GLX_COLOR_INDEX_BIT;
mode->colorIndexMode = !(mode->rgbMode);
mode->doubleBufferMode = (config->doubleBuffer != 0);
mode->stereoMode = (config->stereo != 0);
mode->haveAccumBuffer = ((config->accumRedSize +
config->accumGreenSize +
config->accumBlueSize +
config->accumAlphaSize) > 0);
mode->haveDepthBuffer = (config->depthSize > 0);
mode->haveStencilBuffer = (config->stencilSize > 0);
mode->redBits = config->redSize;
mode->greenBits = config->greenSize;
mode->blueBits = config->blueSize;
mode->alphaBits = config->alphaSize;
mode->redMask = config->redMask;
mode->greenMask = config->greenMask;
mode->blueMask = config->blueMask;
mode->alphaMask = config->alphaMask;
mode->rgbBits = config->bufferSize;
mode->indexBits = config->bufferSize;
mode->accumRedBits = config->accumRedSize;
mode->accumGreenBits = config->accumGreenSize;
mode->accumBlueBits = config->accumBlueSize;
mode->accumAlphaBits = config->accumAlphaSize;
mode->depthBits = config->depthSize;
mode->stencilBits = config->stencilSize;
mode->numAuxBuffers = config->auxBuffers;
mode->level = config->level;
mode->visualRating = config->visualRating;
mode->transparentPixel = config->transparentPixel;
mode->transparentRed = config->transparentRed;
mode->transparentGreen = config->transparentGreen;
mode->transparentBlue = config->transparentBlue;
mode->transparentAlpha = config->transparentAlpha;
mode->transparentIndex = config->transparentIndex;
}
int
_gl_get_context_mode_data(const __GLcontextModes *mode, int attribute,
int *value_return)
{
switch (attribute) {
case GLX_USE_GL:
*value_return = GL_TRUE;
return Success;
case GLX_BUFFER_SIZE:
*value_return = mode->rgbBits;
return Success;
case GLX_RGBA:
*value_return = mode->rgbMode;
return Success;
case GLX_RED_SIZE:
*value_return = mode->redBits;
return Success;
case GLX_GREEN_SIZE:
*value_return = mode->greenBits;
return Success;
case GLX_BLUE_SIZE:
*value_return = mode->blueBits;
return Success;
case GLX_ALPHA_SIZE:
*value_return = mode->alphaBits;
return Success;
case GLX_DOUBLEBUFFER:
*value_return = mode->doubleBufferMode;
return Success;
case GLX_STEREO:
*value_return = mode->stereoMode;
return Success;
case GLX_AUX_BUFFERS:
*value_return = mode->numAuxBuffers;
return Success;
case GLX_DEPTH_SIZE:
*value_return = mode->depthBits;
return Success;
case GLX_STENCIL_SIZE:
*value_return = mode->stencilBits;
return Success;
case GLX_ACCUM_RED_SIZE:
*value_return = mode->accumRedBits;
return Success;
case GLX_ACCUM_GREEN_SIZE:
*value_return = mode->accumGreenBits;
return Success;
case GLX_ACCUM_BLUE_SIZE:
*value_return = mode->accumBlueBits;
return Success;
case GLX_ACCUM_ALPHA_SIZE:
*value_return = mode->accumAlphaBits;
return Success;
case GLX_LEVEL:
*value_return = mode->level;
return Success;
case GLX_TRANSPARENT_TYPE_EXT:
*value_return = mode->transparentPixel;
return Success;
case GLX_TRANSPARENT_RED_VALUE:
*value_return = mode->transparentRed;
return Success;
case GLX_TRANSPARENT_GREEN_VALUE:
*value_return = mode->transparentGreen;
return Success;
case GLX_TRANSPARENT_BLUE_VALUE:
*value_return = mode->transparentBlue;
return Success;
case GLX_TRANSPARENT_ALPHA_VALUE:
*value_return = mode->transparentAlpha;
return Success;
case GLX_TRANSPARENT_INDEX_VALUE:
*value_return = mode->transparentIndex;
return Success;
case GLX_X_VISUAL_TYPE:
*value_return = mode->visualType;
return Success;
case GLX_CONFIG_CAVEAT:
*value_return = mode->visualRating;
return Success;
case GLX_VISUAL_ID:
*value_return = mode->visualID;
return Success;
case GLX_DRAWABLE_TYPE:
*value_return = mode->drawableType;
return Success;
case GLX_RENDER_TYPE:
*value_return = mode->renderType;
return Success;
case GLX_X_RENDERABLE:
*value_return = mode->xRenderable;
return Success;
case GLX_FBCONFIG_ID:
*value_return = mode->fbconfigID;
return Success;
case GLX_MAX_PBUFFER_WIDTH:
*value_return = mode->maxPbufferWidth;
return Success;
case GLX_MAX_PBUFFER_HEIGHT:
*value_return = mode->maxPbufferHeight;
return Success;
case GLX_MAX_PBUFFER_PIXELS:
*value_return = mode->maxPbufferPixels;
return Success;
case GLX_OPTIMAL_PBUFFER_WIDTH_SGIX:
*value_return = mode->optimalPbufferWidth;
return Success;
case GLX_OPTIMAL_PBUFFER_HEIGHT_SGIX:
*value_return = mode->optimalPbufferHeight;
return Success;
case GLX_SWAP_METHOD_OML:
*value_return = mode->swapMethod;
return Success;
case GLX_SAMPLE_BUFFERS_SGIS:
*value_return = mode->sampleBuffers;
return Success;
case GLX_SAMPLES_SGIS:
*value_return = mode->samples;
return Success;
case GLX_VISUAL_SELECT_GROUP_SGIX:
default:
return GLX_BAD_ATTRIBUTE;
}
}