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:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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?
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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);
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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");
|
||||||
|
|||||||
@@ -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");
|
||||||
|
|||||||
Reference in New Issue
Block a user