Files
firestorm/Gameleap/code/mw4/Libraries/elementrenderer/StateChange.hpp
T
Cyd 2b8ca921cb Initial full mirror of c:\VWE (source + assets + toolchain + outputs) via Git LFS
Complete disaster-recovery snapshot: engine/game source, game data assets,
VC6 toolchain + DX SDKs, build outputs, deployed game, and _UNUSED archive.
Large binaries in Git LFS; text preserved byte-for-byte (core.autocrlf=false,
no eol attributes). See RECOVERY.md for the one-clone rebuild procedure.
2026-06-24 21:28:16 -05:00

663 lines
17 KiB
C++

#pragma once
#include "ElementRenderer.hpp"
#include <MLR\MLR.hpp>
namespace ElementRenderer {
class Element;
//#########################################################################
//########################## StateChange ################################
//#########################################################################
class StateChange
#if defined(_ARMOR)
: public Stuff::Signature
#endif
{
friend class Element;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Initialization
//
public:
static void
InitializeClass();
static void
TerminateClass();
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Constructors/Destructors
//
public:
StateChange()
{Check_Pointer(this); m_lights[0] = NULL;}
StateChange(const StateChange &state)
{Check_Pointer(this); m_state = state.m_state; m_lights[0] = NULL;}
StateChange(
Stuff::MemoryStream *stream,
int version
);
StateChange(
Stuff::Page *page,
const Stuff::MString &prefix
);
~StateChange()
{Check_Object(this);}
void
Save(Stuff::MemoryStream *stream);
void
Load(
Stuff::MemoryStream *stream,
int version
);
void
Mix(
const StateChange &parent,
const StateChange &child
)
{
Check_Object(this); Check_Object(&parent); Check_Object(&child);
m_state.Combine(parent.m_state, child.m_state);
}
const MidLevelRenderer::MLRState&
GetMLRState() const
{Check_Object(this); return m_state;}
void
SetMLRState(const MidLevelRenderer::MLRState&state)
{Check_Object(this); m_state=state;}
void*
operator new(size_t size)
{
Verify(size == sizeof(StateChange));
return s_AllocatedMemory->New();
}
void
operator delete(void *where)
{s_AllocatedMemory->Delete(where);}
bool
operator==(const StateChange &s) const
{
Check_Pointer(this);
return
m_state == s.m_state;
}
protected:
MidLevelRenderer::MLRState
m_state;
private:
static Stuff::MemoryBlock
*s_AllocatedMemory;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Testing
//
public:
bool
IsRealStateChange()
{
Check_Object(this);
return
(m_state.GetRenderDeltaMask()|m_state.GetProcessDeltaMask()) != 0;
}
void
TestInstance() const
{}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Blending Mode
//
public:
void
SetAlphaMode(MidLevelRenderer::MLRState::AlphaMode mode)
{Check_Object(this); m_state.SetAlphaMode(mode);}
MidLevelRenderer::MLRState::AlphaMode
GetAlphaMode()
{Check_Object(this); return m_state.GetAlphaMode();}
void
DisableChildAlphaControl()
{
Check_Object(this);
m_state.SetRenderPermissionMask(
m_state.GetRenderPermissionMask() & ~MidLevelRenderer::MLRState::AlphaMask
);
}
void
EnableChildAlphaControl()
{
Check_Object(this);
m_state.SetRenderPermissionMask(
m_state.GetRenderPermissionMask() | MidLevelRenderer::MLRState::AlphaMask
);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Backface control
//
public:
void
EnableBackfaceCulling()
{Check_Object(this); m_state.SetBackFaceOn();}
void
DisableBackfaceCulling()
{Check_Object(this); m_state.SetBackFaceOff();}
bool
IsBackfaceCullingEnabled()
{
Check_Object(this);
return m_state.GetBackFaceMode()==MidLevelRenderer::MLRState::BackFaceOnMode;
}
void
DisableChildBackfaceControl()
{
Check_Object(this);
m_state.SetProcessPermissionMask(
m_state.GetProcessPermissionMask() & ~MidLevelRenderer::MLRState::BackFaceMask
);
}
void
EnableChildBackfaceControl()
{
Check_Object(this);
m_state.SetProcessPermissionMask(
m_state.GetProcessPermissionMask() | MidLevelRenderer::MLRState::BackFaceMask
);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Dithering Mode
//
public:
void
EnableDithering()
{Check_Object(this); m_state.SetDitherOn();}
void
DisableDithering()
{Check_Object(this); m_state.SetDitherOff();}
bool
IsDitheringEnabled()
{
Check_Object(this);
return m_state.GetDitherMode()==MidLevelRenderer::MLRState::DitherOnMode;
}
void
DisableChildDitheringControl()
{
Check_Object(this);
m_state.SetRenderPermissionMask(
m_state.GetRenderPermissionMask() & ~MidLevelRenderer::MLRState::DitherMask
);
}
void
EnableChildDitheringControl()
{
Check_Object(this);
m_state.SetRenderPermissionMask(
m_state.GetRenderPermissionMask() | MidLevelRenderer::MLRState::DitherMask
);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// DrawNow control
//
public:
void
EnableDrawNow()
{Check_Object(this); m_state.SetDrawNowOn();}
void
DisableDrawNow()
{Check_Object(this); m_state.SetBackFaceOff();}
bool
IsDrawNowEnabled()
{
Check_Object(this);
return m_state.GetDrawNowMode()==MidLevelRenderer::MLRState::DrawNowOnMode;
}
void
DisableChildDrawNowControl()
{
Check_Object(this);
m_state.SetProcessPermissionMask(
m_state.GetProcessPermissionMask() & ~MidLevelRenderer::MLRState::DrawNowMask
);
}
void
EnableChildDrawNowControl()
{
Check_Object(this);
m_state.SetProcessPermissionMask(
m_state.GetProcessPermissionMask() | MidLevelRenderer::MLRState::DrawNowMask
);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Filter Control
//
public:
void
SetFilterMode(MidLevelRenderer::MLRState::FilterMode mode)
{Check_Object(this); m_state.SetFilterMode(mode);}
MidLevelRenderer::MLRState::FilterMode
GetFilterMode()
{Check_Object(this); return m_state.GetFilterMode();}
void
DisableChildFilterControl()
{
Check_Object(this);
m_state.SetRenderPermissionMask(
m_state.GetRenderPermissionMask() & ~MidLevelRenderer::MLRState::FilterMask
);
}
void
EnableChildFilterControl()
{
Check_Object(this);
m_state.SetRenderPermissionMask(
m_state.GetRenderPermissionMask() | MidLevelRenderer::MLRState::FilterMask
);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// FlatColoring Mode
//
public:
void
EnableFlatColoring()
{Check_Object(this); m_state.SetFlatColoringOn();}
void
DisableFlatColoring()
{Check_Object(this); m_state.SetFlatColoringOff();}
bool
IsFlatColoringEnabled()
{Check_Object(this); return m_state.GetFlatColoringMode()==MidLevelRenderer::MLRState::FlatColoringOnMode;}
void
DisableChildFlatColoringControl()
{
Check_Object(this);
m_state.SetRenderPermissionMask(
m_state.GetRenderPermissionMask() & ~MidLevelRenderer::MLRState::FlatColoringMask
);
}
void
EnableChildFlatColoringControl()
{
Check_Object(this);
m_state.SetRenderPermissionMask(
m_state.GetRenderPermissionMask() | MidLevelRenderer::MLRState::FlatColoringMask
);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Fogging Mode
//
public:
enum FogMode {
DisableFogMode,
GeneralFogMode,
LightFogMode,
CustomFogMode
};
void
SetFogMode(FogMode mode)
{Check_Object(this); m_state.SetFogMode(mode);}
FogMode
GetFogMode()
{
Check_Object(this); int mode = m_state.GetFogMode();
Verify(mode >= 0 && mode <= 3); return static_cast<FogMode>(mode);
}
void
DisableChildFogControl()
{
Check_Object(this);
m_state.SetRenderPermissionMask(
m_state.GetRenderPermissionMask() & ~MidLevelRenderer::MLRState::FogMask
);
}
void
EnableChildFogControl()
{
Check_Object(this);
m_state.SetRenderPermissionMask(
m_state.GetRenderPermissionMask() | MidLevelRenderer::MLRState::FogMask
);
}
static const Stuff::RGBAColor&
GetFogColor()
{return s_fogColor;}
static void
SetFogColor(const Stuff::RGBAColor& color)
{
s_fogColor = color;
MidLevelRenderer::MLRState::fogColor = MidLevelRenderer::GOSCopyColor(&color);
}
protected:
static Stuff::RGBAColor
s_fogColor;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Lighting Control
//
public:
void
SetLightingMode(int mode)
{Check_Object(this); m_state.SetLightingMode(mode);}
int
GetLightingMode()
{Check_Object(this); return m_state.GetLightingMode();}
void
DisableChildLightingControl()
{
Check_Object(this);
m_state.SetProcessPermissionMask(
m_state.GetProcessPermissionMask() & ~MidLevelRenderer::MLRState::LightingMask
);
}
void
EnableChildLightingControl()
{
Check_Object(this);
m_state.SetProcessPermissionMask(
m_state.GetProcessPermissionMask() | MidLevelRenderer::MLRState::LightingMask
);
}
LightList
m_lights;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Perspective correction Mode
//
public:
void
EnablePerspectiveCorrection()
{Check_Object(this); m_state.SetTextureCorrectionOn();}
void
DisablePerspectiveCorrection()
{Check_Object(this); m_state.SetTextureCorrectionOff();}
bool
IsPerspectiveCorrectionEnabled()
{
Check_Object(this);
return m_state.GetTextureCorrectionMode()==MidLevelRenderer::MLRState::TextureCorrectionOnMode;
}
void
DisableChildPerspectiveCorrectionControl()
{
Check_Object(this);
m_state.SetRenderPermissionMask(
m_state.GetRenderPermissionMask() & ~MidLevelRenderer::MLRState::TextureCorrectionMask
);
}
void
EnableChildPerspectiveCorrectionControl()
{
Check_Object(this);
m_state.SetRenderPermissionMask(
m_state.GetRenderPermissionMask() | MidLevelRenderer::MLRState::TextureCorrectionMask
);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Priority control
//
public:
enum RenderPriority {
DefaultPriority=0,
DetailPriority,
AlphaPriority,
EffectPriority0=4,
EffectPriority1,
EffectPriority2,
EffectPriority3,
WeatherPriority,
CagePriority,
CageEffectsPriority,
FlarePriority,
HUDPriority0,
HUDPriority1,
HUDPriority2,
HUDPriority3
};
void
SetRenderPriority(RenderPriority pass)
{Check_Object(this); m_state.SetPriority(pass);}
RenderPriority
GetRenderPriority()
{Check_Object(this); return static_cast<RenderPriority>(m_state.GetPriority());}
void
DisableChildRenderPriorityControl()
{
Check_Object(this);
m_state.SetProcessPermissionMask(
m_state.GetProcessPermissionMask() & ~MidLevelRenderer::MLRState::PriorityMask
);
}
void
EnableChildRenderPriorityControl()
{
Check_Object(this);
m_state.SetProcessPermissionMask(
m_state.GetProcessPermissionMask() | MidLevelRenderer::MLRState::PriorityMask
);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Specular Mode
//
public:
void
EnableSpecular()
{Check_Object(this); m_state.SetSpecularOn();}
void
DisableSpecular()
{Check_Object(this); m_state.SetSpecularOff();}
bool
IsSpecularEnabled()
{
Check_Object(this);
return m_state.GetSpecularMode()==MidLevelRenderer::MLRState::SpecularOnMode;
}
void
DisableChildSpecularControl()
{
Check_Object(this);
m_state.SetRenderPermissionMask(
m_state.GetRenderPermissionMask() & ~MidLevelRenderer::MLRState::SpecularMask
);
}
void
EnableChildSpecularControl()
{
Check_Object(this);
m_state.SetRenderPermissionMask(
m_state.GetRenderPermissionMask() | MidLevelRenderer::MLRState::SpecularMask
);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Texture control
//
public:
void
SetTextureHandle(unsigned handle)
{Check_Object(this); m_state.SetTextureHandle(handle);}
unsigned
GetTextureHandle()
{Check_Object(this); return m_state.GetTextureHandle();}
void
DisableChildTextureHandleControl()
{
Check_Object(this);
m_state.SetRenderPermissionMask(
m_state.GetRenderPermissionMask() & ~MidLevelRenderer::MLRState::TextureMask
);
}
void
EnableChildTextureHandleControl()
{
Check_Object(this);
m_state.SetRenderPermissionMask(
m_state.GetRenderPermissionMask() | MidLevelRenderer::MLRState::TextureMask
);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Texture wrap Mode
//
public:
void
EnableTextureWrap()
{Check_Object(this); m_state.SetTextureWrapMode(MidLevelRenderer::MLRState::TextureWrap);}
void
DisableTextureWrap()
{Check_Object(this); m_state.SetTextureWrapMode(MidLevelRenderer::MLRState::TextureClamp);}
bool
IsTextureWrapEnabled()
{
Check_Object(this);
return m_state.GetTextureWrapMode()==MidLevelRenderer::MLRState::TextureWrap;
}
void
DisableChildTextureWrapControl()
{
Check_Object(this);
m_state.SetRenderPermissionMask(
m_state.GetRenderPermissionMask() & ~MidLevelRenderer::MLRState::TextureWrapMask
);
}
void
EnableChildTextureWrapControl()
{
Check_Object(this);
m_state.SetRenderPermissionMask(
m_state.GetRenderPermissionMask() | MidLevelRenderer::MLRState::TextureWrapMask
);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// WireFrame Mode
//
public:
void
SetWireFrameMode(MidLevelRenderer::MLRState::WireFrameMode mode)
{Check_Object(this); m_state.SetWireFrameMode(mode);}
MidLevelRenderer::MLRState::WireFrameMode
GetWireFrameMode()
{Check_Object(this); return m_state.GetWireFrameMode();}
void
DisableChildWireFrameControl()
{
Check_Object(this);
m_state.SetRenderPermissionMask(
m_state.GetRenderPermissionMask() & ~MidLevelRenderer::MLRState::WireFrameMask
);
}
void
EnableChildWireFrameControl()
{
Check_Object(this);
m_state.SetRenderPermissionMask(
m_state.GetRenderPermissionMask() | MidLevelRenderer::MLRState::WireFrameMask
);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// ZBuffer Write Mode
//
public:
void
EnableZBufferWrite()
{Check_Object(this); m_state.SetZBufferWriteOn();}
void
DisableZBufferWrite()
{Check_Object(this); m_state.SetZBufferWriteOff();}
bool
IsZBufferWriteEnabled()
{
Check_Object(this);
return m_state.GetZBufferWriteMode()==MidLevelRenderer::MLRState::ZBufferWriteOnMode;
}
void
DisableChildZBufferWriteControl()
{
Check_Object(this);
m_state.SetRenderPermissionMask(
m_state.GetRenderPermissionMask() & ~MidLevelRenderer::MLRState::ZBufferWriteMask
);
}
void
EnableChildZBufferWriteControl()
{
Check_Object(this);
m_state.SetRenderPermissionMask(
m_state.GetRenderPermissionMask() | MidLevelRenderer::MLRState::ZBufferWriteMask
);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// ZBuffer Compare Mode
//
public:
void
EnableZBufferCompare()
{Check_Object(this); m_state.SetZBufferCompareOn();}
void
DisableZBufferCompare()
{Check_Object(this); m_state.SetZBufferCompareOff();}
bool
IsZBufferCompareEnabled()
{
Check_Object(this);
return m_state.GetZBufferCompareMode()==MidLevelRenderer::MLRState::ZBufferCompareOnMode;
}
void
DisableChildZBufferCompareControl()
{
Check_Object(this);
m_state.SetRenderPermissionMask(
m_state.GetRenderPermissionMask() & ~MidLevelRenderer::MLRState::ZBufferCompareMask
);
}
void
EnableChildZBufferCompareControl()
{
Check_Object(this);
m_state.SetRenderPermissionMask(
m_state.GetRenderPermissionMask() | MidLevelRenderer::MLRState::ZBufferCompareMask
);
}
};
}