+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