+
+
+class MaterialMapExporter:
+ def __init__(self):
+ self.single_file = True
+
+ def export_technique_resources(self, material_map, resources):
+ from .datafile import Resource, Statement, Token
+ diffuse_name = material_map.name+"_diffuse.tex2d"
+ if diffuse_name not in resources:
+ diffuse_res = Resource(diffuse_name)
+
+ fmt = 'SRGB_ALPHA' if material_map.srgb_colors else 'RGBA'
+
+ diffuse_res.statements.append(Statement("min_filter", Token('NEAREST')))
+ diffuse_res.statements.append(Statement("mag_filter", Token('NEAREST')))
+ diffuse_res.statements.append(Statement("storage", Token(fmt), *material_map.size))
+ diffuse_res.statements.append(Statement("raw_data", material_map.diffuse_data))
+
+ resources[diffuse_name] = diffuse_res
+
+ if "basic_white.mat" not in resources:
+ mat_res = Resource("basic_white.mat")
+ mat_res.statements.append(Statement("diffuse", 1.0, 1.0, 1.0, 1.0))
+
+ resources["basic_white.mat"] = mat_res
+
+ def export_technique(self, material_map, *, resources=None):
+ from .datafile import Resource, Statement
+ tech_res = Resource(material_map.name+".tech")
+
+ mat_res = resources["basic_white.mat"]
+ diffuse_res = resources[material_map.name+"_diffuse.tex2d"]
+
+ if material_map.technique:
+ if self.single_file:
+ raise Exception("Can't export inherited technique to a single file")
+
+ st = Statement("inherit", material_map.technique)
+ st.sub.append(tech_res.create_reference_statement("texture", "diffuse_map", diffuse_res))
+ st.sub.append(tech_res.create_reference_statement("material", "surface", mat_res))
+ tech_res.statements.append(st)
+ else:
+ st = Statement("pass", "")
+ 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))
+ ss = Statement("texunit", 0)
+ if self.single_file:
+ ss.sub.append(tech_res.create_embed_statement("texture2d", diffuse_res))
+ else:
+ ss.sub.append(tech_res.create_reference_statement("texture", diffuse_res))
+ st.sub.append(ss)
+ tech_res.statements.append(st)
+
+ return tech_res