docs: add plugin setup guide
This commit is contained in:
@@ -0,0 +1,103 @@
|
||||
#pragma once
|
||||
|
||||
namespace Scaleform
|
||||
{
|
||||
namespace Heap
|
||||
{
|
||||
class MemVisitor;
|
||||
class SegVisitor;
|
||||
}
|
||||
|
||||
class __declspec(novtable) SysAllocBase
|
||||
{
|
||||
public:
|
||||
static constexpr auto RTTI{ RE::RTTI::Scaleform__SysAllocBase };
|
||||
static constexpr auto VTABLE{ RE::VTABLE::Scaleform__SysAllocBase };
|
||||
|
||||
virtual ~SysAllocBase() = default; // 00
|
||||
|
||||
// add
|
||||
virtual bool InitHeapEngine([[maybe_unused]] const void* a_heapDesc) { return false; } // 01
|
||||
virtual bool ShutdownHeapEngine() { return true; } // 02
|
||||
};
|
||||
static_assert(sizeof(SysAllocBase) == 0x8);
|
||||
|
||||
class __declspec(novtable) SysAlloc :
|
||||
public SysAllocBase // 0
|
||||
{
|
||||
public:
|
||||
static constexpr auto RTTI{ RE::RTTI::Scaleform__SysAlloc };
|
||||
static constexpr auto VTABLE{ RE::VTABLE::Scaleform__SysAlloc };
|
||||
|
||||
// override (SysAllocBase)
|
||||
bool InitHeapEngine(const void* a_heapDesc) override // 01
|
||||
{
|
||||
using func_t = decltype(&SysAlloc::InitHeapEngine);
|
||||
static REL::Relocation<func_t> func{ ID::SysAlloc::InitHeapEngine };
|
||||
return func(this, a_heapDesc);
|
||||
}
|
||||
|
||||
bool ShutdownHeapEngine() override // 02
|
||||
{
|
||||
using func_t = decltype(&SysAlloc::ShutdownHeapEngine);
|
||||
static REL::Relocation<func_t> func{ ID::SysAlloc::ShutdownHeapEngine };
|
||||
return func(this);
|
||||
}
|
||||
|
||||
// add
|
||||
virtual void* Alloc(std::size_t a_size, std::size_t a_align) = 0; // 03
|
||||
virtual void Free(void* a_ptr, std::size_t a_size, std::size_t a_align) = 0; // 04
|
||||
virtual void* Realloc(void* a_oldPtr, std::size_t a_oldSize, std::size_t a_newSize, std::size_t a_align) = 0; // 05
|
||||
};
|
||||
static_assert(sizeof(SysAlloc) == 0x8);
|
||||
|
||||
class __declspec(novtable) SysAllocPaged :
|
||||
public SysAllocBase // 0
|
||||
{
|
||||
public:
|
||||
static constexpr auto RTTI{ RE::RTTI::Scaleform__SysAllocPaged };
|
||||
static constexpr auto VTABLE{ RE::VTABLE::Scaleform__SysAllocPaged };
|
||||
|
||||
class Info
|
||||
{
|
||||
public:
|
||||
// members
|
||||
std::size_t minAlign; // 00
|
||||
std::size_t maxAlign; // 08
|
||||
std::size_t granularity; // 10
|
||||
std::size_t sysDirectThreshold; // 18
|
||||
std::size_t maxHeapGranularity; // 20
|
||||
bool hasRealloc; // 28
|
||||
};
|
||||
static_assert(sizeof(Info) == 0x30);
|
||||
|
||||
// add
|
||||
virtual void GetInfo(Info* a_info) const = 0; // 03
|
||||
virtual void* Alloc(std::size_t a_size, std::size_t a_align) = 0; // 04
|
||||
virtual bool Free(void* a_ptr, std::size_t a_size, std::size_t a_align) = 0; // 05
|
||||
virtual bool ReallocInPlace(
|
||||
[[maybe_unused]] void* a_oldPtr,
|
||||
[[maybe_unused]] std::size_t a_oldSize,
|
||||
[[maybe_unused]] std::size_t a_newSize,
|
||||
[[maybe_unused]] std::size_t a_align) { return false; } // 06
|
||||
virtual void* AllocSysDirect(
|
||||
[[maybe_unused]] std::size_t a_size,
|
||||
[[maybe_unused]] std::size_t a_alignment,
|
||||
[[maybe_unused]] std::size_t* a_actualSize,
|
||||
[[maybe_unused]] std::size_t* a_actualAlign) { return nullptr; } // 07
|
||||
virtual bool FreeSysDirect(
|
||||
[[maybe_unused]] void* a_ptr,
|
||||
[[maybe_unused]] std::size_t a_size,
|
||||
[[maybe_unused]] std::size_t a_alignment) { return false; } // 08
|
||||
virtual std::size_t GetBase() const { return 0; } // 09
|
||||
virtual std::size_t GetSize() const { return 0; } // 0A
|
||||
virtual std::size_t GetFootprint() const { return 0; } // 0B
|
||||
virtual std::size_t GetUsedSpace() const { return 0; } // 0C
|
||||
virtual void VisitMem([[maybe_unused]] Heap::MemVisitor* a_visitor) const { return; } // 0D
|
||||
virtual void VisitSegments(
|
||||
[[maybe_unused]] Heap::SegVisitor* a_visitor,
|
||||
[[maybe_unused]] std::size_t a_catSeg,
|
||||
[[maybe_unused]] std::size_t a_catUnused) const { return; } // 0E
|
||||
};
|
||||
static_assert(sizeof(SysAllocPaged) == 0x8);
|
||||
}
|
||||
Reference in New Issue
Block a user