X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=blender%2Fio_mspgl%2Fexport_material.py;h=289fb8810d4beff83826d4a4905c11bdd71e3b39;hb=f77259ba680e73daee6008f53dafe92e84a0b5f5;hp=86fce780c00b22e151aaa04ee79f0941d2ddf3a8;hpb=725fccf49be5669a5a74f267eb409bf2fc071e05;p=libs%2Fgl.git diff --git a/blender/io_mspgl/export_material.py b/blender/io_mspgl/export_material.py index 86fce780..289fb881 100644 --- a/blender/io_mspgl/export_material.py +++ b/blender/io_mspgl/export_material.py @@ -12,27 +12,26 @@ def get_colormap(srgb): else: return lambda x: x -def image_name(i): - fp = i.filepath - if fp: - return os.path.split(fp)[1] - else: - return i.name - class MaterialExporter: def __init__(self): - self.textures = 'REF' + self.single_file = True + self.use_textures = True - def export_technique_resources(self, material, resources): + def create_texture_exporter(self): from .export_texture import TextureExporter texture_export = TextureExporter() + texture_export.inline_data = self.single_file + return texture_export + + def export_technique_resources(self, material, resources): + texture_export = self.create_texture_exporter() mat_name = material.name+".mat" if mat_name not in resources: resources[mat_name] = self.export_material(material) - if self.textures=='INLINE': + if self.use_textures: for s in material.texture_slots: if s and s.texture.type=='IMAGE' and s.texture.image: tex_name = s.texture.name+".tex2d" @@ -45,7 +44,7 @@ class MaterialExporter: mat_res = resources[material.name+".mat"] textures = {} - if self.textures!='NONE': + if self.use_textures: image_texture_slots = [s for s in material.texture_slots if s and s.texture.type=='IMAGE' and s.texture.image] for s in image_texture_slots: if s.use_map_color_diffuse: @@ -57,21 +56,33 @@ class MaterialExporter: if not obj.inherit_tech: return [] + if self.single_file: + raise Exception("Can't export inherited technique to a single file") + st = Statement("inherit", material.technique) for s, t in textures.items(): - st.sub.append(Statement("texture", s, image_name(t.image))) + if t.default_filter: + st.sub.append(Statement("texture", s, image_name(t.image))) + else: + st.sub.append(tech_res.create_reference_statement("texture", s, resources[t.name+".tex2d"])) if material.override_material: st.sub.append(tech_res.create_reference_statement("material", "surface", mat_res)) tech_res.statements.append(st) else: st = Statement("pass", "") - st.sub.append(tech_res.create_embed_statement("material", mat_res)) + if self.single_file: + st.sub.append(tech_res.create_embed_statement("material", mat_res)) + else: + st.sub.append(tech_res.create_reference_statement("material", mat_res)) if "diffuse_map" in textures: diffuse_tex = textures["diffuse_map"] + tex_res = resources[diffuse_tex.name+".tex2d"] ss = Statement("texunit", 0) - if self.textures=='INLINE': - ss.sub.append(tech_res.create_embed_statement("texture2d", resources[diffuse_tex.name+".tex2d"])) + if self.single_file: + ss.sub.append(tech_res.create_embed_statement("texture2d", tex_res)) + elif not diffuse_tex.default_filter: + ss.sub.append(tech_res.create_reference_statement("texture2d", tex_res)) else: ss.sub.append(Statement("texture", image_name(diffuse_tex.image))) st.sub.append(ss)