AshliPluginMain.cpp

//-
// ==========================================================================
// Copyright 1995,2006,2008 Autodesk, Inc. All rights reserved.
//
// Use of this software is subject to the terms of the Autodesk
// license agreement provided at the time of installation or download,
// or which otherwise accompanies this software in either electronic
// or hard copy form.
// ==========================================================================
//+

#include <maya/MFnPlugin.h>
#include <maya/MIOStream.h>
#include <maya/MSceneMessage.h>
#include <maya/MGlobal.h>
#include <maya/MString.h>
#include <maya/MStringResource.h>
#include <maya/MStringResourceId.h>

//nodes that need to be registered
#include "GLSLShaderNode.h"
#include "fxManagerCmd.h"
//#include "fxVector.h"

#include "AshliShaderStrings.h"

//shader interface for configuration parameters
#include "Shader.h"

#include <stdlib.h>

#include <maya/MHWShaderSwatchGenerator.h>
#include <maya/MHardwareRenderer.h>
#include <maya/MGeometryData.h>
#include <maya/MImage.h>

//
// static variables for holding the callback IDs
//
MCallbackId openCallback;
MCallbackId importCallback;
MCallbackId referenceCallback;

static MStatus registerMStringResources(void)
{
        MStringResource::registerString(rGLSLShaderNodeFailedResourceContext);
        MStringResource::registerString(rGLSLShaderNodeFailedLoadShader);
        MStringResource::registerString(rGLSLShaderNodeAshliFailedFindExtensions);
        MStringResource::registerString(rGLSLShaderNodeFailedAddAttribute);
        MStringResource::registerString(rGLSLShaderNodeFailedDestroyAttribute);
        return MS::kSuccess;
}

MStatus initializePlugin( MObject obj )
//
//      Description:
//              this method is called when the plug-in is loaded into Maya.  It 
//              registers all of the services that this plug-in provides with 
//              Maya.
//
//      Arguments:
//              obj - a handle to the plug-in object (use MFnPlugin to access it)
//
{ 
        MStatus   status;
    const char *sm3;

    if ( NULL != (sm3 = getenv("ASHLI_SM3_SUPPORT"))) {
      if (strcmp( sm3, "0") != 0)
        shader::sSupportSM3 = true;
    }

        const MString& swatchName =     MHWShaderSwatchGenerator::initialize();

    MString swatchClassification;

        // Allow an environment variable to override usage of swatch
        // rendering.
        const char *ashliEnvVar = getenv("ASHLI_SWATCH_RENDERING");
#ifdef WIN32 
        if (!ashliEnvVar)
                swatchClassification = ":swatch/" + swatchName;
        else
        {
                if ( 0 != strcmp(ashliEnvVar,"0") )
                        swatchClassification = ":swatch/" + swatchName;
        }
#else
        if ( ashliEnvVar && ( 0 != strcmp( ashliEnvVar, "0") ) )
        {
                swatchClassification = ":swatch/" + swatchName;
        }
#endif
  
        const MString UserClassify( "shader/surface/utility/" + swatchClassification );
        MFnPlugin plugin( obj, "ATI", "6.5", "Any");

        //handle info banner

        status = plugin.registerUIStrings(registerMStringResources, "AshliShaderInitStrings");
        if (!status) {
                status.perror("registerUIStrings");
                return status;
        }

        // Add plug-in feature registration here
        //

    //register the shader node
        CHECK_MSTATUS( plugin.registerNode("AshliShader", glslShaderNode::sId, glslShaderNode::creator, glslShaderNode::initialize,
                MPxNode::kHwShaderNode, &UserClassify));

    //register a helper command for querying shader information
    plugin.registerCommand( "effectManager", fxManagerCmd::creator, fxManagerCmd::mySyntax); 

        //handle scene callback registration (on load, on save, etc)
    openCallback = MSceneMessage::addCallback(MSceneMessage::kAfterOpen, glslShaderNode::rejigShaders);
    importCallback = MSceneMessage::addCallback(MSceneMessage::kAfterImport, glslShaderNode::rejigShaders);
    referenceCallback = MSceneMessage::addCallback(MSceneMessage::kAfterReference, glslShaderNode::rejigShaders);
 
        return status;
}

MStatus uninitializePlugin( MObject obj )
//
//      Description:
//              this method is called when the plug-in is unloaded from Maya. It 
//              deregisters all of the services that it was providing.
//
//      Arguments:
//              obj - a handle to the plug-in object (use MFnPlugin to access it)
//
{
        MStatus   status;
        MFnPlugin plugin( obj );

        //disconnect callbacks

        // Add plug-in feature deregistration here
        //
    MSceneMessage::removeCallback( openCallback);
    MSceneMessage::removeCallback( importCallback);
    MSceneMessage::removeCallback( referenceCallback);

        //deregister the shader node
        CHECK_MSTATUS(plugin.deregisterNode(glslShaderNode::sId));

        //deregister any additional commands

        return status;
}



Autodesk® Maya® 2009 © 1997-2008 Autodesk, Inc. All rights reserved. Generated with doxygen 1.5.6