#ifndef _hwPhongShader #define _hwPhongShader //- // ========================================================================== // Copyright (C) 1995 - 2005 Alias Systems Corp. and/or its licensors. All // rights reserved. // // The coded instructions, statements, computer programs, and/or related // material (collectively the "Data") in these files are provided by Alias // Systems Corp. ("Alias") and/or its licensors for the exclusive use of the // Customer (as defined in the Alias Software License Agreement that // accompanies this Alias software). Such Customer has the right to use, // modify, and incorporate the Data into other products and to distribute such // products for use by end-users. // // THE DATA IS PROVIDED "AS IS". ALIAS HEREBY DISCLAIMS ALL WARRANTIES // RELATING TO THE DATA, INCLUDING, WITHOUT LIMITATION, ANY AND ALL EXPRESS OR // IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND/OR FITNESS FOR A // PARTICULAR PURPOSE. IN NO EVENT SHALL ALIAS BE LIABLE FOR ANY DAMAGES // WHATSOEVER, WHETHER DIRECT, INDIRECT, SPECIAL, OR PUNITIVE, WHETHER IN AN // ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, OR IN EQUITY, // ARISING OUT OF ACCESS TO, USE OF, OR RELIANCE UPON THE DATA. // ========================================================================== //+ /////////////////////////////////////////////////////////////////// // // 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 */