mirror of
https://github.com/guezoloic/LearnOpenGL.git
synced 2026-01-25 04:34:14 +00:00
rework(glsl2c): add c like architecture and types
This commit is contained in:
65
glsl2c.py
65
glsl2c.py
@@ -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")):
|
|
||||||
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):
|
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())
|
||||||
|
|||||||
Reference in New Issue
Block a user