Implements gsys::MemBuffer

This commit is contained in:
auguste120
2026-04-01 18:14:56 +02:00
parent f4da5c8666
commit 3a2c2b4e16
4 changed files with 63 additions and 6 deletions
+6 -6
View File
@@ -70514,12 +70514,12 @@ Address,Quality,Size,Name
0x0000007100c7cd74,U,000140,
0x0000007100c7ce00,U,000176,
0x0000007100c7ceb0,U,000052,_ZN4gsys12MemAllocator8tryAllocEmj
0x0000007100c7cee4,U,000024,_ZN4gsys9MemBufferC2Ev
0x0000007100c7cefc,U,000004,nullsub_3622
0x0000007100c7cf00,U,000004,j__ZdlPv_832
0x0000007100c7cf04,U,000104,_ZN4gsys9MemBuffer8tryAllocEPN4sead4HeapEmj
0x0000007100c7cf6c,U,000016,_ZN4gsys9MemBuffer4freeEv
0x0000007100c7cf7c,U,000052,_ZN4gsys9MemBuffer5allocEmj
0x0000007100c7cee4,O,000024,_ZN4gsys9MemBufferC2Ev
0x0000007100c7cefc,O,000004,_ZN4gsys9MemBufferD1Ev
0x0000007100c7cf00,O,000004,_ZN4gsys9MemBufferD0Ev
0x0000007100c7cf04,O,000104,_ZN4gsys9MemBuffer8tryAllocEPN4sead4HeapEmj
0x0000007100c7cf6c,O,000016,_ZN4gsys9MemBuffer4freeEv
0x0000007100c7cf7c,O,000052,_ZN4gsys9MemBuffer5allocEmj
0x0000007100c7cfb0,U,000060,_ZN4gsys23ModelAnimationDebugInfoD2Ev
0x0000007100c7cfec,U,000244,
0x0000007100c7d0e0,U,000060,_ZN4gsys21ModelAssignRenderInfoC2Ev
Can't render this file because it is too large.
+2
View File
@@ -4,6 +4,7 @@ add_library(gsys OBJECT
include/gsys/gsysMaskedProjLight.h
include/gsys/gsysMaskedProjLight.h
include/gsys/gsysMaskedSpotLight.h
include/gsys/gsysMemBuffer.h
include/gsys/gsysModel.h
include/gsys/gsysModelAccessKey.h
include/gsys/gsysModelNW.h
@@ -16,6 +17,7 @@ add_library(gsys OBJECT
include/gsys/gsysPointLight.h
include/gsys/gsysSpotLight.h
src/gsys/gsysMemBuffer.cpp
src/gsys/gsysModelAccessKey.cpp
src/gsys/gsysModelSceneConfig.cpp
src/gsys/gsysParticleConfig.cpp
+23
View File
@@ -0,0 +1,23 @@
#pragma once
#include <basis/seadTypes.h>
#include <heap/seadHeap.h>
namespace gsys {
class MemBuffer {
public:
MemBuffer();
virtual ~MemBuffer();
void* alloc(size_t size, u32 align);
void tryAlloc(sead::Heap* heap, size_t size, u32 align);
void free();
private:
void* mBuffer = nullptr;
uintptr_t mOffset = 0;
size_t mSize = 0;
};
} // namespace gsys
+32
View File
@@ -0,0 +1,32 @@
#include "gsys/gsysMemBuffer.h"
#include <basis/seadNew.h>
#include <heap/seadHeapMgr.h>
#include <math/seadMathCalcCommon.h>
namespace gsys {
MemBuffer::MemBuffer() = default;
MemBuffer::~MemBuffer() = default;
void MemBuffer::tryAlloc(sead::Heap* heap, size_t size, u32 align) {
if (!heap)
heap = sead::HeapMgr::sInstancePtr->getCurrentHeap();
void* buffer = heap->tryAlloc(size, static_cast<s32>(align));
mSize = size;
mOffset = 0;
mBuffer = buffer;
}
void* MemBuffer::alloc(size_t size, u32 align) {
uintptr_t current = mOffset + reinterpret_cast<uintptr_t>(mBuffer);
uintptr_t aligned = sead::MathSizeT::roundUp(current, align);
mOffset += aligned - current + size;
return reinterpret_cast<void*>(aligned);
}
void MemBuffer::free() {
delete static_cast<u8*>(mBuffer);
}
} // namespace gsys