Implementing async api

This commit is contained in:
Kearwood Kip Gilbert
2019-07-28 16:46:46 -07:00
parent 00b1d97285
commit 9c72088eb3
6 changed files with 131 additions and 13 deletions

View File

@@ -54,10 +54,13 @@ const char *KRContext::extension_names[KRENGINE_NUM_EXTENSIONS] = {
KRContext::log_callback *KRContext::s_log_callback = NULL; KRContext::log_callback *KRContext::s_log_callback = NULL;
void *KRContext::s_log_callback_user_data = NULL; void *KRContext::s_log_callback_user_data = NULL;
KRContext::KRContext() KRContext::KRContext(const KrInitializeInfo* initializeInfo)
: m_streamer(*this) : m_streamer(*this)
, m_vulkanInstance(VK_NULL_HANDLE) , m_vulkanInstance(VK_NULL_HANDLE)
, m_resourceMapSize(initializeInfo->resourceMapSize)
{ {
m_resourceMap = (KRResource **)malloc(sizeof(KRResource*) * m_resourceMapSize);
memset(m_resourceMap, 0, m_resourceMapSize * sizeof(KRResource*));
m_streamingEnabled = false; m_streamingEnabled = false;
#ifdef __APPLE__ #ifdef __APPLE__
mach_timebase_info(&m_timebase_info); mach_timebase_info(&m_timebase_info);
@@ -103,7 +106,6 @@ KRContext::KRContext()
} }
KRContext::~KRContext() { KRContext::~KRContext() {
if(m_pSceneManager) { if(m_pSceneManager) {
delete m_pSceneManager; delete m_pSceneManager;
m_pSceneManager = NULL; m_pSceneManager = NULL;
@@ -156,6 +158,10 @@ KRContext::~KRContext() {
} }
destroyDeviceContexts(); destroyDeviceContexts();
if (m_resourceMap) {
delete m_resourceMap;
m_resourceMap = NULL;
}
} }
void KRContext::SetLogCallback(log_callback *log_callback, void *user_data) void KRContext::SetLogCallback(log_callback *log_callback, void *user_data)

View File

@@ -35,7 +35,7 @@ public:
static int KRENGINE_SYS_PAGE_SIZE; static int KRENGINE_SYS_PAGE_SIZE;
KRContext(); KRContext(const KrInitializeInfo* initializeInfo);
~KRContext(); ~KRContext();
void loadResource(const std::string &file_name, KRDataBlock *data); void loadResource(const std::string &file_name, KRDataBlock *data);
@@ -113,6 +113,9 @@ private:
KRAudioManager *m_pSoundManager; KRAudioManager *m_pSoundManager;
KRUnknownManager *m_pUnknownManager; KRUnknownManager *m_pUnknownManager;
KRResource** m_resourceMap;
size_t m_resourceMapSize;
void detectExtensions(); void detectExtensions();
bool m_bDetectedExtensions; bool m_bDetectedExtensions;

View File

@@ -11,7 +11,7 @@ KRContext* sContext = nullptr;
KrResult KrInitialize(const KrInitializeInfo* pInitializeInfo) KrResult KrInitialize(const KrInitializeInfo* pInitializeInfo)
{ {
if (!sContext) { if (!sContext) {
sContext = new KRContext(); sContext = new KRContext(pInitializeInfo);
} }
return KR_SUCCESS; return KR_SUCCESS;
} }
@@ -33,3 +33,33 @@ KrResult KrLoadResource(const KrLoadResourceInfo* pLoadResourceInfo)
sContext->loadResource(pLoadResourceInfo->pResourcePath); sContext->loadResource(pLoadResourceInfo->pResourcePath);
return KR_SUCCESS; return KR_SUCCESS;
} }
KrResult KrUnloadResource(const KrUnloadResourceInfo* pUnloadResourceInfo)
{
return KR_ERROR_NOT_IMPLEMENTED;
}
KrResult KrSaveResource(const KrSaveResourceInfo* pSaveResourceInfo)
{
return KR_ERROR_NOT_IMPLEMENTED;
}
KrResult KrMapResource(const KrMapResourceInfo* pMapResourceInfo)
{
return KR_ERROR_NOT_IMPLEMENTED;
}
KrResult KrUnmapResource(const KrUnmapResourceInfo* pUnmapResourceInfo)
{
return KR_ERROR_NOT_IMPLEMENTED;
}
KrResult KrCreateBundle(const KrCreateBundleInfo* pCreateBundleInfo)
{
return KR_ERROR_NOT_IMPLEMENTED;
}
KrResult KrMoveToBundle(const KrMoveToBundleInfo* pMoveToBundleInfo)
{
return KR_ERROR_NOT_IMPLEMENTED;
}

