#ifndef _hwPhongShader #define _hwPhongShader //- // ========================================================================== // Copyright (C) 1995 - 2006 Autodesk, Inc. and/or its licensors. All // rights reserved. // // The coded instructions, statements, computer programs, and/or related // material (collectively the "Data") in these files contain unpublished // information proprietary to Autodesk, Inc. ("Autodesk") and/or its // licensors, which is protected by U.S. and Canadian federal copyright // law and by international treaties. // // The Data is provided for use exclusively by You. You have the right // to use, modify, and incorporate this Data into other products for // purposes authorized by the Autodesk software license agreement, // without fee. // // The copyright notices in the Software and this entire statement, // including the above license grant, this restriction and the // following disclaimer, must be included in all copies of the // Software, in whole or in part, and all derivative works of // the Software, unless such copies or derivative works are solely // in the form of machine-executable object code generated by a // source language processor. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND. // AUTODESK DOES NOT MAKE AND HEREBY DISCLAIMS ANY EXPRESS OR IMPLIED // WARRANTIES INCLUDING, BUT NOT LIMITED TO, THE WARRANTIES OF // NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR // PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE, OR // TRADE PRACTICE. IN NO EVENT WILL AUTODESK AND/OR ITS LICENSORS // BE LIABLE FOR ANY LOST REVENUES, DATA, OR PROFITS, OR SPECIAL, // DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES, EVEN IF AUTODESK // AND/OR ITS LICENSORS HAS BEEN ADVISED OF THE POSSIBILITY // OR PROBABILITY OF SUCH DAMAGES. // // ========================================================================== //+ /////////////////////////////////////////////////////////////////// // // NOTE: PLEASE READ THE README.TXT FILE FOR INSTRUCTIONS ON // COMPILING AND USAGE REQUIREMENTS. // // DESCRIPTION: // // Simple node that implements Phong shading for the special // case when the light is at the eye. We use a simple // spherical reflection environment map to compute the Phong // highlight // /////////////////////////////////////////////////////////////////// #include #include // For swatch rendering #include #include class hwPhongShader : public MPxHwShaderNode { public: hwPhongShader(); virtual ~hwPhongShader(); void releaseEverything(); virtual MStatus compute( const MPlug&, MDataBlock& ); virtual void postConstructor(); // Internally cached attribute handling routines virtual bool getInternalValueInContext( const MPlug&, MDataHandle&, MDGContext&); virtual bool setInternalValueInContext( const MPlug&, const MDataHandle&, MDGContext&); // Interactive overrides 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); // Batch overrides virtual MStatus glBind(const MDagPath& shapePath); virtual MStatus glUnbind(const MDagPath& shapePath); virtual MStatus glGeometry( const MDagPath& shapePath, 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); MStatus draw( 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); void drawDefaultGeometry(); // Overridden to draw an image for swatch rendering. /// virtual MStatus renderSwatchImage( MImage & image ); void drawTheSwatch( MGeometryData* pGeomData, unsigned int* pIndexing, unsigned int numberOfData, unsigned int indexCount ); virtual int normalsPerVertex(); virtual int texCoordsPerVertex(); virtual int getTexCoordSetNames(MStringArray& names); static void * creator(); static MStatus initialize(); MFloatVector Phong ( double cos_a ); void init_Phong_texture ( void ); void printGlError( const char *call ); static MTypeId id; protected: void attachSceneCallbacks(); void detachSceneCallbacks(); static void releaseCallback(void* clientData); private: // Attributes static MObject aColor; static MObject aDiffuseColor; static MObject aSpecularColor; static MObject aShininess; static MObject aGeometryShape; // Internal data GLuint phong_map_id; MPoint cameraPosWS; float3 mAmbientColor; float3 mDiffuseColor; float3 mSpecularColor; float3 mShininess; unsigned int mGeometryShape; bool mAttributesChanged; // Keep track if any attributes changed // Callbacks that we monitor so we can release OpenGL-dependant // resources before their context gets destroyed. MCallbackId fBeforeNewCB; MCallbackId fBeforeOpenCB; MCallbackId fBeforeRemoveReferenceCB; MCallbackId fMayaExitingCB; }; #endif /* _hwPhongShader */