#include <maya/MIOStream.h> 
#include <stdlib.h> 
#include <maya/MString.h>
#include <maya/MTypeId.h>
#include <maya/MGlobal.h>
#include <maya/MFnPlugin.h>
#include <maya/MPxNode.h>
#include <maya/MPlug.h>
#include <maya/MDataBlock.h>
#include <maya/MDataHandle.h> 
#include <maya/MFnNumericAttribute.h>
#include <maya/MFloatPoint.h>
#include <maya/MRenderData.h>
#include <maya/MRenderShadowData.h>
#include <maya/MRenderUtil.h>
#include <maya/MRenderCallback.h>
{
    public:
    myCallback2() {;}
    ~myCallback2() {;}
    void setObj(
MObject &obj) { nodeObj = obj;}
 
    private:
};
class renderAccessNode : 
public MPxNode 
{
    myCallback2 callback;
    public: 
    renderAccessNode();
    virtual         ~renderAccessNode();
    static  void *          creator();
    
    
    public:
    
};
{
    
    
}
bool myCallback2::renderCallback( 
const MRenderData &data )
 
{
    getFloat3( nodeObj, renderAccessNode::aPointWorld, wp );
    fprintf( stderr, "\n*** Render Callback\n\n" );
    fprintf( stderr, 
"Image: %d %d\n", data.
resX, data.
resY );
    fprintf( stderr, "region rect: %d %d %d %d\n", 
    );
    return 0;
}
{
    getFloat3( nodeObj, renderAccessNode::aPointWorld, wp );
    fprintf( stderr, "\n*** Shadow cast Callback\n\n" );
    fprintf( stderr, "Light Position (%2.2f, %2.2f, %2.2f), size (%dx%d)\n", 
    fprintf( stderr, "Light type: %d, perspective: %d\n",
    fprintf( stderr, "World Point( %g, %g, %g) = shadowmap (%g, %g, %g)\n\n",
    fprintf( stderr, "shadowmap( %g, %g, %g ) = World Point( %g, %g, %g)\n\n",
    return 0;
}
bool myCallback2::postProcessCallback( 
const MRenderData &data ) 
 
{
    getFloat3( nodeObj, renderAccessNode::aPointWorld, wp );
    float screenZ;
    MPlug   plug(nodeObj, renderAccessNode::aDist );
 
    plug.getValue( screenZ );
    fprintf( stderr, "\n*** Post process Callback\n\n" );
    fprintf( stderr, 
"Image: %d %d\n", data.
resX, data.
resX );
    fprintf( stderr, "region rect: %d %d %d %d\n", 
    );
    float r, g, b, a;
    r = 0.0;
    g = 255.0;
    b = 255.0;
    a = 255.0;
    
    
    
    short x, y;
    unsigned char *addr;
    for ( y = 0; y < data.
ysize/2; y+= 3 )
 
    {
        for ( x = 0; x < data.
xsize/2; x+= 3 )
 
        {
            {
                addr[0] = (char)a;  
                addr[1] = (char)b;  
                addr[2] = (char)g;  
                addr[3] = (char)r;  
            }
            else
            {
                addr[0] = (char)a;
                addr[1] = (char)(((a - (int)(a)) * 256.0));
                addr[2] = (char)b;
                addr[3] = (char)(((b - (int)(b)) * 256.0));
                addr[4] = (char)g;
                addr[5] = (char)(((g - (int)(g)) * 256.0));
                addr[6] = (char)r;
                addr[7] = (char)(((r - (int)(r)) * 256.0));
            }
        }
    }
    
    fprintf( stderr, "\nWorld point: ( %2.2f, %2.2f, %2.2f ) = Screen (%2.2f, %2.2f) depth: %2.2f\n\n",
    fprintf( stderr, "Screen point: ( %2.2f, %2.2f, %2.2f ) = World (%2.2f, %2.2f, %2.2f)\n",
    fprintf( stderr, "\n" );
    return 0;
}
MTypeId renderAccessNode::id( 0x81018 );
 
MObject     renderAccessNode::aSamples;
 
MObject     renderAccessNode::aInColor;
 
MObject     renderAccessNode::aPointWorld;
 
renderAccessNode::renderAccessNode()
{}
renderAccessNode::~renderAccessNode()
{
}
void renderAccessNode::postConstructor()
{
    callback.setObj( obj );
}
void * renderAccessNode::creator()
{
    return new renderAccessNode();
}
MStatus renderAccessNode::initialize()
 
{
    
    
    
    
    
    attributeAffects( aPointWorld, aOutput );
    attributeAffects( aInColor, aOutput );
}
{
    if ( plug == renderAccessNode::aOutput )
    {
        of = 1.0f;
    }
}
{ 
   const MString UserClassify( 
"utility/general" );
 
    MFnPlugin plugin( obj, PLUGIN_COMPANY, 
"4.5", 
"Any");
 
    plugin.registerNode( "renderAccessNode", renderAccessNode::id,
                         renderAccessNode::creator, renderAccessNode::initialize,
}
{
    plugin.deregisterNode( renderAccessNode::id );
}