1848b8605Smrg/*
2848b8605Smrg * (C) Copyright IBM Corporation 2003
3848b8605Smrg * All Rights Reserved.
4848b8605Smrg *
5848b8605Smrg * Permission is hereby granted, free of charge, to any person obtaining a
6848b8605Smrg * copy of this software and associated documentation files (the "Software"),
7848b8605Smrg * to deal in the Software without restriction, including without limitation
8848b8605Smrg * on the rights to use, copy, modify, merge, publish, distribute, sub
9848b8605Smrg * license, and/or sell copies of the Software, and to permit persons to whom
10848b8605Smrg * the Software is furnished to do so, subject to the following conditions:
11848b8605Smrg *
12848b8605Smrg * The above copyright notice and this permission notice (including the next
13848b8605Smrg * paragraph) shall be included in all copies or substantial portions of the
14848b8605Smrg * Software.
15848b8605Smrg *
16848b8605Smrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17848b8605Smrg * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18848b8605Smrg * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
19848b8605Smrg * VA LINUX SYSTEM, IBM AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
20848b8605Smrg * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
21848b8605Smrg * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
22848b8605Smrg * USE OR OTHER DEALINGS IN THE SOFTWARE.
23848b8605Smrg */
24848b8605Smrg
25848b8605Smrg/**
26848b8605Smrg * \file glcontextmodes.h
27848b8605Smrg * \author Ian Romanick <idr@us.ibm.com>
28848b8605Smrg */
29848b8605Smrg
30848b8605Smrg#ifndef GLCONTEXTMODES_H
31848b8605Smrg#define GLCONTEXTMODES_H
32848b8605Smrg
33848b8605Smrgstruct glx_config {
34848b8605Smrg    struct glx_config * next;
35848b8605Smrg
36848b8605Smrg    GLboolean rgbMode;
37848b8605Smrg    GLboolean floatMode;
38848b8605Smrg    GLboolean colorIndexMode;
39848b8605Smrg    GLuint doubleBufferMode;
40848b8605Smrg    GLuint stereoMode;
41848b8605Smrg
42848b8605Smrg    GLint redBits, greenBits, blueBits, alphaBits;	/* bits per comp */
43848b8605Smrg    GLuint redMask, greenMask, blueMask, alphaMask;
44848b8605Smrg    GLint rgbBits;		/* total bits for rgb */
45848b8605Smrg    GLint indexBits;		/* total bits for colorindex */
46848b8605Smrg
47848b8605Smrg    GLint accumRedBits, accumGreenBits, accumBlueBits, accumAlphaBits;
48848b8605Smrg    GLint depthBits;
49848b8605Smrg    GLint stencilBits;
50848b8605Smrg
51848b8605Smrg    GLint numAuxBuffers;
52848b8605Smrg
53848b8605Smrg    GLint level;
54848b8605Smrg
55848b8605Smrg    GLint pixmapMode;
56848b8605Smrg
57848b8605Smrg    /* GLX */
58848b8605Smrg    GLint visualID;
59848b8605Smrg    GLint visualType;     /**< One of the GLX X visual types. (i.e.,
60848b8605Smrg			   * \c GLX_TRUE_COLOR, etc.)
61848b8605Smrg			   */
62848b8605Smrg
63848b8605Smrg    /* EXT_visual_rating / GLX 1.2 */
64848b8605Smrg    GLint visualRating;
65848b8605Smrg
66848b8605Smrg    /* EXT_visual_info / GLX 1.2 */
67848b8605Smrg    GLint transparentPixel;
68848b8605Smrg				/*    colors are floats scaled to ints */
69848b8605Smrg    GLint transparentRed, transparentGreen, transparentBlue, transparentAlpha;
70848b8605Smrg    GLint transparentIndex;
71848b8605Smrg
72848b8605Smrg    /* ARB_multisample / SGIS_multisample */
73848b8605Smrg    GLint sampleBuffers;
74848b8605Smrg    GLint samples;
75848b8605Smrg
76848b8605Smrg    /* SGIX_fbconfig / GLX 1.3 */
77848b8605Smrg    GLint drawableType;
78848b8605Smrg    GLint renderType;
79848b8605Smrg    GLint xRenderable;
80848b8605Smrg    GLint fbconfigID;
81848b8605Smrg
82848b8605Smrg    /* SGIX_pbuffer / GLX 1.3 */
83848b8605Smrg    GLint maxPbufferWidth;
84848b8605Smrg    GLint maxPbufferHeight;
85848b8605Smrg    GLint maxPbufferPixels;
86848b8605Smrg    GLint optimalPbufferWidth;   /* Only for SGIX_pbuffer. */
87848b8605Smrg    GLint optimalPbufferHeight;  /* Only for SGIX_pbuffer. */
88848b8605Smrg
89848b8605Smrg    /* SGIX_visual_select_group */
90848b8605Smrg    GLint visualSelectGroup;
91848b8605Smrg
92848b8605Smrg    /* OML_swap_method */
93848b8605Smrg    GLint swapMethod;
94848b8605Smrg
95848b8605Smrg    GLint screen;
96848b8605Smrg
97848b8605Smrg    /* EXT_texture_from_pixmap */
98848b8605Smrg    GLint bindToTextureRgb;
99848b8605Smrg    GLint bindToTextureRgba;
100848b8605Smrg    GLint bindToMipmapTexture;
101848b8605Smrg    GLint bindToTextureTargets;
102848b8605Smrg    GLint yInverted;
103848b8605Smrg
104848b8605Smrg    /* EXT_framebuffer_sRGB */
105848b8605Smrg    GLint sRGBCapable;
106848b8605Smrg};
107848b8605Smrg
108848b8605Smrg#define __GLX_MIN_CONFIG_PROPS	18
109848b8605Smrg#define __GLX_MAX_CONFIG_PROPS	500
110848b8605Smrg#define __GLX_EXT_CONFIG_PROPS	10
111848b8605Smrg
112848b8605Smrg/*
113848b8605Smrg** Since we send all non-core visual properties as token, value pairs,
114848b8605Smrg** we require 2 words across the wire. In order to maintain backwards
115848b8605Smrg** compatibility, we need to send the total number of words that the
116848b8605Smrg** VisualConfigs are sent back in so old libraries can simply "ignore"
117848b8605Smrg** the new properties.
118848b8605Smrg*/
119848b8605Smrg#define __GLX_TOTAL_CONFIG \
120848b8605Smrg   (__GLX_MIN_CONFIG_PROPS + 2 * __GLX_EXT_CONFIG_PROPS)
121848b8605Smrg
122848b8605Smrgextern GLint _gl_convert_from_x_visual_type(int visualType);
123848b8605Smrg
124848b8605Smrgextern int
125848b8605Smrgglx_config_get(struct glx_config * mode, int attribute, int *value_return);
126848b8605Smrgextern struct glx_config *
127848b8605Smrgglx_config_create_list(unsigned count);
128848b8605Smrgextern void
129848b8605Smrgglx_config_destroy_list(struct glx_config *configs);
130848b8605Smrgextern struct glx_config *
131848b8605Smrgglx_config_find_visual(struct glx_config *configs, int vid);
132848b8605Smrgextern struct glx_config *
133848b8605Smrgglx_config_find_fbconfig(struct glx_config *configs, int fbid);
134848b8605Smrg
135848b8605Smrg#endif /* GLCONTEXTMODES_H */
136848b8605Smrg
137