diff --git a/glsl2c.py b/glsl2c.py index ed8cde5..ac52017 100644 --- a/glsl2c.py +++ b/glsl2c.py @@ -1,35 +1,46 @@ #!/usr/bin/env python3 + import sys from pathlib import Path -src = sys.argv[1] -dst = sys.argv[2] +line: int = 12 -if len(sys.argv) != 3 or not src.endswith((".glsl", ".vert", ".frag")): - sys.exit(1) - -# variable name -varname = src.replace("/", "_").replace(".", "_") - -# read to binary mode -content = Path(src).read_bytes() - -line = 12 - -with open(dst, "w") as f: - # content array - f.write(f"unsigned char {varname}[] = {{\n") - +def write_binary(content: str) -> str: + text = "" for i, byte in enumerate(content): - # tab if i % line == 0: - f.write("\t") - # hexa - f.write(f"0x{byte:02x}, ") - - # LF/CRLF + text += "\t" + text += f"0x{byte:02x}, " if (i + 1) % line == 0: - f.write("\n") - f.write("};\n") - # content size - f.write(f"unsigned int {varname}_len = {len(content)};") \ No newline at end of file + text += "\n" + text += "\n" + return text + +def main() -> int: + # check arguments + if len(sys.argv) < 2 or len(sys.argv) > 3: + print("glsl2c.py [output_c_file]") + return 1 + + src = Path(sys.argv[1]) + + if not src.suffix.endswith((".glsl", ".frag", ".vert")): + print(f"file error: cannot convert {src.suffix} to .c file") + return 1 + + dst = Path(sys.argv[2]) if len(sys.argv) == 3 else src.with_suffix(".c") + + # variable name + varname = f"{src.stem}_{src.suffix[1:]}" + + # read binary + content = src.read_bytes() + + with open(dst, "w") as f: + f.write(f"unsigned char {varname}[] = {{\n{write_binary(content)}}};\n") + f.write(f"unsigned int {varname}_len = {len(content)};\n") + return 0 + + +if __name__ == "__main__": + sys.exit(main())