std::shared_ptr<Node> createNode(std::string name, std::string type, Any value, int flags, std::string documentation) { std::map<std::string, CreatorFct>::iterator it = nodeRegistry.find(type); CreatorFct creator = nullptr; if (it == nodeRegistry.end()) { std::string creatorName = "ospray_create_sg_node__" + type; creator = (CreatorFct)getSymbol(creatorName); if (!creator) throw std::runtime_error("unknown OSPRay sg::Node '" + type + "'"); nodeRegistry[type] = creator; } else { creator = it->second; } std::shared_ptr<sg::Node> newNode(creator()); newNode->setName(name); newNode->setType(type); newNode->setFlags(flags); newNode->setDocumentation(documentation); if (value.valid()) newNode->setValue(value); return newNode; }