# $Id$
+!handcode glBegin
+!handcode glEnd
+!handcode glGetError
+!handcode glXGetProcAddress
+!handcode glXGetProcAddressARB
+!handcode eglGetProcAddress
wl('%s APIENTRY %s(%s)', ret.ctype, func.name, ", ".join([p.ctype+" "+p.name for p in params]))
wl('{')
-wl(' static %s (*orig)(%s);', ret.ctype, ", ".join([p.ctype for p in params]))
+wl(' static %s (*orig)(%s) = NULL;', ret.ctype, ", ".join([p.ctype for p in params]))
+wl(' GlPacket *pkt;')
if ret.ctype!='void':
wl(' %s ret;', ret.ctype)
wl(' if(!orig)')
wl(' orig = glsym("%s");', func.name)
-w(' ')
-if ret.ctype!='void':
- w('ret = ')
-wl('orig(%s);', ", ".join([p.name for p in params]))
-wl(' begin_packet(FUNC_%s);', func.name.upper())
-if ret.ctype!='void':
- wl(' write_%s(ret);', ret.io[0])
+wl(' tracepoint(FUNC_%s, BREAK_CALL);', func.name.upper())
+wl(' pkt = packet_begin(FUNC_%s);', func.name.upper())
+head_sent = False
for p in params:
+ if p.direction=="out" and not head_sent:
+ wl(' packet_send_partial(pkt, get_out_fd());')
+ w(' ')
+ if ret.ctype!='void':
+ w('ret = ')
+ wl('orig(%s);', ", ".join([q.name for q in params]))
+ head_sent = True
if p.kind=="value":
- wl(' write_%s(%s);', p.io[0], p.name)
+ wl(' packet_write_%s(pkt, %s);', p.io[0].replace(' ', '_'), p.name)
+ elif p.kind=="array" and p.io and p.io[0]=="string":
+ wl(' packet_write_string_array(pkt, %s, %s);', p.name, p.csize)
elif p.csize:
- wl(' write_data(%s, %s);', p.name, p.csize)
+ wl(' packet_write_data(pkt, %s, %s);', p.name, p.csize)
else:
- wl(' write_pointer(%s);', p.name)
-wl(' send_packet();')
+ wl(' packet_write_pointer(pkt, %s);', p.name)
+if ret.ctype!='void':
+ if not head_sent:
+ wl(' packet_send_partial(pkt, get_out_fd());')
+ wl(' ret = orig(%s);', ", ".join([p.name for p in params]))
+ head_sent = True
+ wl(' packet_write_%s(pkt, ret);', ret.io[0].replace(' ', '_'))
+wl(' packet_send(pkt, get_out_fd());')
+if not head_sent:
+ wl(' orig(%s);', ", ".join([p.name for p in params]))
if not func.name.startswith("glX"):
wl(' check_error();')
+wl(' tracepoint(FUNC_%s, BREAK_RETURN);', func.name.upper())
if ret.ctype!='void':
wl(' return ret;')
wl('}')