View File

@@ -38,29 +38,79 @@
typedef enum { typedef enum {
KR_SUCCESS = 0, KR_SUCCESS = 0,
KR_ERROR_NOT_INITIALIZED = 1, KR_ERROR_NOT_INITIALIZED = 1,
KR_ERROR_WRONG_THREAD = 2, KR_ERROR_NOT_IMPLEMENTED = 2,
KR_RESULT_MAX_ENUM = 0x7FFFFFFF KR_RESULT_MAX_ENUM = 0x7FFFFFFF
} KrResult; } KrResult;
typedef enum { typedef enum {
KR_STRUCTURE_TYPE_INITIALIZE = 0, KR_STRUCTURE_TYPE_INITIALIZE = 0,
KR_STRUCTURE_TYPE_SHUTDOWN = 1, KR_STRUCTURE_TYPE_SHUTDOWN = 1,
KR_STRUCTURE_TYPE_MAX_ENUM = 0x7FFFFFFF KR_STRUCTURE_TYPE_LOAD_RESOURCE = 0x00010000,
KR_STRUCTURE_TYPE_UNLOAD_RESOURCE = 0x00010001,
KR_STRUCTURE_TYPE_SAVE_RESOURCE = 0x00010002,
KR_STRUCTURE_TYPE_MAP_RESOURCE = 0x00010003,
KR_STRUCTURE_TYPE_UNMAP_RESOURCE = 0x00010004,
KR_STRUCTURE_TYPE_CREATE_BUNDLE = 0x00010005,
KR_STRUCTURE_TYPE_MOVE_TO_BUNDLE = 0x00010006,
KR_STRUCTURE_TYPE_MAX_ENUM = 0x7FFFFFFF
} KrStructureType; } KrStructureType;
typedef int KrResourceMapIndex;
typedef struct { typedef struct {
KrStructureType sType; KrStructureType sType;
void* pNext; size_t resourceMapSize;
} KrInitializeInfo; } KrInitializeInfo;
typedef struct { typedef struct {
KrStructureType sType; KrStructureType sType;
void* pNext;
const char* pResourcePath; const char* pResourcePath;
KrResourceMapIndex resourceHandle;
} KrLoadResourceInfo; } KrLoadResourceInfo;
typedef struct {
KrStructureType sType;
KrResourceMapIndex resourceHandle;
} KrUnloadResourceInfo;
typedef struct {
KrStructureType sType;
const char* presourceName;
KrResourceMapIndex resourceHandle;
} KrMapResourceInfo;
typedef struct {
KrStructureType sType;
KrResourceMapIndex resourceHandle;
} KrUnmapResourceInfo;
typedef struct {
KrStructureType sType;
const char* pResourcePath;
KrResourceMapIndex resourceHandle;
} KrSaveResourceInfo;
typedef struct {
KrStructureType sType;
const char* pBundleName;
KrResourceMapIndex resourceHandle;
} KrCreateBundleInfo;
typedef struct {
KrStructureType sType;
KrResourceMapIndex resourceHandle;
KrResourceMapIndex bundleHandle;
} KrMoveToBundleInfo;
KrResult KrInitialize(const KrInitializeInfo* pInitializeInfo); KrResult KrInitialize(const KrInitializeInfo* pInitializeInfo);
KrResult KrShutdown(); KrResult KrShutdown();
KrResult KrLoadResource(const KrLoadResourceInfo* pLoadResourceInfo); KrResult KrLoadResource(const KrLoadResourceInfo* pLoadResourceInfo);
KrResult KrUnloadResource(const KrUnloadResourceInfo* pUnloadResourceInfo);
KrResult KrSaveResource(const KrSaveResourceInfo* pSaveResourceInfo);
KrResult KrMapResource(const KrMapResourceInfo* pMapResourceInfo);
KrResult KrUnmapResource(const KrUnmapResourceInfo* pUnmapResourceInfo);
KrResult KrCreateBundle(const KrCreateBundleInfo* pCreateBundleInfo);
KrResult KrMoveToBundle(const KrMoveToBundleInfo* pMoveToBundleInfo);
#endif // KRAKEN_H #endif // KRAKEN_H

