]> git.tdb.fi Git - libs/gl.git/blobdiff - blender/io_mspgl/export_texture.py
Use more efficient methods to manipulate and store texture data
[libs/gl.git] / blender / io_mspgl / export_texture.py
index 2ffb5246cf448839c9a594e1accd1397c018da79..6ec13eadc583ff680495451609b25651bc173f1c 100644 (file)
@@ -1,4 +1,23 @@
 import os
+import base64
+import codecs
+
+def encode_pixels(pixels):
+       from .datafile import Token
+       return Token(codecs.decode(b"="+base64.b64encode(bytes(pixels))+b"=", "ascii"))
+
+def pixels_to_rgba(pixels):
+       return (int(p*255) for p in pixels)
+
+def pixels_to_rgb(pixels):
+       for i in range(0, len(pixels), 4):
+               yield int(pixels[i]*255)
+               yield int(pixels[i+1]*255)
+               yield int(pixels[i+2]*255)
+
+def pixels_to_gray(pixels):
+       for i in range(0, len(pixels), 4):
+               yield int((pixels[i]+pixels[i+1]+pixels[i+2])*255/3)
 
 class TextureExporter:
        def __init__(self):
@@ -31,17 +50,14 @@ class TextureExporter:
 
                        tex_res.statements.append(Statement("storage", Token(fmt), image.size[0], image.size[1]))
 
+                       pixels = tuple(image.pixels)
                        texdata = ""
                        if usage=='RGBA':
-                               for p in image.pixels:
-                                       texdata += "\\x{:02X}".format(int(p*255))
+                               texdata = encode_pixels(pixels_to_rgba(pixels))
                        elif usage=='GRAY':
-                               for i in range(0, len(image.pixels), 4):
-                                       texdata += "\\x{:02X}".format(image.pixels[i])
+                               texdata = encode_pixels(pixels_to_gray(pixels))
                        else:
-                               for i in range(0, len(image.pixels), 4):
-                                       for j in range(3):
-                                               texdata += "\\x{:02X}".format(int(image.pixels[i+j]*255))
+                               texdata = encode_pixels(pixels_to_rgb(pixels))
                        tex_res.statements.append(Statement("raw_data", texdata))
 
                return tex_res