ソースを参照

glx: implement __glXGetString, hide __glXGetStringFromServer

tags/mesa_7_3_rc1
RALOVICH, Kristóf 17年前
コミット
24b8a8cfe8
2個のファイルの変更72行の追加21行の削除
  1. 71
    16
      src/glx/x11/glx_query.c
  2. 1
    5
      src/glx/x11/glxclient.h

+ 71
- 16
src/glx/x11/glx_query.c ファイルの表示

@@ -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);
GLXContext gc = __glXGetCurrentContext();
return __glXGetStringFromServer(dpy, gc->majorOpcode,
X_GLXQueryServerString,
screen, name);
}

return buf;
char *
__glXGetString(Display* dpy,
CARD32 contextTag,
CARD32 name)
{
GLXContext gc = __glXGetCurrentContext();
return __glXGetStringFromServer(dpy, gc->majorOpcode, X_GLsop_GetString,
contextTag, name);
}

#endif /* USE_XCB */


+ 1
- 5
src/glx/x11/glxclient.h ファイルの表示

@@ -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);


読み込み中…
キャンセル
保存