📄 glcontextmodes.c
字号:
/* * (C) Copyright IBM Corporation 2003 * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * on the rights to use, copy, modify, merge, publish, distribute, sub * license, and/or sell copies of the Software, and to permit persons to whom * the Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice (including the next * paragraph) shall be included in all copies or substantial portions of the * Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL * VA LINUX SYSTEM, IBM AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE * USE OR OTHER DEALINGS IN THE SOFTWARE. *//** * \file glcontextmodes.c * Utility routines for working with \c __GLcontextModes structures. At * some point most or all of these functions will be moved to the Mesa * code base. * * \author Ian Romanick <idr@us.ibm.com> */#if defined(IN_MINI_GLX)# include <stdlib.h># include <string.h># include <GL/gl.h># include "GL/internal/dri_interface.h"# include "imports.h"# define _mesa_memset memset#else# if defined(HAVE_DIX_CONFIG_H)# include <dix-config.h># endif# include <X11/X.h># include <GL/glx.h># include "GL/glxint.h"# ifdef XFree86Server# include <os.h># include <string.h># define _mesa_malloc(b) xalloc(b)# define _mesa_free(m) xfree(m)# define _mesa_memset memset# else# include <X11/Xlibint.h># define _mesa_memset memset# define _mesa_malloc(b) Xmalloc(b)# define _mesa_free(m) Xfree(m)# endif /* XFree86Server */#endif /* !defined(IN_MINI_GLX) */#include "glcontextmodes.h"#if !defined(IN_MINI_GLX)#define NUM_VISUAL_TYPES 6/** * Convert an X visual type to a GLX visual type. * * \param visualType X visual type (i.e., \c TrueColor, \c StaticGray, etc.) * to be converted. * \return If \c visualType is a valid X visual type, a GLX visual type will * be returned. Otherwise \c GLX_NONE will be returned. */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;}/** * Convert a GLX visual type to an X visual type. * * \param visualType GLX visual type (i.e., \c GLX_TRUE_COLOR, * \c GLX_STATIC_GRAY, etc.) to be converted. * \return If \c visualType is a valid GLX visual type, an X visual type will * be returned. Otherwise -1 will be returned. */GLint_gl_convert_to_x_visual_type( int visualType ){ static const int x_visual_types[ NUM_VISUAL_TYPES ] = { TrueColor, DirectColor, PseudoColor, StaticColor, GrayScale, StaticGray }; return ( (unsigned) (visualType - GLX_TRUE_COLOR) <= NUM_VISUAL_TYPES ) ? x_visual_types[ visualType - GLX_TRUE_COLOR ] : -1;}/** * Copy a GLX visual config structure to a GL context mode structure. All * of the fields in \c config are copied to \c mode. Additional fields in * \c mode that can be derrived from the fields of \c config (i.e., * \c haveDepthBuffer) are also filled in. The remaining fields in \c mode * that cannot be derrived are set to default values. * * \param mode Destination GL context mode. * \param config Source GLX visual config. * * \note * The \c fbconfigID and \c visualID fields of the \c __GLcontextModes * structure will be set to the \c vid of the \c __GLXvisualConfig structure. */void_gl_copy_visual_to_context_mode( __GLcontextModes * mode, const __GLXvisualConfig * config ){ __GLcontextModes * const next = mode->next; (void) _mesa_memset( mode, 0, sizeof( __GLcontextModes ) ); mode->next = next; mode->visualID = config->vid; mode->visualType = _gl_convert_from_x_visual_type( config->class ); mode->xRenderable = GL_TRUE; mode->fbconfigID = config->vid; mode->drawableType = GLX_WINDOW_BIT | GLX_PIXMAP_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 = mode->rgbMode ? config->bufferSize : 0; mode->indexBits = mode->colorIndexMode ? config->bufferSize : 0; 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; mode->swapMethod = GLX_SWAP_UNDEFINED_OML;}/** * Get data from a GL context mode. * * \param mode GL context mode whose data is to be returned. * \param attribute Attribute of \c mode that is to be returned. * \param value_return Location to store the data member of \c mode. * \return If \c attribute is a valid attribute of \c mode, zero is * returned. Otherwise \c GLX_BAD_ATTRIBUTE is returned. */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 0; case GLX_BUFFER_SIZE: *value_return = mode->rgbBits; return 0; case GLX_RGBA: *value_return = mode->rgbMode; return 0; case GLX_RED_SIZE: *value_return = mode->redBits; return 0; case GLX_GREEN_SIZE: *value_return = mode->greenBits; return 0; case GLX_BLUE_SIZE: *value_return = mode->blueBits; return 0; case GLX_ALPHA_SIZE: *value_return = mode->alphaBits; return 0; case GLX_DOUBLEBUFFER: *value_return = mode->doubleBufferMode; return 0; case GLX_STEREO: *value_return = mode->stereoMode; return 0; case GLX_AUX_BUFFERS: *value_return = mode->numAuxBuffers; return 0; case GLX_DEPTH_SIZE: *value_return = mode->depthBits; return 0; case GLX_STENCIL_SIZE: *value_return = mode->stencilBits; return 0; case GLX_ACCUM_RED_SIZE: *value_return = mode->accumRedBits; return 0; case GLX_ACCUM_GREEN_SIZE: *value_return = mode->accumGreenBits; return 0; case GLX_ACCUM_BLUE_SIZE: *value_return = mode->accumBlueBits; return 0; case GLX_ACCUM_ALPHA_SIZE: *value_return = mode->accumAlphaBits; return 0; case GLX_LEVEL:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -