collada: add main frontend
This commit is contained in:
parent
fec67091a1
commit
67820fce2b
@ -1,5 +1,7 @@
|
|||||||
import io
|
import io
|
||||||
|
|
||||||
|
line_ending = "\r\n"
|
||||||
|
|
||||||
def should_autonewline(line):
|
def should_autonewline(line):
|
||||||
return (
|
return (
|
||||||
"static_assert" not in line
|
"static_assert" not in line
|
||||||
@ -20,9 +22,9 @@ def _render(out, lines):
|
|||||||
level = 0
|
level = 0
|
||||||
|
|
||||||
if len(l) == 0:
|
if len(l) == 0:
|
||||||
out.write("\n")
|
out.write(line_ending)
|
||||||
else:
|
else:
|
||||||
out.write(indent * level + l + "\n")
|
out.write(indent * level + l + line_ending)
|
||||||
|
|
||||||
if l and (l[-1] == "{" or l[-1] == "("):
|
if l and (l[-1] == "{" or l[-1] == "("):
|
||||||
if l.startswith("namespace"):
|
if l.startswith("namespace"):
|
||||||
@ -32,7 +34,7 @@ def _render(out, lines):
|
|||||||
|
|
||||||
if level == 0 and l and l[-1] == ";":
|
if level == 0 and l and l[-1] == ";":
|
||||||
if should_autonewline(l):
|
if should_autonewline(l):
|
||||||
out.write("\n")
|
out.write(line_ending)
|
||||||
return out
|
return out
|
||||||
|
|
||||||
def renderer():
|
def renderer():
|
||||||
|
|||||||
@ -424,6 +424,16 @@ def render_library_materials(state, collada):
|
|||||||
yield f".effect = &effect_{effect_name},"
|
yield f".effect = &effect_{effect_name},"
|
||||||
yield "};"
|
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__":
|
if __name__ == "__main__":
|
||||||
import sys
|
import sys
|
||||||
collada = parse.parse_collada_file(sys.argv[1])
|
collada = parse.parse_collada_file(sys.argv[1])
|
||||||
@ -432,11 +442,5 @@ if __name__ == "__main__":
|
|||||||
#assert type(skin) is types.Skin
|
#assert type(skin) is types.Skin
|
||||||
#foo = render_inverse_bind_matrix(collada, skin)
|
#foo = render_inverse_bind_matrix(collada, skin)
|
||||||
|
|
||||||
state = State()
|
state, out = render_all(collada)
|
||||||
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))
|
|
||||||
print(out.getvalue())
|
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