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.
 
 
 

198 lines
3.0 KiB

#pragma once
#include "skse64_common/Utilities.h"
#include "skse64/ScaleformAPI.h"
// not sure why they nest it like this, but whatever
class GRefCountImplCore
{
public:
GRefCountImplCore() :refCount(1) { }
virtual ~GRefCountImplCore() { }
// void ** _vtbl; // 00
volatile SInt32 refCount; // 04
// redirect new/delete to the scaleform heap
static void * operator new(std::size_t size)
{
return ScaleformHeap_Allocate(size);
}
static void * operator new(std::size_t size, const std::nothrow_t &)
{
return ScaleformHeap_Allocate(size);
}
// placement new
static void * operator new(std::size_t size, void * ptr)
{
return ptr;
}
static void operator delete(void * ptr)
{
ScaleformHeap_Free(ptr);
}
// placement delete
static void operator delete(void *, void *)
{
//
}
void AddRef(void)
{
InterlockedIncrement(&refCount);
}
void Release(void)
{
if(InterlockedDecrement(&refCount) == 0)
{
delete this;
}
}
};
class GRefCountImpl : public GRefCountImplCore
{
public:
GRefCountImpl() { }
virtual ~GRefCountImpl() { }
};
class GRefCountBaseStatImpl : public GRefCountImpl
{
public:
GRefCountBaseStatImpl() { }
virtual ~GRefCountBaseStatImpl() { }
};
class GRefCountBase : public GRefCountBaseStatImpl
{
public:
GRefCountBase() { }
virtual ~GRefCountBase() { }
};
#pragma warning (push)
#pragma warning (disable : 4200)
class GString
{
public:
GString() { }
GString(const char * string) { CALL_MEMBER_FN(this, ctor)(string); }
~GString() { }
enum
{
kHeapInfoMask = 3,
};
struct Data
{
UInt32 len;
SInt32 refCount;
char data[0];
void IncRef(void);
void Release(void);
};
union
{
Data * ptr; // do not use directly, clear lower 3 bits first
UInt32 heapInfo;
} data;
Data * GetData(void);
UInt32 GetHeapInfo(void);
void Destroy(void);
MEMBER_FN_PREFIX(GString);
DEFINE_MEMBER_FN(ctor, GString *, 0x00F1BB50, const char * string);
};
#pragma warning (pop)
template <typename T>
class GRect
{
public:
T left;
T top;
T right;
T bottom;
};
class GMatrix3D
{
public:
float m[4][4];
};
typedef GRect<float> GRectF;
template <typename T>
class GArray
{
public:
T * values; // 00
UInt64 size; // 08
UInt64 capacity; // 10
};
class GViewport
{
public:
enum
{
kFlags_IsRenderTexture = 1 << 0,
kFlags_AlphaComposite = 1 << 1,
kFlags_UseScissorRect = 1 << 2,
kFlags_NoSetState = 1 << 3,
kFlags_RenderTextureAlpha = kFlags_IsRenderTexture|kFlags_AlphaComposite
};
SInt32 bufferWidth;
SInt32 bufferHeight;
SInt32 left;
SInt32 top;
SInt32 width;
SInt32 height;
SInt32 scissorLeft;
SInt32 scissorTop;
SInt32 scissorWidth;
SInt32 scissorHeight;
float scale;
float aspectRatio;
UInt32 flags;
};
class GSysAllocBase
{
public:
virtual ~GSysAllocBase();
virtual void Unk_01(void);
virtual void Unk_02(void);
};
class GSysAlloc : public GSysAllocBase
{
public:
virtual ~GSysAlloc();
};
class ScaleformAllocator : public GSysAlloc
{
public:
virtual ~ScaleformAllocator();
virtual void Unk_03(void);
virtual void Unk_04(void);
};