]> git.tdb.fi Git - libs/gl.git/blobdiff - scripts/maketex.py
Check the flat qualifier from the correct member
[libs/gl.git] / scripts / maketex.py
index 2e1069486585a252584993f0bc3217fcf8131fc3..72ff49acb7a1173e536a72721bed4844bd7f5065 100755 (executable)
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/python3
 
 def escape(str):
        result = ""
@@ -8,42 +8,47 @@ def escape(str):
                elif c=='\\':
                        result += '\\\\'
                elif ord(c)<0x20:
-                       result += "\\%03o"%ord(c)
+                       result += "\\{:03o}".format(ord(c))
                else:
                        result += c
-       return result;
+       return result
+
+def values(data, size):
+       for y in range(size[1]-1, -1, -1):
+               for x in range(size[0]):
+                       yield data[x+y*size[0]]
+
+def values_multi(data, size):
+       for y in range(size[1]-1, -1, -1):
+               for x in range(size[0]):
+                       for c in data[x+y*size[0]]:
+                               yield c
 
-def make_tex(fn, filter="LINEAR", anisotropy=0, wrap=None, srgb=False):
+def make_tex(fn, mipmap=False, srgb=False):
        from PIL import Image
+       import base64
+       import codecs
 
        img = Image.open(fn)
 
        fmt = "".join(img.getbands())
        if fmt=="LA":
-               fmt = "LUMINANCE_ALPHA"
+               fmt = "LUMINANCE8_ALPHA8"
        elif fmt=="L":
-               fmt = "LUMINANCE"
+               fmt = "LUMINANCE8"
 
        if srgb:
                fmt = "S"+fmt
 
-       result = "storage %s %d %d;\n"%(fmt, img.size[0], img.size[1])
-       result += "filter %s;\n"%filter
-       if "MIPMAP" in filter:
+       result = "storage {} {} {};\n".format(fmt, img.size[0], img.size[1])
+       if mipmap:
                result += "generate_mipmap true;\n"
-       if anisotropy:
-               result += "max_anisotropy %d;\n"%anisotropy
-       if wrap:
-               result += "wrap %s;\n"%wrap
-       result += "raw_data \""
-       data = list(img.getdata())
-       for y in range(img.size[1]):
-               i = (img.size[1]-1-y)*img.size[0]
-               if fmt=="LUMINANCE" or fmt=="SLUMINANCE":
-                       result += escape("".join([chr(v) for v in data[i:i+img.size[0]]]))
-               else:
-                       result += escape("".join(["".join([chr(v) for v in p]) for p in data[i:i+img.size[0]]]))
-       result += "\";\n"
+
+       if len(img.getbands())==1:
+               pixels = values(img.getdata(), img.size)
+       else:
+               pixels = values_multi(img.getdata(), img.size)
+       result += "raw_data ={}=;\n".format(codecs.decode(base64.b64encode(bytes(pixels)), "ascii"))
 
        return result
 
@@ -53,20 +58,14 @@ if __name__=="__main__":
 
        parser = argparse.ArgumentParser()
        parser.add_argument("-o", "--output", metavar="FILE", help="Output filename")
-       parser.add_argument("-f", "--filter", choices=["NEAREST", "LINEAR", "MIPMAP"], default="LINEAR", help="Filtering mode")
-       parser.add_argument("-a", "--anisotropy", metavar="NUMBER", help="Maximum anisotropy, 0 = disable")
-       parser.add_argument("-w", "--wrap", choices=["REPEAT", "CLAMP_TO_EDGE", "MIRRORED_REPEAT"], help="Wrapping mode")
+       parser.add_argument("-m", "--mipmap", action="store_true", help="Enable mipmaps")
        parser.add_argument("--srgb", action="store_const", const=True, help="Use sRGB color space")
        parser.add_argument("image")
 
        args = parser.parse_args()
 
-       filter = args.filter
-       if filter=="MIPMAP":
-               filter = "LINEAR_MIPMAP_LINEAR"
-
        out_fn = args.output
        if not out_fn:
                out_fn = os.path.splitext(args.image)[0]+".tex2d"
-       out = file(out_fn, "w")
-       out.write(make_tex(args.image, filter, args.anisotropy, args.wrap, args.srgb))
+       out = open(out_fn, "w")
+       out.write(make_tex(args.image, args.mipmap, args.srgb))