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.
206 lines
7.4 KiB
206 lines
7.4 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/>. |
|
|
|
Additional permissions under GNU GPL version 3 section 7 |
|
|
|
If you modify this Program, or any covered work, by linking or |
|
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK, |
|
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent |
|
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK |
|
(or a modified version of those libraries), |
|
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA, |
|
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG |
|
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the |
|
licensors of this Program grant you additional |
|
permission to convey the resulting work. Corresponding Source for a |
|
non-source form of such a combination shall include the source code for |
|
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered |
|
work. |
|
|
|
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 __HSMAXLAYERBASE_H |
|
#define __HSMAXLAYERBASE_H |
|
|
|
#include "stdmat.h" |
|
|
|
#define HSMAX_LAYER_CLASS_ID 0x41990fe7 |
|
|
|
const Class_ID hsMaxLayerClassID(HSMAX_LAYER_CLASS_ID, 0x72404998); |
|
const Class_ID hsMaxMtlClassID(0x2f335902, 0x111d2ea7); |
|
const Class_ID hsEnvironMapMtlClassID(0x98777b3, 0x5eb270dd); |
|
|
|
class hsMaxLayerBase : public BitmapTex { |
|
public: |
|
enum hsMatBlendFlags { |
|
kBlendTest = 0x1, // dev |
|
// Rest of blends are mutually exclusive |
|
kBlendAlpha = 0x2, // dev |
|
kBlendMult = 0x4, // dev |
|
kBlendAdd = 0x8, // dev |
|
kBlendMultColorPlusMultAlpha = 0x10, // dev |
|
kBlendAntiAlias = 0x20, |
|
kBlendDetail = 0x40, |
|
kBlendDetailAdd = 0x80, |
|
kBlendMask = kBlendAlpha |
|
| kBlendMult |
|
| kBlendAdd |
|
| kBlendMultColorPlusMultAlpha |
|
| kBlendAntiAlias |
|
| kBlendDetail |
|
| kBlendDetailAdd, |
|
kBlendInvertAlpha = 0x1000, // dev |
|
kBlendInvertColor = 0x2000, // dev |
|
kBlendAlphaMult = 0x4000, |
|
kBlendAlphaAdd = 0x8000, |
|
kBlendNoColor = 0x10000, |
|
kBlendNoVtxAlpha = 0x20000 |
|
}; |
|
|
|
enum hsMatZFlags { |
|
kZIncLayer = 0x1, // dev |
|
kZOnlyZ = 0x2, // dev |
|
kZClearZ = 0x4, // dev |
|
kZNoZRead = 0x8, // dev |
|
kZNoZWrite = 0x10, |
|
kZMask = kZNoZWrite | kZClearZ | kZNoZRead, |
|
kZLODBias = 0x20 |
|
}; |
|
|
|
enum hsMatShadeFlags { |
|
kShadeSoftShadow = 0x1, // view, dev |
|
kShadeNoProjectors = 0x2, // projector |
|
kShadeVertexShade = 0x20, // dev |
|
kShadeNoShade = 0x40, // view,dev |
|
kShadeBlack = kShadeNoShade, |
|
kShadeSpecular = 0x80, // view, dev |
|
kShadeNoFog = 0x100, // dev |
|
kShadeWhite = 0x200, |
|
kShadeSpecularAlpha = 0x400, |
|
kShadeSpecularColor = 0x800, |
|
kShadeSpecularHighlight = 0x1000, |
|
kShadeVertColShade = 0x2000, |
|
kShadeInherit = 0x4000 |
|
}; |
|
|
|
enum hsMatMiscFlags { |
|
kMiscWireFrame = 0x1, // dev (running out of bits) |
|
kMiscDrawMeshOutlines = 0x2, // dev, currently unimplemented |
|
kMiscTwoSided = 0x4, // view,dev |
|
kMiscDrawAsSplats = 0x8, // dev? bwt |
|
kMiscMipMap = 0x10, |
|
kMiscUseBitmap = 0x20, |
|
kMiscIntensityOnly = 0x40, |
|
kMiscAutoStart = 0x80, |
|
kMiscDetailBias = 0x100, // obsolete... |
|
kMiscDetailMax = 0x200, // obsolete... |
|
kMiscExplicitMipmap = 0x400, |
|
kMiscAdjustPlane = 0x800, |
|
kMiscAdjustCylinder = 0x1000, |
|
kMiscAdjustSphere = 0x2000, |
|
kMiscTroubledLoner = 0x4000, |
|
kMiscBindSkip = 0x8000, |
|
kMiscBindMask = 0x10000, |
|
kMiscForceNonCompressed = 0x20000, |
|
kMiscNoMaxSize = 0x40000, |
|
kMiscHalfSize = 0x80000, |
|
kMiscBindNext = 0x100000, |
|
kMiscBindPrev = 0x200000, |
|
kMiscReserved = 0x400000 |
|
}; |
|
|
|
enum ProcType { |
|
kProcTypeDefault, |
|
kProcTypeWater |
|
}; |
|
|
|
enum hsMatUsage { |
|
kUseNone = 0x0, |
|
kUseBase = 0x1, |
|
kUseDetail = 0x2, |
|
kUseGrime = 0x4, |
|
kUseTransition = 0x8, |
|
kUseHighlight = 0x10, |
|
kUseMask = 0x20, |
|
kUseShadowLight = 0x40, |
|
kUseHelper = 0x80, |
|
|
|
kUseGuess = 0x10000000 |
|
}; |
|
|
|
public: |
|
// For hsMaxMtl... Special case for higher layers. Sigh. |
|
virtual void SetDirty(BOOL state) = 0; |
|
virtual void SetBlendFlag(int i, BOOL state) = 0; |
|
virtual void SetZFlag(int flag, BOOL state) = 0; |
|
virtual void SetShadeFlag(int flag, BOOL state) = 0; |
|
virtual void SetMiscFlag(int flag, BOOL state) = 0; |
|
virtual void SetProcType(ProcType type) = 0; |
|
virtual void SetUsage(hsMatUsage use) = 0; |
|
virtual void GuessUsage() = 0; |
|
|
|
// For interactive renderer |
|
virtual Color GetAmbient(int mtlNum=0, BOOL backFace=FALSE) = 0; |
|
virtual Color GetColor(int mtlNum=0, BOOL backFace=FALSE) = 0; |
|
|
|
virtual float GetShininess(int mtlNum=0, BOOL backFace=FALSE) = 0; |
|
virtual float GetShinStr(int mtlNum=0, BOOL backFace=FALSE) = 0; |
|
virtual float GetOpacity(int mtlNum=0, BOOL backFace=FALSE) = 0; |
|
|
|
// For exporter |
|
virtual Color GetAmbient(TimeValue t) const = 0; |
|
virtual Color GetColor(TimeValue t) const = 0; |
|
|
|
virtual float GetShininess(TimeValue t) const = 0; |
|
virtual float GetShinStr(TimeValue t) const = 0; |
|
virtual float GetMapPercent(TimeValue t) const = 0; |
|
virtual float GetOpacity(TimeValue t) const = 0; |
|
virtual float GetMipMapBlur(TimeValue t) const = 0; |
|
virtual float GetLODBias(TimeValue t) const = 0; |
|
virtual float GetDetailDropoffStart(TimeValue t) const = 0; |
|
virtual float GetDetailDropoffStop(TimeValue t) const = 0; |
|
virtual float GetDetailMax(TimeValue t) const = 0; |
|
virtual float GetDetailMin(TimeValue t) const = 0; |
|
virtual int GetEnvironMapSize(TimeValue t) const = 0; |
|
|
|
virtual BOOL GetDirty() const = 0; |
|
virtual ULONG GetBlendFlags() const = 0; |
|
virtual ULONG GetZFlags() const = 0; |
|
virtual ULONG GetShadeFlags() const = 0; |
|
virtual ULONG GetMiscFlags() const = 0; |
|
virtual ProcType GetProcType() const = 0; |
|
virtual hsMatUsage GetUsage() const = 0; |
|
|
|
virtual int GetNumExplicitMipmaps() const = 0; |
|
virtual TCHAR *GetExplicitMipmapName(int i) const = 0; |
|
virtual BOOL ExplicitMipmapEnabled(int i) const = 0; |
|
virtual int GetExplicitMipmapLevel(int i) const = 0; |
|
|
|
#ifdef MAXR4 |
|
// KLUDGE - Had to do this to compile under MAX4 beta |
|
virtual void fnReload() {}; |
|
virtual void fnViewImage() {}; |
|
#endif |
|
}; |
|
|
|
#endif
|
|
|