- Main Page
- Related Pages
- Modules
- Classes
- Examples

# blindDataShader.h

    #ifndef _blindDataShader
    #define _blindDataShader

    //-
    // ==========================================================================
    // 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.
    // ==========================================================================
    //+

    //
    // ***************************************************************************
    //
    // How to use:
    // This plugin is an example plug-in. Its purpose is to show how to use
    // custom blind data in the hardware shader node. To try out the plugin,
    // you can run the provided mel script: "blindDataShader.mel" after manually
    // loading the plugin into memory.
    //
    // The mel script creates a polygonal grid-plane with random heights.
    // Each vertex has an associated color value that is stored as three
    // independant double blind data values: "red", "green" and "blue".
    // The height of the vertices is used to calculate the color. All this
    // work is done in the blindDataMesh class (blindDataMesh.h/.cpp).
    //
    // The mel script then associates the mesh with a new blindDataShader node
    // (blindDataShader.h/.cpp) This node gets from the blind data of the mesh
    // the vertex color values and renders the mesh.
    //
    // To get the blind data associated with the vertex IDs, you must do the
    // following:
    // 1. In your MPxHwShaderNode-extended class, you must overwrite the virtual
    //    function: "provideVertexIDs" and return true. The "geometry" function
    //    will receive the component IDs of the vertices in the "vertexIDs" formal
    //    parameter. If you do not overwrite this function or it returns false,
    //    that parameter will be NULL.
    // 2. You can create a MFnMesh object from the MDrawRequest object and use it
    //    to get the raw blind data.
    //

    #include <maya/MPxHwShaderNode.h>

    class blindDataShader : public MPxHwShaderNode
    {
    public:
        virtual MStatus bind(const MDrawRequest& request, M3dView& view);
        virtual MStatus unbind(const MDrawRequest& request, M3dView& view);

        virtual MStatus geometry( const MDrawRequest& request,
                                  M3dView& view,
                                  int prim,
                                  unsigned int writable,
                                  int indexCount,
                                  const unsigned int * indexArray,
                                  int vertexCount,
                                  const int * vertexIDs,
                                  const float * vertexArray,
                                  int normalCount,
                                  const float ** normalArrays,
                                  int colorCount,
                                  const float ** colorArrays,
                                  int texCoordCount,
                                  const float ** texCoordArrays);

        virtual bool provideVertexIDs() { return true; }

    public:
        // Standard Node functions
        //
        virtual MStatus compute( const MPlug&, MDataBlock& );
        static  void *  creator();
        static  MStatus initialize();
        static  MTypeId id;
    };

    #endif /* _blindDataShader */