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
+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