MCPcopy Create free account
hub / github.com/RenderKit/embree / loadMaterial

Method loadMaterial

tutorials/common/scenegraph/corona_loader.cpp:79–123  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

77 }
78
79 Ref<SceneGraph::MaterialNode> CoronaLoader::loadMaterial(const Ref<XML>& xml)
80 {
81 if (xml->name != "material")
82 THROW_RUNTIME_ERROR(xml->loc.str()+": invalid material: "+xml->name);
83
84 /* native material */
85 if (xml->parm("class") == "Native")
86 {
87 /* we convert into an OBJ material */
88 Ref<OBJMaterial> objmaterial = new OBJMaterial;
89 for (auto& child : xml->children)
90 {
91 if (child->name == "diffuse") {
92 objmaterial->Kd = load<Vec3fa>(child);
93 if (child->children.size() && child->children[0]->name == "map")
94 objmaterial->_map_Kd = loadMap(child->children[0]);
95 }
96 else if (child->name == "reflect") {
97 objmaterial->Ks = load<Vec3fa>(child->child("color"));
98 objmaterial->Ni = load<float >(child->child("ior"));
99 objmaterial->Ns = load<float >(child->child("glossiness"));
100 }
101 else if (child->name == "translucency") {
102 objmaterial->Kt = load<Vec3fa>(child->child("color"));
103 }
104 else if (child->name == "opacity") {
105 objmaterial->d = load<Vec3fa>(child).x;
106 if (child->children.size() && child->children[0]->name == "map")
107 objmaterial->_map_d = loadMap(child->children[0]);
108 }
109 }
110 return objmaterial.dynamicCast<SceneGraph::MaterialNode>();
111 }
112
113 /* reference by name */
114 else if (xml->parm("class") == "Reference")
115 {
116 const std::string name = load<std::string>(xml);
117 return materialMap[name];
118 }
119
120 /* else return default material */
121 else
122 return new OBJMaterial;
123 }
124
125 void CoronaLoader::loadMaterialDefinition(const Ref<XML>& xml)
126 {

Callers

nothing calls this directly

Calls 4

parmMethod · 0.80
strMethod · 0.45
sizeMethod · 0.45
childMethod · 0.45

Tested by

no test coverage detected