rework(glsl2c): add c like architecture and types

This commit is contained in:
2026-01-02 10:44:50 +01:00
parent 239e0c2b62
commit 4831312f9e

View File

@@ -1,35 +1,46 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
import sys import sys
from pathlib import Path from pathlib import Path
src = sys.argv[1] line: int = 12
dst = sys.argv[2]
if len(sys.argv) != 3 or not src.endswith((".glsl", ".vert", ".frag")): def write_binary(content: str) -> str:
sys.exit(1) text = ""
# 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")
for i, byte in enumerate(content): for i, byte in enumerate(content):
# tab
if i % line == 0: if i % line == 0:
f.write("\t") text += "\t"
# hexa text += f"0x{byte:02x}, "
f.write(f"0x{byte:02x}, ")
# LF/CRLF
if (i + 1) % line == 0: if (i + 1) % line == 0:
f.write("\n") text += "\n"
f.write("};\n") text += "\n"
# content size return text
f.write(f"unsigned int {varname}_len = {len(content)};")
def main() -> int:
# check arguments
if len(sys.argv) < 2 or len(sys.argv) > 3:
print("glsl2c.py <shader_file> [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())