mirror of
https://github.com/zeldaret/ss
synced 2026-05-24 07:10:53 -04:00
snd_FrameHeap OK
This commit is contained in:
+1
-1
@@ -1028,7 +1028,7 @@ config.libs = [
|
||||
Object(Matching, "nw4r/snd/snd_DvdSoundArchive.cpp"),
|
||||
Object(Matching, "nw4r/snd/snd_EnvGenerator.cpp"),
|
||||
Object(NonMatching, "nw4r/snd/snd_ExternalSoundPlayer.cpp"),
|
||||
Object(NonMatching, "nw4r/snd/snd_FrameHeap.cpp"),
|
||||
Object(Matching, "nw4r/snd/snd_FrameHeap.cpp"),
|
||||
Object(NonMatching, "nw4r/snd/snd_FxBase.cpp"),
|
||||
Object(NonMatching, "nw4r/snd/snd_FxChorus.cpp"),
|
||||
Object(NonMatching, "nw4r/snd/snd_FxDelay.cpp"),
|
||||
|
||||
@@ -34,22 +34,19 @@ public:
|
||||
private:
|
||||
struct Block {
|
||||
NW4R_UT_LIST_NODE_DECL(); // at 0x0
|
||||
u32 mSize; // at 0x8
|
||||
FreeCallback mCallback; // at 0xc
|
||||
void *mCallbackArg; // at 0x10
|
||||
void *mpBuffer; // at 0x8
|
||||
u32 mSize; // at 0xC
|
||||
FreeCallback mCallback; // at 0x10
|
||||
void *mCallbackArg; // at 0x14
|
||||
|
||||
Block(u32 size, FreeCallback pCallback, void *pCallbackArg)
|
||||
: mSize(size), mCallback(pCallback), mCallbackArg(pCallbackArg) {}
|
||||
Block(void *pBuffer2, u32 size, FreeCallback pCallback, void *pCallbackArg)
|
||||
: mSize(size), mCallback(pCallback), mCallbackArg(pCallbackArg), mpBuffer(pBuffer2) {}
|
||||
|
||||
~Block() {
|
||||
if (mCallback != NULL) {
|
||||
mCallback(GetBufferAddr(), mSize, mCallbackArg);
|
||||
mCallback(mpBuffer, mSize, mCallbackArg);
|
||||
}
|
||||
}
|
||||
|
||||
void *GetBufferAddr() {
|
||||
return ut::AddOffsetToPtr(this, BLOCK_BUFFER_SIZE);
|
||||
}
|
||||
};
|
||||
|
||||
NW4R_UT_LIST_TYPEDEF_DECL(Block);
|
||||
|
||||
@@ -63,10 +63,11 @@ void* FrameHeap::Alloc(u32 size, FreeCallback pCallback, void* pCallbackArg) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
Block* pBlock = new (pBuffer) Block(size, pCallback, pCallbackArg);
|
||||
void *pBuffer2 = ut::AddOffsetToPtr(pBuffer, BLOCK_BUFFER_SIZE);
|
||||
Block* pBlock = new (pBuffer) Block(pBuffer2, size, pCallback, pCallbackArg);
|
||||
mSectionList.GetBack().AppendBlock(pBlock);
|
||||
|
||||
return pBlock->GetBufferAddr();
|
||||
return pBuffer2;
|
||||
}
|
||||
|
||||
int FrameHeap::SaveState() {
|
||||
@@ -106,11 +107,11 @@ int FrameHeap::GetCurrentLevel() const {
|
||||
|
||||
u32 FrameHeap::GetFreeSize() const {
|
||||
u32 freeSize = MEMGetAllocatableSizeForFrmHeapEx(mHandle, HEAP_ALIGN);
|
||||
if (freeSize < BLOCK_BUFFER_SIZE) {
|
||||
if (freeSize < sizeof(Block)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return ut::RoundDown(freeSize - BLOCK_BUFFER_SIZE, HEAP_ALIGN);
|
||||
return ut::RoundDown(freeSize - sizeof(Block), HEAP_ALIGN);
|
||||
}
|
||||
|
||||
bool FrameHeap::NewSection() {
|
||||
|
||||
Reference in New Issue
Block a user