mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 05:18:08 +02:00
more work on fbconfig/pbuffer support
This commit is contained in:
parent
f42d366bb6
commit
3265fe5f8e
3 changed files with 223 additions and 233 deletions
|
|
@ -1,4 +1,4 @@
|
|||
/* $Id: fakeglx.c,v 1.67 2002/08/22 21:10:01 brianp Exp $ */
|
||||
/* $Id: fakeglx.c,v 1.68 2002/10/05 03:02:34 brianp Exp $ */
|
||||
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
|
|
@ -897,10 +897,9 @@ static XVisualInfo *choose_x_overlay_visual( Display *dpy, int scr,
|
|||
/**********************************************************************/
|
||||
|
||||
|
||||
static XVisualInfo *
|
||||
Fake_glXChooseVisual( Display *dpy, int screen, int *list )
|
||||
static XMesaVisual choose_visual( Display *dpy, int screen, const int *list )
|
||||
{
|
||||
int *parselist;
|
||||
const int *parselist;
|
||||
XVisualInfo *vis;
|
||||
int min_ci = 0;
|
||||
int min_red=0, min_green=0, min_blue=0;
|
||||
|
|
@ -919,6 +918,7 @@ Fake_glXChooseVisual( Display *dpy, int screen, int *list )
|
|||
int trans_type = DONT_CARE;
|
||||
int trans_value = DONT_CARE;
|
||||
GLint caveat = DONT_CARE;
|
||||
XMesaVisual xmvis = NULL;
|
||||
|
||||
parselist = list;
|
||||
|
||||
|
|
@ -1041,10 +1041,36 @@ Fake_glXChooseVisual( Display *dpy, int screen, int *list )
|
|||
caveat = *parselist++; /* ignored for now */
|
||||
break;
|
||||
|
||||
/*
|
||||
* FBConfig attribs.
|
||||
*/
|
||||
case GLX_RENDER_TYPE:
|
||||
parselist++;
|
||||
if (*parselist == GLX_RGBA_BIT) {
|
||||
rgb_flag = GL_TRUE;
|
||||
}
|
||||
else if (*parselist == GLX_COLOR_INDEX_BIT) {
|
||||
rgb_flag = GL_FALSE;
|
||||
}
|
||||
else if (*parselist == 0) {
|
||||
rgb_flag = GL_TRUE;
|
||||
}
|
||||
parselist++;
|
||||
break;
|
||||
case GLX_DRAWABLE_TYPE:
|
||||
parselist++;
|
||||
if (*parselist & ~(GLX_WINDOW_BIT | GLX_PIXMAP_BIT | GLX_PBUFFER_BIT)) {
|
||||
return NULL; /* bad bit */
|
||||
}
|
||||
parselist++;
|
||||
break;
|
||||
|
||||
case None:
|
||||
break;
|
||||
|
||||
default:
|
||||
/* undefined attribute */
|
||||
printf("unexpected attrib 0x%x\n", *parselist);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
|
@ -1116,18 +1142,25 @@ Fake_glXChooseVisual( Display *dpy, int screen, int *list )
|
|||
accumAlphaSize = alpha_flag ? ACCUM_BITS : 0;
|
||||
}
|
||||
|
||||
if (!save_glx_visual( dpy, vis, rgb_flag, alpha_flag, double_flag,
|
||||
stereo_flag, depth_size, stencil_size,
|
||||
accumRedSize, accumGreenSize,
|
||||
accumBlueSize, accumAlphaSize,
|
||||
level ))
|
||||
return NULL;
|
||||
xmvis = save_glx_visual( dpy, vis, rgb_flag, alpha_flag, double_flag,
|
||||
stereo_flag, depth_size, stencil_size,
|
||||
accumRedSize, accumGreenSize,
|
||||
accumBlueSize, accumAlphaSize, level );
|
||||
}
|
||||
|
||||
return vis;
|
||||
return xmvis;
|
||||
}
|
||||
|
||||
|
||||
static XVisualInfo *
|
||||
Fake_glXChooseVisual( Display *dpy, int screen, int *list )
|
||||
{
|
||||
XMesaVisual xmvis = choose_visual(dpy, screen, list);
|
||||
if (xmvis)
|
||||
return xmvis->vishandle;
|
||||
else
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
static GLXContext
|
||||
|
|
@ -1454,33 +1487,15 @@ Fake_glXQueryVersion( Display *dpy, int *maj, int *min )
|
|||
* Query the GLX attributes of the given XVisualInfo.
|
||||
*/
|
||||
static int
|
||||
Fake_glXGetConfig( Display *dpy, XVisualInfo *visinfo,
|
||||
int attrib, int *value )
|
||||
get_config( XMesaVisual glxvis, int attrib, int *value, GLboolean fbconfig )
|
||||
{
|
||||
XMesaVisual glxvis;
|
||||
|
||||
glxvis = find_glx_visual( dpy, visinfo );
|
||||
if (!glxvis) {
|
||||
/* this visual wasn't obtained with glXChooseVisual */
|
||||
glxvis = create_glx_visual( dpy, visinfo );
|
||||
if (!glxvis) {
|
||||
/* this visual can't be used for GL rendering */
|
||||
if (attrib==GLX_USE_GL) {
|
||||
*value = (int) False;
|
||||
return 0;
|
||||
}
|
||||
else {
|
||||
return GLX_BAD_VISUAL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ASSERT(glxvis);
|
||||
switch(attrib) {
|
||||
case GLX_USE_GL:
|
||||
*value = (int) True;
|
||||
return 0;
|
||||
case GLX_BUFFER_SIZE:
|
||||
*value = visinfo->depth;
|
||||
*value = glxvis->visinfo->depth;
|
||||
return 0;
|
||||
case GLX_LEVEL:
|
||||
*value = glxvis->level;
|
||||
|
|
@ -1599,14 +1614,101 @@ Fake_glXGetConfig( Display *dpy, XVisualInfo *visinfo,
|
|||
return 0;
|
||||
|
||||
/*
|
||||
* Extensions
|
||||
* GLX_EXT_multisample
|
||||
*/
|
||||
case GLX_SAMPLE_BUFFERS_SGIS:
|
||||
*value = 0;
|
||||
return 0;
|
||||
case GLX_SAMPLES_SGIS:
|
||||
*value = 0;
|
||||
return 0;
|
||||
|
||||
/*
|
||||
* For FBConfigs:
|
||||
*/
|
||||
case GLX_SCREEN_EXT:
|
||||
if (!fbconfig)
|
||||
return GLX_BAD_ATTRIBUTE;
|
||||
*value = glxvis->visinfo->screen;
|
||||
break;
|
||||
case GLX_DRAWABLE_TYPE: /*SGIX too */
|
||||
if (!fbconfig)
|
||||
return GLX_BAD_ATTRIBUTE;
|
||||
*value = GLX_WINDOW_BIT | GLX_PIXMAP_BIT | GLX_PBUFFER_BIT;
|
||||
break;
|
||||
case GLX_RENDER_TYPE_SGIX:
|
||||
if (!fbconfig)
|
||||
return GLX_BAD_ATTRIBUTE;
|
||||
if (glxvis->mesa_visual.rgbMode)
|
||||
*value = GLX_RGBA_BIT;
|
||||
else
|
||||
*value = GLX_COLOR_INDEX_BIT;
|
||||
break;
|
||||
case GLX_X_RENDERABLE_SGIX:
|
||||
if (!fbconfig)
|
||||
return GLX_BAD_ATTRIBUTE;
|
||||
*value = True; /* XXX really? */
|
||||
break;
|
||||
case GLX_FBCONFIG_ID_SGIX:
|
||||
if (!fbconfig)
|
||||
return GLX_BAD_ATTRIBUTE;
|
||||
*value = glxvis->vishandle->visualid;
|
||||
break;
|
||||
case GLX_MAX_PBUFFER_WIDTH:
|
||||
if (!fbconfig)
|
||||
return GLX_BAD_ATTRIBUTE;
|
||||
/* XXX or MAX_WIDTH? */
|
||||
*value = DisplayWidth(glxvis->display, glxvis->vishandle->screen);
|
||||
break;
|
||||
case GLX_MAX_PBUFFER_HEIGHT:
|
||||
if (!fbconfig)
|
||||
return GLX_BAD_ATTRIBUTE;
|
||||
*value = DisplayHeight(glxvis->display, glxvis->vishandle->screen);
|
||||
break;
|
||||
case GLX_MAX_PBUFFER_PIXELS:
|
||||
if (!fbconfig)
|
||||
return GLX_BAD_ATTRIBUTE;
|
||||
*value = DisplayWidth(glxvis->display, glxvis->vishandle->screen) *
|
||||
DisplayHeight(glxvis->display, glxvis->vishandle->screen);
|
||||
break;
|
||||
case GLX_VISUAL_ID:
|
||||
if (!fbconfig)
|
||||
return GLX_BAD_ATTRIBUTE;
|
||||
*value = glxvis->vishandle->visualid;
|
||||
break;
|
||||
|
||||
default:
|
||||
return GLX_BAD_ATTRIBUTE;
|
||||
}
|
||||
return Success;
|
||||
}
|
||||
|
||||
|
||||
static int
|
||||
Fake_glXGetConfig( Display *dpy, XVisualInfo *visinfo,
|
||||
int attrib, int *value )
|
||||
{
|
||||
XMesaVisual glxvis;
|
||||
|
||||
glxvis = find_glx_visual( dpy, visinfo );
|
||||
if (!glxvis) {
|
||||
/* this visual wasn't obtained with glXChooseVisual */
|
||||
glxvis = create_glx_visual( dpy, visinfo );
|
||||
if (!glxvis) {
|
||||
/* this visual can't be used for GL rendering */
|
||||
if (attrib==GLX_USE_GL) {
|
||||
*value = (int) False;
|
||||
return 0;
|
||||
}
|
||||
else {
|
||||
return GLX_BAD_VISUAL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return get_config(glxvis, attrib, value, GL_FALSE);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
Fake_glXWaitGL( void )
|
||||
|
|
@ -1633,10 +1735,10 @@ static const char *get_extensions( void )
|
|||
#ifdef FX
|
||||
const char *fx = getenv("MESA_GLX_FX");
|
||||
if (fx && fx[0] != 'd') {
|
||||
return "GLX_MESA_pixmap_colormap GLX_EXT_visual_info GLX_EXT_visual_rating GLX_MESA_release_buffers GLX_MESA_copy_sub_buffer GLX_SGI_video_sync GLX_MESA_set_3dfx_mode GLX_ARB_get_proc_address";
|
||||
return "GLX_MESA_pixmap_colormap GLX_EXT_visual_info GLX_EXT_visual_rating GLX_MESA_release_buffers GLX_MESA_copy_sub_buffer GLX_SGI_video_sync GLX_SGIX_fbconfig GLX_SGIX_pbuffer GLX_MESA_set_3dfx_mode GLX_ARB_get_proc_address";
|
||||
}
|
||||
#endif
|
||||
return "GLX_MESA_pixmap_colormap GLX_EXT_visual_info GLX_EXT_visual_rating GLX_MESA_release_buffers GLX_MESA_copy_sub_buffer GLX_SGI_video_sync GLX_ARB_get_proc_address";
|
||||
return "GLX_MESA_pixmap_colormap GLX_EXT_visual_info GLX_EXT_visual_rating GLX_MESA_release_buffers GLX_MESA_copy_sub_buffer GLX_SGI_video_sync GLX_SGIX_fbconfig GLX_SGIX_pbuffer GLX_ARB_get_proc_address";
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -1705,25 +1807,27 @@ Fake_glXGetClientString( Display *dpy, int name )
|
|||
* GLX 1.3 and later
|
||||
*/
|
||||
|
||||
/* XXX Move this when done.
|
||||
* Create an XMesaBuffer as a Pbuffer.
|
||||
* New in Mesa 4.0 but untested.
|
||||
*/
|
||||
extern XMesaBuffer XMesaCreatePBuffer( XMesaVisual v, XMesaColormap cmap,
|
||||
unsigned int width, unsigned int height );
|
||||
|
||||
|
||||
|
||||
/* PBUFFER */
|
||||
static GLXFBConfig *
|
||||
Fake_glXChooseFBConfig( Display *dpy, int screen,
|
||||
const int *attribList, int *nitems )
|
||||
{
|
||||
(void) dpy;
|
||||
(void) screen;
|
||||
(void) attribList;
|
||||
(void) nitems;
|
||||
return 0;
|
||||
XMesaVisual xmvis = choose_visual(dpy, screen, attribList);
|
||||
if (xmvis) {
|
||||
GLXFBConfig *config = malloc(sizeof(XMesaVisual));
|
||||
if (!config) {
|
||||
*nitems = 0;
|
||||
return NULL;
|
||||
}
|
||||
*nitems = 1;
|
||||
config[0] = (GLXFBConfig) xmvis;
|
||||
return (GLXFBConfig *) config;
|
||||
}
|
||||
else {
|
||||
*nitems = 0;
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -1732,158 +1836,14 @@ static int
|
|||
Fake_glXGetFBConfigAttrib( Display *dpy, GLXFBConfig config,
|
||||
int attribute, int *value )
|
||||
{
|
||||
XMesaVisual v = NULL; /* XXX Fix this */
|
||||
XMesaVisual v = (XMesaVisual) config;
|
||||
(void) dpy;
|
||||
(void) config;
|
||||
(void) attribute;
|
||||
(void) value;
|
||||
|
||||
if (!dpy || !config || !value)
|
||||
return -1;
|
||||
|
||||
switch (attribute) {
|
||||
case GLX_FBCONFIG_ID:
|
||||
case GLX_BUFFER_SIZE:
|
||||
if (v->mesa_visual.rgbMode)
|
||||
*value = v->mesa_visual.redBits + v->mesa_visual.greenBits +
|
||||
v->mesa_visual.blueBits + v->mesa_visual.alphaBits;
|
||||
else
|
||||
*value = v->mesa_visual.indexBits;
|
||||
break;
|
||||
case GLX_LEVEL:
|
||||
*value = v->level;
|
||||
break;
|
||||
case GLX_DOUBLEBUFFER:
|
||||
*value = v->mesa_visual.doubleBufferMode;
|
||||
break;
|
||||
case GLX_STEREO:
|
||||
*value = v->mesa_visual.stereoMode;
|
||||
break;
|
||||
case GLX_AUX_BUFFERS:
|
||||
*value = v->mesa_visual.numAuxBuffers;
|
||||
break;
|
||||
case GLX_RED_SIZE:
|
||||
*value = v->mesa_visual.redBits;
|
||||
break;
|
||||
case GLX_GREEN_SIZE:
|
||||
*value = v->mesa_visual.greenBits;
|
||||
break;
|
||||
case GLX_BLUE_SIZE:
|
||||
*value = v->mesa_visual.blueBits;
|
||||
break;
|
||||
case GLX_ALPHA_SIZE:
|
||||
*value = v->mesa_visual.alphaBits;
|
||||
break;
|
||||
case GLX_DEPTH_SIZE:
|
||||
*value = v->mesa_visual.depthBits;
|
||||
break;
|
||||
case GLX_STENCIL_SIZE:
|
||||
*value = v->mesa_visual.stencilBits;
|
||||
break;
|
||||
case GLX_ACCUM_RED_SIZE:
|
||||
*value = v->mesa_visual.accumRedBits;
|
||||
break;
|
||||
case GLX_ACCUM_GREEN_SIZE:
|
||||
*value = v->mesa_visual.accumGreenBits;
|
||||
break;
|
||||
case GLX_ACCUM_BLUE_SIZE:
|
||||
*value = v->mesa_visual.accumBlueBits;
|
||||
break;
|
||||
case GLX_ACCUM_ALPHA_SIZE:
|
||||
*value = v->mesa_visual.accumAlphaBits;
|
||||
break;
|
||||
case GLX_RENDER_TYPE:
|
||||
*value = 0; /* XXX ??? */
|
||||
break;
|
||||
case GLX_DRAWABLE_TYPE:
|
||||
*value = GLX_PBUFFER_BIT; /* XXX fix? */
|
||||
break;
|
||||
case GLX_X_RENDERABLE:
|
||||
*value = False; /* XXX ??? */
|
||||
break;
|
||||
case GLX_X_VISUAL_TYPE:
|
||||
#if defined(__cplusplus) || defined(c_plusplus)
|
||||
switch (v->vishandle->c_class) {
|
||||
#else
|
||||
switch (v->vishandle->class) {
|
||||
#endif
|
||||
case GrayScale:
|
||||
*value = GLX_GRAY_SCALE;
|
||||
break;
|
||||
case StaticGray:
|
||||
*value = GLX_STATIC_GRAY;
|
||||
break;
|
||||
case StaticColor:
|
||||
*value = GLX_STATIC_COLOR;
|
||||
break;
|
||||
case PseudoColor:
|
||||
*value = GLX_PSEUDO_COLOR;
|
||||
break;
|
||||
case TrueColor:
|
||||
*value = GLX_TRUE_COLOR;
|
||||
break;
|
||||
case DirectColor:
|
||||
*value = GLX_DIRECT_COLOR;
|
||||
break;
|
||||
default:
|
||||
*value = 0;
|
||||
}
|
||||
break;
|
||||
case GLX_CONFIG_CAVEAT:
|
||||
*value = 0; /* XXX ??? */
|
||||
break;
|
||||
case GLX_TRANSPARENT_TYPE:
|
||||
if (v->level == 0) {
|
||||
/* normal planes */
|
||||
*value = GLX_NONE_EXT;
|
||||
}
|
||||
else if (v->level > 0) {
|
||||
/* overlay */
|
||||
if (v->mesa_visual.rgbMode) {
|
||||
*value = GLX_TRANSPARENT_RGB_EXT;
|
||||
}
|
||||
else {
|
||||
*value = GLX_TRANSPARENT_INDEX_EXT;
|
||||
}
|
||||
}
|
||||
else if (v->level < 0) {
|
||||
/* underlay */
|
||||
*value = GLX_NONE_EXT;
|
||||
}
|
||||
break;
|
||||
case GLX_TRANSPARENT_INDEX_VALUE:
|
||||
*value = transparent_pixel( v );
|
||||
break;
|
||||
case GLX_TRANSPARENT_RED_VALUE:
|
||||
*value = 0; /* not implemented */
|
||||
break;
|
||||
case GLX_TRANSPARENT_GREEN_VALUE:
|
||||
*value = 0; /* not implemented */
|
||||
break;
|
||||
case GLX_TRANSPARENT_BLUE_VALUE:
|
||||
*value = 0; /* not implemented */
|
||||
break;
|
||||
case GLX_TRANSPARENT_ALPHA_VALUE:
|
||||
*value = 0; /* not implemented */
|
||||
break;
|
||||
case GLX_MAX_PBUFFER_WIDTH:
|
||||
*value = DisplayWidth(dpy, v->vishandle->screen);
|
||||
break;
|
||||
case GLX_MAX_PBUFFER_HEIGHT:
|
||||
*value = DisplayHeight(dpy, v->vishandle->screen);
|
||||
break;
|
||||
case GLX_MAX_PBUFFER_PIXELS:
|
||||
*value = DisplayWidth(dpy, v->vishandle->screen) *
|
||||
DisplayHeight(dpy, v->vishandle->screen);
|
||||
break;
|
||||
case GLX_VISUAL_ID:
|
||||
*value = v->vishandle->visualid;
|
||||
break;
|
||||
default:
|
||||
return GLX_BAD_ATTRIBUTE;
|
||||
}
|
||||
|
||||
return Success;
|
||||
return get_config(v, attribute, value, GL_TRUE);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -1891,11 +1851,26 @@ Fake_glXGetFBConfigAttrib( Display *dpy, GLXFBConfig config,
|
|||
static GLXFBConfig *
|
||||
Fake_glXGetFBConfigs( Display *dpy, int screen, int *nelements )
|
||||
{
|
||||
/* Get list of all X visuals, create FBconfigs from them */
|
||||
(void) dpy;
|
||||
(void) screen;
|
||||
nelements = 0;
|
||||
return 0;
|
||||
XVisualInfo *visuals, visTemplate;
|
||||
const long visMask = VisualScreenMask;
|
||||
int i;
|
||||
|
||||
/* Get list of all X visuals */
|
||||
visTemplate.screen = screen;
|
||||
visuals = XGetVisualInfo(dpy, visMask, &visTemplate, nelements);
|
||||
if (*nelements > 0) {
|
||||
XMesaVisual *results;
|
||||
results = malloc(*nelements * sizeof(XMesaVisual));
|
||||
if (!results) {
|
||||
*nelements = 0;
|
||||
return NULL;
|
||||
}
|
||||
for (i = 0; i < *nelements; i++) {
|
||||
results[i] = create_glx_visual(dpy, visuals + i);
|
||||
}
|
||||
return (GLXFBConfig *) results;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -1989,26 +1964,31 @@ static GLXPbuffer
|
|||
Fake_glXCreatePbuffer( Display *dpy, GLXFBConfig config,
|
||||
const int *attribList )
|
||||
{
|
||||
XMesaVisual xmvis = (XMesaVisual) config;
|
||||
XMesaBuffer xmbuf;
|
||||
const int *attrib;
|
||||
int width = 0, height = 0;
|
||||
GLboolean useLargest = GL_FALSE, preserveContents = GL_FALSE;
|
||||
|
||||
(void) dpy;
|
||||
(void) config;
|
||||
|
||||
for (attrib = attribList; attrib; attrib++) {
|
||||
for (attrib = attribList; *attrib; attrib++) {
|
||||
switch (*attrib) {
|
||||
case GLX_PBUFFER_WIDTH:
|
||||
width = *(++attrib);
|
||||
attrib++;
|
||||
width = *attrib;
|
||||
break;
|
||||
case GLX_PBUFFER_HEIGHT:
|
||||
height = *(++attrib);
|
||||
attrib++;
|
||||
height = *attrib;
|
||||
break;
|
||||
case GLX_PRESERVED_CONTENTS:
|
||||
preserveContents = GL_TRUE; /* ignored */
|
||||
attrib++;
|
||||
preserveContents = *attrib; /* ignored */
|
||||
break;
|
||||
case GLX_LARGEST_PBUFFER:
|
||||
useLargest = GL_TRUE; /* ignored */
|
||||
attrib++;
|
||||
useLargest = *attrib; /* ignored */
|
||||
break;
|
||||
default:
|
||||
return 0;
|
||||
|
|
@ -2018,8 +1998,8 @@ Fake_glXCreatePbuffer( Display *dpy, GLXFBConfig config,
|
|||
if (width == 0 || height == 0)
|
||||
return 0;
|
||||
|
||||
|
||||
return 0;
|
||||
xmbuf = XMesaCreatePBuffer( xmvis, 0, width, height);
|
||||
return (GLXPbuffer) xmbuf;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -2223,21 +2203,13 @@ Fake_glXQueryContextInfoEXT(Display *dpy, GLXContext context, int attribute, int
|
|||
static int
|
||||
Fake_glXGetFBConfigAttribSGIX(Display *dpy, GLXFBConfigSGIX config, int attribute, int *value)
|
||||
{
|
||||
(void) dpy;
|
||||
(void) config;
|
||||
(void) attribute;
|
||||
(void) value;
|
||||
return 0;
|
||||
return Fake_glXGetFBConfigAttrib(dpy, config, attribute, value);
|
||||
}
|
||||
|
||||
static GLXFBConfigSGIX *
|
||||
Fake_glXChooseFBConfigSGIX(Display *dpy, int screen, int *attrib_list, int *nelements)
|
||||
{
|
||||
(void) dpy;
|
||||
(void) screen;
|
||||
(void) attrib_list;
|
||||
(void) nelements;
|
||||
return 0;
|
||||
return (GLXFBConfig *) Fake_glXChooseFBConfig(dpy, screen, attrib_list, nelements);
|
||||
}
|
||||
|
||||
static GLXPixmap
|
||||
|
|
@ -2263,9 +2235,7 @@ Fake_glXCreateContextWithConfigSGIX(Display *dpy, GLXFBConfigSGIX config, int re
|
|||
static XVisualInfo *
|
||||
Fake_glXGetVisualFromFBConfigSGIX(Display *dpy, GLXFBConfigSGIX config)
|
||||
{
|
||||
(void) dpy;
|
||||
(void) config;
|
||||
return NULL;
|
||||
return Fake_glXGetVisualFromFBConfig(dpy, config);
|
||||
}
|
||||
|
||||
static GLXFBConfigSGIX
|
||||
|
|
@ -2281,14 +2251,34 @@ Fake_glXGetFBConfigFromVisualSGIX(Display *dpy, XVisualInfo *vis)
|
|||
/*** GLX_SGIX_pbuffer ***/
|
||||
|
||||
static GLXPbufferSGIX
|
||||
Fake_glXCreateGLXPbufferSGIX(Display *dpy, GLXFBConfigSGIX config, unsigned int width, unsigned int height, int *attrib_list)
|
||||
Fake_glXCreateGLXPbufferSGIX(Display *dpy, GLXFBConfigSGIX config,
|
||||
unsigned int width, unsigned int height,
|
||||
int *attribList)
|
||||
{
|
||||
XMesaVisual xmvis = (XMesaVisual) config;
|
||||
XMesaBuffer xmbuf;
|
||||
const int *attrib;
|
||||
GLboolean useLargest = GL_FALSE, preserveContents = GL_FALSE;
|
||||
|
||||
(void) dpy;
|
||||
(void) config;
|
||||
(void) width;
|
||||
(void) height;
|
||||
(void) attrib_list;
|
||||
return 0;
|
||||
|
||||
for (attrib = attribList; *attrib; attrib++) {
|
||||
switch (*attrib) {
|
||||
case GLX_PRESERVED_CONTENTS_SGIX:
|
||||
attrib++;
|
||||
preserveContents = *attrib; /* ignored */
|
||||
break;
|
||||
case GLX_LARGEST_PBUFFER_SGIX:
|
||||
attrib++;
|
||||
useLargest = *attrib; /* ignored */
|
||||
break;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
xmbuf = XMesaCreatePBuffer( xmvis, 0, width, height);
|
||||
return (GLXPbuffer) xmbuf;
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
/* $Id: xm_api.c,v 1.41 2002/08/21 02:57:58 brianp Exp $ */
|
||||
/* $Id: xm_api.c,v 1.42 2002/10/05 03:02:34 brianp Exp $ */
|
||||
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
|
|
@ -1196,8 +1196,7 @@ static GLboolean initialize_visual_and_buffer( int client,
|
|||
XMesaBuffer b,
|
||||
GLboolean rgb_flag,
|
||||
XMesaDrawable window,
|
||||
XMesaColormap cmap
|
||||
)
|
||||
XMesaColormap cmap )
|
||||
{
|
||||
#ifndef XFree86Server
|
||||
XGCValues gcvalues;
|
||||
|
|
@ -1929,18 +1928,18 @@ XMesaBuffer XMesaCreatePixmapBuffer( XMesaVisual v,
|
|||
|
||||
|
||||
|
||||
#if 0 /* not done */
|
||||
XMesaBuffer XMesaCreatePBuffer( XMesaVisual v, XMesaColormap cmap,
|
||||
unsigned int width, unsigned int height )
|
||||
{
|
||||
int client = 0;
|
||||
XMesaBuffer b = alloc_xmesa_buffer();
|
||||
if (!b) {
|
||||
printf("return NULL 1\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
b->xm_visual = v;
|
||||
b->pbuffer_flag = GL_TRUE;
|
||||
b->type = PBUFFER;
|
||||
b->display = v->display;
|
||||
b->cmap = cmap;
|
||||
|
||||
|
|
@ -1969,12 +1968,12 @@ XMesaBuffer XMesaCreatePBuffer( XMesaVisual v, XMesaColormap cmap,
|
|||
if (!initialize_visual_and_buffer(client, v, b, v->mesa_visual.rgbMode,
|
||||
0, cmap)) {
|
||||
free_xmesa_buffer(client, b);
|
||||
printf("return NULL\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return b;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
/* $Id: xmesaP.h,v 1.29 2002/07/09 01:22:52 brianp Exp $ */
|
||||
/* $Id: xmesaP.h,v 1.30 2002/10/05 03:02:34 brianp Exp $ */
|
||||
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
|
|
@ -539,4 +539,5 @@ extern void XMesaReset( void );
|
|||
|
||||
extern void xmesa_resize_buffers( GLframebuffer *buffer );
|
||||
|
||||
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue