From b9c737ac2f35f3f6c515abd077c50cfc846f1fa0 Mon Sep 17 00:00:00 2001 From: Kearwood Kip Gilbert Date: Sat, 3 Aug 2019 18:53:05 -0700 Subject: [PATCH] WIP async API and kraken_convert --- kraken/KRBundleManager.cpp | 8 ++++++++ kraken/KRBundleManager.h | 1 + kraken/KRContext.cpp | 27 +++++++++++++++++++++++++++ kraken/KRContext.h | 2 ++ kraken/kraken.cpp | 11 +++++++++-- kraken/public/kraken.h | 1 + tools/convert/main.cpp | 2 +- 7 files changed, 49 insertions(+), 3 deletions(-) diff --git a/kraken/KRBundleManager.cpp b/kraken/KRBundleManager.cpp index 225e031..1af76e4 100755 --- a/kraken/KRBundleManager.cpp +++ b/kraken/KRBundleManager.cpp @@ -51,6 +51,14 @@ KRBundle *KRBundleManager::loadBundle(const char *szName, KRDataBlock *pData) return pBundle; } +KRBundle *KRBundleManager::createBundle(const char *szName) +{ + // TODO: Check for name conflicts + KRBundle *pBundle = new KRBundle(*m_pContext, szName); + m_bundles[szName] = pBundle; + return pBundle; +} + KRBundle *KRBundleManager::getBundle(const char *szName) { return m_bundles[szName]; } diff --git a/kraken/KRBundleManager.h b/kraken/KRBundleManager.h index 76dcfd2..8fe0e0d 100755 --- a/kraken/KRBundleManager.h +++ b/kraken/KRBundleManager.h @@ -47,6 +47,7 @@ public: KRBundle *loadBundle(const char *szName, KRDataBlock *pData); KRBundle *getBundle(const char *szName); + KRBundle* createBundle(const char* szName); std::vector getBundleNames(); unordered_map getBundles(); diff --git a/kraken/KRContext.cpp b/kraken/KRContext.cpp index eb31d61..29b1541 100755 --- a/kraken/KRContext.cpp +++ b/kraken/KRContext.cpp @@ -12,6 +12,7 @@ #include "KRCamera.h" #include "KRAudioManager.h" #include "KRAudioSample.h" +#include "KRBundle.h" #if defined(ANDROID) #include @@ -333,6 +334,32 @@ KrResult KRContext::unloadResource(const KrUnloadResourceInfo* unloadResourceInf return KR_ERROR_NOT_IMPLEMENTED; } +KrResult KRContext::createBundle(const KrCreateBundleInfo* createBundleInfo) +{ + if (createBundleInfo->resourceHandle < 0 || createBundleInfo->resourceHandle >= m_resourceMapSize) { + return KR_ERROR_OUT_OF_BOUNDS; + } + KRResource* bundle = m_pBundleManager->createBundle(createBundleInfo->pBundleName); + m_resourceMap[createBundleInfo->resourceHandle] = bundle; + + return KR_SUCCESS; +} + +KrResult KRContext::saveResource(const KrSaveResourceInfo* saveResourceInfo) +{ + if (saveResourceInfo->resourceHandle < 0 || saveResourceInfo->resourceHandle >= m_resourceMapSize) { + return KR_ERROR_OUT_OF_BOUNDS; + } + KRResource* resource = m_resourceMap[saveResourceInfo->resourceHandle]; + if (resource == nullptr) { + return KR_ERROR_NOT_MAPPED; + } + if (resource->save(saveResourceInfo->pResourcePath)) { + return KR_SUCCESS; + } + return KR_ERROR_UNEXPECTED; +} + void KRContext::detectExtensions() { m_bDetectedExtensions = true; diff --git a/kraken/KRContext.h b/kraken/KRContext.h index e3db96f..3e7641f 100755 --- a/kraken/KRContext.h +++ b/kraken/KRContext.h @@ -38,7 +38,9 @@ public: KRContext(const KrInitializeInfo* initializeInfo); ~KRContext(); + KrResult createBundle(const KrCreateBundleInfo* createBundleInfo); KrResult unloadResource(const KrUnloadResourceInfo* unloadResourceInfo); + KrResult saveResource(const KrSaveResourceInfo* saveResourceInfo); void loadResource(const std::string &file_name, KRDataBlock *data); void loadResource(std::string path); diff --git a/kraken/kraken.cpp b/kraken/kraken.cpp index 04df061..4a90253 100644 --- a/kraken/kraken.cpp +++ b/kraken/kraken.cpp @@ -1,6 +1,7 @@ #include "public/kraken.h" #include "KRContext.h" +#include "KRBundle.h" namespace { @@ -44,7 +45,10 @@ KrResult KrUnloadResource(const KrUnloadResourceInfo* pUnloadResourceInfo) KrResult KrSaveResource(const KrSaveResourceInfo* pSaveResourceInfo) { - return KR_ERROR_NOT_IMPLEMENTED; + if (!sContext) { + return KR_ERROR_NOT_INITIALIZED; + } + return sContext->saveResource(pSaveResourceInfo); } KrResult KrMapResource(const KrMapResourceInfo* pMapResourceInfo) @@ -59,7 +63,10 @@ KrResult KrUnmapResource(const KrUnmapResourceInfo* pUnmapResourceInfo) KrResult KrCreateBundle(const KrCreateBundleInfo* pCreateBundleInfo) { - return KR_ERROR_NOT_IMPLEMENTED; + if (!sContext) { + return KR_ERROR_NOT_INITIALIZED; + } + return sContext->createBundle(pCreateBundleInfo); } KrResult KrMoveToBundle(const KrMoveToBundleInfo* pMoveToBundleInfo) diff --git a/kraken/public/kraken.h b/kraken/public/kraken.h index d982815..3afdfd1 100644 --- a/kraken/public/kraken.h +++ b/kraken/public/kraken.h @@ -41,6 +41,7 @@ typedef enum { KR_ERROR_NOT_IMPLEMENTED = 2, KR_ERROR_OUT_OF_BOUNDS = 3, KR_ERROR_NOT_MAPPED = 4, + KR_ERROR_UNEXPECTED = 0x10000000, KR_RESULT_MAX_ENUM = 0x7FFFFFFF } KrResult; diff --git a/tools/convert/main.cpp b/tools/convert/main.cpp index 942966b..52f10e4 100644 --- a/tools/convert/main.cpp +++ b/tools/convert/main.cpp @@ -59,7 +59,7 @@ int main( int argc, char *argv[] ) save_resource_info.pResourcePath = "output.krbundle"; res = KrSaveResource(&save_resource_info); if (res != KR_SUCCESS) { - printf("Failed to save bundle.\n"); + printf("Failed to save bundle.\nError %i\n", res); } KrShutdown();