mirror of
https://github.com/gnustep/libs-back.git
synced 2025-04-22 23:42:16 +00:00
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:
parent
57f11eaa12
commit
23a64a292a
3 changed files with 97 additions and 31 deletions
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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];
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue