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.
104 lines
3.1 KiB
104 lines
3.1 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 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<hsGShadeVertex*>& 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
|
|
|