X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=scripts%2Fmaketex.py;h=520be8424b02f39740b663bd03fc83c736e05f54;hp=92a284215796b1021ce8ca55f8098a668cc658e6;hb=9d1fa012a23693768bbe287371e97751c03acc50;hpb=aa6020a158c85fdb3b7e9993065861dd1b6531ad diff --git a/scripts/maketex.py b/scripts/maketex.py index 92a28421..520be842 100755 --- a/scripts/maketex.py +++ b/scripts/maketex.py @@ -1,46 +1,72 @@ #!/usr/bin/python def escape(str): - result="" + result = "" for c in str: if c=='"': - result+='\\"' + result += '\\"' elif c=='\\': - result+='\\\\' + result += '\\\\' elif ord(c)<0x20: - result+="\\%03o"%ord(c) + result += "\\%03o"%ord(c) else: - result+=c - return result; + result += c + return result -def make_tex(fn): - import Image +def make_tex(fn, filter="LINEAR", anisotropy=0, wrap=None, srgb=False): + from PIL import Image - img=Image.open(fn) + img = Image.open(fn) - fmt="".join(img.getbands()) + fmt = "".join(img.getbands()) if fmt=="LA": - fmt="LUMINANCE_ALPHA" + fmt = "LUMINANCE_ALPHA" elif fmt=="L": - fmt="LUMINANCE" + fmt = "LUMINANCE" + + if srgb: + fmt = "S"+fmt - result="storage %s %d %d;\n"%(fmt, img.size[0], img.size[1]) - result+="min_filter LINEAR;\n" - result+="raw_data \"" - data=list(img.getdata()) + result = "storage %s %d %d;\n"%(fmt, img.size[0], img.size[1]) + result += "filter %s;\n"%filter + if "MIPMAP" in filter: + 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] - result+=escape("".join(["".join([chr(v) for v in p]) for p in data[i:i+img.size[0]]])) - result+="\";\n" + 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" return result if __name__=="__main__": - import sys import os + import argparse + + 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("--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" - if len(sys.argv)<2: - print "Usage: %s "%sys.argv[0] - else: - out=file(os.path.splitext(sys.argv[1])[0]+".tex", "w") - out.write(make_tex(sys.argv[1])) + 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))