/*==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 plPostEffectMod_inc #define plPostEffectMod_inc #include "pnModifier/plSingleModifier.h" #include "hsMatrix44.h" #include "hsBitVector.h" class plSceneNode; class plPageTreeMgr; class plMessage; class plRenderTarget; class plRenderRequest; class plViewTransform; class plPostEffectMod : public plSingleModifier { public: enum plPostEffectModStates { kEnabled = 0 }; enum { kNodeRef = 0x0 }; protected: hsBitVector fState; hsScalar fHither; hsScalar fYon; hsScalar fFovX; hsScalar fFovY; plKey fNodeKey; plPageTreeMgr* fPageMgr; plRenderTarget* fRenderTarget; plRenderRequest* fRenderRequest; hsMatrix44 fDefaultW2C, fDefaultC2W; virtual hsBool IEval(double secs, hsScalar del, UInt32 dirty); // called only by owner object's Eval() void ISetupRenderRequest(); void IDestroyRenderRequest(); void IUpdateRenderRequest(); void IRegisterForRenderMsg(hsBool on); void ISubmitRequest(); void IAddToPageMgr(plSceneNode* node); void IRemoveFromPageMgr(plSceneNode* node); void ISetEnable(hsBool on); hsBool IIsEnabled() const; public: plPostEffectMod(); virtual ~plPostEffectMod(); CLASSNAME_REGISTER( plPostEffectMod ); GETINTERFACE_ANY( plPostEffectMod, plSingleModifier ); virtual hsBool MsgReceive(plMessage* pMsg); virtual void Read(hsStream* s, hsResMgr* mgr); virtual void Write(hsStream* s, hsResMgr* mgr); void GetDefaultWorldToCamera( hsMatrix44 &w2c, hsMatrix44 &c2w ); // Export only void SetNodeKey(plKey key) { fNodeKey = key; } plKey GetNodeKey() const { return fNodeKey; } void SetHither(hsScalar h) { fHither = h; } void SetYon(hsScalar y) { fYon = y; } void SetFovX(hsScalar f) { fFovX = f; } void SetFovY(hsScalar f) { fFovY = f; } hsScalar GetHither() const { return fHither; } hsScalar GetYon() const { return fYon; } hsScalar GetFovX() const { return fFovX; } hsScalar GetFovY() const { return fFovY; } plPageTreeMgr* GetPageMgr() const { return fPageMgr; } const plViewTransform& GetViewTransform(); // If translating from a scene object, send WorldToLocal() and LocalToWorld(), in that order void SetWorldToCamera( hsMatrix44 &w2c, hsMatrix44 &c2w ); // Very bad void EnableLightsOnRenderRequest( void ); }; #endif // plPostEffectMod_inc