2 * Mesa 3-D graphics library
4 * Copyright (C) 1999-2007 Brian Paul All Rights Reserved.
6 * Permission is hereby granted, free of charge, to any person obtaining a
7 * copy of this software and associated documentation files (the "Software"),
8 * to deal in the Software without restriction, including without limitation
9 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10 * and/or sell copies of the Software, and to permit persons to whom the
11 * Software is furnished to do so, subject to the following conditions:
13 * The above copyright notice and this permission notice shall be included
14 * in all copies or substantial portions of the Software.
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
17 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
20 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22 * OTHER DEALINGS IN THE SOFTWARE.
27 * Mesa/X11 interface. This header file serves as the documentation for
28 * the Mesa/X11 interface functions.
30 * Note: this interface isn't intended for user programs. It's primarily
31 * just for implementing the pseudo-GLX interface.
37 In addition to the usual X calls to select a visual, create a colormap
38 and create a window, you must do the following to use the X/Mesa interface:
40 1. Call XMesaCreateVisual() to make an XMesaVisual from an XVisualInfo.
42 2. Call XMesaCreateContext() to create an X/Mesa rendering context, given
45 3. Call XMesaCreateWindowBuffer() to create an XMesaBuffer from an X window
48 4. Call XMesaMakeCurrent() to bind the XMesaBuffer to an XMesaContext and
49 to make the context the current one.
51 5. Make gl* calls to render your graphics.
53 6. Use XMesaSwapBuffers() when double buffering to swap front/back buffers.
55 7. Before the X window is destroyed, call XMesaDestroyBuffer().
57 8. Before exiting, call XMesaDestroyVisual and XMesaDestroyContext.
68 #include <X11/Xutil.h>
76 #define XMESA_MAJOR_VERSION 6
77 #define XMESA_MINOR_VERSION 3
82 * Values passed to XMesaGetString:
84 #define XMESA_VERSION 1
85 #define XMESA_EXTENSIONS 2
88 typedef struct xmesa_context
*XMesaContext
;
90 typedef struct xmesa_visual
*XMesaVisual
;
92 typedef struct xmesa_buffer
*XMesaBuffer
;
97 * Create a new X/Mesa visual.
98 * Input: display - X11 display
99 * visinfo - an XVisualInfo pointer
100 * rgb_flag - GL_TRUE = RGB mode,
101 * GL_FALSE = color index mode
102 * alpha_flag - alpha buffer requested?
103 * db_flag - GL_TRUE = double-buffered,
104 * GL_FALSE = single buffered
105 * stereo_flag - stereo visual?
106 * ximage_flag - GL_TRUE = use an XImage for back buffer,
107 * GL_FALSE = use an off-screen pixmap for back buffer
108 * depth_size - requested bits/depth values, or zero
109 * stencil_size - requested bits/stencil values, or zero
110 * accum_red_size - requested bits/red accum values, or zero
111 * accum_green_size - requested bits/green accum values, or zero
112 * accum_blue_size - requested bits/blue accum values, or zero
113 * accum_alpha_size - requested bits/alpha accum values, or zero
114 * num_samples - number of samples/pixel if multisampling, or zero
115 * level - visual level, usually 0
116 * visualCaveat - ala the GLX extension, usually GLX_NONE_EXT
117 * Return; a new XMesaVisual or 0 if error.
119 extern XMesaVisual
XMesaCreateVisual( XMesaDisplay
*display
,
120 XMesaVisualInfo visinfo
,
122 GLboolean alpha_flag
,
124 GLboolean stereo_flag
,
125 GLboolean ximage_flag
,
128 GLint accum_red_size
,
129 GLint accum_green_size
,
130 GLint accum_blue_size
,
131 GLint accum_alpha_size
,
134 GLint visualCaveat
);
137 * Destroy an XMesaVisual, but not the associated XVisualInfo.
139 extern void XMesaDestroyVisual( XMesaVisual v
);
144 * Create a new XMesaContext for rendering into an X11 window.
146 * Input: visual - an XMesaVisual
147 * share_list - another XMesaContext with which to share display
148 * lists or NULL if no sharing is wanted.
149 * Return: an XMesaContext or NULL if error.
151 extern XMesaContext
XMesaCreateContext( XMesaVisual v
,
152 XMesaContext share_list
);
156 * Destroy a rendering context as returned by XMesaCreateContext()
158 extern void XMesaDestroyContext( XMesaContext c
);
164 * Create an XMesaBuffer from an X window.
166 extern XMesaBuffer
XMesaCreateWindowBuffer( XMesaVisual v
, XMesaWindow w
);
170 * Create an XMesaBuffer from an X pixmap.
172 extern XMesaBuffer
XMesaCreatePixmapBuffer( XMesaVisual v
,
174 XMesaColormap cmap
);
178 * Destroy an XMesaBuffer, but not the corresponding window or pixmap.
180 extern void XMesaDestroyBuffer( XMesaBuffer b
);
184 * Return the XMesaBuffer handle which corresponds to an X drawable, if any.
188 extern XMesaBuffer
XMesaFindBuffer( XMesaDisplay
*dpy
,
194 * Bind a buffer to a context and make the context the current one.
196 extern GLboolean
XMesaMakeCurrent( XMesaContext c
,
201 * Bind two buffers (read and draw) to a context and make the
202 * context the current one.
205 extern GLboolean
XMesaMakeCurrent2( XMesaContext c
,
206 XMesaBuffer drawBuffer
,
207 XMesaBuffer readBuffer
);
211 * Unbind the current context from its buffer.
213 extern GLboolean
XMesaUnbindContext( XMesaContext c
);
217 * Return a handle to the current context.
219 extern XMesaContext
XMesaGetCurrentContext( void );
223 * Return handle to the current (draw) buffer.
225 extern XMesaBuffer
XMesaGetCurrentBuffer( void );
229 * Return handle to the current read buffer.
232 extern XMesaBuffer
XMesaGetCurrentReadBuffer( void );
236 * Return display of current context.
238 extern Display
*XMesaGetCurrentDisplay( void );
242 * Swap the front and back buffers for the given buffer. No action is
243 * taken if the buffer is not double buffered.
245 extern void XMesaSwapBuffers( XMesaBuffer b
);
249 * Copy a sub-region of the back buffer to the front buffer.
253 extern void XMesaCopySubBuffer( XMesaBuffer b
,
261 * Return a pointer to the Pixmap or XImage being used as the back
262 * color buffer of an XMesaBuffer. This function is a way to get "under
263 * the hood" of X/Mesa so one can manipulate the back buffer directly.
264 * Input: b - the XMesaBuffer
265 * Output: pixmap - pointer to back buffer's Pixmap, or 0
266 * ximage - pointer to back buffer's XImage, or NULL
267 * Return: GL_TRUE = context is double buffered
268 * GL_FALSE = context is single buffered
270 extern GLboolean
XMesaGetBackBuffer( XMesaBuffer b
,
272 XMesaImage
**ximage
);
277 * Return the depth buffer associated with an XMesaBuffer.
278 * Input: b - the XMesa buffer handle
279 * Output: width, height - size of buffer in pixels
280 * bytesPerValue - bytes per depth value (2 or 4)
281 * buffer - pointer to depth buffer values
282 * Return: GL_TRUE or GL_FALSE to indicate success or failure.
286 extern GLboolean
XMesaGetDepthBuffer( XMesaBuffer b
,
289 GLint
*bytesPerValue
,
295 * Flush/sync a context
297 extern void XMesaFlush( XMesaContext c
);
302 * Get an X/Mesa-specific string.
303 * Input: name - either XMESA_VERSION or XMESA_EXTENSIONS
305 extern const char *XMesaGetString( XMesaContext c
, int name
);
310 * Scan for XMesaBuffers whose window/pixmap has been destroyed, then free
311 * any memory used by that buffer.
315 extern void XMesaGarbageCollect( XMesaDisplay
* dpy
);
320 * Return a dithered pixel value.
321 * Input: c - XMesaContext
322 * x, y - window coordinate
323 * red, green, blue, alpha - color components in [0,1]
324 * Return: pixel value
328 extern unsigned long XMesaDitherColor( XMesaContext xmesa
,
339 * Reallocate the back/depth/stencil/accum/etc/ buffers associated with
340 * buffer <b> if its size has changed.
344 extern void XMesaResizeBuffers( XMesaBuffer b
);
352 extern XMesaBuffer
XMesaCreatePBuffer(XMesaVisual v
, XMesaColormap cmap
,
353 unsigned int width
, unsigned int height
);
358 * Texture from Pixmap
362 XMesaBindTexImage(XMesaDisplay
*dpy
, XMesaBuffer drawable
, int buffer
,
363 const int *attrib_list
);
366 XMesaReleaseTexImage(XMesaDisplay
*dpy
, XMesaBuffer drawable
, int buffer
);
370 XMesaCreatePixmapTextureBuffer(XMesaVisual v
, XMesaPixmap p
,
372 int format
, int target
, int mipmap
);