WIP implementing createNode API.

Added KRContext::m_nodeMap and initialization logic.
Added code to hello_cube smoke test to call KrCreateNode.  (Commented until test can pass)
This commit is contained in:
2022-09-21 23:55:24 -07:00
parent 3f4289ec08
commit 6c8bf9fa2c
6 changed files with 66 additions and 5 deletions

View File

@@ -84,11 +84,16 @@ void* KRContext::s_log_callback_user_data = NULL;
KRContext::KRContext(const KrInitializeInfo* initializeInfo) KRContext::KRContext(const KrInitializeInfo* initializeInfo)
: m_resourceMapSize(initializeInfo->resourceMapSize) : m_resourceMapSize(initializeInfo->resourceMapSize)
, m_resourceMap(nullptr)
, m_nodeMapSize(initializeInfo->nodeMapSize)
, m_nodeMap(nullptr)
{ {
m_presentationThread = std::make_unique<KRPresentationThread>(*this); m_presentationThread = std::make_unique<KRPresentationThread>(*this);
m_streamerThread = std::make_unique<KRStreamerThread>(*this); m_streamerThread = std::make_unique<KRStreamerThread>(*this);
m_resourceMap = (KRResource**)malloc(sizeof(KRResource*) * m_resourceMapSize); m_resourceMap = (KRResource**)malloc(sizeof(KRResource*) * m_resourceMapSize);
memset(m_resourceMap, 0, m_resourceMapSize * sizeof(KRResource*)); memset(m_resourceMap, 0, m_resourceMapSize * sizeof(KRResource*));
m_nodeMap = (KRNode**)malloc(sizeof(KRNode*) * m_nodeMapSize);
memset(m_nodeMap, 0, m_nodeMapSize * sizeof(KRNode*));
m_streamingEnabled = false; m_streamingEnabled = false;
#ifdef __APPLE__ #ifdef __APPLE__
mach_timebase_info(&m_timebase_info); mach_timebase_info(&m_timebase_info);
@@ -172,7 +177,11 @@ KRContext::~KRContext()
if (m_resourceMap) { if (m_resourceMap) {
delete m_resourceMap; delete m_resourceMap;
m_resourceMap = NULL; m_resourceMap = nullptr;
}
if (m_nodeMap) {
delete m_nodeMap;
m_nodeMap = nullptr;
} }
} }
@@ -744,6 +753,18 @@ KrResult KRContext::deleteNodeChildren(const KrDeleteNodeChildrenInfo* pDeleteNo
KrResult KRContext::createNode(const KrCreateNodeInfo* pCreateNodeInfo) KrResult KRContext::createNode(const KrCreateNodeInfo* pCreateNodeInfo)
{ {
if (pCreateNodeInfo->newNodeHandle < 0 || pCreateNodeInfo->newNodeHandle >= m_nodeMapSize) {
return KR_ERROR_OUT_OF_BOUNDS;
}
if (pCreateNodeInfo->relativeNodeHandle < 0 || pCreateNodeInfo->relativeNodeHandle >= m_nodeMapSize) {
return KR_ERROR_OUT_OF_BOUNDS;
}
KRNode* relativeNode = nullptr;
if (pCreateNodeInfo->relativeNodeHandle != KR_NULL_HANDLE) {
// TODO - Handle node deletions by deleting nodes from m_nodeMap
relativeNode = m_nodeMap[pCreateNodeInfo->relativeNodeHandle];
}
return KR_ERROR_NOT_IMPLEMENTED; return KR_ERROR_NOT_IMPLEMENTED;
} }

View File

@@ -176,6 +176,9 @@ private:
KRResource** m_resourceMap; KRResource** m_resourceMap;
size_t m_resourceMapSize; size_t m_resourceMapSize;
KRNode** m_nodeMap;
size_t m_nodeMapSize;
long m_current_frame; // TODO - Does this need to be atomic? long m_current_frame; // TODO - Does this need to be atomic?
long m_last_memory_warning_frame; // TODO - Does this need to be atomic? long m_last_memory_warning_frame; // TODO - Does this need to be atomic?
long m_last_fully_streamed_frame; // TODO - Does this need to be atomic? long m_last_fully_streamed_frame; // TODO - Does this need to be atomic?

View File

@@ -123,6 +123,7 @@ typedef struct
{ {
KrStructureType sType; KrStructureType sType;
size_t resourceMapSize; size_t resourceMapSize;
size_t nodeMapSize;
} KrInitializeInfo; } KrInitializeInfo;
typedef struct typedef struct

View File

@@ -34,10 +34,44 @@
void smoke_load() void smoke_load()
{ {
KrCreateSceneInfo create_scene_info = {}; enum
create_scene_info.sType = KR_STRUCTURE_TYPE_CREATE_SCENE; {
create_scene_info.resourceHandle = 10; kSceneResourceHandle = 10,
create_scene_info.pSceneName = "cube"; kSkyboxTextureResourceHandle
};
enum
{
kCameraNodeHandle = 10
};
/*
KrMapResourceInfo map_skybox_resource = { KR_STRUCTURE_TYPE_MAP_RESOURCE };
map_skybox_resource.pResourceName = "skybox";
map_skybox_resource.resourceHandle = kSkyboxTextureResourceHandle;
KrResult res = KrMapResource(&map_skybox_resource);
assert(res == KR_SUCCESS);
*/
// Create a scene
KrCreateSceneInfo create_scene_info = { KR_STRUCTURE_TYPE_CREATE_SCENE };
create_scene_info.resourceHandle = kSceneResourceHandle;
create_scene_info.pSceneName = "my_scene";
KrResult res = KrCreateScene(&create_scene_info); KrResult res = KrCreateScene(&create_scene_info);
assert(res == KR_SUCCESS); assert(res == KR_SUCCESS);
/*
// Add a camera to the scene
KrCreateNodeInfo create_camera_info = { KR_STRUCTURE_TYPE_CREATE_NODE };
res = KrInitNodeInfo(&create_camera_info.node, KR_STRUCTURE_TYPE_NODE_CAMERA);
assert(res == KR_SUCCESS);
create_camera_info.relativeNodeHandle = -1;
create_camera_info.newNodeHandle = kCameraNodeHandle;
create_camera_info.sceneHandle = kSceneResourceHandle;
create_camera_info.node.pName = "my_camera";
create_camera_info.node.camera.surface = 1;
// create_camera_info.node.camera.skybox_texture = kSkyboxTextureResourceHandle;
res = KrCreateNode(&create_camera_info);
assert(res == KR_SUCCESS);
*/
} }

View File

@@ -63,6 +63,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
KrInitializeInfo init_info = {}; KrInitializeInfo init_info = {};
init_info.sType = KR_STRUCTURE_TYPE_INITIALIZE; init_info.sType = KR_STRUCTURE_TYPE_INITIALIZE;
init_info.resourceMapSize = 1024; init_info.resourceMapSize = 1024;
init_info.nodeMapSize = 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");

View File

@@ -54,6 +54,7 @@ int main(int argc, char* argv[])
KrInitializeInfo init_info = {}; KrInitializeInfo init_info = {};
init_info.sType = KR_STRUCTURE_TYPE_INITIALIZE; init_info.sType = KR_STRUCTURE_TYPE_INITIALIZE;
init_info.resourceMapSize = 1024; init_info.resourceMapSize = 1024;
init_info.nodeMapSize = 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");