mirror of
https://github.com/zeldaret/botw
synced 2026-08-11 03:25:57 -04:00
Implements gsys::MemBuffer
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user