X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=scripts%2Fmaketex.py;h=520be8424b02f39740b663bd03fc83c736e05f54;hp=916ce747c404f8b26210078a0e07b7d53f8b5fbf;hb=HEAD;hpb=e0e6d12dc7f55a1033e6939dcccdc04e4b469692 diff --git a/scripts/maketex.py b/scripts/maketex.py index 916ce747..72ff49ac 100755 --- a/scripts/maketex.py +++ b/scripts/maketex.py @@ -13,37 +13,42 @@ def escape(str): result += c return result -def make_tex(fn, filter="LINEAR", anisotropy=0, wrap=None, srgb=False): +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, 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 {} {} {};\n".format(fmt, img.size[0], img.size[1]) - result += "filter {};\n".format(filter) - if "MIPMAP" in filter: + if mipmap: result += "generate_mipmap true;\n" - if anisotropy: - result += "max_anisotropy {};\n".format(anisotropy) - if wrap: - result += "wrap {};\n".format(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 = open(out_fn, "w") - out.write(make_tex(args.image, filter, args.anisotropy, args.wrap, args.srgb)) + out.write(make_tex(args.image, args.mipmap, args.srgb))