/*==LICENSE==* CyanWorlds.com Engine - MMOG client, server and tools Copyright (C) 2011 Cyan Worlds, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . You can contact Cyan Worlds, Inc. by email legal@cyan.com or by snail mail at: Cyan Worlds, Inc. 14617 N Newport Hwy Mead, WA 99021 *==LICENSE==*/ #ifndef plRenderInstance_inc #define plRenderInstance_inc #include "hsTemplates.h" class plRenderInstance : public RenderInstance { protected: plRenderInstance* fNext; Interval fValid; INode* fNode; Object* fObject; BOOL fDeleteMesh; hsTArray fLights; public: plRenderInstance(); virtual ~plRenderInstance(); BOOL GetFromNode(INode* node, TimeValue& t, int idx); BOOL Update(TimeValue& t); void SetNext(plRenderInstance* n) { fNext = n; } void Cleanup(); virtual RenderInstance *Next() { return fNext; } // next in list virtual Interval MeshValidity() { return fValid; } virtual int NumLights() { return fLights.GetCount(); } virtual LightDesc *Light(int n) { return fLights[n]; } virtual void AddLight(LightDesc* l) { fLights.Append(l); } virtual void ClearLights() { fLights.SetCount(0); } virtual BOOL CastsShadowsFrom(const ObjLightDesc& lt); // is lt shadowed by this instance? virtual INode *GetINode() { return fNode; } // get INode for instance virtual Object *GetEvalObject() { return fObject; } // evaluated object for instance virtual Point3 GetFaceNormal(int faceNum); // geometric normal in camera coords virtual Point3 GetFaceVertNormal(int faceNum, int vertNum); // camera coords virtual void GetFaceVertNormals(int faceNum, Point3 n[3]) // camera coords { n[0] = GetFaceVertNormal(faceNum, 0); n[1] = GetFaceVertNormal(faceNum, 1); n[2] = GetFaceVertNormal(faceNum, 2); } virtual Point3 GetCamVert(int vertnum); // coord for vertex in camera coords virtual void GetObjVerts(int fnum, Point3 obp[3]); // vertices of face in object coords virtual void GetCamVerts(int fnum, Point3 cp[3]); // vertices of face in camera(view) coords // Material-by-face access // Objects can provide a material as a function of face number via the IChkMtlAPI interface (chkmtlapi.h). // This method will return RenderInstance::mtl if flag INST_MTL_BYFACE is not set. If INST_MTL_BYFACE is // set it will return the proper by-face mtl. // DS 4/3/00 virtual Mtl *GetMtl(int faceNum); virtual ULONG MtlRequirements(int mtlNum, int faceNum); // node's mtl requirements. DS 3/31/00: added faceNum to support mtl-per-face objects }; #endif // plRenderInstance_inc