View File

@@ -7,8 +7,6 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{ {
Context* context = Context::Get();
MSG msg = { 0 }; MSG msg = { 0 };
WNDCLASS wc = { 0 }; WNDCLASS wc = { 0 };
wc.lpfnWndProc = WndProc; wc.lpfnWndProc = WndProc;

View File

@@ -11,14 +11,31 @@ int main( int argc, char *argv[] )
printf("Initializing Kraken...\n"); printf("Initializing Kraken...\n");
KrInitializeInfo init_info = {}; KrInitializeInfo init_info = {};
init_info.sType = KR_STRUCTURE_TYPE_INITIALIZE; init_info.sType = KR_STRUCTURE_TYPE_INITIALIZE;
init_info.pNext = NULL; init_info.resourceMapSize = 1024;
KrResult res = KrInitialize(&init_info); KrResult res = KrInitialize(&init_info);
if (res != KR_SUCCESS) { if (res != KR_SUCCESS) {
printf("Failed to initialize Kraken!\n"); printf("Failed to initialize Kraken!\n");
return 1; return 1;
} }
KrCreateBundleInfo create_bundle_info = {};
create_bundle_info.sType = KR_STRUCTURE_TYPE_CREATE_BUNDLE;
create_bundle_info.resourceHandle = 0;
create_bundle_info.pBundleName = "output";
res = KrCreateBundle(&create_bundle_info);
if (res != KR_SUCCESS) {
printf("Failed to create bundle.\n");
KrShutdown();
return 1;
}
KrLoadResourceInfo load_resource_info = {}; KrLoadResourceInfo load_resource_info = {};
load_resource_info.sType = KR_STRUCTURE_TYPE_LOAD_RESOURCE;
load_resource_info.resourceHandle = 1;
KrMoveToBundleInfo move_to_bundle_info = {};
move_to_bundle_info.sType = KR_STRUCTURE_TYPE_MOVE_TO_BUNDLE;
move_to_bundle_info.bundleHandle = 0;
for (int i = 0; i < argc; i++) { for (int i = 0; i < argc; i++) {
char *arg = argv[i]; char *arg = argv[i];
@@ -28,9 +45,23 @@ int main( int argc, char *argv[] )
if (res != KR_SUCCESS) { if (res != KR_SUCCESS) {
printf("Failed to load resource: %s\n", arg); printf("Failed to load resource: %s\n", arg);
} }
move_to_bundle_info.resourceHandle = 1;
res = KrMoveToBundle(&move_to_bundle_info);
if (res != KR_SUCCESS) {
printf("Failed to move resource to bundle.\n");
}
} }
} }
KrSaveResourceInfo save_resource_info = {};
save_resource_info.sType = KR_STRUCTURE_TYPE_SAVE_RESOURCE;
save_resource_info.resourceHandle = 0;
save_resource_info.pResourcePath = "output.krbundle";
res = KrSaveResource(&save_resource_info);
if (res != KR_SUCCESS) {
printf("Failed to save bundle.\n");
}
KrShutdown(); KrShutdown();
/* /*
Context* context = Context::Get(); Context* context = Context::Get();