xm_api.h revision d405ba3151de9585a310b7e2ebcae09302c0dbe4
19ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell/* 29ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Mesa 3-D graphics library 39ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Version: 7.1 49ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * 59ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Copyright (C) 1999-2007 Brian Paul All Rights Reserved. 69ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * 79ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Permission is hereby granted, free of charge, to any person obtaining a 89ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * copy of this software and associated documentation files (the "Software"), 99ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * to deal in the Software without restriction, including without limitation 109ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * the rights to use, copy, modify, merge, publish, distribute, sublicense, 119ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * and/or sell copies of the Software, and to permit persons to whom the 129ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Software is furnished to do so, subject to the following conditions: 139ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * 149ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * The above copyright notice and this permission notice shall be included 159ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * in all copies or substantial portions of the Software. 169ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * 179ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 189ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 199ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 209ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 219ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 229ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 239ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell */ 249ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 259ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 269ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 279ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell/* Sample Usage: 289ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 299ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith WhitwellIn addition to the usual X calls to select a visual, create a colormap 309ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwelland create a window, you must do the following to use the X/Mesa interface: 319ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 329ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell1. Call XMesaCreateVisual() to make an XMesaVisual from an XVisualInfo. 339ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 349ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell2. Call XMesaCreateContext() to create an X/Mesa rendering context, given 359ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell the XMesaVisual. 369ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 379ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell3. Call XMesaCreateWindowBuffer() to create an XMesaBuffer from an X window 389ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell and XMesaVisual. 399ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 409ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell4. Call XMesaMakeCurrent() to bind the XMesaBuffer to an XMesaContext and 419ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell to make the context the current one. 429ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 439ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell5. Make gl* calls to render your graphics. 449ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 459ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell6. Use XMesaSwapBuffers() when double buffering to swap front/back buffers. 469ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 479ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell7. Before the X window is destroyed, call XMesaDestroyBuffer(). 489ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 499ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell8. Before exiting, call XMesaDestroyVisual and XMesaDestroyContext. 509ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 519ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell*/ 529ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 539ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 549ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 559ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 569ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell#ifndef XMESA_H 579ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell#define XMESA_H 589ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 599ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 6005f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell#include "mtypes.h" 6105f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell#include "state_tracker/st_context.h" 6205f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell#include "state_tracker/st_public.h" 6305f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell#include "pipe/p_thread.h" 649ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 659ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 6605f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell# include <X11/Xlib.h> 6705f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell# include <X11/Xlibint.h> 6805f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell# include <X11/Xutil.h> 6905f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell# ifdef USE_XSHM /* was SHM */ 7005f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell# include <sys/ipc.h> 7105f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell# include <sys/shm.h> 7205f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell# include <X11/extensions/XShm.h> 7305f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell# endif 749ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 759ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwelltypedef struct xmesa_buffer *XMesaBuffer; 7605f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwelltypedef struct xmesa_context *XMesaContext; 7705f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwelltypedef struct xmesa_visual *XMesaVisual; 789ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 799ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 809ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 819ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell/* 829ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Create a new X/Mesa visual. 839ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Input: display - X11 display 849ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * visinfo - an XVisualInfo pointer 859ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * rgb_flag - GL_TRUE = RGB mode, 869ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * GL_FALSE = color index mode 879ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * alpha_flag - alpha buffer requested? 889ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * db_flag - GL_TRUE = double-buffered, 899ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * GL_FALSE = single buffered 909ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * stereo_flag - stereo visual? 919ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * ximage_flag - GL_TRUE = use an XImage for back buffer, 929ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * GL_FALSE = use an off-screen pixmap for back buffer 939ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * depth_size - requested bits/depth values, or zero 949ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * stencil_size - requested bits/stencil values, or zero 959ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * accum_red_size - requested bits/red accum values, or zero 969ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * accum_green_size - requested bits/green accum values, or zero 979ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * accum_blue_size - requested bits/blue accum values, or zero 989ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * accum_alpha_size - requested bits/alpha accum values, or zero 999ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * num_samples - number of samples/pixel if multisampling, or zero 1009ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * level - visual level, usually 0 1019ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * visualCaveat - ala the GLX extension, usually GLX_NONE_EXT 1029ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Return; a new XMesaVisual or 0 if error. 1039ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell */ 104153b4d5cdd934812d8c24ef10bb8bbbe852eaf62Keith Whitwellextern XMesaVisual XMesaCreateVisual( Display *display, 105153b4d5cdd934812d8c24ef10bb8bbbe852eaf62Keith Whitwell XVisualInfo * visinfo, 1069ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell GLboolean rgb_flag, 1079ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell GLboolean alpha_flag, 1089ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell GLboolean db_flag, 1099ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell GLboolean stereo_flag, 1109ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell GLboolean ximage_flag, 1119ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell GLint depth_size, 1129ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell GLint stencil_size, 1139ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell GLint accum_red_size, 1149ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell GLint accum_green_size, 1159ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell GLint accum_blue_size, 1169ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell GLint accum_alpha_size, 1179ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell GLint num_samples, 1189ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell GLint level, 1199ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell GLint visualCaveat ); 1209ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 1219ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell/* 1229ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Destroy an XMesaVisual, but not the associated XVisualInfo. 1239ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell */ 1249ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwellextern void XMesaDestroyVisual( XMesaVisual v ); 1259ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 1269ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 1279ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 1289ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell/* 1299ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Create a new XMesaContext for rendering into an X11 window. 1309ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * 1319ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Input: visual - an XMesaVisual 1329ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * share_list - another XMesaContext with which to share display 1339ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * lists or NULL if no sharing is wanted. 1349ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Return: an XMesaContext or NULL if error. 1359ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell */ 1369ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwellextern XMesaContext XMesaCreateContext( XMesaVisual v, 1379ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell XMesaContext share_list ); 1389ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 1399ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 1409ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell/* 1419ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Destroy a rendering context as returned by XMesaCreateContext() 1429ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell */ 1439ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwellextern void XMesaDestroyContext( XMesaContext c ); 1449ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 1459ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 1469ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 1479ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell/* 1489ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Create an XMesaBuffer from an X window. 1499ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell */ 150153b4d5cdd934812d8c24ef10bb8bbbe852eaf62Keith Whitwellextern XMesaBuffer XMesaCreateWindowBuffer( XMesaVisual v, Window w ); 1519ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 1529ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 1539ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell/* 1549ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Create an XMesaBuffer from an X pixmap. 1559ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell */ 1569ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwellextern XMesaBuffer XMesaCreatePixmapBuffer( XMesaVisual v, 157153b4d5cdd934812d8c24ef10bb8bbbe852eaf62Keith Whitwell Pixmap p, 158153b4d5cdd934812d8c24ef10bb8bbbe852eaf62Keith Whitwell Colormap cmap ); 1599ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 1609ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 1619ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell/* 1629ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Destroy an XMesaBuffer, but not the corresponding window or pixmap. 1639ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell */ 1649ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwellextern void XMesaDestroyBuffer( XMesaBuffer b ); 1659ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 1669ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 1679ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell/* 1689ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Return the XMesaBuffer handle which corresponds to an X drawable, if any. 1699ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * 1709ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * New in Mesa 2.3. 1719ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell */ 172153b4d5cdd934812d8c24ef10bb8bbbe852eaf62Keith Whitwellextern XMesaBuffer XMesaFindBuffer( Display *dpy, 173153b4d5cdd934812d8c24ef10bb8bbbe852eaf62Keith Whitwell Drawable d ); 1749ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 1759ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 1769ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 1779ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell/* 1789ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Bind two buffers (read and draw) to a context and make the 1799ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * context the current one. 1809ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * New in Mesa 3.3 1819ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell */ 1829ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwellextern GLboolean XMesaMakeCurrent2( XMesaContext c, 1839ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell XMesaBuffer drawBuffer, 1849ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell XMesaBuffer readBuffer ); 1859ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 1869ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 1879ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell/* 1889ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Unbind the current context from its buffer. 1899ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell */ 1909ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwellextern GLboolean XMesaUnbindContext( XMesaContext c ); 1919ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 1929ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 1939ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell/* 1949ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Return a handle to the current context. 1959ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell */ 1969ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwellextern XMesaContext XMesaGetCurrentContext( void ); 1979ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 1989ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 1999ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell/* 2009ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Swap the front and back buffers for the given buffer. No action is 2019ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * taken if the buffer is not double buffered. 2029ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell */ 2039ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwellextern void XMesaSwapBuffers( XMesaBuffer b ); 2049ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 2059ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 2069ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell/* 2079ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Copy a sub-region of the back buffer to the front buffer. 2089ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * 2099ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * New in Mesa 2.6 2109ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell */ 2119ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwellextern void XMesaCopySubBuffer( XMesaBuffer b, 2129ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell int x, 2139ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell int y, 2149ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell int width, 2159ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell int height ); 2169ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 2179ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 2189ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 2199ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 2209ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 2219ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell/* 2229ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Flush/sync a context 2239ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell */ 2249ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwellextern void XMesaFlush( XMesaContext c ); 2259ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 2269ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 2279ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 2289ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell/* 2299ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Scan for XMesaBuffers whose window/pixmap has been destroyed, then free 2309ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * any memory used by that buffer. 2319ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * 2329ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * New in Mesa 2.3. 2339ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell */ 2349ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwellextern void XMesaGarbageCollect( void ); 2359ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 2369ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 2379ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 2389ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell/* 2399ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Create a pbuffer. 2409ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * New in Mesa 4.1 2419ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell */ 242153b4d5cdd934812d8c24ef10bb8bbbe852eaf62Keith Whitwellextern XMesaBuffer XMesaCreatePBuffer(XMesaVisual v, Colormap cmap, 2439ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell unsigned int width, unsigned int height); 2449ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 2459ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 2469ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 2479ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell/* 2489ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * Texture from Pixmap 2499ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell * New in Mesa 7.1 2509ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell */ 2519ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwellextern void 252153b4d5cdd934812d8c24ef10bb8bbbe852eaf62Keith WhitwellXMesaBindTexImage(Display *dpy, XMesaBuffer drawable, int buffer, 2539ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell const int *attrib_list); 2549ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 2559ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwellextern void 256153b4d5cdd934812d8c24ef10bb8bbbe852eaf62Keith WhitwellXMesaReleaseTexImage(Display *dpy, XMesaBuffer drawable, int buffer); 2579ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 2589ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 2599ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwellextern XMesaBuffer 260153b4d5cdd934812d8c24ef10bb8bbbe852eaf62Keith WhitwellXMesaCreatePixmapTextureBuffer(XMesaVisual v, Pixmap p, 261153b4d5cdd934812d8c24ef10bb8bbbe852eaf62Keith Whitwell Colormap cmap, 2629ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell int format, int target, int mipmap); 2639ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 2649ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 2659ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 2669ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell 26705f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell/*********************************************************************** 26805f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell */ 26905f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell 27005f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwellextern pipe_mutex _xmesa_lock; 27105f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell 27205f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwellextern struct xmesa_buffer *XMesaBufferList; 27305f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell 27405f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell 27505f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell/** 27605f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell * Visual inforation, derived from GLvisual. 27705f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell * Basically corresponds to an XVisualInfo. 27805f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell */ 27905f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwellstruct xmesa_visual { 28005f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell GLvisual mesa_visual; /* Device independent visual parameters */ 28105f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell Display *display; /* The X11 display */ 28205f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell XVisualInfo * visinfo; /* X's visual info (pointer to private copy) */ 28305f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell XVisualInfo *vishandle; /* Only used in fakeglx.c */ 28405f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell GLint BitsPerPixel; /* True bits per pixel for XImages */ 28505f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell 28605f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell GLboolean ximage_flag; /* Use XImage for back buffer (not pixmap)? */ 28705f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell}; 28805f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell 28905f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell 29005f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell/** 29105f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell * Context info, derived from st_context. 29205f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell * Basically corresponds to a GLXContext. 29305f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell */ 29405f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwellstruct xmesa_context { 29505f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell struct st_context *st; 29605f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell XMesaVisual xm_visual; /** pixel format info */ 29705f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell XMesaBuffer xm_buffer; /** current drawbuffer */ 298d405ba3151de9585a310b7e2ebcae09302c0dbe4Thomas Hellstrom XMesaBuffer xm_read_buffer; /** current readbuffer */ 29905f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell}; 30005f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell 30105f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell 30205f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell/** 30305f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell * Types of X/GLX drawables we might render into. 30405f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell */ 30505f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwelltypedef enum { 30605f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell WINDOW, /* An X window */ 30705f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell GLXWINDOW, /* GLX window */ 30805f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell PIXMAP, /* GLX pixmap */ 30905f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell PBUFFER /* GLX Pbuffer */ 31005f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell} BufferType; 31105f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell 31205f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell 31305f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell/** 31405f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell * Framebuffer information, derived from. 31505f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell * Basically corresponds to a GLXDrawable. 31605f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell */ 31705f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwellstruct xmesa_buffer { 31805f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell struct st_framebuffer *stfb; 31905f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell 32005f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell GLboolean wasCurrent; /* was ever the current buffer? */ 32105f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell XMesaVisual xm_visual; /* the X/Mesa visual */ 32205f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell Drawable drawable; /* Usually the X window ID */ 32305f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell Colormap cmap; /* the X colormap */ 32405f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell BufferType type; /* window, pixmap, pbuffer or glxwindow */ 32505f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell 32605f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell XImage *tempImage; 32705f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell unsigned long selectedEvents;/* for pbuffers only */ 32805f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell 32905f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell GLuint shm; /* X Shared Memory extension status: */ 33005f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell /* 0 = not available */ 33105f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell /* 1 = XImage support available */ 33205f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell /* 2 = Pixmap support available too */ 33305f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell#if defined(USE_XSHM) 33405f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell XShmSegmentInfo shminfo; 33505f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell#endif 33605f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell 33705f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell GC gc; /* scratch GC for span, line, tri drawing */ 33805f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell 33905f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell /* GLX_EXT_texture_from_pixmap */ 34005f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell GLint TextureTarget; /** GLX_TEXTURE_1D_EXT, for example */ 34105f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell GLint TextureFormat; /** GLX_TEXTURE_FORMAT_RGB_EXT, for example */ 34205f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell GLint TextureMipmap; /** 0 or 1 */ 34305f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell 34405f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell struct xmesa_buffer *Next; /* Linked list pointer: */ 34505f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell}; 34605f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell 34705f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell 34805f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell 34905f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell/** cast wrapper */ 35005f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwellstatic INLINE XMesaContext 35105f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwellxmesa_context(GLcontext *ctx) 35205f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell{ 35305f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell return (XMesaContext) ctx->DriverCtx; 35405f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell} 35505f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell 35605f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell 35705f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell/** cast wrapper */ 35805f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwellstatic INLINE XMesaBuffer 35905f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwellxmesa_buffer(GLframebuffer *fb) 36005f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell{ 36105f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell struct st_framebuffer *stfb = (struct st_framebuffer *) fb; 36205f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell return (XMesaBuffer) st_framebuffer_private(stfb); 36305f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell} 36405f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell 36505f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell 36605f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwellextern void 36705f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwellxmesa_delete_framebuffer(struct gl_framebuffer *fb); 36805f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell 36905f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwellextern XMesaBuffer 37005f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwellxmesa_find_buffer(Display *dpy, Colormap cmap, XMesaBuffer notThis); 37105f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell 37205f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwellextern void 37305f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwellxmesa_check_and_update_buffer_size(XMesaContext xmctx, XMesaBuffer drawBuffer); 37405f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell 37505f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwellextern void 37605f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwellxmesa_destroy_buffers_on_display(Display *dpy); 37705f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell 37805f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwellstatic INLINE GLuint 37905f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwellxmesa_buffer_width(XMesaBuffer b) 38005f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell{ 38105f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell return b->stfb->Base.Width; 38205f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell} 38305f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell 38405f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwellstatic INLINE GLuint 38505f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwellxmesa_buffer_height(XMesaBuffer b) 38605f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell{ 38705f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell return b->stfb->Base.Height; 38805f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell} 38905f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell 39005f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwellextern int 39105f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwellxmesa_check_for_xshm(Display *display); 39205f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell 39305f8e41b9567695e9b96276d3ac5734ed2b268a8Keith Whitwell 3949ed74c61d4c587ef7bc202d876d4a7e02c35fab7Keith Whitwell#endif 395