Cleanup: name DUPLICATE_ACCEPT for accepted duplicates
[blender-dev-tools.git] / utils / make_gl_stipple_from_xpm.py
blobad84bb67415a09ff9cb8fc6cabeb16a42fd3f2ae
1 # SPDX-License-Identifier: GPL-2.0-or-later
3 # Converts 32x32 XPM images written be the gimp to GL stipples
4 # takes XPM files as arguments, prints out C style definitions.
6 import sys
7 import os
10 def main():
11 xpm_ls = [f for f in sys.argv[1:] if f.lower().endswith(".xpm")]
13 print("Converting: " + " ".join(xpm_ls))
15 for xpm in xpm_ls:
16 f = open(xpm, "r")
17 data = f.read()
18 f.close()
20 # all after first {
21 data = data.split("{", 1)[1]
23 # all before first }
24 data = data.rsplit("}", 1)[0]
26 data = data.replace("\n", "")
28 data = data.split(",")
30 w, h, c, dummy = map(int, data[0].strip("\"").split())
32 if w != 32 or h != 32 or c != 2:
33 print("Skipping %r, expected 32x32, monochrome, got %s" %
34 (xpm, data[0]))
35 continue
37 # col_1 = data[1][1]
38 col_2 = data[2][1]
40 data = [d[1:-1] for d in data[3:]]
42 bits = []
44 for d in data:
45 for i, c in enumerate(d):
46 bits.append('01'[(c == col_2)])
48 if len(bits) != 1024:
49 print("Skipping %r, expected 1024 bits, got %d" %
50 (xpm, len(bits)))
51 continue
53 bits = "".join(bits)
55 chars = []
57 for i in range(0, len(bits), 8):
58 chars.append("0x%.2x" % int(bits[i:i + 8], 2))
60 fout = sys.stdout
62 var = os.path.basename(xpm)
63 var = os.path.splitext(var)[0]
65 fout.write("GLubyte stipple_%s[128] {\n\t" % var)
66 for i, c in enumerate(chars):
67 if i != 127:
68 fout.write("%s, " % c)
69 else:
70 fout.write("%s" % c)
72 if not ((i + 1) % 8):
73 fout.write("\n\t")
74 fout.write("};\n")
77 if __name__ == "__main__":
78 main()