MStatus MayaToCorona::doIt( const MArgList& args) { MStatus stat = MStatus::kSuccess; MArgDatabase argData(syntax(), args); if (argData.isFlagSet("-version", &stat)) { MStringArray res; for (auto v : getFullVersionString()) res.append(v.c_str()); setResult(res); return MS::kSuccess; } MGlobal::displayInfo("Executing mayaToCorona..."); setLogLevel(); if (argData.isFlagSet("-state", &stat)) { Logging::debug(MString("state: ???")); MayaTo::MayaToWorld::WorldRenderState rstate = MayaTo::getWorldPtr()->renderState; if (rstate == MayaTo::MayaToWorld::RSTATETRANSLATING) setResult("rstatetranslating"); if (rstate == MayaTo::MayaToWorld::RSTATERENDERING) setResult("rstaterendering"); if (rstate == MayaTo::MayaToWorld::RSTATEDONE) setResult("rstatedone"); if (rstate == MayaTo::MayaToWorld::RSTATENONE) setResult("rstatenone"); if (rstate == MayaTo::MayaToWorld::RSTATESTOPPED) setResult("rstatestopped"); return MS::kSuccess; } if (argData.isFlagSet("-canDoIPR", &stat)) { if(MayaTo::getWorldPtr()->canDoIPR()) setResult("yes"); else setResult("no"); return MS::kSuccess; } if ( argData.isFlagSet("-stopIpr", &stat)) { Logging::debug(MString("-stopIpr")); EventQueue::Event e; e.type = EventQueue::Event::IPRSTOP; theRenderEventQueue()->push(e); return MS::kSuccess; } if ( argData.isFlagSet("-pauseIpr", &stat)) { Logging::debug(MString("-pauseIpr")); Logging::debug(MString("-stopIpr")); EventQueue::Event e; e.type = EventQueue::Event::IPRPAUSE; theRenderEventQueue()->push(e); return MS::kSuccess; } // I have to request useRenderRegion here because as soon the command is finished, what happens immediatly after the command is // put into the queue, the value is set back to false. std::unique_ptr<MayaTo::CmdArgs> cmdArgs(new MayaTo::CmdArgs); MObject drg = objectFromName("defaultRenderGlobals"); MFnDependencyNode drgfn(drg); cmdArgs->useRenderRegion = drgfn.findPlug("useRenderRegion").asBool(); if ( argData.isFlagSet("-startIpr", &stat)) { Logging::debug(MString("-startIpr")); cmdArgs->renderType = MayaTo::MayaToWorld::WorldRenderType::IPRRENDER; } if (argData.isFlagSet("-width", &stat)) { argData.getFlagArgument("-width", 0, cmdArgs->width); Logging::debug(MString("width: ") + cmdArgs->width); } if (argData.isFlagSet("-height", &stat)) { argData.getFlagArgument("-height", 0, cmdArgs->height); Logging::debug(MString("height: ") + cmdArgs->height); } if ( argData.isFlagSet("-camera", &stat)) { MDagPath camera; MSelectionList selectionList; argData.getFlagArgument("-camera", 0, selectionList); stat = selectionList.getDagPath(0, camera); camera.extendToShape(); Logging::debug(MString("camera: ") + camera.fullPathName()); cmdArgs->cameraDagPath = camera; } EventQueue::Event e; e.cmdArgsData = std::move(cmdArgs); e.type = EventQueue::Event::INITRENDER; theRenderEventQueue()->push(e); // if (MGlobal::mayaState() == MGlobal::kBatch) { RenderQueueWorker::startRenderQueueWorker(); } return MStatus::kSuccess; }
MStatus initializePlugin( MObject obj ) { const MString UserClassify( "shader/surface" ); for (auto versionElement : getFullVersionString()) MGlobal::displayInfo(versionElement.c_str()); MStatus status; MFnPlugin plugin( obj, VENDOR, getFullVersionString()[0].c_str(), "Any"); status = plugin.registerCommand(MAYATOCMDNAME, MayaToAppleseed::creator, MayaToAppleseed::newSyntax ); if (!status) { status.perror("cannot register command: mayatoappleseed"); return status; } //status = plugin.registerNode( STANDIN_LOCATOR_NODE_NAME, mtap_StandinLocator::id, mtap_StandinLocator::creator, mtap_StandinLocator::initialize, MPxNode::kLocatorNode); //if (!status) { // status.perror("cannot register node: mtap_StandinLocator"); // return status; //} //status = plugin.registerNode( STANDIN_MESH_NODE_NAME, mtap_standinMeshNode::id, mtap_standinMeshNode::creator, mtap_standinMeshNode::initialize); //if (!status) { // status.perror("cannot register node: mtap_standinMeshNode"); // return status; //} status = plugin.registerNode(MayaToAppleseedGlobalsName, MayaToAppleseedGlobals::id, MayaToAppleseedGlobals::creator, MayaToAppleseedGlobals::initialize ); if (!status) { status.perror("cannot register node: MayaToAppleseedGlobals"); return status; } CHECK_MSTATUS(MHWRender::MDrawRegistry::registerSurfaceShadingNodeOverrideCreator(asDisneyMaterialIdDrawDBClassification, asDisneyMaterialId, asDisneyMaterialOverride::creator)); status = plugin.registerNode("asDisneyMaterial", asDisneyMaterial::id, asDisneyMaterial::creator, asDisneyMaterial::initialize, MPxNode::kDependNode, &asDisneyMaterialIdFullClassification); CHECK_MSTATUS(status); status = plugin.registerNode("asLayeredShader", asLayeredShader::id, asLayeredShader::creator, asLayeredShader::initialize, MPxNode::kDependNode, &asLayeredIdFullClassification); CHECK_MSTATUS(status); MString command( "if( `window -exists createRenderNodeWindow` ) {refreshCreateRenderNodeWindow(\"" ); command += UserClassify; command += "\");}\n"; MGlobal::executeCommand( command ); setRendererName("Appleseed"); setRendererShortCutName("mtap"); setRendererHome(getenv("MTAP_HOME")); MString cmd = MString("import mtap_initialize as minit; minit.initRenderer()"); MGlobal::displayInfo("try to register..."); status = MGlobal::executePythonCommand(cmd, true, false); if(!status) { status.perror("Problem executing cmd: mtap_initialize.initRenderer()"); return status; } MayaTo::defineWorld(); MString loadPath = plugin.loadPath(); MayaTo::getWorldPtr()->shaderSearchPath.append(loadPath); if (MGlobal::mayaState() != MGlobal::kBatch) { MSwatchRenderRegister::registerSwatchRender(swatchName, NewSwatchRenderer::creator); } #if MAYA_API_VERSION >= 201600 status = plugin.registerRenderer("Appleseed", mtap_MayaRenderer::creator); if (!status) { status.perror("cannot register node: Appleseed Maya renderer"); return status; } #endif return status; }