1#ifdef HAVE_DIX_CONFIG_H
2#include <dix-config.h>
3#endif
4
5#ifndef _GLX_context_h_
6#define _GLX_context_h_
7
8/*
9 * SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008)
10 * Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved.
11 *
12 * Permission is hereby granted, free of charge, to any person obtaining a
13 * copy of this software and associated documentation files (the "Software"),
14 * to deal in the Software without restriction, including without limitation
15 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
16 * and/or sell copies of the Software, and to permit persons to whom the
17 * Software is furnished to do so, subject to the following conditions:
18 *
19 * The above copyright notice including the dates of first publication and
20 * either this permission notice or a reference to
21 * http://oss.sgi.com/projects/FreeB/
22 * shall be included in all copies or substantial portions of the Software.
23 *
24 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
25 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
26 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
27 * SILICON GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
28 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
29 * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
30 * SOFTWARE.
31 *
32 * Except as contained in this notice, the name of Silicon Graphics, Inc.
33 * shall not be used in advertising or otherwise to promote the sale, use or
34 * other dealings in this Software without prior written authorization from
35 * Silicon Graphics, Inc.
36 */
37
38typedef struct __GLXtextureFromPixmap __GLXtextureFromPixmap;
39struct __GLXtextureFromPixmap {
40    int (*bindTexImage)		(__GLXcontext  *baseContext,
41				 int            buffer,
42				 __GLXdrawable *pixmap);
43    int (*releaseTexImage)	(__GLXcontext  *baseContext,
44				 int            buffer,
45				 __GLXdrawable *pixmap);
46};
47
48
49struct __GLXcontext {
50    void           (*destroy)       (__GLXcontext *context);
51    int            (*makeCurrent)   (__GLXcontext *context);
52    int            (*loseCurrent)   (__GLXcontext *context);
53    int            (*copy)          (__GLXcontext *dst,
54				     __GLXcontext *src,
55				     unsigned long mask);
56    int            (*forceCurrent)  (__GLXcontext *context);
57
58    Bool           (*wait)          (__GLXcontext *context,
59				     __GLXclientState *cl,
60				     int *error);
61
62    __GLXtextureFromPixmap *textureFromPixmap;
63
64    /*
65    ** list of context structs
66    */
67    __GLXcontext *last;
68    __GLXcontext *next;
69
70    /*
71    ** config struct for this context
72    */
73    __GLXconfig *config;
74
75    /*
76    ** Pointer to screen info data for this context.  This is set
77    ** when the context is created.
78    */
79    __GLXscreen *pGlxScreen;
80
81    /*
82    ** The XID of this context.
83    */
84    XID id;
85
86    /*
87    ** The XID of the shareList context.
88    */
89    XID share_id;
90
91    /*
92    ** Whether this context's ID still exists.
93    */
94    GLboolean idExists;
95
96    /*
97    ** Whether this context is current for some client.
98    */
99    GLboolean isCurrent;
100
101    /*
102    ** Whether this context is a direct rendering context.
103    */
104    GLboolean isDirect;
105
106    /*
107    ** This flag keeps track of whether there are unflushed GL commands.
108    */
109    GLboolean hasUnflushedCommands;
110
111    /*
112    ** Current rendering mode for this context.
113    */
114    GLenum renderMode;
115
116    /*
117    ** Buffers for feedback and selection.
118    */
119    GLfloat *feedbackBuf;
120    GLint feedbackBufSize;	/* number of elements allocated */
121    GLuint *selectBuf;
122    GLint selectBufSize;	/* number of elements allocated */
123
124    /*
125    ** The drawable private this context is bound to
126    */
127    __GLXdrawable *drawPriv;
128    __GLXdrawable *readPriv;
129};
130
131void __glXContextDestroy(__GLXcontext *context);
132
133#endif /* !__GLX_context_h__ */
134