mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-25 13:00:09 +01:00
prototyping some new stuff
This commit is contained in:
parent
874ae72495
commit
55ed11bac5
1 changed files with 314 additions and 82 deletions
|
|
@ -1,4 +1,4 @@
|
|||
/* $Id: glxapi.c,v 1.20 2000/12/15 04:02:50 brianp Exp $ */
|
||||
/* $Id: glxapi.c,v 1.21 2001/05/24 00:00:57 brianp Exp $ */
|
||||
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
|
|
@ -34,7 +34,9 @@
|
|||
|
||||
#include <assert.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
/*#include <dlfcn.h>*/ /* XXX not portable? */
|
||||
#include "glapi.h"
|
||||
#include "glxapi.h"
|
||||
|
||||
|
|
@ -48,7 +50,7 @@
|
|||
|
||||
/* Rather than include possibly non-existant headers... */
|
||||
#ifdef USE_SGI_GLX
|
||||
extern struct _glxapi_table *_sgi_GetGLXDispatchtable(void);
|
||||
extern struct _glxapi_table *_sgi_GetGLXDispatchTable(void);
|
||||
#endif
|
||||
#ifdef USE_UTAH_GLX
|
||||
extern struct _glxapi_table *_utah_GetGLXDispatchTable(void);
|
||||
|
|
@ -68,20 +70,17 @@ struct display_dispatch {
|
|||
static struct display_dispatch *DispatchList = NULL;
|
||||
|
||||
|
||||
/* Display -> Dispatch caching */
|
||||
static Display *prevDisplay = NULL;
|
||||
static struct _glxapi_table *prevTable = NULL;
|
||||
|
||||
|
||||
static struct _glxapi_table *
|
||||
get_dispatch(Display *dpy)
|
||||
{
|
||||
static Display *prevDisplay = NULL;
|
||||
static struct _glxapi_table *prevTable = NULL;
|
||||
|
||||
if (!dpy)
|
||||
return NULL;
|
||||
|
||||
/* try cached display */
|
||||
if (dpy == prevDisplay) {
|
||||
return prevTable;
|
||||
}
|
||||
|
||||
/* search list of display/dispatch pairs for this display */
|
||||
{
|
||||
const struct display_dispatch *d = DispatchList;
|
||||
|
|
@ -107,7 +106,7 @@ get_dispatch(Display *dpy)
|
|||
if (XQueryExtension( dpy, "GLX", &ignore, &ignore, &ignore )) {
|
||||
/* the X server has the GLX extension */
|
||||
#if defined(USE_SGI_GLX)
|
||||
t = _sgi_GetGLXDispatchtable();
|
||||
t = _sgi_GetGLXDispatchTable();
|
||||
#elif defined(USE_UTAH_GLX)
|
||||
t = _utah_GetGLXDispatchTable();
|
||||
#endif
|
||||
|
|
@ -147,6 +146,19 @@ get_dispatch(Display *dpy)
|
|||
}
|
||||
|
||||
|
||||
#define GET_DISPATCH(DPY, TABLE) \
|
||||
if (DPY == prevDisplay) { \
|
||||
TABLE = prevTable; \
|
||||
} \
|
||||
else if (!DPY) { \
|
||||
TABLE = NULL; \
|
||||
} \
|
||||
else { \
|
||||
TABLE = get_dispatch(DPY); \
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/* Set by glXMakeCurrent() and glXMakeContextCurrent() only */
|
||||
static Display *CurrentDisplay = NULL;
|
||||
|
|
@ -163,7 +175,8 @@ static GLXDrawable CurrentReadDrawable = 0;
|
|||
|
||||
XVisualInfo *glXChooseVisual(Display *dpy, int screen, int *list)
|
||||
{
|
||||
struct _glxapi_table *t = get_dispatch(dpy);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(dpy, t);
|
||||
if (!t)
|
||||
return NULL;
|
||||
return (t->ChooseVisual)(dpy, screen, list);
|
||||
|
|
@ -172,7 +185,8 @@ XVisualInfo *glXChooseVisual(Display *dpy, int screen, int *list)
|
|||
|
||||
void glXCopyContext(Display *dpy, GLXContext src, GLXContext dst, unsigned long mask)
|
||||
{
|
||||
struct _glxapi_table *t = get_dispatch(dpy);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(dpy, t);
|
||||
if (!t)
|
||||
return;
|
||||
(t->CopyContext)(dpy, src, dst, mask);
|
||||
|
|
@ -181,7 +195,8 @@ void glXCopyContext(Display *dpy, GLXContext src, GLXContext dst, unsigned long
|
|||
|
||||
GLXContext glXCreateContext(Display *dpy, XVisualInfo *visinfo, GLXContext shareList, Bool direct)
|
||||
{
|
||||
struct _glxapi_table *t = get_dispatch(dpy);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(dpy, t);
|
||||
if (!t)
|
||||
return 0;
|
||||
return (t->CreateContext)(dpy, visinfo, shareList, direct);
|
||||
|
|
@ -190,7 +205,8 @@ GLXContext glXCreateContext(Display *dpy, XVisualInfo *visinfo, GLXContext share
|
|||
|
||||
GLXPixmap glXCreateGLXPixmap(Display *dpy, XVisualInfo *visinfo, Pixmap pixmap)
|
||||
{
|
||||
struct _glxapi_table *t = get_dispatch(dpy);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(dpy, t);
|
||||
if (!t)
|
||||
return 0;
|
||||
return (t->CreateGLXPixmap)(dpy, visinfo, pixmap);
|
||||
|
|
@ -199,7 +215,8 @@ GLXPixmap glXCreateGLXPixmap(Display *dpy, XVisualInfo *visinfo, Pixmap pixmap)
|
|||
|
||||
void glXDestroyContext(Display *dpy, GLXContext ctx)
|
||||
{
|
||||
struct _glxapi_table *t = get_dispatch(dpy);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(dpy, t);
|
||||
if (!t)
|
||||
return;
|
||||
(t->DestroyContext)(dpy, ctx);
|
||||
|
|
@ -208,7 +225,8 @@ void glXDestroyContext(Display *dpy, GLXContext ctx)
|
|||
|
||||
void glXDestroyGLXPixmap(Display *dpy, GLXPixmap pixmap)
|
||||
{
|
||||
struct _glxapi_table *t = get_dispatch(dpy);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(dpy, t);
|
||||
if (!t)
|
||||
return;
|
||||
(t->DestroyGLXPixmap)(dpy, pixmap);
|
||||
|
|
@ -217,7 +235,8 @@ void glXDestroyGLXPixmap(Display *dpy, GLXPixmap pixmap)
|
|||
|
||||
int glXGetConfig(Display *dpy, XVisualInfo *visinfo, int attrib, int *value)
|
||||
{
|
||||
struct _glxapi_table *t = get_dispatch(dpy);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(dpy, t);
|
||||
if (!t)
|
||||
return GLX_NO_EXTENSION;
|
||||
return (t->GetConfig)(dpy, visinfo, attrib, value);
|
||||
|
|
@ -238,7 +257,8 @@ GLXDrawable glXGetCurrentDrawable(void)
|
|||
|
||||
Bool glXIsDirect(Display *dpy, GLXContext ctx)
|
||||
{
|
||||
struct _glxapi_table *t = get_dispatch(dpy);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(dpy, t);
|
||||
if (!t)
|
||||
return False;
|
||||
return (t->IsDirect)(dpy, ctx);
|
||||
|
|
@ -248,7 +268,8 @@ Bool glXIsDirect(Display *dpy, GLXContext ctx)
|
|||
Bool glXMakeCurrent(Display *dpy, GLXDrawable drawable, GLXContext ctx)
|
||||
{
|
||||
Bool b;
|
||||
struct _glxapi_table *t = get_dispatch(dpy);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(dpy, t);
|
||||
if (!t)
|
||||
return False;
|
||||
b = (*t->MakeCurrent)(dpy, drawable, ctx);
|
||||
|
|
@ -264,7 +285,8 @@ Bool glXMakeCurrent(Display *dpy, GLXDrawable drawable, GLXContext ctx)
|
|||
|
||||
Bool glXQueryExtension(Display *dpy, int *errorb, int *event)
|
||||
{
|
||||
struct _glxapi_table *t = get_dispatch(dpy);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(dpy, t);
|
||||
if (!t)
|
||||
return False;
|
||||
return (t->QueryExtension)(dpy, errorb, event);
|
||||
|
|
@ -273,7 +295,8 @@ Bool glXQueryExtension(Display *dpy, int *errorb, int *event)
|
|||
|
||||
Bool glXQueryVersion(Display *dpy, int *maj, int *min)
|
||||
{
|
||||
struct _glxapi_table *t = get_dispatch(dpy);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(dpy, t);
|
||||
if (!t)
|
||||
return False;
|
||||
return (t->QueryVersion)(dpy, maj, min);
|
||||
|
|
@ -282,7 +305,8 @@ Bool glXQueryVersion(Display *dpy, int *maj, int *min)
|
|||
|
||||
void glXSwapBuffers(Display *dpy, GLXDrawable drawable)
|
||||
{
|
||||
struct _glxapi_table *t = get_dispatch(dpy);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(dpy, t);
|
||||
if (!t)
|
||||
return;
|
||||
(t->SwapBuffers)(dpy, drawable);
|
||||
|
|
@ -291,7 +315,8 @@ void glXSwapBuffers(Display *dpy, GLXDrawable drawable)
|
|||
|
||||
void glXUseXFont(Font font, int first, int count, int listBase)
|
||||
{
|
||||
struct _glxapi_table *t = get_dispatch(CurrentDisplay);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(CurrentDisplay, t);
|
||||
if (!t)
|
||||
return;
|
||||
(t->UseXFont)(font, first, count, listBase);
|
||||
|
|
@ -300,7 +325,8 @@ void glXUseXFont(Font font, int first, int count, int listBase)
|
|||
|
||||
void glXWaitGL(void)
|
||||
{
|
||||
struct _glxapi_table *t = get_dispatch(CurrentDisplay);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(CurrentDisplay, t);
|
||||
if (!t)
|
||||
return;
|
||||
(t->WaitGL)();
|
||||
|
|
@ -309,7 +335,8 @@ void glXWaitGL(void)
|
|||
|
||||
void glXWaitX(void)
|
||||
{
|
||||
struct _glxapi_table *t = get_dispatch(CurrentDisplay);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(CurrentDisplay, t);
|
||||
if (!t)
|
||||
return;
|
||||
(t->WaitX)();
|
||||
|
|
@ -321,7 +348,8 @@ void glXWaitX(void)
|
|||
|
||||
const char *glXGetClientString(Display *dpy, int name)
|
||||
{
|
||||
struct _glxapi_table *t = get_dispatch(dpy);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(dpy, t);
|
||||
if (!t)
|
||||
return NULL;
|
||||
return (t->GetClientString)(dpy, name);
|
||||
|
|
@ -330,7 +358,8 @@ const char *glXGetClientString(Display *dpy, int name)
|
|||
|
||||
const char *glXQueryExtensionsString(Display *dpy, int screen)
|
||||
{
|
||||
struct _glxapi_table *t = get_dispatch(dpy);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(dpy, t);
|
||||
if (!t)
|
||||
return NULL;
|
||||
return (t->QueryExtensionsString)(dpy, screen);
|
||||
|
|
@ -339,7 +368,8 @@ const char *glXQueryExtensionsString(Display *dpy, int screen)
|
|||
|
||||
const char *glXQueryServerString(Display *dpy, int screen, int name)
|
||||
{
|
||||
struct _glxapi_table *t = get_dispatch(dpy);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(dpy, t);
|
||||
if (!t)
|
||||
return NULL;
|
||||
return (t->QueryServerString)(dpy, screen, name);
|
||||
|
|
@ -362,7 +392,8 @@ Display *glXGetCurrentDisplay(void)
|
|||
|
||||
GLXFBConfig *glXChooseFBConfig(Display *dpy, int screen, const int *attribList, int *nitems)
|
||||
{
|
||||
struct _glxapi_table *t = get_dispatch(dpy);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(dpy, t);
|
||||
if (!t)
|
||||
return 0;
|
||||
return (t->ChooseFBConfig)(dpy, screen, attribList, nitems);
|
||||
|
|
@ -371,7 +402,8 @@ GLXFBConfig *glXChooseFBConfig(Display *dpy, int screen, const int *attribList,
|
|||
|
||||
GLXContext glXCreateNewContext(Display *dpy, GLXFBConfig config, int renderType, GLXContext shareList, Bool direct)
|
||||
{
|
||||
struct _glxapi_table *t = get_dispatch(dpy);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(dpy, t);
|
||||
if (!t)
|
||||
return 0;
|
||||
return (t->CreateNewContext)(dpy, config, renderType, shareList, direct);
|
||||
|
|
@ -380,7 +412,8 @@ GLXContext glXCreateNewContext(Display *dpy, GLXFBConfig config, int renderType,
|
|||
|
||||
GLXPbuffer glXCreatePbuffer(Display *dpy, GLXFBConfig config, const int *attribList)
|
||||
{
|
||||
struct _glxapi_table *t = get_dispatch(dpy);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(dpy, t);
|
||||
if (!t)
|
||||
return 0;
|
||||
return (t->CreatePbuffer)(dpy, config, attribList);
|
||||
|
|
@ -389,7 +422,8 @@ GLXPbuffer glXCreatePbuffer(Display *dpy, GLXFBConfig config, const int *attribL
|
|||
|
||||
GLXPixmap glXCreatePixmap(Display *dpy, GLXFBConfig config, Pixmap pixmap, const int *attribList)
|
||||
{
|
||||
struct _glxapi_table *t = get_dispatch(dpy);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(dpy, t);
|
||||
if (!t)
|
||||
return 0;
|
||||
return (t->CreatePixmap)(dpy, config, pixmap, attribList);
|
||||
|
|
@ -398,7 +432,8 @@ GLXPixmap glXCreatePixmap(Display *dpy, GLXFBConfig config, Pixmap pixmap, const
|
|||
|
||||
GLXWindow glXCreateWindow(Display *dpy, GLXFBConfig config, Window win, const int *attribList)
|
||||
{
|
||||
struct _glxapi_table *t = get_dispatch(dpy);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(dpy, t);
|
||||
if (!t)
|
||||
return 0;
|
||||
return (t->CreateWindow)(dpy, config, win, attribList);
|
||||
|
|
@ -407,7 +442,8 @@ GLXWindow glXCreateWindow(Display *dpy, GLXFBConfig config, Window win, const in
|
|||
|
||||
void glXDestroyPbuffer(Display *dpy, GLXPbuffer pbuf)
|
||||
{
|
||||
struct _glxapi_table *t = get_dispatch(dpy);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(dpy, t);
|
||||
if (!t)
|
||||
return;
|
||||
(t->DestroyPbuffer)(dpy, pbuf);
|
||||
|
|
@ -416,7 +452,8 @@ void glXDestroyPbuffer(Display *dpy, GLXPbuffer pbuf)
|
|||
|
||||
void glXDestroyPixmap(Display *dpy, GLXPixmap pixmap)
|
||||
{
|
||||
struct _glxapi_table *t = get_dispatch(dpy);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(dpy, t);
|
||||
if (!t)
|
||||
return;
|
||||
(t->DestroyPixmap)(dpy, pixmap);
|
||||
|
|
@ -425,7 +462,8 @@ void glXDestroyPixmap(Display *dpy, GLXPixmap pixmap)
|
|||
|
||||
void glXDestroyWindow(Display *dpy, GLXWindow window)
|
||||
{
|
||||
struct _glxapi_table *t = get_dispatch(dpy);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(dpy, t);
|
||||
if (!t)
|
||||
return;
|
||||
(t->DestroyWindow)(dpy, window);
|
||||
|
|
@ -440,7 +478,8 @@ GLXDrawable glXGetCurrentReadDrawable(void)
|
|||
|
||||
int glXGetFBConfigAttrib(Display *dpy, GLXFBConfig config, int attribute, int *value)
|
||||
{
|
||||
struct _glxapi_table *t = get_dispatch(dpy);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(dpy, t);
|
||||
if (!t)
|
||||
return GLX_NO_EXTENSION;
|
||||
return (t->GetFBConfigAttrib)(dpy, config, attribute, value);
|
||||
|
|
@ -449,7 +488,8 @@ int glXGetFBConfigAttrib(Display *dpy, GLXFBConfig config, int attribute, int *v
|
|||
|
||||
GLXFBConfig *glXGetFBConfigs(Display *dpy, int screen, int *nelements)
|
||||
{
|
||||
struct _glxapi_table *t = get_dispatch(dpy);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(dpy, t);
|
||||
if (!t)
|
||||
return 0;
|
||||
return (t->GetFBConfigs)(dpy, screen, nelements);
|
||||
|
|
@ -457,7 +497,8 @@ GLXFBConfig *glXGetFBConfigs(Display *dpy, int screen, int *nelements)
|
|||
|
||||
void glXGetSelectedEvent(Display *dpy, GLXDrawable drawable, unsigned long *mask)
|
||||
{
|
||||
struct _glxapi_table *t = get_dispatch(dpy);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(dpy, t);
|
||||
if (!t)
|
||||
return;
|
||||
(t->GetSelectedEvent)(dpy, drawable, mask);
|
||||
|
|
@ -466,7 +507,8 @@ void glXGetSelectedEvent(Display *dpy, GLXDrawable drawable, unsigned long *mask
|
|||
|
||||
XVisualInfo *glXGetVisualFromFBConfig(Display *dpy, GLXFBConfig config)
|
||||
{
|
||||
struct _glxapi_table *t = get_dispatch(dpy);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(dpy, t);
|
||||
if (!t)
|
||||
return NULL;
|
||||
return (t->GetVisualFromFBConfig)(dpy, config);
|
||||
|
|
@ -475,8 +517,9 @@ XVisualInfo *glXGetVisualFromFBConfig(Display *dpy, GLXFBConfig config)
|
|||
|
||||
Bool glXMakeContextCurrent(Display *dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx)
|
||||
{
|
||||
struct _glxapi_table *t = get_dispatch(dpy);
|
||||
Bool b;
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(dpy, t);
|
||||
if (!t)
|
||||
return False;
|
||||
b = (t->MakeContextCurrent)(dpy, draw, read, ctx);
|
||||
|
|
@ -492,7 +535,8 @@ Bool glXMakeContextCurrent(Display *dpy, GLXDrawable draw, GLXDrawable read, GLX
|
|||
|
||||
int glXQueryContext(Display *dpy, GLXContext ctx, int attribute, int *value)
|
||||
{
|
||||
struct _glxapi_table *t = get_dispatch(dpy);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(dpy, t);
|
||||
assert(t);
|
||||
if (!t)
|
||||
return 0; /* XXX correct? */
|
||||
|
|
@ -502,7 +546,8 @@ int glXQueryContext(Display *dpy, GLXContext ctx, int attribute, int *value)
|
|||
|
||||
void glXQueryDrawable(Display *dpy, GLXDrawable draw, int attribute, unsigned int *value)
|
||||
{
|
||||
struct _glxapi_table *t = get_dispatch(dpy);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(dpy, t);
|
||||
if (!t)
|
||||
return;
|
||||
(t->QueryDrawable)(dpy, draw, attribute, value);
|
||||
|
|
@ -511,7 +556,8 @@ void glXQueryDrawable(Display *dpy, GLXDrawable draw, int attribute, unsigned in
|
|||
|
||||
void glXSelectEvent(Display *dpy, GLXDrawable drawable, unsigned long mask)
|
||||
{
|
||||
struct _glxapi_table *t = get_dispatch(dpy);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(dpy, t);
|
||||
if (!t)
|
||||
return;
|
||||
(t->SelectEvent)(dpy, drawable, mask);
|
||||
|
|
@ -524,7 +570,8 @@ void glXSelectEvent(Display *dpy, GLXDrawable drawable, unsigned long mask)
|
|||
|
||||
int glXSwapIntervalSGI(int interval)
|
||||
{
|
||||
struct _glxapi_table *t = get_dispatch(CurrentDisplay);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(CurrentDisplay, t);
|
||||
if (!t)
|
||||
return 0;
|
||||
return (t->SwapIntervalSGI)(interval);
|
||||
|
|
@ -537,7 +584,8 @@ int glXSwapIntervalSGI(int interval)
|
|||
|
||||
int glXGetVideoSyncSGI(unsigned int *count)
|
||||
{
|
||||
struct _glxapi_table *t = get_dispatch(CurrentDisplay);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(CurrentDisplay, t);
|
||||
if (!t)
|
||||
return 0;
|
||||
return (t->GetVideoSyncSGI)(count);
|
||||
|
|
@ -545,7 +593,8 @@ int glXGetVideoSyncSGI(unsigned int *count)
|
|||
|
||||
int glXWaitVideoSyncSGI(int divisor, int remainder, unsigned int *count)
|
||||
{
|
||||
struct _glxapi_table *t = get_dispatch(CurrentDisplay);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(CurrentDisplay, t);
|
||||
if (!t)
|
||||
return 0;
|
||||
return (t->WaitVideoSyncSGI)(divisor, remainder, count);
|
||||
|
|
@ -558,7 +607,8 @@ int glXWaitVideoSyncSGI(int divisor, int remainder, unsigned int *count)
|
|||
|
||||
Bool glXMakeCurrentReadSGI(Display *dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx)
|
||||
{
|
||||
struct _glxapi_table *t = get_dispatch(dpy);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(dpy, t);
|
||||
if (!t)
|
||||
return 0;
|
||||
return (t->MakeCurrentReadSGI)(dpy, draw, read, ctx);
|
||||
|
|
@ -566,7 +616,8 @@ Bool glXMakeCurrentReadSGI(Display *dpy, GLXDrawable draw, GLXDrawable read, GLX
|
|||
|
||||
GLXDrawable glXGetCurrentReadDrawableSGI(void)
|
||||
{
|
||||
struct _glxapi_table *t = get_dispatch(CurrentDisplay);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(CurrentDisplay, t);
|
||||
if (!t)
|
||||
return 0;
|
||||
return (t->GetCurrentReadDrawableSGI)();
|
||||
|
|
@ -579,7 +630,8 @@ GLXDrawable glXGetCurrentReadDrawableSGI(void)
|
|||
|
||||
GLXVideoSourceSGIX glXCreateGLXVideoSourceSGIX(Display *dpy, int screen, VLServer server, VLPath path, int nodeClass, VLNode drainNode)
|
||||
{
|
||||
struct _glxapi_table *t = get_dispatch(dpy);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(dpy, t);
|
||||
if (!t)
|
||||
return 0;
|
||||
return (t->CreateGLXVideoSourceSGIX)(dpy, screen, server, path, nodeClass, drainNode);
|
||||
|
|
@ -587,7 +639,8 @@ GLXVideoSourceSGIX glXCreateGLXVideoSourceSGIX(Display *dpy, int screen, VLServe
|
|||
|
||||
void glXDestroyGLXVideoSourceSGIX(Display *dpy, GLXVideoSourceSGIX src)
|
||||
{
|
||||
struct _glxapi_table *t = get_dispatch(dpy);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(dpy, t);
|
||||
if (!t)
|
||||
return 0;
|
||||
return (t->DestroyGLXVideoSourceSGIX)(dpy, src);
|
||||
|
|
@ -600,7 +653,8 @@ void glXDestroyGLXVideoSourceSGIX(Display *dpy, GLXVideoSourceSGIX src)
|
|||
|
||||
void glXFreeContextEXT(Display *dpy, GLXContext context)
|
||||
{
|
||||
struct _glxapi_table *t = get_dispatch(dpy);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(dpy, t);
|
||||
if (!t)
|
||||
return;
|
||||
(t->FreeContextEXT)(dpy, context);
|
||||
|
|
@ -609,7 +663,8 @@ void glXFreeContextEXT(Display *dpy, GLXContext context)
|
|||
GLXContextID glXGetContextIDEXT(const GLXContext context)
|
||||
{
|
||||
/* XXX is this function right? */
|
||||
struct _glxapi_table *t = get_dispatch(CurrentDisplay);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(CurrentDisplay, t);
|
||||
if (!t)
|
||||
return 0;
|
||||
return (t->GetContextIDEXT)(context);
|
||||
|
|
@ -622,7 +677,8 @@ Display *glXGetCurrentDisplayEXT(void)
|
|||
|
||||
GLXContext glXImportContextEXT(Display *dpy, GLXContextID contextID)
|
||||
{
|
||||
struct _glxapi_table *t = get_dispatch(dpy);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(dpy, t);
|
||||
if (!t)
|
||||
return 0;
|
||||
return (t->ImportContextEXT)(dpy, contextID);
|
||||
|
|
@ -630,7 +686,8 @@ GLXContext glXImportContextEXT(Display *dpy, GLXContextID contextID)
|
|||
|
||||
int glXQueryContextInfoEXT(Display *dpy, GLXContext context, int attribute,int *value)
|
||||
{
|
||||
struct _glxapi_table *t = get_dispatch(dpy);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(dpy, t);
|
||||
if (!t)
|
||||
return 0; /* XXX ok? */
|
||||
return (t->QueryContextInfoEXT)(dpy, context, attribute, value);
|
||||
|
|
@ -643,7 +700,8 @@ int glXQueryContextInfoEXT(Display *dpy, GLXContext context, int attribute,int *
|
|||
|
||||
int glXGetFBConfigAttribSGIX(Display *dpy, GLXFBConfigSGIX config, int attribute, int *value)
|
||||
{
|
||||
struct _glxapi_table *t = get_dispatch(dpy);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(dpy, t);
|
||||
if (!t)
|
||||
return 0;
|
||||
return (t->GetFBConfigAttribSGIX)(dpy, config, attribute, value);
|
||||
|
|
@ -651,7 +709,8 @@ int glXGetFBConfigAttribSGIX(Display *dpy, GLXFBConfigSGIX config, int attribute
|
|||
|
||||
GLXFBConfigSGIX *glXChooseFBConfigSGIX(Display *dpy, int screen, int *attrib_list, int *nelements)
|
||||
{
|
||||
struct _glxapi_table *t = get_dispatch(dpy);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(dpy, t);
|
||||
if (!t)
|
||||
return 0;
|
||||
return (t->ChooseFBConfigSGIX)(dpy, screen, attrib_list, nelements);
|
||||
|
|
@ -659,7 +718,8 @@ GLXFBConfigSGIX *glXChooseFBConfigSGIX(Display *dpy, int screen, int *attrib_lis
|
|||
|
||||
GLXPixmap glXCreateGLXPixmapWithConfigSGIX(Display *dpy, GLXFBConfigSGIX config, Pixmap pixmap)
|
||||
{
|
||||
struct _glxapi_table *t = get_dispatch(dpy);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(dpy, t);
|
||||
if (!t)
|
||||
return 0;
|
||||
return (t->CreateGLXPixmapWithConfigSGIX)(dpy, config, pixmap);
|
||||
|
|
@ -667,7 +727,8 @@ GLXPixmap glXCreateGLXPixmapWithConfigSGIX(Display *dpy, GLXFBConfigSGIX config,
|
|||
|
||||
GLXContext glXCreateContextWithConfigSGIX(Display *dpy, GLXFBConfigSGIX config, int render_type, GLXContext share_list, Bool direct)
|
||||
{
|
||||
struct _glxapi_table *t = get_dispatch(dpy);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(dpy, t);
|
||||
if (!t)
|
||||
return 0;
|
||||
return (t->CreateContextWithConfigSGIX)(dpy, config, render_type, share_list, direct);
|
||||
|
|
@ -675,7 +736,8 @@ GLXContext glXCreateContextWithConfigSGIX(Display *dpy, GLXFBConfigSGIX config,
|
|||
|
||||
XVisualInfo * glXGetVisualFromFBConfigSGIX(Display *dpy, GLXFBConfigSGIX config)
|
||||
{
|
||||
struct _glxapi_table *t = get_dispatch(dpy);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(dpy, t);
|
||||
if (!t)
|
||||
return 0;
|
||||
return (t->GetVisualFromFBConfigSGIX)(dpy, config);
|
||||
|
|
@ -683,7 +745,8 @@ XVisualInfo * glXGetVisualFromFBConfigSGIX(Display *dpy, GLXFBConfigSGIX config)
|
|||
|
||||
GLXFBConfigSGIX glXGetFBConfigFromVisualSGIX(Display *dpy, XVisualInfo *vis)
|
||||
{
|
||||
struct _glxapi_table *t = get_dispatch(dpy);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(dpy, t);
|
||||
if (!t)
|
||||
return 0;
|
||||
return (t->GetFBConfigFromVisualSGIX)(dpy, vis);
|
||||
|
|
@ -696,7 +759,8 @@ GLXFBConfigSGIX glXGetFBConfigFromVisualSGIX(Display *dpy, XVisualInfo *vis)
|
|||
|
||||
GLXPbufferSGIX glXCreateGLXPbufferSGIX(Display *dpy, GLXFBConfigSGIX config, unsigned int width, unsigned int height, int *attrib_list)
|
||||
{
|
||||
struct _glxapi_table *t = get_dispatch(dpy);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(dpy, t);
|
||||
if (!t)
|
||||
return 0;
|
||||
return (t->CreateGLXPbufferSGIX)(dpy, config, width, height, attrib_list);
|
||||
|
|
@ -704,7 +768,8 @@ GLXPbufferSGIX glXCreateGLXPbufferSGIX(Display *dpy, GLXFBConfigSGIX config, uns
|
|||
|
||||
void glXDestroyGLXPbufferSGIX(Display *dpy, GLXPbufferSGIX pbuf)
|
||||
{
|
||||
struct _glxapi_table *t = get_dispatch(dpy);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(dpy, t);
|
||||
if (!t)
|
||||
return;
|
||||
(t->DestroyGLXPbufferSGIX)(dpy, pbuf);
|
||||
|
|
@ -712,7 +777,8 @@ void glXDestroyGLXPbufferSGIX(Display *dpy, GLXPbufferSGIX pbuf)
|
|||
|
||||
int glXQueryGLXPbufferSGIX(Display *dpy, GLXPbufferSGIX pbuf, int attribute, unsigned int *value)
|
||||
{
|
||||
struct _glxapi_table *t = get_dispatch(dpy);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(dpy, t);
|
||||
if (!t)
|
||||
return 0;
|
||||
return (t->QueryGLXPbufferSGIX)(dpy, pbuf, attribute, value);
|
||||
|
|
@ -720,7 +786,8 @@ int glXQueryGLXPbufferSGIX(Display *dpy, GLXPbufferSGIX pbuf, int attribute, uns
|
|||
|
||||
void glXSelectEventSGIX(Display *dpy, GLXDrawable drawable, unsigned long mask)
|
||||
{
|
||||
struct _glxapi_table *t = get_dispatch(dpy);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(dpy, t);
|
||||
if (!t)
|
||||
return;
|
||||
(t->SelectEventSGIX)(dpy, drawable, mask);
|
||||
|
|
@ -728,7 +795,8 @@ void glXSelectEventSGIX(Display *dpy, GLXDrawable drawable, unsigned long mask)
|
|||
|
||||
void glXGetSelectedEventSGIX(Display *dpy, GLXDrawable drawable, unsigned long *mask)
|
||||
{
|
||||
struct _glxapi_table *t = get_dispatch(dpy);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(dpy, t);
|
||||
if (!t)
|
||||
return;
|
||||
(t->GetSelectedEventSGIX)(dpy, drawable, mask);
|
||||
|
|
@ -741,7 +809,8 @@ void glXGetSelectedEventSGIX(Display *dpy, GLXDrawable drawable, unsigned long *
|
|||
|
||||
void glXCushionSGI(Display *dpy, Window win, float cushion)
|
||||
{
|
||||
struct _glxapi_table *t = get_dispatch(dpy);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(dpy, t);
|
||||
if (!t)
|
||||
return;
|
||||
(t->CushionSGI)(dpy, win, cushion);
|
||||
|
|
@ -754,7 +823,8 @@ void glXCushionSGI(Display *dpy, Window win, float cushion)
|
|||
|
||||
int glXBindChannelToWindowSGIX(Display *dpy, int screen, int channel , Window window)
|
||||
{
|
||||
struct _glxapi_table *t = get_dispatch(dpy);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(dpy, t);
|
||||
if (!t)
|
||||
return 0;
|
||||
return (t->BindChannelToWindowSGIX)(dpy, screen, channel, window);
|
||||
|
|
@ -762,7 +832,8 @@ int glXBindChannelToWindowSGIX(Display *dpy, int screen, int channel , Window wi
|
|||
|
||||
int glXChannelRectSGIX(Display *dpy, int screen, int channel, int x, int y, int w, int h)
|
||||
{
|
||||
struct _glxapi_table *t = get_dispatch(dpy);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(dpy, t);
|
||||
if (!t)
|
||||
return 0;
|
||||
return (t->ChannelRectSGIX)(dpy, screen, channel, x, y, w, h);
|
||||
|
|
@ -770,7 +841,8 @@ int glXChannelRectSGIX(Display *dpy, int screen, int channel, int x, int y, int
|
|||
|
||||
int glXQueryChannelRectSGIX(Display *dpy, int screen, int channel, int *x, int *y, int *w, int *h)
|
||||
{
|
||||
struct _glxapi_table *t = get_dispatch(dpy);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(dpy, t);
|
||||
if (!t)
|
||||
return 0;
|
||||
return (t->QueryChannelRectSGIX)(dpy, screen, channel, x, y, w, h);
|
||||
|
|
@ -778,7 +850,8 @@ int glXQueryChannelRectSGIX(Display *dpy, int screen, int channel, int *x, int *
|
|||
|
||||
int glXQueryChannelDeltasSGIX(Display *dpy, int screen, int channel, int *dx, int *dy, int *dw, int *dh)
|
||||
{
|
||||
struct _glxapi_table *t = get_dispatch(dpy);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(dpy, t);
|
||||
if (!t)
|
||||
return 0;
|
||||
return (t->QueryChannelDeltasSGIX)(dpy, screen, channel, dx, dy, dw, dh);
|
||||
|
|
@ -786,7 +859,8 @@ int glXQueryChannelDeltasSGIX(Display *dpy, int screen, int channel, int *dx, in
|
|||
|
||||
int glXChannelRectSyncSGIX(Display *dpy, int screen, int channel, GLenum synctype)
|
||||
{
|
||||
struct _glxapi_table *t = get_dispatch(dpy);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(dpy, t);
|
||||
if (!t)
|
||||
return 0;
|
||||
return (t->ChannelRectSyncSGIX)(dpy, screen, channel, synctype);
|
||||
|
|
@ -799,7 +873,8 @@ int glXChannelRectSyncSGIX(Display *dpy, int screen, int channel, GLenum synctyp
|
|||
|
||||
Bool glXAssociateDMPbufferSGIX(Display *dpy, GLXPbufferSGIX pbuffer, DMparams *params, DMbuffer dmbuffer)
|
||||
{
|
||||
struct _glxapi_table *t = get_dispatch(dpy);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(dpy, t);
|
||||
if (!t)
|
||||
return False;
|
||||
return (t->AssociateDMPbufferSGIX)(dpy, pbuffer, params, dmbuffer);
|
||||
|
|
@ -812,7 +887,8 @@ Bool glXAssociateDMPbufferSGIX(Display *dpy, GLXPbufferSGIX pbuffer, DMparams *p
|
|||
|
||||
void glXJoinSwapGroupSGIX(Display *dpy, GLXDrawable drawable, GLXDrawable member)
|
||||
{
|
||||
struct _glxapi_table *t = get_dispatch(dpy);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(dpy, t);
|
||||
if (!t)
|
||||
return;
|
||||
(*t->JoinSwapGroupSGIX)(dpy, drawable, member);
|
||||
|
|
@ -825,7 +901,8 @@ void glXJoinSwapGroupSGIX(Display *dpy, GLXDrawable drawable, GLXDrawable member
|
|||
|
||||
void glXBindSwapBarrierSGIX(Display *dpy, GLXDrawable drawable, int barrier)
|
||||
{
|
||||
struct _glxapi_table *t = get_dispatch(dpy);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(dpy, t);
|
||||
if (!t)
|
||||
return;
|
||||
(*t->BindSwapBarrierSGIX)(dpy, drawable, barrier);
|
||||
|
|
@ -833,7 +910,8 @@ void glXBindSwapBarrierSGIX(Display *dpy, GLXDrawable drawable, int barrier)
|
|||
|
||||
Bool glXQueryMaxSwapBarriersSGIX(Display *dpy, int screen, int *max)
|
||||
{
|
||||
struct _glxapi_table *t = get_dispatch(dpy);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(dpy, t);
|
||||
if (!t)
|
||||
return False;
|
||||
return (*t->QueryMaxSwapBarriersSGIX)(dpy, screen, max);
|
||||
|
|
@ -846,7 +924,8 @@ Bool glXQueryMaxSwapBarriersSGIX(Display *dpy, int screen, int *max)
|
|||
|
||||
Status glXGetTransparentIndexSUN(Display *dpy, Window overlay, Window underlay, long *pTransparent)
|
||||
{
|
||||
struct _glxapi_table *t = get_dispatch(dpy);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(dpy, t);
|
||||
if (!t)
|
||||
return False;
|
||||
return (*t->GetTransparentIndexSUN)(dpy, overlay, underlay, pTransparent);
|
||||
|
|
@ -859,7 +938,8 @@ Status glXGetTransparentIndexSUN(Display *dpy, Window overlay, Window underlay,
|
|||
|
||||
void glXCopySubBufferMESA(Display *dpy, GLXDrawable drawable, int x, int y, int width, int height)
|
||||
{
|
||||
struct _glxapi_table *t = get_dispatch(dpy);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(dpy, t);
|
||||
if (!t)
|
||||
return;
|
||||
(t->CopySubBufferMESA)(dpy, drawable, x, y, width, height);
|
||||
|
|
@ -872,7 +952,8 @@ void glXCopySubBufferMESA(Display *dpy, GLXDrawable drawable, int x, int y, int
|
|||
|
||||
Bool glXReleaseBuffersMESA(Display *dpy, Window w)
|
||||
{
|
||||
struct _glxapi_table *t = get_dispatch(dpy);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(dpy, t);
|
||||
if (!t)
|
||||
return False;
|
||||
return (t->ReleaseBuffersMESA)(dpy, w);
|
||||
|
|
@ -885,7 +966,8 @@ Bool glXReleaseBuffersMESA(Display *dpy, Window w)
|
|||
|
||||
GLXPixmap glXCreateGLXPixmapMESA(Display *dpy, XVisualInfo *visinfo, Pixmap pixmap, Colormap cmap)
|
||||
{
|
||||
struct _glxapi_table *t = get_dispatch(dpy);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(dpy, t);
|
||||
if (!t)
|
||||
return 0;
|
||||
return (t->CreateGLXPixmapMESA)(dpy, visinfo, pixmap, cmap);
|
||||
|
|
@ -898,7 +980,8 @@ GLXPixmap glXCreateGLXPixmapMESA(Display *dpy, XVisualInfo *visinfo, Pixmap pixm
|
|||
|
||||
Bool glXSet3DfxModeMESA(int mode)
|
||||
{
|
||||
struct _glxapi_table *t = get_dispatch(CurrentDisplay);
|
||||
struct _glxapi_table *t;
|
||||
GET_DISPATCH(CurrentDisplay, t);
|
||||
if (!t)
|
||||
return False;
|
||||
return (t->Set3DfxModeMESA)(mode);
|
||||
|
|
@ -983,6 +1066,155 @@ _glxapi_set_no_op_table(struct _glxapi_table *t)
|
|||
}
|
||||
|
||||
|
||||
#if 00
|
||||
/*
|
||||
* Open the named library and use dlsym() to populate the given dispatch
|
||||
* table with GLX function pointers.
|
||||
* Return: true = all OK
|
||||
* false = can't open libName or can't get required GLX function
|
||||
*/
|
||||
GLboolean
|
||||
_glxapi_load_library_table(const char *libName, struct _glxapi_table *t)
|
||||
{
|
||||
void *libHandle;
|
||||
void **entry; /* used to avoid a lot of cast/type warnings */
|
||||
|
||||
libHandle = dlopen(libName, 0);
|
||||
if (!libHandle) {
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
#define GET_REQ_FUNCTION(ENTRY, NAME) \
|
||||
entry = (void **) &(t->ENTRY); \
|
||||
*entry = dlsym(libHandle, NAME); \
|
||||
if (!*entry) { \
|
||||
fprintf(stderr, "libGL Error: couldn't load %s from %s\n", \
|
||||
NAME, libName); \
|
||||
dlclose(libHandle); \
|
||||
return GL_FALSE; \
|
||||
}
|
||||
|
||||
/* 1.0 and 1.1 functions */
|
||||
GET_REQ_FUNCTION(ChooseVisual, "glXChooseVisual");
|
||||
GET_REQ_FUNCTION(CopyContext, "glXCopyContext");
|
||||
GET_REQ_FUNCTION(CreateContext, "glXCreateContext");
|
||||
GET_REQ_FUNCTION(CreateGLXPixmap, "glXCreateGLXPixmap");
|
||||
GET_REQ_FUNCTION(DestroyContext, "glXDestroyContext");
|
||||
GET_REQ_FUNCTION(GetConfig, "glXGetConfig");
|
||||
GET_REQ_FUNCTION(IsDirect, "glXIsDirect");
|
||||
GET_REQ_FUNCTION(MakeCurrent, "glXMakeCurrent");
|
||||
GET_REQ_FUNCTION(QueryExtension, "glXQueryExtension");
|
||||
GET_REQ_FUNCTION(QueryVersion, "glXQueryVersion");
|
||||
GET_REQ_FUNCTION(SwapBuffers, "glXSwapBuffers");
|
||||
GET_REQ_FUNCTION(UseXFont, "glXUseXFont");
|
||||
GET_REQ_FUNCTION(WaitGL, "glXWaitGL");
|
||||
GET_REQ_FUNCTION(WaitX, "glXWaitX");
|
||||
GET_REQ_FUNCTION(GetClientString, "glXGetClientString");
|
||||
GET_REQ_FUNCTION(QueryExtensionsString, "glXQueryExtensionsString");
|
||||
GET_REQ_FUNCTION(QueryServerString, "glXQueryServerString");
|
||||
|
||||
#define GET_OPT_FUNCTION(ENTRY, NAME) \
|
||||
entry = (void **) &(t->ENTRY); \
|
||||
*entry = dlsym(libHandle, NAME); \
|
||||
if (!*entry) { \
|
||||
*entry = (void *) generic_no_op_func; \
|
||||
}
|
||||
|
||||
/* 1.2, 1.3 and extensions */
|
||||
GET_OPT_FUNCTION(ChooseFBConfig, "glXChooseFBConfig");
|
||||
GET_OPT_FUNCTION(CreateNewContext, "glXCreateNewContext");
|
||||
GET_OPT_FUNCTION(CreatePbuffer, "glXCreatePbuffer");
|
||||
GET_OPT_FUNCTION(CreatePixmap, "glXCreatePixmap");
|
||||
GET_OPT_FUNCTION(CreateWindow, "glXCreateWindow");
|
||||
GET_OPT_FUNCTION(DestroyPbuffer, "glXDestroyPbuffer");
|
||||
GET_OPT_FUNCTION(DestroyPixmap, "glXDestroyPixmap");
|
||||
GET_OPT_FUNCTION(DestroyWindow, "glXDestroyWindow");
|
||||
GET_OPT_FUNCTION(GetFBConfigAttrib, "glXGetFBConfigAttrib");
|
||||
GET_OPT_FUNCTION(GetFBConfigs, "glXGetFBConfigs");
|
||||
GET_OPT_FUNCTION(GetSelectedEvent, "glXGetSelectedEvent");
|
||||
GET_OPT_FUNCTION(GetVisualFromFBConfig, "glXGetVisualFromFBConfig");
|
||||
GET_OPT_FUNCTION(MakeContextCurrent, "glXMakeContextCurrent");
|
||||
GET_OPT_FUNCTION(QueryContext, "glXQueryContext");
|
||||
GET_OPT_FUNCTION(QueryDrawable, "glXQueryDrawable");
|
||||
GET_OPT_FUNCTION(SelectEvent, "glXSelectEvent");
|
||||
#ifdef GLX_SGI_swap_control
|
||||
GET_OPT_FUNCTION(SwapIntervalSGI, "glXSwapIntervalSGI");
|
||||
#endif
|
||||
#ifdef GLX_SGI_video_sync
|
||||
GET_OPT_FUNCTION(GetVideoSyncSGI, "glXGetVideoSyncSGI");
|
||||
GET_OPT_FUNCTION(WaitVideoSyncSGI, "glXWaitVideoSyncSGI");
|
||||
#endif
|
||||
#ifdef GLX_SGI_make_current_read
|
||||
GET_OPT_FUNCTION(MakeCurrentReadSGI, "glXMakeCurrentReadSGI");
|
||||
GET_OPT_FUNCTION(GetCurrentReadDrawableSGI, "glXGetCurrentReadDrawableSGI");
|
||||
#endif
|
||||
#if defined(_VL_H) && defined(GLX_SGIX_video_source)
|
||||
GET_OPT_FUNCTION(CreateGLXVideoSourceSGIX, "glXCreateGLXVideoSourceSGIX");
|
||||
GET_OPT_FUNCTION(DestroyGLXVideoSourceSGIX, "glXDestroyGLXVideoSourceSGIX");
|
||||
#endif
|
||||
#ifdef GLX_EXT_import_context
|
||||
GET_OPT_FUNCTION(FreeContextEXT, "glXFreeContextEXT");
|
||||
GET_OPT_FUNCTION(GetContextIDEXT, "glXGetContextIDEXT");
|
||||
GET_OPT_FUNCTION(GetCurrentDisplayEXT, "glXGetCurrentDisplayEXT");
|
||||
GET_OPT_FUNCTION(ImportContextEXT, "glXImportContextEXT");
|
||||
GET_OPT_FUNCTION(QueryContextInfoEXT, "glXQueryContextInfoEXT");
|
||||
#endif
|
||||
#ifdef GLX_SGIX_fbconfig
|
||||
GET_OPT_FUNCTION(GetFBConfigAttribSGIX, "glXGetFBConfigAttribSGIX");
|
||||
GET_OPT_FUNCTION(ChooseFBConfigSGIX, "glXChooseFBConfigSGIX");
|
||||
GET_OPT_FUNCTION(CreateGLXPixmapWithConfigSGIX, "glXCreateGLXPixmapWithConfigSGIX");
|
||||
GET_OPT_FUNCTION(CreateContextWithConfigSGIX, "glXCreateContextWithConfigSGIX");
|
||||
GET_OPT_FUNCTION(GetVisualFromFBConfigSGIX, "glXGetVisualFromFBConfigSGIX");
|
||||
GET_OPT_FUNCTION(GetFBConfigFromVisualSGIX, "glXGetFBConfigFromVisualSGIX");
|
||||
#endif
|
||||
#ifdef GLX_SGIX_pbuffer
|
||||
GET_OPT_FUNCTION(CreateGLXPbufferSGIX, "glXCreateGLXPbufferSGIX");
|
||||
GET_OPT_FUNCTION(DestroyGLXPbufferSGIX, "glXDestroyGLXPbufferSGIX");
|
||||
GET_OPT_FUNCTION(QueryGLXPbufferSGIX, "glXQueryGLXPbufferSGIX");
|
||||
GET_OPT_FUNCTION(SelectEventSGIX, "glXSelectEventSGIX");
|
||||
GET_OPT_FUNCTION(GetSelectedEventSGIX, "glXGetSelectedEventSGIX");
|
||||
#endif
|
||||
#ifdef GLX_SGI_cushion
|
||||
GET_OPT_FUNCTION(CushionSGI, "glXCushionSGI");
|
||||
#endif
|
||||
#ifdef GLX_SGIX_video_resize
|
||||
GET_OPT_FUNCTION(BindChannelToWindowSGIX, "glXBindChannelToWindowSGIX");
|
||||
GET_OPT_FUNCTION(ChannelRectSGIX, "glXChannelRectSGIX");
|
||||
GET_OPT_FUNCTION(QueryChannelRectSGIX, "glXQueryChannelRectSGIX");
|
||||
GET_OPT_FUNCTION(QueryChannelDeltasSGIX, "glXQueryChannelDeltasSGIX");
|
||||
GET_OPT_FUNCTION(ChannelRectSyncSGIX, "glXChannelRectSyncSGIX");
|
||||
#endif
|
||||
#if defined (_DM_BUFFER_H_) && defined(GLX_SGIX_dmbuffer)
|
||||
GET_OPT_FUNCTION(AssociateDMPbufferSGIX, "glXAssociateDMPbufferSGIX");
|
||||
#endif
|
||||
#ifdef GLX_SGIX_swap_group
|
||||
GET_OPT_FUNCTION(JoinSwapGroupSGIX, "glXJoinSwapGroupSGIX");
|
||||
#endif
|
||||
#ifdef GLX_SGIX_swap_barrier
|
||||
GET_OPT_FUNCTION(BindSwapBarrierSGIX, "glXBindSwapBarrierSGIX");
|
||||
GET_OPT_FUNCTION(QueryMaxSwapBarriersSGIX, "glXQueryMaxSwapBarriersSGIX");
|
||||
#endif
|
||||
#ifdef GLX_SUN_get_transparent_index
|
||||
GET_OPT_FUNCTION(GetTransparentIndexSUN, "glXGetTransparentIndexSUN");
|
||||
#endif
|
||||
#ifdef GLX_MESA_copy_sub_buffer
|
||||
GET_OPT_FUNCTION(CopySubBufferMESA, "glXCopySubBufferMESA");
|
||||
#endif
|
||||
#ifdef GLX_MESA_release_buffers
|
||||
GET_OPT_FUNCTION(ReleaseBuffersMESA, "glXReleaseBuffersMESA");
|
||||
#endif
|
||||
#ifdef GLX_MESA_pixmap_colormap
|
||||
GET_OPT_FUNCTION(CreateGLXPixmapMESA, "glXCreateGLXPixmapMESA");
|
||||
#endif
|
||||
#ifdef GLX_MESA_set_3dfx_mode
|
||||
GET_OPT_FUNCTION(Set3DfxModeMESA, "glXSet3DfxModeMESA");
|
||||
#endif
|
||||
|
||||
return GL_TRUE;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
struct name_address_pair {
|
||||
const char *Name;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue