PluginPtr DiskCacheNode::createPlugin() { std::vector<std::string> grouping; grouping.push_back(PLUGIN_GROUP_OTHER); PluginPtr ret = Plugin::create(DiskCacheNode::create, DiskCacheNode::createRenderClone, PLUGINID_NATRON_DISKCACHE, "DiskCache", 1, 0, grouping); QString desc = tr("This node caches all images of the connected input node onto the disk with full 32bit floating point raw data. " "When an image is found in the cache, %1 will then not request the input branch to render out that image. " "The DiskCache node only caches full images and does not split up the images in chunks. " "The DiskCache node is useful if working with a large and complex node tree: this allows to break the tree into smaller " "branches and cache any branch that one is no longer working on. The cached images are saved by default in the same directory that is used " "for the viewer cache but you can set its location and size in the preferences. A solid state drive disk is recommended for efficiency of this node. " "By default all images that pass into the node are cached but they depend on the zoom-level of the viewer. For convenience you can cache " "a specific frame range at scale 100% much like a writer node would do.\n" "WARNING: The DiskCache node must be part of the tree when you want to read cached data from it.").arg( QString::fromUtf8(NATRON_APPLICATION_NAME) ); ret->setProperty<std::string>(kNatronPluginPropDescription, desc.toStdString()); EffectDescriptionPtr effectDesc = ret->getEffectDescriptor(); effectDesc->setProperty<RenderSafetyEnum>(kEffectPropRenderThreadSafety, eRenderSafetyFullySafe); effectDesc->setProperty<bool>(kEffectPropSupportsTiles, false); effectDesc->setProperty<bool>(kEffectPropSupportsMultiResolution, true); ret->setProperty<std::string>(kNatronPluginPropIconFilePath, "Images/diskcache_icon.png"); ret->setProperty<ImageBitDepthEnum>(kNatronPluginPropOutputSupportedBitDepths, eImageBitDepthFloat); ret->setProperty<std::bitset<4> >(kNatronPluginPropOutputSupportedComponents, std::bitset<4>(std::string("1111"))); ret->setProperty<ImageBitDepthEnum>(kNatronPluginPropOutputSupportedBitDepths, eImageBitDepthFloat, 0); ret->setProperty<std::bitset<4> >(kNatronPluginPropOutputSupportedComponents, std::bitset<4>(std::string("1111"))); { InputDescriptionPtr input = InputDescription::create("Source", "", "", false, false, std::bitset<4>(std::string("1111"))); ret->addInputDescription(input); } return ret; }
PluginPtr RotoShapeRenderNode::createPlugin() { std::vector<std::string> grouping; grouping.push_back(PLUGIN_GROUP_PAINT); PluginPtr ret = Plugin::create(RotoShapeRenderNode::create, RotoShapeRenderNode::createRenderClone, PLUGINID_NATRON_ROTOSHAPE, "RotoShape", 1, 0, grouping); ret->setProperty<bool>(kNatronPluginPropIsInternalOnly, true); EffectDescriptionPtr effectDesc = ret->getEffectDescriptor(); effectDesc->setProperty<RenderSafetyEnum>(kEffectPropRenderThreadSafety, eRenderSafetyFullySafe); #ifdef ROTO_SHAPE_RENDER_CPU_USES_CAIRO effectDesc->setProperty<PluginOpenGLRenderSupport>(kEffectPropSupportsOpenGLRendering, ePluginOpenGLRenderSupportYes); #else effectDesc->setProperty<PluginOpenGLRenderSupport>(kEffectPropSupportsOpenGLRendering, ePluginOpenGLRenderSupportNeeded); #endif effectDesc->setProperty<bool>(kEffectPropSupportsTiles, false); effectDesc->setProperty<bool>(kEffectPropSupportsMultiResolution, true); effectDesc->setProperty<bool>(kEffectPropTemporalImageAccess, true); ret->setProperty<bool>(kNatronPluginPropMultiPlanar, true); ret->setProperty<ImageBitDepthEnum>(kNatronPluginPropOutputSupportedBitDepths, eImageBitDepthFloat, 0); ret->setProperty<std::bitset<4> >(kNatronPluginPropOutputSupportedComponents, std::bitset<4>(std::string("1111"))); { InputDescriptionPtr input = InputDescription::create("Source", "Source", "", true, false, std::bitset<4>(std::string("1111"))); ret->addInputDescription(input); } return ret; }