You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
87 lines
3.3 KiB
87 lines
3.3 KiB
/*==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 <http://www.gnu.org/licenses/>. |
|
|
|
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<LightDesc*> 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
|
|
|