Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorNathan Letwory <nathan@letworyinteractive.com>2010-10-06 17:21:08 +0400
committerNathan Letwory <nathan@letworyinteractive.com>2010-10-06 17:21:08 +0400
commit0d815d3528912eede6ee90f3a12435cbcca1eb04 (patch)
tree6d82aa7dcb91e27c8127bc4a7759fae793632412 /source
parente161c22dc24842e1900f3c68948fe7a4af973c4e (diff)
COLLADA: Split MaterialsExporter into separate files.
Diffstat (limited to 'source')
-rw-r--r--source/blender/collada/DocumentExporter.cpp70
-rw-r--r--source/blender/collada/MaterialExporter.cpp55
-rw-r--r--source/blender/collada/MaterialExporter.h88
3 files changed, 148 insertions, 65 deletions
diff --git a/source/blender/collada/DocumentExporter.cpp b/source/blender/collada/DocumentExporter.cpp
index 914c8a656f9..f93a8ef72cd 100644
--- a/source/blender/collada/DocumentExporter.cpp
+++ b/source/blender/collada/DocumentExporter.cpp
@@ -106,6 +106,7 @@ extern char build_rev[];
#include "CameraExporter.h"
#include "GeometryExporter.h"
#include "LightExporter.h"
+#include "MaterialExporter.h"
// can probably go after refactor is complete
#include "InstanceWriter.h"
@@ -151,43 +152,7 @@ void forEachObjectInScene(Scene *sce, Functor &f)
}
}
-// used in forEachMaterialInScene
-template <class MaterialFunctor>
-class ForEachMaterialFunctor
-{
- std::vector<std::string> mMat; // contains list of material names, to avoid duplicate calling of f
- MaterialFunctor *f;
-public:
- ForEachMaterialFunctor(MaterialFunctor *f) : f(f) { }
- void operator ()(Object *ob)
- {
- int a;
- for(a = 0; a < ob->totcol; a++) {
-
- Material *ma = give_current_material(ob, a+1);
- if (!ma) continue;
-
- std::string translated_id = translate_id(id_name(ma));
- if (find(mMat.begin(), mMat.end(), translated_id) == mMat.end()) {
- (*this->f)(ma, ob);
-
- mMat.push_back(translated_id);
- }
- }
- }
-};
-
-// calls f for each unique material linked to each object in sce
-// f should have
-// void operator()(Material* ma)
-template<class Functor>
-void forEachMaterialInScene(Scene *sce, Functor &f)
-{
- ForEachMaterialFunctor<Functor> matfunc(&f);
- GeometryFunctor gf;
- gf.forEachMeshObjectInScene<ForEachMaterialFunctor<Functor> >(sce, matfunc);
-}
// OB_MESH is assumed
std::string getActiveUVLayerName(Object *ob)
@@ -344,8 +309,8 @@ public:
void exportImages(Scene *sce)
{
openLibrary();
-
- forEachMaterialInScene(sce, *this);
+ MaterialFunctor mf;
+ mf.forEachMaterialInScene<ImagesExporter>(sce, *this);
closeLibrary();
}
@@ -401,8 +366,8 @@ public:
void exportEffects(Scene *sce)
{
openLibrary();
-
- forEachMaterialInScene(sce, *this);
+ MaterialFunctor mf;
+ mf.forEachMaterialInScene<EffectsExporter>(sce, *this);
closeLibrary();
}
@@ -652,31 +617,6 @@ public:
}
};
-class MaterialsExporter: COLLADASW::LibraryMaterials
-{
-public:
- MaterialsExporter(COLLADASW::StreamWriter *sw): COLLADASW::LibraryMaterials(sw){}
- void exportMaterials(Scene *sce)
- {
- openLibrary();
-
- forEachMaterialInScene(sce, *this);
-
- closeLibrary();
- }
-
- void operator()(Material *ma, Object *ob)
- {
- std::string name(id_name(ma));
-
- openMaterial(translate_id(name), name);
-
- std::string efid = translate_id(name) + "-effect";
- addInstanceEffect(COLLADASW::URI(COLLADABU::Utils::EMPTY_STRING, efid));
-
- closeMaterial();
- }
-};
// TODO: it would be better to instantiate animations rather than create a new one per object
// COLLADA allows this through multiple <channel>s in <animation>.
diff --git a/source/blender/collada/MaterialExporter.cpp b/source/blender/collada/MaterialExporter.cpp
new file mode 100644
index 00000000000..e873227745c
--- /dev/null
+++ b/source/blender/collada/MaterialExporter.cpp
@@ -0,0 +1,55 @@
+/**
+ * $Id: DocumentExporter.cpp 32309 2010-10-05 00:05:14Z jesterking $
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Chingiz Dyussenov, Arystanbek Dyussenov, Jan Diederich, Tod Liverseed,
+ * Nathan Letwory
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#include "COLLADABUUtils.h"
+
+#include "BKE_material.h"
+
+#include "MaterialExporter.h"
+#include "collada_internal.h"
+
+MaterialsExporter::MaterialsExporter(COLLADASW::StreamWriter *sw): COLLADASW::LibraryMaterials(sw){}
+
+void MaterialsExporter::exportMaterials(Scene *sce)
+{
+ openLibrary();
+
+ MaterialFunctor mf;
+ mf.forEachMaterialInScene<MaterialsExporter>(sce, *this);
+
+ closeLibrary();
+}
+
+void MaterialsExporter::operator()(Material *ma, Object *ob)
+{
+ std::string name(id_name(ma));
+
+ openMaterial(translate_id(name), name);
+
+ std::string efid = translate_id(name) + "-effect";
+ addInstanceEffect(COLLADASW::URI(COLLADABU::Utils::EMPTY_STRING, efid));
+
+ closeMaterial();
+}
diff --git a/source/blender/collada/MaterialExporter.h b/source/blender/collada/MaterialExporter.h
new file mode 100644
index 00000000000..35aaaad43fd
--- /dev/null
+++ b/source/blender/collada/MaterialExporter.h
@@ -0,0 +1,88 @@
+/**
+ * $Id: DocumentExporter.cpp 32309 2010-10-05 00:05:14Z jesterking $
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Chingiz Dyussenov, Arystanbek Dyussenov, Jan Diederich, Tod Liverseed,
+ * Nathan Letwory
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#ifndef __MATERIALEXPORTER_H__
+#define __MATERIALEXPORTER_H__
+
+#include "COLLADASWLibraryMaterials.h"
+#include "COLLADASWStreamWriter.h"
+
+#include "DNA_material_types.h"
+#include "DNA_object_types.h"
+#include "DNA_scene_types.h"
+
+#include "GeometryExporter.h"
+
+class MaterialsExporter: COLLADASW::LibraryMaterials
+{
+public:
+ MaterialsExporter(COLLADASW::StreamWriter *sw);
+ void exportMaterials(Scene *sce);
+ void operator()(Material *ma, Object *ob);
+};
+
+// used in forEachMaterialInScene
+template <class Functor>
+class ForEachMaterialFunctor
+{
+ std::vector<std::string> mMat; // contains list of material names, to avoid duplicate calling of f
+ Functor *f;
+public:
+ ForEachMaterialFunctor(Functor*f) : f(f) {}
+
+ void operator ()(Object *ob)
+ {
+ int a;
+ for(a = 0; a < ob->totcol; a++) {
+
+ Material *ma = give_current_material(ob, a+1);
+
+ if (!ma) continue;
+
+ std::string translated_id = translate_id(id_name(ma));
+ if (find(mMat.begin(), mMat.end(), translated_id) == mMat.end()) {
+ (*this->f)(ma, ob);
+
+ mMat.push_back(translated_id);
+ }
+ }
+ }
+};
+
+struct MaterialFunctor {
+ // calls f for each unique material linked to each object in sce
+ // f should have
+ // void operator()(Material* ma)
+ template<class Functor>
+ void forEachMaterialInScene(Scene *sce, Functor &f)
+ {
+ ForEachMaterialFunctor<Functor> matfunc(&f);
+ GeometryFunctor gf;
+ gf.forEachMeshObjectInScene<ForEachMaterialFunctor<Functor> >(sce, matfunc);
+ }
+};
+
+
+#endif