Adjustments to better support GLX1.3 and ATI drivers.
This commit is contained in:
@@ -82,6 +82,18 @@ static wglDestroyPbufferARBProc wglDestroyPbufferARBPtr = 0;
|
|||||||
/* WGL_ARB_render_texture */
|
/* WGL_ARB_render_texture */
|
||||||
static wglBindTexImageARBProc wglBindTexImageARBPtr = 0;
|
static wglBindTexImageARBProc wglBindTexImageARBPtr = 0;
|
||||||
static wglReleaseTexImageARBProc wglReleaseTexImageARBPtr = 0;
|
static wglReleaseTexImageARBProc wglReleaseTexImageARBPtr = 0;
|
||||||
|
|
||||||
|
#elif defined( __APPLE__ )
|
||||||
|
#else /* !_WIN32 */
|
||||||
|
static bool glXVersion1_3Present = false;
|
||||||
|
static glXChooseFBConfigProc glXChooseFBConfigPtr = 0;
|
||||||
|
static glXCreateGLXPbufferProc glXCreateGLXPbufferPtr = 0;
|
||||||
|
static glXGetVisualFromFBConfigProc glXGetVisualFromFBConfigPtr = 0;
|
||||||
|
static glXCreateContextWithConfigProc glXCreateContextWithConfigPtr = 0;
|
||||||
|
static glXCreateContextProc glXCreateContextPtr = 0;
|
||||||
|
static glXDestroyPbufferProc glXDestroyPbufferPtr = 0;
|
||||||
|
static glXQueryDrawableProc glXQueryDrawablePtr = 0;
|
||||||
|
static glXQueryGLXPbufferSGIXProc glXQueryGLXPbufferSGIXPtr = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
@@ -449,14 +461,10 @@ bool RenderTexture::Initialize(int width, int height,
|
|||||||
int screen = DefaultScreen(_pDisplay);
|
int screen = DefaultScreen(_pDisplay);
|
||||||
XVisualInfo *visInfo;
|
XVisualInfo *visInfo;
|
||||||
|
|
||||||
int iFormat = 0;
|
GLXFBConfig *fbConfigs;
|
||||||
int iNumFormats;
|
|
||||||
int attrib = 0;
|
|
||||||
|
|
||||||
GLXFBConfigSGIX *fbConfigs;
|
|
||||||
int nConfigs;
|
int nConfigs;
|
||||||
|
|
||||||
fbConfigs = glXChooseFBConfigSGIX(_pDisplay, screen,
|
fbConfigs = glXChooseFBConfigPtr(_pDisplay, screen,
|
||||||
&_pixelFormatAttribs[0], &nConfigs);
|
&_pixelFormatAttribs[0], &nConfigs);
|
||||||
|
|
||||||
if (nConfigs == 0 || !fbConfigs)
|
if (nConfigs == 0 || !fbConfigs)
|
||||||
@@ -467,25 +475,55 @@ bool RenderTexture::Initialize(int width, int height,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Pick the first returned format that will return a pbuffer
|
// Pick the first returned format that will return a pbuffer
|
||||||
for (int i=0;i<nConfigs;i++)
|
if (glXVersion1_3Present)
|
||||||
{
|
{
|
||||||
_hPBuffer = glXCreateGLXPbufferSGIX(_pDisplay, fbConfigs[i],
|
int pbufAttrib[] = {
|
||||||
_iWidth, _iHeight, NULL);
|
GLX_PBUFFER_WIDTH, _iWidth,
|
||||||
if (_hPBuffer)
|
GLX_PBUFFER_HEIGHT, _iHeight,
|
||||||
|
GLX_LARGEST_PBUFFER, False,
|
||||||
|
None
|
||||||
|
};
|
||||||
|
for (int i=0;i<nConfigs;i++)
|
||||||
{
|
{
|
||||||
_hGLContext = glXCreateContextWithConfigSGIX(_pDisplay,
|
_hPBuffer = glXCreatePbuffer(_pDisplay, fbConfigs[i], pbufAttrib);
|
||||||
fbConfigs[i],
|
if (_hPBuffer)
|
||||||
GLX_RGBA_TYPE,
|
{
|
||||||
_bShareObjects ? context : NULL,
|
XVisualInfo *visInfo = glXGetVisualFromFBConfig(_pDisplay, fbConfigs[i]);
|
||||||
True);
|
|
||||||
break;
|
_hGLContext = glXCreateContext(_pDisplay, visInfo,
|
||||||
|
_bShareObjects ? context : NULL,
|
||||||
|
True);
|
||||||
|
XFree( visInfo );
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int iFormat = 0;
|
||||||
|
int iNumFormats;
|
||||||
|
int attrib = 0;
|
||||||
|
for (int i=0;i<nConfigs;i++)
|
||||||
|
{
|
||||||
|
_hPBuffer = glXCreateGLXPbufferPtr(_pDisplay, fbConfigs[i],
|
||||||
|
_iWidth, _iHeight, NULL);
|
||||||
|
if (_hPBuffer)
|
||||||
|
{
|
||||||
|
_hGLContext = glXCreateContextWithConfigPtr(_pDisplay,
|
||||||
|
fbConfigs[i],
|
||||||
|
GLX_RGBA_TYPE,
|
||||||
|
_bShareObjects ? context : NULL,
|
||||||
|
True);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
XFree( fbConfigs );
|
||||||
|
|
||||||
if (!_hPBuffer)
|
if (!_hPBuffer)
|
||||||
{
|
{
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"RenderTexture Error: glXCreateGLXPbufferSGIX() failed.\n");
|
"RenderTexture Error: glXCreateGLXPbufferPtr() failed.\n");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -502,10 +540,13 @@ bool RenderTexture::Initialize(int width, int height,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
glXQueryGLXPbufferSGIX(_pDisplay, _hPBuffer, GLX_WIDTH_SGIX,
|
if (!glXVersion1_3Present)
|
||||||
(GLuint*)&_iWidth);
|
{
|
||||||
glXQueryGLXPbufferSGIX(_pDisplay, _hPBuffer, GLX_HEIGHT_SGIX,
|
glXQueryGLXPbufferSGIXPtr(_pDisplay, _hPBuffer, GLX_WIDTH_SGIX,
|
||||||
(GLuint*)&_iHeight);
|
(GLuint*)&_iWidth);
|
||||||
|
glXQueryGLXPbufferSGIXPtr(_pDisplay, _hPBuffer, GLX_HEIGHT_SGIX,
|
||||||
|
(GLuint*)&_iHeight);
|
||||||
|
}
|
||||||
|
|
||||||
_bInitialized = true;
|
_bInitialized = true;
|
||||||
|
|
||||||
@@ -556,6 +597,12 @@ bool RenderTexture::Initialize(int width, int height,
|
|||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
if (glXVersion1_3Present)
|
||||||
|
{
|
||||||
|
GLXDrawable draw = glXGetCurrentDrawable();
|
||||||
|
glXQueryDrawablePtr(_pDisplay, draw, GLX_WIDTH, (unsigned int*)&_iWidth);
|
||||||
|
glXQueryDrawablePtr(_pDisplay, draw, GLX_HEIGHT, (unsigned int*)&_iHeight);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
@@ -579,13 +626,13 @@ bool RenderTexture::_Invalidate()
|
|||||||
_iNumStencilBits = 0;
|
_iNumStencilBits = 0;
|
||||||
|
|
||||||
if (_bIsTexture)
|
if (_bIsTexture)
|
||||||
glDeleteTextures(1, (const GLuint*)&_iTextureID);
|
glDeleteTextures(1, &_iTextureID);
|
||||||
if (_bIsDepthTexture)
|
if (_bIsDepthTexture)
|
||||||
{
|
{
|
||||||
// [Redge]
|
// [Redge]
|
||||||
if (!_bHasARBDepthTexture) delete[] _pPoorDepthTexture;
|
if (!_bHasARBDepthTexture) delete[] _pPoorDepthTexture;
|
||||||
// [/Redge]
|
// [/Redge]
|
||||||
glDeleteTextures(1, (const GLuint*)&_iDepthTextureID);
|
glDeleteTextures(1, &_iDepthTextureID);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
@@ -608,7 +655,7 @@ bool RenderTexture::_Invalidate()
|
|||||||
if(glXGetCurrentContext() == _hGLContext)
|
if(glXGetCurrentContext() == _hGLContext)
|
||||||
// XXX I don't know if this is right at all
|
// XXX I don't know if this is right at all
|
||||||
glXMakeCurrent(_pDisplay, _hPBuffer, 0);
|
glXMakeCurrent(_pDisplay, _hPBuffer, 0);
|
||||||
glXDestroyGLXPbufferSGIX(_pDisplay, _hPBuffer);
|
glXDestroyPbufferPtr(_pDisplay, _hPBuffer);
|
||||||
_hPBuffer = 0;
|
_hPBuffer = 0;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -726,9 +773,9 @@ bool RenderTexture::Resize(int iWidth, int iHeight)
|
|||||||
|
|
||||||
// Do same basic work as _Invalidate, but don't reset all our flags
|
// Do same basic work as _Invalidate, but don't reset all our flags
|
||||||
if (_bIsTexture)
|
if (_bIsTexture)
|
||||||
glDeleteTextures(1, (const GLuint*)&_iTextureID);
|
glDeleteTextures(1, &_iTextureID);
|
||||||
if (_bIsDepthTexture)
|
if (_bIsDepthTexture)
|
||||||
glDeleteTextures(1, (const GLuint*)&_iDepthTextureID);
|
glDeleteTextures(1, &_iDepthTextureID);
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
if ( _hPBuffer )
|
if ( _hPBuffer )
|
||||||
{
|
{
|
||||||
@@ -749,7 +796,7 @@ bool RenderTexture::Resize(int iWidth, int iHeight)
|
|||||||
if(glXGetCurrentContext() == _hGLContext)
|
if(glXGetCurrentContext() == _hGLContext)
|
||||||
// XXX I don't know if this is right at all
|
// XXX I don't know if this is right at all
|
||||||
glXMakeCurrent(_pDisplay, _hPBuffer, 0);
|
glXMakeCurrent(_pDisplay, _hPBuffer, 0);
|
||||||
glXDestroyGLXPbufferSGIX(_pDisplay, _hPBuffer);
|
glXDestroyPbufferPtr(_pDisplay, _hPBuffer);
|
||||||
_hPBuffer = 0;
|
_hPBuffer = 0;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@@ -1255,9 +1302,9 @@ void RenderTexture::_ParseModeString(const char *modeString,
|
|||||||
pfAttribs.push_back(AGL_SAMPLES_ARB);
|
pfAttribs.push_back(AGL_SAMPLES_ARB);
|
||||||
pfAttribs.push_back(strtol(kv.second.c_str(), 0, 10));
|
pfAttribs.push_back(strtol(kv.second.c_str(), 0, 10));
|
||||||
#else
|
#else
|
||||||
pfAttribs.push_back(GL_SAMPLE_BUFFERS_ARB);
|
pfAttribs.push_back(GLX_SAMPLE_BUFFERS_ARB);
|
||||||
pfAttribs.push_back(1);
|
pfAttribs.push_back(1);
|
||||||
pfAttribs.push_back(GL_SAMPLES_ARB);
|
pfAttribs.push_back(GLX_SAMPLES_ARB);
|
||||||
pfAttribs.push_back(strtol(kv.second.c_str(), 0, 10));
|
pfAttribs.push_back(strtol(kv.second.c_str(), 0, 10));
|
||||||
#endif
|
#endif
|
||||||
continue;
|
continue;
|
||||||
@@ -1273,7 +1320,7 @@ void RenderTexture::_ParseModeString(const char *modeString,
|
|||||||
pfAttribs.push_back(AGL_DOUBLEBUFFER);
|
pfAttribs.push_back(AGL_DOUBLEBUFFER);
|
||||||
pfAttribs.push_back(True);
|
pfAttribs.push_back(True);
|
||||||
#else
|
#else
|
||||||
pfAttribs.push_back(GL_DOUBLEBUFFER);
|
pfAttribs.push_back(GLX_DOUBLEBUFFER);
|
||||||
pfAttribs.push_back(True);
|
pfAttribs.push_back(True);
|
||||||
#endif
|
#endif
|
||||||
continue;
|
continue;
|
||||||
@@ -1286,7 +1333,7 @@ void RenderTexture::_ParseModeString(const char *modeString,
|
|||||||
#elif defined( __APPLE__ )
|
#elif defined( __APPLE__ )
|
||||||
pfAttribs.push_back(AGL_AUX_BUFFERS);
|
pfAttribs.push_back(AGL_AUX_BUFFERS);
|
||||||
#else
|
#else
|
||||||
pfAttribs.push_back(GL_AUX_BUFFERS);
|
pfAttribs.push_back(GLX_AUX_BUFFERS);
|
||||||
#endif
|
#endif
|
||||||
if (kv.second == "")
|
if (kv.second == "")
|
||||||
pfAttribs.push_back(0);
|
pfAttribs.push_back(0);
|
||||||
@@ -1485,7 +1532,7 @@ void RenderTexture::_ParseModeString(const char *modeString,
|
|||||||
}
|
}
|
||||||
#elif defined( __APPLE__ )
|
#elif defined( __APPLE__ )
|
||||||
#else
|
#else
|
||||||
if (GL_NV_float_buffer)
|
if (GLX_NV_float_buffer)
|
||||||
{
|
{
|
||||||
pfAttribs.push_back(GLX_FLOAT_COMPONENTS_NV);
|
pfAttribs.push_back(GLX_FLOAT_COMPONENTS_NV);
|
||||||
pfAttribs.push_back(1);
|
pfAttribs.push_back(1);
|
||||||
@@ -1773,29 +1820,72 @@ bool RenderTexture::_VerifyExtensions()
|
|||||||
}
|
}
|
||||||
#elif defined( __APPLE__ )
|
#elif defined( __APPLE__ )
|
||||||
#else
|
#else
|
||||||
if (!GLX_SGIX_pbuffer)
|
|
||||||
{
|
int minor, major;
|
||||||
PrintExtensionError("GL_SGIX_pbuffer");
|
_pDisplay = glXGetCurrentDisplay();
|
||||||
|
if (!glXQueryVersion(_pDisplay, &major, &minor))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
glXVersion1_3Present = major >= 1 && minor >= 3;
|
||||||
|
if (glXVersion1_3Present)
|
||||||
|
{
|
||||||
|
glXChooseFBConfigPtr = (glXChooseFBConfigProc)SGLookupFunction("glXChooseFBConfig");
|
||||||
|
glXCreateGLXPbufferPtr = (glXCreateGLXPbufferProc)SGLookupFunction("glXCreatePbuffer");
|
||||||
|
glXGetVisualFromFBConfigPtr = (glXGetVisualFromFBConfigProc)SGLookupFunction("glXGetVisualFromFBConfig");
|
||||||
|
glXCreateContextPtr = (glXCreateContextProc)SGLookupFunction("glXCreateContext");
|
||||||
|
glXDestroyPbufferPtr = (glXDestroyPbufferProc)SGLookupFunction("glXDestroyPbuffer");
|
||||||
|
glXQueryDrawablePtr = (glXQueryDrawableProc)SGLookupFunction("glXQueryDrawable");
|
||||||
|
|
||||||
|
if (!glXChooseFBConfigPtr ||
|
||||||
|
!glXCreateGLXPbufferPtr ||
|
||||||
|
!glXGetVisualFromFBConfigPtr ||
|
||||||
|
!glXCreateContextPtr ||
|
||||||
|
!glXDestroyPbufferPtr ||
|
||||||
|
!glXQueryDrawablePtr)
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
if (!GLX_SGIX_fbconfig)
|
else
|
||||||
{
|
{
|
||||||
PrintExtensionError("GL_SGIX_fbconfig");
|
glXChooseFBConfigPtr = (glXChooseFBConfigProc)SGLookupFunction("glXChooseFBConfigSGIX");
|
||||||
return false;
|
glXCreateGLXPbufferPtr = (glXCreateGLXPbufferProc)SGLookupFunction("glXCreateGLXPbufferSGIX");
|
||||||
|
glXGetVisualFromFBConfigPtr = (glXGetVisualFromFBConfigProc)SGLookupFunction("glXGetVisualFromFBConfigSGIX");
|
||||||
|
glXCreateContextWithConfigPtr = (glXCreateContextWithConfigProc)SGLookupFunction("glXCreateContextWithConfigSGIX");
|
||||||
|
glXDestroyPbufferPtr = (glXDestroyPbufferProc)SGLookupFunction("glXDestroyGLXPbufferSGIX");
|
||||||
|
glXQueryGLXPbufferSGIXPtr = (glXQueryGLXPbufferSGIXProc)SGLookupFunction("glXQueryGLXPbufferSGIX");
|
||||||
|
|
||||||
|
|
||||||
|
if (!glXChooseFBConfigPtr ||
|
||||||
|
!glXCreateGLXPbufferPtr ||
|
||||||
|
!glXGetVisualFromFBConfigPtr ||
|
||||||
|
!glXCreateContextWithConfigPtr ||
|
||||||
|
!glXDestroyPbufferPtr ||
|
||||||
|
!glXQueryGLXPbufferSGIXPtr)
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// if (!GLX_SGIX_pbuffer)
|
||||||
|
// {
|
||||||
|
// PrintExtensionError("GL_SGIX_pbuffer");
|
||||||
|
// return false;
|
||||||
|
// }
|
||||||
|
// if (!GLX_SGIX_fbconfig)
|
||||||
|
// {
|
||||||
|
// PrintExtensionError("GLX_SGIX_fbconfig");
|
||||||
|
// return false;
|
||||||
|
// }
|
||||||
if (_bIsDepthTexture && !GL_ARB_depth_texture)
|
if (_bIsDepthTexture && !GL_ARB_depth_texture)
|
||||||
{
|
{
|
||||||
PrintExtensionError("GL_ARB_depth_texture");
|
PrintExtensionError("GL_ARB_depth_texture");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (_bFloat && _bIsTexture && !GL_NV_float_buffer)
|
if (_bFloat && _bIsTexture && !GLX_NV_float_buffer)
|
||||||
{
|
{
|
||||||
PrintExtensionError("GL_NV_float_buffer");
|
PrintExtensionError("GLX_NV_float_buffer");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (_eUpdateMode == RT_RENDER_TO_TEXTURE)
|
if (_eUpdateMode == RT_RENDER_TO_TEXTURE)
|
||||||
{
|
{
|
||||||
PrintExtensionError("Some GLX render texture extension: FIXME!");
|
PrintExtensionError("Some GLX render texture extension: Please implement me!");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -359,8 +359,8 @@ protected: // data
|
|||||||
|
|
||||||
// Texture stuff
|
// Texture stuff
|
||||||
GLenum _iTextureTarget;
|
GLenum _iTextureTarget;
|
||||||
unsigned int _iTextureID;
|
GLuint _iTextureID;
|
||||||
unsigned int _iDepthTextureID;
|
GLuint _iDepthTextureID;
|
||||||
|
|
||||||
unsigned short* _pPoorDepthTexture; // [Redge]
|
unsigned short* _pPoorDepthTexture; // [Redge]
|
||||||
|
|
||||||
|
|||||||
@@ -110,6 +110,9 @@ void *SGGetGLProcAddress(const char *func) {
|
|||||||
if (libHandle == NULL)
|
if (libHandle == NULL)
|
||||||
libHandle = dlopen("libGL.so", RTLD_LAZY);
|
libHandle = dlopen("libGL.so", RTLD_LAZY);
|
||||||
|
|
||||||
|
if (libHandle == NULL)
|
||||||
|
libHandle = dlopen("libGL.so.1", RTLD_LAZY);
|
||||||
|
|
||||||
if (libHandle != NULL) {
|
if (libHandle != NULL) {
|
||||||
fptr = dlsym(libHandle, func);
|
fptr = dlsym(libHandle, func);
|
||||||
|
|
||||||
|
|||||||
@@ -261,9 +261,10 @@ typedef void (APIENTRY * glClientActiveTextureProc)(GLenum texture);
|
|||||||
#define GL_SAMPLE_COVERAGE_VALUE_ARB 0x80AA
|
#define GL_SAMPLE_COVERAGE_VALUE_ARB 0x80AA
|
||||||
#define GL_SAMPLE_COVERAGE_INVERT_ARB 0x80AB
|
#define GL_SAMPLE_COVERAGE_INVERT_ARB 0x80AB
|
||||||
#define GL_MULTISAMPLE_BIT_ARB 0x20000000
|
#define GL_MULTISAMPLE_BIT_ARB 0x20000000
|
||||||
|
#define GL_DOUBLEBUFFER 0x0C32
|
||||||
|
#define GL_AUX_BUFFERS 0x0C00
|
||||||
#define WGL_SAMPLE_BUFFERS_ARB 0x2041
|
#define WGL_SAMPLE_BUFFERS_ARB 0x2041
|
||||||
#define WGL_SAMPLES_ARB 0x2042
|
#define WGL_SAMPLES_ARB 0x2042
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef GL_SGIS_generate_mipmap
|
#ifndef GL_SGIS_generate_mipmap
|
||||||
@@ -409,6 +410,39 @@ typedef BOOL (APIENTRY * wglReleaseTexImageARBProc) (HPBUFFERARB hPbuffer, int i
|
|||||||
typedef BOOL (APIENTRY * wglSetPbufferAttribARBProc) (HPBUFFERARB hPbuffer, const int *piAttribList);
|
typedef BOOL (APIENTRY * wglSetPbufferAttribARBProc) (HPBUFFERARB hPbuffer, const int *piAttribList);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#elif !defined(__APPLE__) /* !WIN32 */
|
||||||
|
|
||||||
|
/* GLX pcific OpenGL extenstions */
|
||||||
|
#include <GL/glx.h>
|
||||||
|
|
||||||
|
#ifndef GLX_ARB_multisample
|
||||||
|
#define GLX_ARB_multisample1
|
||||||
|
#define GLX_SAMPLE_BUFFERS_ARB 100001
|
||||||
|
#define GLX_SAMPLES_ARB 100000
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef GLX_SGIX_pbuffer
|
||||||
|
#define GLX_SGIX_pbuffer 1
|
||||||
|
#define GLX_DOUBLEBUFFER 5
|
||||||
|
#define GLX_AUX_BUFFERS 0x00000010
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef GLXPbuffer
|
||||||
|
#define GLXPbuffer GLXPbufferSGIX
|
||||||
|
#endif
|
||||||
|
#ifndef GLXFBConfig
|
||||||
|
#define GLXFBConfig GLXFBConfigSGIX
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef GLXFBConfig *(*glXChooseFBConfigProc) (Display *dpy, int screen, int *attribList, int *nitems);
|
||||||
|
typedef GLXPbuffer (*glXCreateGLXPbufferProc) (Display *dpy, GLXFBConfig config, unsigned int width, unsigned int height, int *attrib_list);
|
||||||
|
typedef GLXPbuffer (*glXCreatePbufferProc) (Display *dpy, GLXFBConfig config, int *attrib_list);
|
||||||
|
typedef XVisualInfo *(*glXGetVisualFromFBConfigProc) (Display *dpy, GLXFBConfig config);
|
||||||
|
typedef GLXContext (*glXCreateContextWithConfigProc) (Display *dpy, GLXFBConfig config, int render_type, GLXContext share_list, Bool direct);
|
||||||
|
typedef GLXContext (*glXCreateContextProc) (Display *dpy, XVisualInfo *vis, GLXContext shareList, Bool direct);
|
||||||
|
typedef void (*glXDestroyPbufferProc) (Display *dpy, GLXPbuffer pbuf);
|
||||||
|
typedef int (*glXQueryGLXPbufferSGIXProc) (Display *, GLXPbufferSGIX, int, unsigned int *);
|
||||||
|
typedef void (*glXQueryDrawableProc) (Display *, GLXDrawable, int, unsigned int *);
|
||||||
#endif /* WIN32 */
|
#endif /* WIN32 */
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user