4
Fork 0
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.
 
 
 

231 lines
6.1 KiB

#pragma once
#include "skse64/NiTextures.h"
#include "skse64/GameTypes.h"
MAKE_NI_POINTER(BSTextureSet);
MAKE_NI_POINTER(NiTexture);
// 30
class BSShaderMaterial
{
public:
virtual ~BSShaderMaterial();
virtual BSShaderMaterial * Create(void);
virtual void Copy(BSShaderMaterial * source); // Must be same type
virtual bool Unk_03(void * unk1);
virtual SInt32 Unk_04(void * unk1);
virtual void * Unk_05(void);
virtual UInt32 GetShaderType(void);
virtual UInt32 Unk_07(void); // Always seems to be 2
enum {
kShaderType_Default = 0,
kShaderType_EnvironmentMap,
kShaderType_GlowMap,
kShaderType_Parallax,
kShaderType_FaceGen,
kShaderType_FaceGenRGBTint,
kShaderType_HairTint,
kShaderType_ParallaxOcc,
kShaderType_MultiTexLand,
kShaderType_LODLand,
kShaderType_Unknown1,
kShaderType_MultilayerParallax,
kShaderType_TreeAnim,
kShaderType_Unknown2,
kShaderType_MultiIndexTriShapeSnow,
kShaderType_LODObjectsHD,
kShaderType_Eye,
kShaderType_Cloud,
kShaderType_LODLandNoise,
kShaderType_MultiTexLandLODBlend
};
UInt32 unk04; // 08 BSIntrusiveRefCounted?
UInt32 unk08; // 0C inited to 0
UInt32 unk10; // 10 inited to 0
UInt32 unk14; // 14 inited to 0
UInt32 unk18; // 18 inited to 0
float unk1C; // 1C inited to 1.0
float unk20; // 20 inited to 1.0
float unk24; // 24 inited to 1.0
float unk28; // 28 inited to 1.0
UInt32 unk2C; // 2C inited to -1 flags?
};
// 30
class BSShaderMaterialBase : public BSShaderMaterial
{
public:
virtual ~BSShaderMaterialBase();
virtual void SetTexture(UInt32 index, BSTextureSet * texture, SInt32 unk1);
virtual void ReleaseTextures(void); // ReleaseRefs
virtual void Unk_0A(UInt8 unk1, UInt8 unk2, UInt8 unk3, UInt8 unk4, UInt8 unk5, UInt32 unk6, UInt32 unk7); // AddRefs
virtual void Unk_0B(void * unk1, UInt32 unk2);
virtual void * Unk_0C(void * unk1);
virtual void * Unk_0D(void * unk1);
};
class BSEffectShaderMaterial : public BSShaderMaterialBase
{
public:
virtual ~BSEffectShaderMaterial();
float falloffStartAngle; // 30
float falloffStopAngle; // 34
float falloffStartOpacity; // 38
float falloffStopOpacity; // 3C
NiColorA emissiveColor; // 40
NiTexturePtr unk50; // 50
NiTexturePtr unk54; // 54
float softFalloffDepth; // 58
float emissiveMultiple; // 5C
BSFixedString sourceTexture; // 60
BSFixedString greyscaleTexture; // 64
};
// A0
class BSLightingShaderMaterial : public BSShaderMaterialBase
{
public:
virtual ~BSLightingShaderMaterial();
float unk30; // 30
float unk34; // 34
float unk38; // 38
float unk3C; // 3C
float unk40; // 40
float unk44; // 44
NiTexturePtr texture1; // 48
SInt32 unk50; // 50
UInt32 unk54; // 54
NiTexturePtr texture2; // 58
NiTexturePtr texture3; // 60
NiTexturePtr texture4; // 68
UInt32 unk70; // 70
UInt32 unk74; // 74
BSTextureSetPtr textureSet; // 78
float alpha; // 80
float unk58; // 84
float glossiness; // 88
float specularStrength; // 8C
float lightingEffect1; // 90
float lightingEffect2; // 94
UInt64 unk98; // 98
void SetTextureSet(BSTextureSet * textureSet);
MEMBER_FN_PREFIX(BSLightingShaderMaterial);
DEFINE_MEMBER_FN(CopyFrom, void, 0x013F3AE0, BSLightingShaderMaterial * other);
DEFINE_MEMBER_FN(dtor_base, void, 0x013F3980);
};
STATIC_ASSERT(sizeof(BSLightingShaderMaterial) == 0xA0);
class BSLightingShaderMaterialEye : public BSLightingShaderMaterial
{
public:
virtual ~BSLightingShaderMaterialEye();
NiTexturePtr unkA0; // A0 inited to 0
NiTexturePtr unkA8; // A8 inited to 0
// uses ??_7BSLightingShaderMaterialEye@@6B@ at +17
DEFINE_MEMBER_FN(dtor, void, 0x013F5490);
};
class BSLightingShaderMaterialEnvmap : public BSLightingShaderMaterial
{
public:
virtual ~BSLightingShaderMaterialEnvmap();
NiTexturePtr unkA0; // A0 inited to 0
NiTexturePtr unkA8; // A8 inited to 0
// 7EF3019D0F8B78F82664DFE78C15204CD5C8C2B9+392
DEFINE_MEMBER_FN(dtor, void, 0x013F4DB0);
};
class BSLightingShaderMaterialFacegen : public BSLightingShaderMaterial
{
public:
virtual ~BSLightingShaderMaterialFacegen();
NiTexturePtr renderedTexture; // A0 inited to 0
NiTexturePtr unkA8; // A8 inited to 0
NiTexturePtr unkB0; // B0 inited to 0
// uses ??_7BSLightingShaderMaterialFacegen@@6B@ at +17
DEFINE_MEMBER_FN(dtor, void, 0x013F6A80);
};
class BSLightingShaderMaterialGlowmap : public BSLightingShaderMaterial
{
public:
virtual ~BSLightingShaderMaterialGlowmap();
NiTexturePtr glowMap; // A0
// uses ??_7BSLightingShaderMaterialGlowmap@@6B@ at +17
DEFINE_MEMBER_FN(dtor, void, 0x013F5B90);
};
class BSLightingShaderMaterialParallax : public BSLightingShaderMaterial
{
public:
virtual ~BSLightingShaderMaterialParallax();
NiTexturePtr unkA0; // A0
// uses ??_7BSLightingShaderMaterialParallax@@6B@ at +17
DEFINE_MEMBER_FN(dtor, void, 0x013F6010);
};
class BSLightingShaderMaterialMultiLayerParallax : public BSLightingShaderMaterial
{
public:
virtual ~BSLightingShaderMaterialMultiLayerParallax();
NiTexturePtr unkA0; // A0
NiTexturePtr unkA8; // A0
NiTexturePtr unkB0; // A0
// uses ??_7BSLightingShaderMaterialMultiLayerParallax@@6B@ at +17
DEFINE_MEMBER_FN(dtor, void, 0x013F84F0);
};
class BSLightingShaderMaterialParallaxOcc : public BSLightingShaderMaterial
{
public:
virtual ~BSLightingShaderMaterialParallaxOcc();
NiTexturePtr unkA0; // A0
// uses ??_7BSLightingShaderMaterialParallaxOcc@@6B@ at +17
DEFINE_MEMBER_FN(dtor, void, 0x013F6490);
};
class BSLightingShaderMaterialFacegenTint : public BSLightingShaderMaterial
{
public:
virtual ~BSLightingShaderMaterialFacegenTint();
NiColor tintColor; // A0
};
class BSLightingShaderMaterialHairTint : public BSLightingShaderMaterial
{
public:
virtual ~BSLightingShaderMaterialHairTint();
NiColor tintColor; // A0
};
// Beware that using this will cause leaks when using SetMaterial
typedef BSShaderMaterialBase * (* _CreateShaderMaterial)(UInt32 shaderType);
extern RelocAddr<_CreateShaderMaterial> CreateShaderMaterial;
// This is actually vtable+8 but it has no dependency on the 'this' ptr
typedef BSLightingShaderMaterialFacegenTint * (*_CreateFacegenTintMaterial)();
extern RelocAddr<_CreateFacegenTintMaterial> CreateFacegenTintMaterial;