#include <stdio.h>
#include <maya/MString.h>
#include <maya/MFnPlugin.h>
#include <maya/MViewport2Renderer.h>
#include <maya/MPxCommand.h>
#include <maya/MSyntax.h>
#include <maya/MArgDatabase.h>
#include <maya/MArgList.h>
#include <maya/M3dView.h>
#include "viewRenderOverrideFrameCache.h"
static viewRenderOverrideFrameCache* viewRenderOverrideFrameCacheInstance = NULL;
{
public:
viewFrameCache();
virtual ~viewFrameCache();
static void* creator();
private:
bool mAllowCapture;
bool mResetCapture;
bool mCaptureToDisk;
};
viewFrameCache::viewFrameCache()
: mAllowCapture(false)
, mResetCapture(false)
, mCaptureToDisk(false)
{
}
viewFrameCache::~viewFrameCache()
{
}
void* viewFrameCache::creator()
{
return (void *) (new viewFrameCache);
}
const char *captureShortName = "-ca";
const char *captureLongName = "-capture";
const char *toDiskShortName = "-td";
const char *toDiskLongName = "-todisk";
const char *resetShortName = "-r";
const char *resetLongName = "-reset";
MSyntax viewFrameCache::newSyntax()
{
return syntax;
}
{
mAllowCapture = false;
mResetCapture = false;
mCaptureToDisk = false;
for (
unsigned int i = 0; i < args.
length(); i++ )
{
if (!status)
continue;
if ( arg ==
MString(resetShortName) || arg ==
MString(resetLongName) )
{
mResetCapture = true;
}
if ( arg ==
MString(captureShortName) || arg ==
MString(captureLongName) )
{
arg += ": must specify a value for -capture.";
displayError(arg);
}
i++;
args.
get(i, mAllowCapture);
}
if ( arg ==
MString(toDiskShortName) || arg ==
MString(toDiskLongName) )
{
arg += ": must specify a value for -todisk.";
displayError(arg);
}
i++;
args.
get(i, mCaptureToDisk);
}
}
status = argData.getCommandArgument(0, mPanelName);
{
status.
perror(
"No panel name specified as command argument");
return status;
}
}
{
if (!viewRenderOverrideFrameCacheInstance)
status = parseArgs(args);
if (!status)
{
return status;
}
{
}
if (mResetCapture)
{
viewRenderOverrideFrameCacheInstance->releaseCachedTextures();
mAllowCapture = false;
}
viewRenderOverrideFrameCacheInstance->setAllowCaching( mAllowCapture );
viewRenderOverrideFrameCacheInstance->setCacheToDisk( mAllowCapture ? mCaptureToDisk : false );
return status;
}
{
MFnPlugin plugin(obj, PLUGIN_COMPANY,
"1.0",
"Any");
status = plugin.registerCommand("viewFrameCache",
viewFrameCache::creator,
viewFrameCache::newSyntax);
if (!status)
{
status.
perror(
"registerCommand");
}
{
if (renderer)
{
if (!viewRenderOverrideFrameCacheInstance)
{
viewRenderOverrideFrameCacheInstance = new viewRenderOverrideFrameCache("viewRenderOverrideFrameCache");
}
}
}
return status;
}
{
if (renderer)
{
if (viewRenderOverrideFrameCacheInstance)
{
delete viewRenderOverrideFrameCacheInstance;
}
viewRenderOverrideFrameCacheInstance = NULL;
}
status = plugin.deregisterCommand( "viewFrameCache" );
if (!status) {
status.
perror(
"deregisterCommand");
return status;
}
return status;
}