*/
'''
+import argparse
import itertools
+import typing as T
GENERATE, UBYTE, USHORT, UINT = 'generate', 'ubyte', 'ushort', 'uint'
FIRST, LAST = 'first', 'last'
pv_idx = dict(first='PV_FIRST', last='PV_LAST')
pr_idx = dict(prdisable='PR_DISABLE', prenable='PR_ENABLE')
-def prolog():
- print('''/* File automatically generated by u_indices_gen.py */''')
- print(copyright)
- print(r'''
+def prolog(f: 'T.TextIO') -> None:
+ f.write('/* File automatically generated by u_indices_gen.py */\n')
+ f.write(copyright)
+ f.write(r'''
/**
* @file
else:
return '(' + outtype + ')in[' + v0 + ']'
-def point( intype, outtype, ptr, v0 ):
- print(' (' + ptr + ')[0] = ' + vert( intype, outtype, v0 ) + ';')
+def point(f: 'T.TextIO', intype, outtype, ptr, v0 ):
+ f.write(' (' + ptr + ')[0] = ' + vert( intype, outtype, v0 ) + ';\n')
-def line( intype, outtype, ptr, v0, v1 ):
- print(' (' + ptr + ')[0] = ' + vert( intype, outtype, v0 ) + ';')
- print(' (' + ptr + ')[1] = ' + vert( intype, outtype, v1 ) + ';')
+def line(f: 'T.TextIO', intype, outtype, ptr, v0, v1 ):
+ f.write(' (' + ptr + ')[0] = ' + vert( intype, outtype, v0 ) + ';\n')
+ f.write(' (' + ptr + ')[1] = ' + vert( intype, outtype, v1 ) + ';\n')
-def tri( intype, outtype, ptr, v0, v1, v2 ):
- print(' (' + ptr + ')[0] = ' + vert( intype, outtype, v0 ) + ';')
- print(' (' + ptr + ')[1] = ' + vert( intype, outtype, v1 ) + ';')
- print(' (' + ptr + ')[2] = ' + vert( intype, outtype, v2 ) + ';')
+def tri(f: 'T.TextIO', intype, outtype, ptr, v0, v1, v2 ):
+ f.write(' (' + ptr + ')[0] = ' + vert( intype, outtype, v0 ) + ';\n')
+ f.write(' (' + ptr + ')[1] = ' + vert( intype, outtype, v1 ) + ';\n')
+ f.write(' (' + ptr + ')[2] = ' + vert( intype, outtype, v2 ) + ';\n')
-def lineadj( intype, outtype, ptr, v0, v1, v2, v3 ):
- print(' (' + ptr + ')[0] = ' + vert( intype, outtype, v0 ) + ';')
- print(' (' + ptr + ')[1] = ' + vert( intype, outtype, v1 ) + ';')
- print(' (' + ptr + ')[2] = ' + vert( intype, outtype, v2 ) + ';')
- print(' (' + ptr + ')[3] = ' + vert( intype, outtype, v3 ) + ';')
+def lineadj(f: 'T.TextIO', intype, outtype, ptr, v0, v1, v2, v3 ):
+ f.write(' (' + ptr + ')[0] = ' + vert( intype, outtype, v0 ) + ';\n')
+ f.write(' (' + ptr + ')[1] = ' + vert( intype, outtype, v1 ) + ';\n')
+ f.write(' (' + ptr + ')[2] = ' + vert( intype, outtype, v2 ) + ';\n')
+ f.write(' (' + ptr + ')[3] = ' + vert( intype, outtype, v3 ) + ';\n')
-def triadj( intype, outtype, ptr, v0, v1, v2, v3, v4, v5 ):
- print(' (' + ptr + ')[0] = ' + vert( intype, outtype, v0 ) + ';')
- print(' (' + ptr + ')[1] = ' + vert( intype, outtype, v1 ) + ';')
- print(' (' + ptr + ')[2] = ' + vert( intype, outtype, v2 ) + ';')
- print(' (' + ptr + ')[3] = ' + vert( intype, outtype, v3 ) + ';')
- print(' (' + ptr + ')[4] = ' + vert( intype, outtype, v4 ) + ';')
- print(' (' + ptr + ')[5] = ' + vert( intype, outtype, v5 ) + ';')
+def triadj(f: 'T.TextIO', intype, outtype, ptr, v0, v1, v2, v3, v4, v5 ):
+ f.write(' (' + ptr + ')[0] = ' + vert( intype, outtype, v0 ) + ';\n')
+ f.write(' (' + ptr + ')[1] = ' + vert( intype, outtype, v1 ) + ';\n')
+ f.write(' (' + ptr + ')[2] = ' + vert( intype, outtype, v2 ) + ';\n')
+ f.write(' (' + ptr + ')[3] = ' + vert( intype, outtype, v3 ) + ';\n')
+ f.write(' (' + ptr + ')[4] = ' + vert( intype, outtype, v4 ) + ';\n')
+ f.write(' (' + ptr + ')[5] = ' + vert( intype, outtype, v5 ) + ';\n')
-def do_point( intype, outtype, ptr, v0 ):
- point( intype, outtype, ptr, v0 )
+def do_point(f: 'T.TextIO', intype, outtype, ptr, v0 ):
+ point(f, intype, outtype, ptr, v0 )
-def do_line( intype, outtype, ptr, v0, v1, inpv, outpv ):
+def do_line(f: 'T.TextIO', intype, outtype, ptr, v0, v1, inpv, outpv ):
if inpv == outpv:
- line( intype, outtype, ptr, v0, v1 )
+ line(f, intype, outtype, ptr, v0, v1 )
else:
- line( intype, outtype, ptr, v1, v0 )
+ line(f, intype, outtype, ptr, v1, v0 )
-def do_tri( intype, outtype, ptr, v0, v1, v2, inpv, outpv ):
+def do_tri(f: 'T.TextIO', intype, outtype, ptr, v0, v1, v2, inpv, outpv ):
if inpv == outpv:
- tri( intype, outtype, ptr, v0, v1, v2 )
+ tri(f, intype, outtype, ptr, v0, v1, v2 )
+ elif inpv == FIRST:
+ tri(f, intype, outtype, ptr, v1, v2, v0 )
else:
- if inpv == FIRST:
- tri( intype, outtype, ptr, v1, v2, v0 )
- else:
- tri( intype, outtype, ptr, v2, v0, v1 )
+ tri(f, intype, outtype, ptr, v2, v0, v1 )
-def do_quad( intype, outtype, ptr, v0, v1, v2, v3, inpv, outpv ):
+def do_quad(f: 'T.TextIO', intype, outtype, ptr, v0, v1, v2, v3, inpv, outpv ):
if inpv == LAST:
- do_tri( intype, outtype, ptr+'+0', v0, v1, v3, inpv, outpv );
- do_tri( intype, outtype, ptr+'+3', v1, v2, v3, inpv, outpv );
+ do_tri(f, intype, outtype, ptr+'+0', v0, v1, v3, inpv, outpv );
+ do_tri(f, intype, outtype, ptr+'+3', v1, v2, v3, inpv, outpv );
else:
- do_tri( intype, outtype, ptr+'+0', v0, v1, v2, inpv, outpv );
- do_tri( intype, outtype, ptr+'+3', v0, v2, v3, inpv, outpv );
+ do_tri(f, intype, outtype, ptr+'+0', v0, v1, v2, inpv, outpv );
+ do_tri(f, intype, outtype, ptr+'+3', v0, v2, v3, inpv, outpv );
-def do_lineadj( intype, outtype, ptr, v0, v1, v2, v3, inpv, outpv ):
+def do_lineadj(f: 'T.TextIO', intype, outtype, ptr, v0, v1, v2, v3, inpv, outpv ):
if inpv == outpv:
- lineadj( intype, outtype, ptr, v0, v1, v2, v3 )
+ lineadj(f, intype, outtype, ptr, v0, v1, v2, v3 )
else:
- lineadj( intype, outtype, ptr, v3, v2, v1, v0 )
+ lineadj(f, intype, outtype, ptr, v3, v2, v1, v0 )
-def do_triadj( intype, outtype, ptr, v0, v1, v2, v3, v4, v5, inpv, outpv ):
+def do_triadj(f: 'T.TextIO', intype, outtype, ptr, v0, v1, v2, v3, v4, v5, inpv, outpv ):
if inpv == outpv:
- triadj( intype, outtype, ptr, v0, v1, v2, v3, v4, v5 )
+ triadj(f, intype, outtype, ptr, v0, v1, v2, v3, v4, v5 )
else:
- triadj( intype, outtype, ptr, v4, v5, v0, v1, v2, v3 )
+ triadj(f, intype, outtype, ptr, v4, v5, v0, v1, v2, v3 )
def name(intype, outtype, inpv, outpv, pr, prim):
if intype == GENERATE:
else:
return 'translate_' + prim + '_' + intype + '2' + outtype + '_' + inpv + '2' + outpv + '_' + pr
-def preamble(intype, outtype, inpv, outpv, pr, prim):
- print('static void ' + name( intype, outtype, inpv, outpv, pr, prim ) + '(')
+def preamble(f: 'T.TextIO', intype, outtype, inpv, outpv, pr, prim):
+ f.write('static void ' + name( intype, outtype, inpv, outpv, pr, prim ) + '(\n')
if intype != GENERATE:
- print(' const void * restrict _in,')
- print(' unsigned start,')
+ f.write(' const void * restrict _in,\n')
+ f.write(' unsigned start,\n')
if intype != GENERATE:
- print(' unsigned in_nr,')
- print(' unsigned out_nr,')
+ f.write(' unsigned in_nr,\n')
+ f.write(' unsigned out_nr,\n')
if intype != GENERATE:
- print(' unsigned restart_index,')
- print(' void * restrict _out )')
- print('{')
+ f.write(' unsigned restart_index,\n')
+ f.write(' void * restrict _out )\n')
+ f.write('{\n')
if intype != GENERATE:
- print(' const ' + intype + '* restrict in = (const ' + intype + '* restrict)_in;')
- print(' ' + outtype + ' * restrict out = (' + outtype + '* restrict)_out;')
- print(' unsigned i, j;')
- print(' (void)j;')
+ f.write(' const ' + intype + '* restrict in = (const ' + intype + '* restrict)_in;\n')
+ f.write(' ' + outtype + ' * restrict out = (' + outtype + '* restrict)_out;\n')
+ f.write(' unsigned i, j;\n')
+ f.write(' (void)j;\n')
-def postamble():
- print('}')
+def postamble(f: 'T.TextIO'):
+ f.write('}\n')
-def prim_restart(in_verts, out_verts, out_prims, close_func = None):
- print('restart:')
- print(' if (i + ' + str(in_verts) + ' > in_nr) {')
+def prim_restart(f: 'T.TextIO', in_verts, out_verts, out_prims, close_func = None):
+ f.write('restart:\n')
+ f.write(' if (i + ' + str(in_verts) + ' > in_nr) {\n')
for i, j in itertools.product(range(out_prims), range(out_verts)):
- print(' (out+j+' + str(out_verts * i) + ')[' + str(j) + '] = restart_index;')
- print(' continue;')
- print(' }')
+ f.write(' (out+j+' + str(out_verts * i) + ')[' + str(j) + '] = restart_index;\n')
+ f.write(' continue;\n')
+ f.write(' }\n')
for i in range(in_verts):
- print(' if (in[i + ' + str(i) + '] == restart_index) {')
- print(' i += ' + str(i + 1) + ';')
+ f.write(' if (in[i + ' + str(i) + '] == restart_index) {\n')
+ f.write(' i += ' + str(i + 1) + ';\n')
if close_func is not None:
close_func(i)
- print(' goto restart;')
- print(' }')
-
-def points(intype, outtype, inpv, outpv, pr):
- preamble(intype, outtype, inpv, outpv, pr, prim='points')
- print(' for (i = start, j = 0; j < out_nr; j++, i++) { ')
- do_point( intype, outtype, 'out+j', 'i' );
- print(' }')
- postamble()
-
-def lines(intype, outtype, inpv, outpv, pr):
- preamble(intype, outtype, inpv, outpv, pr, prim='lines')
- print(' for (i = start, j = 0; j < out_nr; j+=2, i+=2) { ')
- do_line( intype, outtype, 'out+j', 'i', 'i+1', inpv, outpv );
- print(' }')
- postamble()
-
-def linestrip(intype, outtype, inpv, outpv, pr):
- preamble(intype, outtype, inpv, outpv, pr, prim='linestrip')
- print(' for (i = start, j = 0; j < out_nr; j+=2, i++) { ')
- do_line( intype, outtype, 'out+j', 'i', 'i+1', inpv, outpv );
- print(' }')
- postamble()
-
-def lineloop(intype, outtype, inpv, outpv, pr):
- preamble(intype, outtype, inpv, outpv, pr, prim='lineloop')
- print(' unsigned end = start;')
- print(' for (i = start, j = 0; j < out_nr - 2; j+=2, i++) { ')
+ f.write(' goto restart;\n')
+ f.write(' }\n')
+
+def points(f: 'T.TextIO', intype, outtype, inpv, outpv, pr):
+ preamble(f, intype, outtype, inpv, outpv, pr, prim='points')
+ f.write(' for (i = start, j = 0; j < out_nr; j++, i++) {\n')
+ do_point(f, intype, outtype, 'out+j', 'i' );
+ f.write(' }\n')
+ postamble(f)
+
+def lines(f: 'T.TextIO', intype, outtype, inpv, outpv, pr):
+ preamble(f, intype, outtype, inpv, outpv, pr, prim='lines')
+ f.write(' for (i = start, j = 0; j < out_nr; j+=2, i+=2) {\n')
+ do_line(f, intype, outtype, 'out+j', 'i', 'i+1', inpv, outpv );
+ f.write(' }\n')
+ postamble(f)
+
+def linestrip(f: 'T.TextIO', intype, outtype, inpv, outpv, pr):
+ preamble(f, intype, outtype, inpv, outpv, pr, prim='linestrip')
+ f.write(' for (i = start, j = 0; j < out_nr; j+=2, i++) {\n')
+ do_line(f, intype, outtype, 'out+j', 'i', 'i+1', inpv, outpv );
+ f.write(' }\n')
+ postamble(f)
+
+def lineloop(f: 'T.TextIO', intype, outtype, inpv, outpv, pr):
+ preamble(f, intype, outtype, inpv, outpv, pr, prim='lineloop')
+ f.write(' unsigned end = start;\n')
+ f.write(' for (i = start, j = 0; j < out_nr - 2; j+=2, i++) {\n')
if pr == PRENABLE:
def close_func(index):
- do_line( intype, outtype, 'out+j', 'end', 'start', inpv, outpv )
- print(' start = i;')
- print(' end = start;')
- print(' j += 2;')
-
- prim_restart(2, 2, 1, close_func)
-
- do_line( intype, outtype, 'out+j', 'i', 'i+1', inpv, outpv );
- print(' end = i+1;')
- print(' }')
- do_line( intype, outtype, 'out+j', 'end', 'start', inpv, outpv );
- postamble()
-
-def tris(intype, outtype, inpv, outpv, pr):
- preamble(intype, outtype, inpv, outpv, pr, prim='tris')
- print(' for (i = start, j = 0; j < out_nr; j+=3, i+=3) { ')
- do_tri( intype, outtype, 'out+j', 'i', 'i+1', 'i+2', inpv, outpv );
- print(' }')
- postamble()
-
-
-def tristrip(intype, outtype, inpv, outpv, pr):
- preamble(intype, outtype, inpv, outpv, pr, prim='tristrip')
- print(' for (i = start, j = 0; j < out_nr; j+=3, i++) { ')
+ do_line(f, intype, outtype, 'out+j', 'end', 'start', inpv, outpv )
+ f.write(' start = i;\n')
+ f.write(' end = start;\n')
+ f.write(' j += 2;\n')
+
+ prim_restart(f, 2, 2, 1, close_func)
+
+ do_line(f, intype, outtype, 'out+j', 'i', 'i+1', inpv, outpv );
+ f.write(' end = i+1;\n')
+ f.write(' }\n')
+ do_line(f, intype, outtype, 'out+j', 'end', 'start', inpv, outpv );
+ postamble(f)
+
+def tris(f: 'T.TextIO', intype, outtype, inpv, outpv, pr):
+ preamble(f, intype, outtype, inpv, outpv, pr, prim='tris')
+ f.write(' for (i = start, j = 0; j < out_nr; j+=3, i+=3) {\n')
+ do_tri(f, intype, outtype, 'out+j', 'i', 'i+1', 'i+2', inpv, outpv );
+ f.write(' }\n')
+ postamble(f)
+
+
+def tristrip(f: 'T.TextIO', intype, outtype, inpv, outpv, pr):
+ preamble(f, intype, outtype, inpv, outpv, pr, prim='tristrip')
+ f.write(' for (i = start, j = 0; j < out_nr; j+=3, i++) {\n')
if inpv == FIRST:
- do_tri( intype, outtype, 'out+j', 'i', 'i+1+(i&1)', 'i+2-(i&1)', inpv, outpv );
+ do_tri(f, intype, outtype, 'out+j', 'i', 'i+1+(i&1)', 'i+2-(i&1)', inpv, outpv );
else:
- do_tri( intype, outtype, 'out+j', 'i+(i&1)', 'i+1-(i&1)', 'i+2', inpv, outpv );
- print(' }')
- postamble()
+ do_tri(f, intype, outtype, 'out+j', 'i+(i&1)', 'i+1-(i&1)', 'i+2', inpv, outpv );
+ f.write(' }\n')
+ postamble(f)
-def trifan(intype, outtype, inpv, outpv, pr):
- preamble(intype, outtype, inpv, outpv, pr, prim='trifan')
- print(' for (i = start, j = 0; j < out_nr; j+=3, i++) { ')
+def trifan(f: 'T.TextIO', intype, outtype, inpv, outpv, pr):
+ preamble(f, intype, outtype, inpv, outpv, pr, prim='trifan')
+ f.write(' for (i = start, j = 0; j < out_nr; j+=3, i++) {\n')
if pr == PRENABLE:
def close_func(index):
- print(' start = i;')
- prim_restart(3, 3, 1, close_func)
+ f.write(' start = i;\n')
+ prim_restart(f, 3, 3, 1, close_func)
if inpv == FIRST:
- do_tri( intype, outtype, 'out+j', 'i+1', 'i+2', 'start', inpv, outpv );
+ do_tri(f, intype, outtype, 'out+j', 'i+1', 'i+2', 'start', inpv, outpv );
else:
- do_tri( intype, outtype, 'out+j', 'start', 'i+1', 'i+2', inpv, outpv );
+ do_tri(f, intype, outtype, 'out+j', 'start', 'i+1', 'i+2', inpv, outpv );
- print(' }')
- postamble()
+ f.write(' }')
+ postamble(f)
-def polygon(intype, outtype, inpv, outpv, pr):
- preamble(intype, outtype, inpv, outpv, pr, prim='polygon')
- print(' for (i = start, j = 0; j < out_nr; j+=3, i++) { ')
+def polygon(f: 'T.TextIO', intype, outtype, inpv, outpv, pr):
+ preamble(f, intype, outtype, inpv, outpv, pr, prim='polygon')
+ f.write(' for (i = start, j = 0; j < out_nr; j+=3, i++) {\n')
if pr == PRENABLE:
def close_func(index):
- print(' start = i;')
- prim_restart(3, 3, 1, close_func)
+ f.write(' start = i;\n')
+ prim_restart(f, 3, 3, 1, close_func)
if inpv == FIRST:
- do_tri( intype, outtype, 'out+j', 'start', 'i+1', 'i+2', inpv, outpv );
+ do_tri(f, intype, outtype, 'out+j', 'start', 'i+1', 'i+2', inpv, outpv );
else:
- do_tri( intype, outtype, 'out+j', 'i+1', 'i+2', 'start', inpv, outpv );
- print(' }')
- postamble()
+ do_tri(f, intype, outtype, 'out+j', 'i+1', 'i+2', 'start', inpv, outpv );
+ f.write(' }')
+ postamble(f)
-def quads(intype, outtype, inpv, outpv, pr):
- preamble(intype, outtype, inpv, outpv, pr, prim='quads')
- print(' for (i = start, j = 0; j < out_nr; j+=6, i+=4) { ')
+def quads(f: 'T.TextIO', intype, outtype, inpv, outpv, pr):
+ preamble(f, intype, outtype, inpv, outpv, pr, prim='quads')
+ f.write(' for (i = start, j = 0; j < out_nr; j+=6, i+=4) {\n')
if pr == PRENABLE:
- prim_restart(4, 3, 2)
+ prim_restart(f, 4, 3, 2)
- do_quad( intype, outtype, 'out+j', 'i+0', 'i+1', 'i+2', 'i+3', inpv, outpv );
- print(' }')
- postamble()
+ do_quad(f, intype, outtype, 'out+j', 'i+0', 'i+1', 'i+2', 'i+3', inpv, outpv );
+ f.write(' }\n')
+ postamble(f)
-def quadstrip(intype, outtype, inpv, outpv, pr):
- preamble(intype, outtype, inpv, outpv, pr, prim='quadstrip')
- print(' for (i = start, j = 0; j < out_nr; j+=6, i+=2) { ')
+def quadstrip(f: 'T.TextIO', intype, outtype, inpv, outpv, pr):
+ preamble(f, intype, outtype, inpv, outpv, pr, prim='quadstrip')
+ f.write(' for (i = start, j = 0; j < out_nr; j+=6, i+=2) {\n')
if pr == PRENABLE:
- prim_restart(4, 3, 2)
+ prim_restart(f, 4, 3, 2)
if inpv == LAST:
- do_quad( intype, outtype, 'out+j', 'i+2', 'i+0', 'i+1', 'i+3', inpv, outpv );
+ do_quad(f, intype, outtype, 'out+j', 'i+2', 'i+0', 'i+1', 'i+3', inpv, outpv );
else:
- do_quad( intype, outtype, 'out+j', 'i+0', 'i+1', 'i+3', 'i+2', inpv, outpv );
- print(' }')
- postamble()
-
-
-def linesadj(intype, outtype, inpv, outpv, pr):
- preamble(intype, outtype, inpv, outpv, pr, prim='linesadj')
- print(' for (i = start, j = 0; j < out_nr; j+=4, i+=4) { ')
- do_lineadj( intype, outtype, 'out+j', 'i+0', 'i+1', 'i+2', 'i+3', inpv, outpv )
- print(' }')
- postamble()
-
-
-def linestripadj(intype, outtype, inpv, outpv, pr):
- preamble(intype, outtype, inpv, outpv, pr, prim='linestripadj')
- print(' for (i = start, j = 0; j < out_nr; j+=4, i++) {')
- do_lineadj( intype, outtype, 'out+j', 'i+0', 'i+1', 'i+2', 'i+3', inpv, outpv )
- print(' }')
- postamble()
-
-
-def trisadj(intype, outtype, inpv, outpv, pr):
- preamble(intype, outtype, inpv, outpv, pr, prim='trisadj')
- print(' for (i = start, j = 0; j < out_nr; j+=6, i+=6) { ')
- do_triadj( intype, outtype, 'out+j', 'i+0', 'i+1', 'i+2', 'i+3',
- 'i+4', 'i+5', inpv, outpv )
- print(' }')
- postamble()
-
-
-def tristripadj(intype, outtype, inpv, outpv, pr):
- preamble(intype, outtype, inpv, outpv, pr, prim='tristripadj')
- print(' for (i = start, j = 0; j < out_nr; i+=2, j+=6) { ')
- print(' if (i % 4 == 0) {')
- print(' /* even triangle */')
- do_triadj( intype, outtype, 'out+j',
- 'i+0', 'i+1', 'i+2', 'i+3', 'i+4', 'i+5', inpv, outpv )
- print(' } else {')
- print(' /* odd triangle */')
- do_triadj( intype, outtype, 'out+j',
- 'i+2', 'i-2', 'i+0', 'i+3', 'i+4', 'i+6', inpv, outpv )
- print(' }')
- print(' }')
- postamble()
-
-
-def emit_funcs():
+ do_quad(f, intype, outtype, 'out+j', 'i+0', 'i+1', 'i+3', 'i+2', inpv, outpv );
+ f.write(' }\n')
+ postamble(f)
+
+
+def linesadj(f: 'T.TextIO', intype, outtype, inpv, outpv, pr):
+ preamble(f, intype, outtype, inpv, outpv, pr, prim='linesadj')
+ f.write(' for (i = start, j = 0; j < out_nr; j+=4, i+=4) {\n')
+ do_lineadj(f, intype, outtype, 'out+j', 'i+0', 'i+1', 'i+2', 'i+3', inpv, outpv )
+ f.write(' }\n')
+ postamble(f)
+
+
+def linestripadj(f: 'T.TextIO', intype, outtype, inpv, outpv, pr):
+ preamble(f, intype, outtype, inpv, outpv, pr, prim='linestripadj')
+ f.write(' for (i = start, j = 0; j < out_nr; j+=4, i++) {\n')
+ do_lineadj(f, intype, outtype, 'out+j', 'i+0', 'i+1', 'i+2', 'i+3', inpv, outpv )
+ f.write(' }\n')
+ postamble(f)
+
+
+def trisadj(f: 'T.TextIO', intype, outtype, inpv, outpv, pr):
+ preamble(f, intype, outtype, inpv, outpv, pr, prim='trisadj')
+ f.write(' for (i = start, j = 0; j < out_nr; j+=6, i+=6) {\n')
+ do_triadj(f, intype, outtype, 'out+j', 'i+0', 'i+1', 'i+2', 'i+3',
+ 'i+4', 'i+5', inpv, outpv )
+ f.write(' }\n')
+ postamble(f)
+
+
+def tristripadj(f: 'T.TextIO', intype, outtype, inpv, outpv, pr):
+ preamble(f, intype, outtype, inpv, outpv, pr, prim='tristripadj')
+ f.write(' for (i = start, j = 0; j < out_nr; i+=2, j+=6) {\n')
+ f.write(' if (i % 4 == 0) {\n')
+ f.write(' /* even triangle */\n')
+ do_triadj(f, intype, outtype, 'out+j',
+ 'i+0', 'i+1', 'i+2', 'i+3', 'i+4', 'i+5', inpv, outpv )
+ f.write(' } else {\n')
+ f.write(' /* odd triangle */\n')
+ do_triadj(f, intype, outtype, 'out+j',
+ 'i+2', 'i-2', 'i+0', 'i+3', 'i+4', 'i+6', inpv, outpv )
+ f.write(' }\n')
+ f.write(' }\n')
+ postamble(f)
+
+
+def emit_funcs(f: 'T.TextIO') -> None:
for intype, outtype, inpv, outpv, pr in itertools.product(
INTYPES, OUTTYPES, [FIRST, LAST], [FIRST, LAST], [PRDISABLE, PRENABLE]):
if pr == PRENABLE and intype == GENERATE:
continue
- points(intype, outtype, inpv, outpv, pr)
- lines(intype, outtype, inpv, outpv, pr)
- linestrip(intype, outtype, inpv, outpv, pr)
- lineloop(intype, outtype, inpv, outpv, pr)
- tris(intype, outtype, inpv, outpv, pr)
- tristrip(intype, outtype, inpv, outpv, pr)
- trifan(intype, outtype, inpv, outpv, pr)
- quads(intype, outtype, inpv, outpv, pr)
- quadstrip(intype, outtype, inpv, outpv, pr)
- polygon(intype, outtype, inpv, outpv, pr)
- linesadj(intype, outtype, inpv, outpv, pr)
- linestripadj(intype, outtype, inpv, outpv, pr)
- trisadj(intype, outtype, inpv, outpv, pr)
- tristripadj(intype, outtype, inpv, outpv, pr)
-
-def init(intype, outtype, inpv, outpv, pr, prim):
+ points(f, intype, outtype, inpv, outpv, pr)
+ lines(f, intype, outtype, inpv, outpv, pr)
+ linestrip(f, intype, outtype, inpv, outpv, pr)
+ lineloop(f, intype, outtype, inpv, outpv, pr)
+ tris(f, intype, outtype, inpv, outpv, pr)
+ tristrip(f, intype, outtype, inpv, outpv, pr)
+ trifan(f, intype, outtype, inpv, outpv, pr)
+ quads(f, intype, outtype, inpv, outpv, pr)
+ quadstrip(f, intype, outtype, inpv, outpv, pr)
+ polygon(f, intype, outtype, inpv, outpv, pr)
+ linesadj(f, intype, outtype, inpv, outpv, pr)
+ linestripadj(f, intype, outtype, inpv, outpv, pr)
+ trisadj(f, intype, outtype, inpv, outpv, pr)
+ tristripadj(f, intype, outtype, inpv, outpv, pr)
+
+def init(f: 'T.TextIO', intype, outtype, inpv, outpv, pr, prim):
if intype == GENERATE:
- print ('generate[' +
- outtype_idx[outtype] +
- '][' + pv_idx[inpv] +
- '][' + pv_idx[outpv] +
- '][' + longprim[prim] +
- '] = ' + name( intype, outtype, inpv, outpv, pr, prim ) + ';')
+ f.write('generate[' +
+ outtype_idx[outtype] +
+ '][' + pv_idx[inpv] +
+ '][' + pv_idx[outpv] +
+ '][' + longprim[prim] +
+ '] = ' + name( intype, outtype, inpv, outpv, pr, prim ) + ';\n')
else:
- print ('translate[' +
- intype_idx[intype] +
- '][' + outtype_idx[outtype] +
- '][' + pv_idx[inpv] +
- '][' + pv_idx[outpv] +
- '][' + pr_idx[pr] +
- '][' + longprim[prim] +
- '] = ' + name( intype, outtype, inpv, outpv, pr, prim ) + ';')
+ f.write('translate[' +
+ intype_idx[intype] +
+ '][' + outtype_idx[outtype] +
+ '][' + pv_idx[inpv] +
+ '][' + pv_idx[outpv] +
+ '][' + pr_idx[pr] +
+ '][' + longprim[prim] +
+ '] = ' + name( intype, outtype, inpv, outpv, pr, prim ) + ';\n')
-def emit_all_inits():
+def emit_all_inits(f: 'T.TextIO'):
for intype, outtype, inpv, outpv, pr, prim in itertools.product(
INTYPES, OUTTYPES, PVS, PVS, PRS, PRIMS):
- init(intype, outtype, inpv, outpv, pr, prim)
+ init(f,intype, outtype, inpv, outpv, pr, prim)
-def emit_init():
- print('void u_index_init( void )')
- print('{')
- print(' static int firsttime = 1;')
- print(' if (!firsttime) return;')
- print(' firsttime = 0;')
- emit_all_inits()
- print('}')
+def emit_init(f: 'T.TextIO'):
+ f.write('void u_index_init( void )\n')
+ f.write('{\n')
+ f.write(' static int firsttime = 1;\n')
+ f.write(' if (!firsttime) return;\n')
+ f.write(' firsttime = 0;\n')
+ emit_all_inits(f)
+ f.write('}\n')
-def epilog():
- print('#include "indices/u_indices.c"')
+def epilog(f: 'T.TextIO') -> None:
+ f.write('#include "indices/u_indices.c"\n')
def main():
- prolog()
- emit_funcs()
- emit_init()
- epilog()
+ parser = argparse.ArgumentParser()
+ parser.add_argument('output')
+ args = parser.parse_args()
+
+ with open(args.output, 'w') as f:
+ prolog(f)
+ emit_funcs(f)
+ emit_init(f)
+ epilog(f)
if __name__ == '__main__':