summaryrefslogtreecommitdiff
path: root/src/KingSystem/Resource/resResourceMgrTask.cpp
diff options
context:
space:
mode:
authorLéo Lam <leo@leolam.fr>2020-10-08 00:13:12 +0200
committerLéo Lam <leo@leolam.fr>2020-10-10 00:54:50 +0200
commit83660921b64dfc37f4b6176d36656e26a9798285 (patch)
tree1d18d4a9c161923c37c78f83ec2e45620201f6af /src/KingSystem/Resource/resResourceMgrTask.cpp
parent76655d85a90ca1cede47a45b4faa3e6e767b99a3 (diff)
ksys/res: Start adding ResourceMgrTask
Adds data members and simple functions.
Diffstat (limited to 'src/KingSystem/Resource/resResourceMgrTask.cpp')
-rw-r--r--src/KingSystem/Resource/resResourceMgrTask.cpp71
1 files changed, 71 insertions, 0 deletions
diff --git a/src/KingSystem/Resource/resResourceMgrTask.cpp b/src/KingSystem/Resource/resResourceMgrTask.cpp
index 019a46de..2622e3e5 100644
--- a/src/KingSystem/Resource/resResourceMgrTask.cpp
+++ b/src/KingSystem/Resource/resResourceMgrTask.cpp
@@ -1,10 +1,81 @@
#include "KingSystem/Resource/resResourceMgrTask.h"
+#include <framework/seadHeapPolicies.h>
+#include <framework/seadTaskID.h>
#include <thread/seadThreadUtil.h>
+#include "KingSystem/Resource/resCompactedHeap.h"
+#include "KingSystem/Resource/resEntryFactory.h"
+#include "KingSystem/Resource/resTextureHandleList.h"
+#include "KingSystem/Resource/resTextureHandleMgr.h"
+#include "KingSystem/Utils/SafeDelete.h"
#include "KingSystem/Utils/Thread/GameTaskThread.h"
+#include "KingSystem/Utils/Thread/TaskMgr.h"
#include "KingSystem/Utils/Thread/TaskThread.h"
namespace ksys::res {
+void ResourceMgrTask::setInstance(ResourceMgrTask* task) {
+ if (!sInstance) {
+ sInstance = task;
+ task->mInstancePtrClearer.mClearOnDestruction = true;
+ }
+}
+
+ResourceMgrTask::ResourceMgrTask(const sead::TaskConstructArg& arg)
+ : sead::CalculateTask(arg, "res::ResourceMgrTask"),
+ mSzsDecompressorCS(arg.heap_array->getPrimaryHeap()),
+ mCounter(arg.heap_array->getPrimaryHeap()), mTask(arg.heap_array->getPrimaryHeap()) {
+ mArenas.initOffset(OverlayArena::getListNodeOffset());
+ mUnits.initOffset(ResourceUnit::getResMgrUnitListNodeOffset());
+ mSomeList.initOffset(0x188); // TODO: replace this with a "get offset" call
+ mSystemCalcFn.bind(this, &ResourceMgrTask::callSystemCalc_);
+ mFileDevicePrefixes.initOffset(FileDevicePrefix::getListNodeOffset());
+}
+
+ResourceMgrTask::~ResourceMgrTask() {
+ util::safeDelete(mTexHandleList);
+ util::safeDelete(mTexHandleMgr);
+ util::safeDeleteThread(mCompactionThread);
+
+ if (mCompactedHeapMip0) {
+ mCompactedHeapMip0->destroy();
+ util::safeDeleteArray(mCompactedHeapMip0Buffer);
+ }
+
+ if (mCompactedHeapMain) {
+ mCompactedHeapMain->destroy();
+ util::safeDeleteArray(mCompactedHeapMainBuffer);
+ mCompactedHeapMainSeadHeap->destroy();
+ }
+
+ util::safeDeleteArray(mCompactedHeapMainBuffer2);
+ util::safeDeleteArray(mOffsetReadBuf);
+ mExtensions2.freeBuffer();
+ mExtensions1.freeBuffer();
+
+ util::safeDeleteThread(mMovableMemoryThread);
+ util::safeDeleteThread(mResourceMemoryThread);
+ util::safeDeleteThread(mResourceControlThread);
+ util::safeDeleteThread(mResourceLoadingThread);
+ util::safeDelete(mTask3);
+ util::safeDelete(mTask2);
+ util::safeDelete(mTask1);
+ util::safeDelete(mControlTask);
+
+ if (mResourceMemoryTaskMgr) {
+ mResourceMemoryTaskMgr->finalize();
+ util::safeDelete(mResourceMemoryTaskMgr);
+ }
+
+ if (mResourceControlTaskMgr) {
+ mResourceControlTaskMgr->finalize();
+ util::safeDelete(mResourceControlTaskMgr);
+ }
+
+ util::safeDelete(mEntryFactoryBase);
+
+ mResSystemHeap->destroy();
+}
+
util::TaskThread* ResourceMgrTask::makeResourceLoadingThread(sead::Heap* heap,
bool use_game_task_thread) {
if (use_game_task_thread) {