GLX 1.2 support

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/back/trunk@17306 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
fedor 2003-07-23 03:40:47 +00:00
parent eb1cd51d37
commit 9b2e1fcce3
3 changed files with 97 additions and 31 deletions

View file

@ -51,9 +51,23 @@
@interface XGGLPixelFormat : NSOpenGLPixelFormat
{
@public
GLXFBConfig *conf_tab;
union {
GLXFBConfig *tab;
XVisualInfo *visual;
} conf;
int n_elem;
}
@end
static inline int
GSglxMinorVersion(Display *dpy)
{
int major, minor;
Bool result;
result = glXQueryVersion (dpy, &major, &minor);
if (result == False)
return -1;
return minor;
}
#endif

View file

@ -188,7 +188,11 @@ static XGGLContext *currentGLContext;
{
MAKE_DISPLAY(dpy);
glXMakeContextCurrent(dpy, None, None, NULL);
if (GSglxMinorVersion (dpy) >= 3)
glXMakeContextCurrent(dpy, None, None, NULL);
else
glXMakeCurrent(dpy, None, NULL);
currentGLContext = nil;
}
@ -271,8 +275,13 @@ static XGGLContext *currentGLContext;
MAKE_DISPLAY(dpy);
ASSIGN(format, (XGGLPixelFormat *)_format);
//FIXME: allow index mode and sharing
glx_context = glXCreateNewContext(dpy, format->conf_tab[0],
GLX_RGBA_TYPE, NULL, YES);
if (GSglxMinorVersion (dpy) >= 3)
glx_context = glXCreateNewContext(dpy, format->conf.tab[0],
GLX_RGBA_TYPE, NULL, YES);
else
glx_context = glXCreateContext(dpy, format->conf.visual, 0, GL_TRUE);
return self;
}
else
@ -307,9 +316,18 @@ static XGGLContext *currentGLContext;
NSAssert(glx_context != None && glx_drawable != None,
NSInternalInconsistencyException);
NSDebugMLLog(@"GLX", @"before glXMakeContextCurrent");
glXMakeContextCurrent(dpy, glx_drawable, glx_drawable, glx_context);
NSDebugMLLog(@"GLX", @"after glXMakeContextCurrent");
if (GSglxMinorVersion (dpy) >= 3)
{
NSDebugMLLog(@"GLX", @"before glXMakeContextCurrent");
glXMakeContextCurrent(dpy, glx_drawable, glx_drawable, glx_context);
NSDebugMLLog(@"GLX", @"after glXMakeContextCurrent");
}
else
{
NSDebugMLLog(@"GLX", @"before glXMakeCurrent");
glXMakeCurrent(dpy, glx_drawable, glx_context);
NSDebugMLLog(@"GLX", @"after glXMakeCurrent");
}
// NSAssert(glx_context != None, NSInternalInconsistencyException);

View file

@ -50,8 +50,15 @@
*/
{
MAKE_DISPLAY(dpy);
NSAssert(conf_tab != NULL && n_elem > 0, NSInternalInconsistencyException);
glXGetFBConfigAttrib(dpy, conf_tab[0], attrib, (int *)vals);
NSAssert(((GSglxMinorVersion (dpy) >= 3)
? (void *)conf.tab : (void *)conf.visual)
!= NULL
&& n_elem > 0, NSInternalInconsistencyException);
if (GSglxMinorVersion (dpy) >= 3)
glXGetFBConfigAttrib(dpy, conf.tab[0], attrib, (int *)vals);
else
glXGetConfig(dpy, conf.visual, attrib, (int *)vals);
}
- (id)initWithAttributes:(NSOpenGLPixelFormatAttribute *)attribs
@ -65,6 +72,9 @@
[data appendBytes: &v2 length: sizeof(v2)]
#define append1(a) v1 = a;[data appendBytes: &v1 length: sizeof(v1)]
if (GSglxMinorVersion (dpy) < 3)
append1 (GLX_RGBA);
while(*ptr)
{
switch(*ptr)
@ -140,9 +150,16 @@
append1(None);
//FIXME, what screen number ?
conf_tab = glXChooseFBConfig(dpy, DefaultScreen(dpy), [data mutableBytes],
&n_elem);
if ( conf_tab == NULL )
if (GSglxMinorVersion (dpy) >= 3)
conf.tab = glXChooseFBConfig(dpy, DefaultScreen(dpy), [data mutableBytes],
&n_elem);
else
conf.visual = glXChooseVisual(dpy, DefaultScreen(dpy),
[data mutableBytes]);
if ( ((GSglxMinorVersion (dpy) >= 3)
? (void *)conf.tab : (void *)conf.visual)
== NULL )
{
NSDebugMLLog(@"GLX", @"no pixel format found matching what is required");
RELEASE(self);
@ -153,24 +170,37 @@
NSDebugMLLog(@"GLX", @"We found %d pixel formats", n_elem);
#if 0
{
int i;
for (i = 0; i < n_elem; ++i )
{
int val;
NSDebugMLLog(@"GLX", @"inspecting %dth", i+1);
glXGetFBConfigAttrib(dpy, conf_tab[i], GLX_BUFFER_SIZE, &val);
NSDebugMLLog(@"GLX", @"buffer size %d", val);
glXGetFBConfigAttrib(dpy, conf_tab[i], GLX_DOUBLEBUFFER, &val);
NSDebugMLLog(@"GLX", @"double buffer %d", val);
glXGetFBConfigAttrib(dpy, conf_tab[i], GLX_DEPTH_SIZE, &val);
NSDebugMLLog(@"GLX", @"depth size %d", val);
}
}
if (GSglxMinorVersion (dpy) >= 3)
{
int i;
for (i = 0; i < n_elem; ++i )
{
int val;
NSDebugMLLog(@"GLX", @"inspecting %dth", i+1);
glXGetFBConfigAttrib(dpy, conf.tab[i], GLX_BUFFER_SIZE, &val);
NSDebugMLLog(@"GLX", @"buffer size %d", val);
glXGetFBConfigAttrib(dpy, conf.tab[i], GLX_DOUBLEBUFFER, &val);
NSDebugMLLog(@"GLX", @"double buffer %d", val);
glXGetFBConfigAttrib(dpy, conf.tab[i], GLX_DEPTH_SIZE, &val);
NSDebugMLLog(@"GLX", @"depth size %d", val);
}
}
else
{
glXGetConfig(dpy, conf.visual, GLX_BUFFER_SIZE, &val);
NSDebugMLLog(@"GLX", @"buffer size %d", val);
glXGetConfig(dpy, conf.visual, GLX_DOUBLEBUFFER, &val);
NSDebugMLLog(@"GLX", @"double buffer %d", val);
glXGetConfig(dpy, conf.visual, GLX_DEPTH_SIZE, &val);
NSDebugMLLog(@"GLX", @"depth size %d", val);
}
#endif
return self;
}
@ -180,7 +210,11 @@
{
//FIXME
//are we sure that X Connection is still up here ?
XFree(conf_tab);
MAKE_DISPLAY(dpy);
if (GSglxMinorVersion (dpy) >= 3)
XFree (conf.tab);
else
XFree (conf.visual);
NSDebugMLLog(@"GLX", @"deallocation");
[super dealloc];
}