/*==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 __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 kBlendAddColorTimesAlpha = 0x10, // dev kBlendAntiAlias = 0x20, kBlendDetail = 0x40, kBlendDetailAdd = 0x80, kBlendMask = kBlendAlpha | kBlendMult | kBlendAdd | kBlendAddColorTimesAlpha | 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; // KLUDGE - Had to do this to compile under MAX4 beta virtual void fnReload() {}; virtual void fnViewImage() {}; }; #endif