!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(' %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].replace(' ', '_'))
+head_sent = False
for p in params:
+ if p.direction=="out" and not head_sent:
+ wl(' send_partial_packet();')
+ 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].replace(' ', '_'), p.name)
elif p.kind=="array" and p.io and p.io[0]=="string":
- wl(' write_string_array(%s, %s);', p.name, p.csize)
+ wl(' write_string_array(%s, %s);', p.name, p.csize)
elif p.csize:
wl(' write_data(%s, %s);', p.name, p.csize)
else:
wl(' write_pointer(%s);', p.name)
+if ret.ctype!='void':
+ if not head_sent:
+ wl(' send_partial_packet();')
+ wl(' ret = orig(%s);', ", ".join([p.name for p in params]))
+ head_sent = True
+ wl(' write_%s(ret);', ret.io[0].replace(' ', '_'))
wl(' send_packet();')
+if not head_sent:
+ wl(' orig(%s);', ", ".join([p.name for p in params]))
if not func.name.startswith("glX"):
wl(' check_error();')
if ret.ctype!='void':