/*==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 hsSfxGlobalShade_inc #define hsSfxGlobalShade_inc #include "hsBiExpander.h" #include "hsGRenderProcs.h" #include "hsColorRGBA.h" #include "hsGeometry3.h" class hsGLayer; class hsSfxGlobalShade : public hsGRenderProcs { public: enum { kNone = 0x0, kFromFog = 0x1, kFromClear = 0x2, kFromLights = 0x4, kSourceMask = kFromFog | kFromClear | kFromLights, kScalarIntensity = 0x8, kAffectDiffuse = 0x10 }; protected: // Constants from which to work. UInt32 fGSFlags; hsColorRGBA fAmbient; hsColorRGBA fDiffuse; // Calculated each invocation. hsColorRGBA fIntensity; hsGLayer* fCurrentLayer; hsColorRGBA fRestoreColor; void ISetIntensity(hsPoint3& pos); void ISetFromFog(hsPoint3& pos); void ISetFromClear(hsPoint3& pos); void ISetFromLights(hsPoint3& pos); hsColorRGBA ISumLights(hsPoint3& pos); public: hsSfxGlobalShade(); virtual ~hsSfxGlobalShade(); virtual void ProcessPreInterpShadeVerts(hsExpander& vList); virtual hsBool32 BeginObject(plPipeline* pipe, plDrawable* obj); virtual void EndObject(); virtual void Read(hsStream* s); virtual void Write(hsStream* s); virtual const char* GetLabel() const { return "hsSfxGlobalShade"; } virtual ProcType GetType() const { return kTypeGlobalShade; } void SetAmbient(const hsColorRGBA& col) { fAmbient = col; } hsColorRGBA GetAmbient() const { return fAmbient; } void SetDiffuse(const hsColorRGBA& col) { fDiffuse = col; } hsColorRGBA GetDiffuse() const { return fDiffuse; } void SetSource(UInt32 f) { fGSFlags &= ~kSourceMask; fGSFlags |= f; } UInt32 GetSource() { return fGSFlags & kSourceMask; } void SetScalar(hsBool32 on) { if(on)fGSFlags |= kScalarIntensity; else fGSFlags &= ~kScalarIntensity; } hsBool32 GetScalar() { return 0 != (fGSFlags & kScalarIntensity); } void SetAffectDiffuse(hsBool32 on) { if(on)fGSFlags |= kAffectDiffuse; else fGSFlags &= ~kAffectDiffuse; } hsBool32 GetAffectDiffuse() { return 0 != (fGSFlags & kAffectDiffuse); } CLASSNAME_REGISTER( hsSfxGlobalShade ); GETINTERFACE_ANY( hsSfxGlobalShade, hsGRenderProcs ); }; #endif // hsSfxGlobalShade_inc