]> git.tdb.fi Git - libs/gl.git/blobdiff - blender/io_mspgl/export_texture.py
Better checking of the existence of image filepath
[libs/gl.git] / blender / io_mspgl / export_texture.py
index bb3eb28d243ae79a86503dc2bc1e9258adb3d184..dd8191ce9f108652b2924ee1a77fbd0197d0f94c 100644 (file)
@@ -1,13 +1,43 @@
+import os
+
 class TextureExporter:
+       def __init__(self):
+               self.inline_data = True
+
        def export_texture(self, texture):
                from .datafile import Resource, Statement, Token
                tex_res = Resource(texture.name+".tex2d")
 
-               tex_res.statements.append(Statement("min_filter", Token("LINEAR")))
-               tex_res.statements.append(Statement("storage", Token("RGBA"), texture.image.size[0], texture.image.size[1]))
-               texdata = ""
-               for p in texture.image.pixels:
-                       texdata += "\\x%02X"%int(p*255)
-               tex_res.statements.append(Statement("raw_data", texdata))
+               if texture.use_interpolation:
+                       if texture.use_mipmap:
+                               tex_res.statements.append(Statement("filter", Token('LINEAR_MIPMAP_LINEAR')))
+                               tex_res.statements.append(Statement("generate_mipmap", True))
+                       else:
+                               tex_res.statements.append(Statement("filter", Token('LINEAR')))
+                       tex_res.statements.append(Statement("max_anisotropy", texture.filter_eccentricity))
+               else:
+                       if texture.use_mipmap:
+                               tex_res.statements.append(Statement("filter", Token('NEAREST_MIPMAP_NEAREST')))
+                               tex_res.statements.append(Statement("generate_mipmap", True))
+                       else:
+                               tex_res.statements.append(Statement("filter", Token('NEAREST')))
+
+               fn = os.path.basename(texture.image.filepath)
+               if not self.inline_data and fn:
+                       tex_res.statements.append(Statement("external_image", fn))
+               else:
+                       texdata = ""
+                       colorspace = texture.image.colorspace_settings.name
+                       if texture.use_alpha:
+                               fmt = 'SRGB_ALPHA' if colorspace=='sRGB' else 'RGBA'
+                               for p in texture.image.pixels:
+                                       texdata += "\\x{:02X}".format(int(p*255))
+                       else:
+                               fmt = 'SRGB' if colorspace=='sRGB' else 'RGB'
+                               for i in range(0, len(texture.image.pixels), 4):
+                                       for j in range(3):
+                                               texdata += "\\x{:02X}".format(int(texture.image.pixels[i+j]*255))
+                       tex_res.statements.append(Statement("storage", Token(fmt), texture.image.size[0], texture.image.size[1]))
+                       tex_res.statements.append(Statement("raw_data", texdata))
 
                return tex_res