-#!/usr/bin/python2
+#!/usr/bin/env python
-# (C) Copyright IBM Corporation 2004
+# (C) Copyright IBM Corporation 2004, 2005
# All Rights Reserved.
#
# Permission is hereby granted, free of charge, to any person obtaining a
# Authors:
# Ian Romanick <idr@us.ibm.com>
-from xml.sax import saxutils
-from xml.sax import make_parser
-from xml.sax.handler import feature_namespaces
-
-import gl_XML
+import gl_XML, glX_XML
import license
import sys, getopt
-class PrintGlOffsets(gl_XML.FilterGLAPISpecBase):
- name = "gl_apitemp.py (from Mesa)"
-
+class PrintGlOffsets(gl_XML.gl_print_base):
def __init__(self):
- gl_XML.FilterGLAPISpecBase.__init__(self)
+ gl_XML.gl_print_base.__init__(self)
+
+ self.name = "gl_apitemp.py (from Mesa)"
self.license = license.bsd_license_template % ( \
"""Copyright (C) 1999-2001 Brian Paul All Rights Reserved.
(C) Copyright IBM Corporation 2004""", "BRIAN PAUL, IBM")
- def printFunction(self, f):
+ self.undef_list.append( "KEYWORD1" )
+ self.undef_list.append( "KEYWORD1_ALT" )
+ self.undef_list.append( "KEYWORD2" )
+ self.undef_list.append( "NAME" )
+ self.undef_list.append( "DISPATCH" )
+ self.undef_list.append( "RETURN_DISPATCH" )
+ self.undef_list.append( "DISPATCH_TABLE_NAME" )
+ self.undef_list.append( "UNUSED_TABLE_NAME" )
+ self.undef_list.append( "TABLE_ENTRY" )
+
+
+ def printFunction(self, f, name):
p_string = ""
o_string = ""
t_string = ""
comma = ""
- for p in f.parameterIterator():
- cast = ""
+ if f.is_static_entry_point(name):
+ keyword = "KEYWORD1"
+ else:
+ keyword = "KEYWORD1_ALT"
+
+ n = f.static_name(name)
- if p.is_pointer:
- t = "%p"
+ for p in f.parameterIterator():
+ if p.is_pointer():
cast = "(const void *) "
- elif p.p_type_string == 'GLenum':
- t = "0x%x"
- elif p.p_type_string in ['GLfloat', 'GLdouble', 'GLclampf', 'GLclampd']:
- t = "%f"
else:
- t = "%d"
+ cast = ""
- t_string = t_string + comma + t
+ t_string = t_string + comma + p.format_string()
p_string = p_string + comma + p.name
o_string = o_string + comma + cast + p.name
comma = ", "
- if f.fn_return_type != 'void':
+ if f.return_type != 'void':
dispatch = "RETURN_DISPATCH"
else:
dispatch = "DISPATCH"
- print 'KEYWORD1 %s KEYWORD2 NAME(%s)(%s)' \
- % (f.fn_return_type, f.name, f.get_parameter_string())
+ if f.has_different_protocol(name):
+ print '#ifndef GLX_INDIRECT_RENDERING'
+
+ if not f.is_static_entry_point(name):
+ print '%s %s KEYWORD2 NAME(%s)(%s);' % (keyword, f.return_type, n, f.get_parameter_string(name))
+ print ''
+
+ print '%s %s KEYWORD2 NAME(%s)(%s)' % (keyword, f.return_type, n, f.get_parameter_string(name))
print '{'
if p_string == "":
print ' %s(%s, (), (F, "gl%s();\\n"));' \
- % (dispatch, f.real_name, f.name)
+ % (dispatch, f.name, name)
else:
print ' %s(%s, (%s), (F, "gl%s(%s);\\n", %s));' \
- % (dispatch, f.real_name, p_string, f.name, t_string, o_string)
+ % (dispatch, f.name, p_string, name, t_string, o_string)
print '}'
+ if f.has_different_protocol(name):
+ print '#endif /* GLX_INDIRECT_RENDERING */'
print ''
return
def printRealHeader(self):
+ print ''
+ self.printVisibility( "HIDDEN", "hidden" )
print """
/*
* This file is a template which generates the OpenGL API entry point
#define KEYWORD1
#endif
+#ifndef KEYWORD1_ALT
+#define KEYWORD1_ALT HIDDEN
+#endif
+
#ifndef KEYWORD2
#define KEYWORD2
#endif
- def printInitDispatch(self):
+ def printInitDispatch(self, api):
print """
#endif /* defined( NAME ) */
#endif
static _glapi_proc DISPATCH_TABLE_NAME[] = {"""
- for f in self.functionIterator():
- if f.fn_offset < 0: continue
-
- print ' TABLE_ENTRY(%s),' % (f.name)
+ for f in api.functionIterateByOffset():
+ print ' TABLE_ENTRY(%s),' % (f.dispatch_name())
print ' /* A whole bunch of no-op functions. These might be called'
print ' * when someone tries to call a dynamically-registered'
print ''
return
- def printAliasedTable(self):
+
+ def printAliasedTable(self, api):
print """
/*
* This is just used to silence compiler warnings.
#ifdef UNUSED_TABLE_NAME
static _glapi_proc UNUSED_TABLE_NAME[] = {"""
- for f in self.functionIterator():
- if f.fn_offset < 0:
- print ' TABLE_ENTRY(%s),' % (f.name)
-
+ for f in api.functionIterateByOffset():
+ for n in f.entry_points:
+ if n != f.name:
+ if f.is_static_entry_point(n):
+ text = ' TABLE_ENTRY(%s),' % (n)
+
+ if f.has_different_protocol(n):
+ print '#ifndef GLX_INDIRECT_RENDERING'
+ print text
+ print '#endif'
+ else:
+ print text
print '};'
print '#endif /*UNUSED_TABLE_NAME*/'
print ''
return
- def printRealFooter(self):
- self.printInitDispatch()
- self.printAliasedTable()
- print"""
-#undef KEYWORD1
-#undef KEYWORD2
-#undef NAME
-#undef DISPATCH
-#undef RETURN_DISPATCH
-#undef DISPATCH_TABLE_NAME
-#undef UNUSED_TABLE_NAME
-#undef TABLE_ENTRY
-"""
+
+ def printBody(self, api):
+ for func in api.functionIterateByOffset():
+ got_stub = 0
+ for n in func.entry_points:
+ if func.is_static_entry_point(n):
+ self.printFunction(func, n)
+ elif not got_stub:
+ self.printFunction(func, n)
+ got_stub = 1
+
+ self.printInitDispatch(api)
+ self.printAliasedTable(api)
return
+
def show_usage():
print "Usage: %s [-f input_file_name]" % sys.argv[0]
sys.exit(1)
if arg == "-f":
file_name = val
- dh = PrintGlOffsets()
-
- parser = make_parser()
- parser.setFeature(feature_namespaces, 0)
- parser.setContentHandler(dh)
-
- f = open(file_name)
-
- dh.printHeader()
- parser.parse(f)
- dh.printFooter()
+ api = gl_XML.parse_GL_API(file_name, glX_XML.glx_item_factory())
+ printer = PrintGlOffsets()
+ printer.Print(api)