glx: implement __glXGetString, hide __glXGetStringFromServer

This commit is contained in:
RALOVICH, Kristóf 2008-11-03 18:31:22 +01:00 committed by Brian Paul
parent fd52001c5c
commit 24b8a8cfe8
2 changed files with 73 additions and 22 deletions

View File

@ -37,6 +37,62 @@
# include <xcb/glx.h>
#endif
#ifdef USE_XCB
/**
* Exchange a protocol request for glXQueryServerString.
*/
char *
__glXQueryServerString(Display* dpy,
CARD32 screen,
CARD32 name)
{
xcb_connection_t *c = XGetXCBConnection(dpy);
xcb_glx_query_server_string_reply_t* reply =
xcb_glx_query_server_string_reply(c,
xcb_glx_query_server_string(c,
screen,
name),
NULL);
/* The spec doesn't mention this, but the Xorg server replies with
* a string already terminated with '\0'. */
uint32_t len = xcb_glx_query_server_string_string_length(reply);
char* buf = Xmalloc(len);
memcpy(buf, xcb_glx_query_server_string_string(reply), len);
free(reply);
return buf;
}
/**
* Exchange a protocol request for glGetString.
*/
char *
__glXGetString(Display* dpy,
CARD32 contextTag,
CARD32 name)
{
xcb_connection_t *c = XGetXCBConnection(dpy);
xcb_glx_get_string_reply_t* reply =
xcb_glx_get_string_reply(c,
xcb_glx_get_string(c,
contextTag,
name),
NULL);
/* The spec doesn't mention this, but the Xorg server replies with
* a string already terminated with '\0'. */
uint32_t len = xcb_glx_get_string_string_length(reply);
char* buf = Xmalloc(len);
memcpy(buf, xcb_glx_get_string_string(reply), len);
free(reply);
return buf;
}
#else
/**
* GLX protocol structure for the ficticious "GXLGenericGetString" request.
*
@ -108,27 +164,26 @@ __glXGetStringFromServer(Display * dpy, int opcode, CARD32 glxCode,
return buf;
}
#ifdef USE_XCB
char *
__glXQueryServerString(Display* dpy,
CARD32 screen,
CARD32 name)
{
xcb_connection_t *c = XGetXCBConnection(dpy);
xcb_glx_query_server_string_reply_t* reply =
xcb_glx_query_server_string_reply(c,
xcb_glx_query_server_string(c,
screen,
name),
NULL);
/* The spec doesn't mention this, but the Xorg server replies with
* a string already terminated with '\0'. */
uint32_t len = xcb_glx_query_server_string_string_length(reply);
char* buf = Xmalloc(len);
memcpy(buf, xcb_glx_query_server_string_string(reply), len);
free(reply);
return buf;
GLXContext gc = __glXGetCurrentContext();
return __glXGetStringFromServer(dpy, gc->majorOpcode,
X_GLXQueryServerString,
screen, name);
}
char *
__glXGetString(Display* dpy,
CARD32 contextTag,
CARD32 name)
{
GLXContext gc = __glXGetCurrentContext();
return __glXGetStringFromServer(dpy, gc->majorOpcode, X_GLsop_GetString,
contextTag, name);
}
#endif /* USE_XCB */

View File

@ -739,12 +739,8 @@ extern void _XSend(Display*, const void*, long);
extern void __glXInitializeVisualConfigFromTags( __GLcontextModes *config,
int count, const INT32 *bp, Bool tagged_only, Bool fbconfig_style_tags );
extern char * __glXGetStringFromServer( Display * dpy, int opcode,
CARD32 glxCode, CARD32 for_whom, CARD32 name );
#ifdef USE_XCB
extern char * __glXQueryServerString(Display* dpy, CARD32 screen, CARD32 name);
#endif
extern char * __glXGetString(Display* dpy, CARD32 screen, CARD32 name);
extern char *__glXstrdup(const char *str);