collada: add main frontend
This commit is contained in:
parent
fec67091a1
commit
67820fce2b
@ -1,5 +1,7 @@
|
||||
import io
|
||||
|
||||
line_ending = "\r\n"
|
||||
|
||||
def should_autonewline(line):
|
||||
return (
|
||||
"static_assert" not in line
|
||||
@ -20,9 +22,9 @@ def _render(out, lines):
|
||||
level = 0
|
||||
|
||||
if len(l) == 0:
|
||||
out.write("\n")
|
||||
out.write(line_ending)
|
||||
else:
|
||||
out.write(indent * level + l + "\n")
|
||||
out.write(indent * level + l + line_ending)
|
||||
|
||||
if l and (l[-1] == "{" or l[-1] == "("):
|
||||
if l.startswith("namespace"):
|
||||
@ -32,7 +34,7 @@ def _render(out, lines):
|
||||
|
||||
if level == 0 and l and l[-1] == ";":
|
||||
if should_autonewline(l):
|
||||
out.write("\n")
|
||||
out.write(line_ending)
|
||||
return out
|
||||
|
||||
def renderer():
|
||||
|
||||
@ -424,6 +424,16 @@ def render_library_materials(state, collada):
|
||||
yield f".effect = &effect_{effect_name},"
|
||||
yield "};"
|
||||
|
||||
def render_all(collada):
|
||||
state = State()
|
||||
render, out = renderer()
|
||||
render(render_header())
|
||||
render(render_library_effects(state, collada))
|
||||
render(render_library_materials(state, collada))
|
||||
render(render_library_geometries(state, collada))
|
||||
render(render_library_visual_scenes(state, collada))
|
||||
return state, out
|
||||
|
||||
if __name__ == "__main__":
|
||||
import sys
|
||||
collada = parse.parse_collada_file(sys.argv[1])
|
||||
@ -432,11 +442,5 @@ if __name__ == "__main__":
|
||||
#assert type(skin) is types.Skin
|
||||
#foo = render_inverse_bind_matrix(collada, skin)
|
||||
|
||||
state = State()
|
||||
render, out = renderer()
|
||||
render(render_header())
|
||||
render(render_library_effects(state, collada))
|
||||
render(render_library_materials(state, collada))
|
||||
render(render_library_geometries(state, collada))
|
||||
render(render_library_visual_scenes(state, collada))
|
||||
state, out = render_all(collada)
|
||||
print(out.getvalue())
|
||||
|
||||
35
collada/main.py
Normal file
35
collada/main.py
Normal file
@ -0,0 +1,35 @@
|
||||
import sys
|
||||
|
||||
from collada import parse
|
||||
from collada import header
|
||||
|
||||
def usage():
|
||||
name = sys.argv[0]
|
||||
print("usage:")
|
||||
print(f" {name} [input_collada.dae] [output_header.hpp] [output_binary.bin]")
|
||||
sys.exit(1)
|
||||
|
||||
def main():
|
||||
try:
|
||||
input_collada = sys.argv[1]
|
||||
output_header = sys.argv[2]
|
||||
output_binary = sys.argv[3]
|
||||
assert input_collada.lower().endswith(".dae")
|
||||
assert output_header.lower().endswith(".hpp")
|
||||
assert output_binary.lower().endswith(".bin")
|
||||
except:
|
||||
usage()
|
||||
|
||||
collada = parse.parse_collada_file(input_collada)
|
||||
state, out = header.render_all(collada)
|
||||
|
||||
with open(output_header, 'wb') as f:
|
||||
header_buf = out.getvalue()
|
||||
assert "\r\n" in header_buf
|
||||
f.write(header_buf.encode('utf-8'))
|
||||
|
||||
with open(output_binary, 'wb') as f:
|
||||
f.write(state.buf.getvalue())
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Loading…
x
Reference in New Issue
Block a user