]> git.tdb.fi Git - libs/gl.git/blobdiff - blender/io_mspgl/export_object.py
Combine shared_mesh and shared_tech into a single option
[libs/gl.git] / blender / io_mspgl / export_object.py
index 810d1cbfe42fc719878dc48580fa5b8b0b9a4083..5a707bad216e0250360fa34e13589af558997030 100644 (file)
@@ -32,9 +32,8 @@ class ObjectExporter:
        def __init__(self):
                self.textures = "REF"
                self.separate_mesh = False
-               self.shared_mesh = True
                self.separate_tech = False
-               self.shared_tech = True
+               self.shared_resources = True
                self.export_lods = True
 
        def export(self, context, out_file, obj=None, progress=None):
@@ -82,7 +81,7 @@ class ObjectExporter:
                        if l.technique!=prev_tech[0]:
                                same_tech = False
                        if i==0 or not same_tech:
-                               self.export_object_technique(l, mesh, out_file, i)
+                               self.export_object_technique(l, out_file, i)
                                prev_tech = (l.technique, mat)
 
                        if i>0:
@@ -101,7 +100,7 @@ class ObjectExporter:
                if self.separate_mesh:
                        from .outfile import open_output
                        path, name = external_name(out_file, ".mesh", lod_index)
-                       if self.shared_mesh:
+                       if self.shared_resources:
                                name = obj.data.name+".mesh"
                        mesh_out = open_output(os.path.join(path, name))
                        mesh = mesh_export.export(context, mesh_out, obj, progress)
@@ -113,7 +112,7 @@ class ObjectExporter:
 
                return mesh
 
-       def export_object_technique(self, obj, mesh, out_file, lod_index):
+       def export_object_technique(self, obj, out_file, lod_index):
                material = None
                if obj.material_slots:
                        material = obj.material_slots[0].material
@@ -142,75 +141,44 @@ class ObjectExporter:
                        else:
                                out_file.write("technique", '"{}"'.format(obj.technique))
                elif self.separate_tech:
-                       if self.shared_tech and material:
+                       if self.shared_resources and material:
                                name = material.name+".tech"
                        tech_out = open_output(os.path.join(path, name))
-                       self.export_technique_definition(material, mesh, tech_out)
+                       self.export_technique_definition(material, tech_out)
                        out_file.write("technique", '"{}"'.format(name))
                else:
                        out_file.begin("technique")
-                       self.export_technique_definition(material, obj.material_tex, mesh, out_file)
+                       self.export_technique_definition(material, out_file)
                        out_file.end()
 
-       def export_technique_definition(self, material, material_tex, mesh, out_file):
+       def export_technique_definition(self, material, out_file):
                out_file.begin("pass", '""')
                if material:
-                       if material_tex:
-                               out_file.begin("material")
-                               out_file.write("diffuse", 1.0, 1.0, 1.0, 1.0)
-                               out_file.end()
-                               index = 0
-                               for u in mesh.uv_layers:
-                                       if u.name=="material_tex":
-                                               index = u.unit
-                               out_file.begin("texunit", index)
-                               out_file.begin("texture2d")
-                               out_file.write("min_filter", "NEAREST")
-                               out_file.write("mag_filter", "NEAREST")
-                               out_file.write("storage", "RGB", len(mesh.materials), 1)
-                               texdata = '"'
-                               for m in mesh.materials:
-                                       cm = get_colormap(m.srgb_colors)
-                                       color = [int(cm(c)*255) for c in m.diffuse_color*m.diffuse_intensity]
-                                       texdata += "\\x%02X\\x%02X\\x%02X"%tuple(color)
-                               texdata += '"'
-                               out_file.write("raw_data", texdata)
-                               out_file.end()
-                               out_file.end()
-                       else:
-                               out_file.begin("material")
-                               self.export_material(material, out_file)
-                               out_file.end()
+                       out_file.begin("material")
+                       self.export_material(material, out_file)
+                       out_file.end()
 
                        if self.textures!="NONE":
+                               diffuse_tex = None
                                for slot in material.texture_slots:
-                                       if not slot:
-                                               continue
-
-                                       tex = slot.texture
-                                       if tex.type!="IMAGE":
-                                               continue
-
-                                       if slot.uv_layer:
-                                               for u in mesh.uv_layers:
-                                                       if u.name==slot.uv_layer:
-                                                               index = u.unit
-                                       else:
-                                               index = mesh.uv_layers[0].unit
+                                       if slot and slot.texture.type=="IMAGE" and slot.use_map_color_diffuse:
+                                               diffuse_tex = slot.texture
+                                               break
 
-                                       out_file.begin("texunit", index)
+                               if diffuse_tex:
+                                       out_file.begin("texunit", 0)
                                        if self.textures=="INLINE":
                                                out_file.begin("texture2d")
                                                out_file.write("min_filter", "LINEAR")
-                                               out_file.write("storage", "RGBA", tex.image.size[0], tex.image.size[1])
+                                               out_file.write("storage", "RGBA", diffuse_tex.image.size[0], diffuse_tex.image.size[1])
                                                texdata = '"'
-                                               for p in tex.image.pixels:
+                                               for p in diffuse_tex.image.pixels:
                                                        texdata += "\\x%02X"%int(p*255)
                                                texdata += '"'
                                                out_file.write("raw_data", texdata)
                                                out_file.end()
                                        else:
-                                               out_file.write("texture", '"%s"'%image_name(tex.image))
+                                               out_file.write("texture", '"%s"'%image_name(diffuse_tex.image))
                                        out_file.end()
 
                out_file.end()
@@ -228,4 +196,4 @@ class ObjectExporter:
                        out_file.write("ambient", cm(amb.r), cm(amb.g), cm(amb.b), 1.0)
                spec = mat.specular_color*mat.specular_intensity
                out_file.write("specular", spec.r, spec.g, spec.b, 1.0)
-               out_file.write("shininess", mat.specular_hardness);
+               out_file.write("shininess", mat.specular_hardness)