#include <stdio.h>
#include <maya/MObject.h>
#include <maya/MFStream.h>
#include <maya/M3dView.h>
#include <maya/MFnPlugin.h>
#include <maya/MString.h>
#include <maya/MArgList.h>
#include <maya/MPxCommand.h>
#include <maya/MSyntax.h>
#include <maya/MArgDatabase.h>
#include <maya/MAnimControl.h>
#include <maya/MGlobal.h>
#include <maya/MImage.h>
#include <maya/MIOStream.h>
#include <maya/MViewport2Renderer.h>
#include <maya/MDrawContext.h>
#include <maya/MRenderTargetManager.h>
#include <maya/MRenderUtilities.h>
#define kFilenameFlag "-f"
#define kFilenameFlagLong "-filename"
#define kStartFrameFlag "-sf"
#define kStartFrameFlagLong "-startFrame"
#define kEndFrameFlag "-ef"
#define kEndFrameFlagLong "-endFrame"
#define kImageSizeFlag "-is"
#define kImageSizeFlagLong "-imageSize"
#define commandName "blast2"
{
public:
blast2Cmd();
~blast2Cmd() override;
static void* creator();
private:
unsigned int mWidth;
unsigned int mHeight;
MString mPostRenderNotificationName;
MString mPostRenderNotificationSemantic;
bool mDebugTraceNotifications;
MString mPreRenderNotificationName;
MString mPreRenderNotificationSemantic;
MString mPreSceneRenderNotificationName;
MString mPreSceneRenderNotificationSemantic;
MString mPostSceneRenderNotificationName;
MString mPostSceneRenderNotificationSemantic;
};
blast2Cmd::blast2Cmd()
: mPreRenderNotificationName("blast2CmdPreRender")
, mPreRenderNotificationSemantic(
MHWRender::MPassContext::kBeginRenderSemantic)
, mPostRenderNotificationName("blas2CmdPostRender")
, mPostRenderNotificationSemantic(
MHWRender::MPassContext::kEndRenderSemantic)
, mPreSceneRenderNotificationName("blast2CmdPreSceneRender")
, mPreSceneRenderNotificationSemantic(
MHWRender::MPassContext::kBeginSceneRenderSemantic)
, mPostSceneRenderNotificationName("blast2CmdPostSceneRender")
, mPostSceneRenderNotificationSemantic(
MHWRender::MPassContext::kEndSceneRenderSemantic)
, mWidth(0)
, mHeight(0)
, mDebugTraceNotifications(false)
{
}
blast2Cmd::~blast2Cmd()
{
}
void* blast2Cmd::creator()
{
return (void *)(new blast2Cmd);
}
{
return syntax;
}
{
mStart = 0.0;
mEnd = 1.0;
mWidth = 0;
mHeight = 0;
if (argData.isFlagSet(kFilenameFlag))
{
status = argData.getFlagArgument(kFilenameFlag, 0, mFilename);
}
else
{
}
if (argData.isFlagSet(kStartFrameFlag))
{
argData.getFlagArgument(kStartFrameFlag, 0, mStart);
}
if (argData.isFlagSet(kEndFrameFlag))
{
argData.getFlagArgument(kEndFrameFlag, 0, mEnd);
}
if (argData.isFlagSet(kImageSizeFlag))
{
argData.getFlagArgument(kImageSizeFlag, 0, mWidth);
argData.getFlagArgument(kImageSizeFlag, 1, mHeight);
}
return status;
}
{
if (!mDebugTraceNotifications)
return;
printf(
"\tPass Identifier = %s\n", passId.
asChar());
for (
unsigned int i=0; i<passSem.
length(); i++)
{
printf("\tPass semantic: %s\n", passSem[i].asChar());
}
}
{
blast2Cmd *cmd = (blast2Cmd *)clientData;
if (!cmd)
return;
cmd->printPassInformation(context);
}
{
blast2Cmd *cmd = (blast2Cmd *)clientData;
if (!cmd)
return;
cmd->printPassInformation(context);
}
{
blast2Cmd *cmd = (blast2Cmd *)clientData;
if (!cmd)
return;
cmd->printPassInformation(context);
}
{
blast2Cmd *cmd = (blast2Cmd *)clientData;
if (!cmd)
return;
cmd->printPassInformation(context);
if (!renderer)
return;
frameName += ".";
frameName += cmd->mCurrentTime.value();
bool saved = false;
if (colorTarget)
{
switch (format)
{
frameExtension = ".exr";
break;
case MHWRender::kA8B8G8R8:
frameExtension = ".iff";
break;
default:
frameExtension = "";
break;
};
if (frameExtension.
length() == 0)
return;
frameName += frameExtension;
if (colorTexture)
{
}
}
char msgBuffer[256];
if (!saved)
{
sprintf(msgBuffer, "Failed to color render target to %s.", frameName.asChar());
}
else
{
sprintf(msgBuffer, "Captured color render target to %s.",
frameName.asChar());
}
}
{
if (!renderer)
{
return status;
}
status = parseArgs ( args );
if ( !status )
{
char msgBuffer[256];
sprintf( msgBuffer, "Failed to parse args for %s command.\n", commandName );
return status;
}
if ( !status )
{
return status;
}
renderer->
addNotification(captureCallback, mPostRenderNotificationName, mPostRenderNotificationSemantic,
(void *)this );
if (mDebugTraceNotifications)
{
renderer->
addNotification(preFrameCallback, mPreRenderNotificationName, mPreRenderNotificationSemantic, (
void *)
this);
renderer->
addNotification(preSceneCallback, mPreSceneRenderNotificationName, mPreSceneRenderNotificationSemantic, (
void *)
this);
renderer->
addNotification(postSceneCallback, mPostSceneRenderNotificationName, mPostSceneRenderNotificationSemantic, (
void *)
this );
}
bool setOverride = (mWidth > 0 && mHeight > 0);
if (setOverride)
{
}
for ( mCurrentTime = mStart; mCurrentTime <= mEnd; mCurrentTime++ )
{
}
renderer->
removeNotification(mPostRenderNotificationName, mPostRenderNotificationSemantic);
if (mDebugTraceNotifications)
{
renderer->
removeNotification(mPreSceneRenderNotificationName, mPreSceneRenderNotificationSemantic);
renderer->
removeNotification(mPostSceneRenderNotificationName, mPostSceneRenderNotificationSemantic);
}
return status;
}
{
MFnPlugin plugin( obj, PLUGIN_COMPANY,
"1.0",
"Any");
status = plugin.registerCommand( commandName,
blast2Cmd::creator,
blast2Cmd::newSyntax);
if (!status) {
status.
perror(
"registerCommand");
return status;
}
return status;
}
{
status = plugin.deregisterCommand( commandName );
if (!status) {
status.
perror(
"deregisterCommand");
return status;
}
return status;
}