From 0fc6ec135741485a6faf5bc3b88c7d7d1da49809 Mon Sep 17 00:00:00 2001 From: Kearwood Date: Fri, 12 Jun 2020 18:49:07 -0700 Subject: [PATCH] Added scene node structs to API --- kraken/public/kraken.h | 159 ++++++++++++++++++++++++-- tests/smoke/hello_cube/hello_cube.cpp | 10 +- tests/smoke/hello_cube/hello_cube.h | 2 +- tests/smoke/hello_cube/main_win.cpp | 2 + 4 files changed, 159 insertions(+), 14 deletions(-) diff --git a/kraken/public/kraken.h b/kraken/public/kraken.h index 36838ec..ec36f0f 100644 --- a/kraken/public/kraken.h +++ b/kraken/public/kraken.h @@ -32,6 +32,7 @@ #define KRAKEN_H #include "context.h" +#include "hydra.h" #define KR_NULL_HANDLE 0 @@ -47,18 +48,36 @@ typedef enum { } KrResult; typedef enum { - KR_STRUCTURE_TYPE_INITIALIZE = 0, - KR_STRUCTURE_TYPE_SHUTDOWN = 1, - 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_CREATE_SCENE = 0x00020000, + KR_STRUCTURE_TYPE_INITIALIZE = 0, + KR_STRUCTURE_TYPE_SHUTDOWN, - KR_STRUCTURE_TYPE_MAX_ENUM = 0x7FFFFFFF + KR_STRUCTURE_TYPE_LOAD_RESOURCE = 0x00010000, + KR_STRUCTURE_TYPE_UNLOAD_RESOURCE, + KR_STRUCTURE_TYPE_SAVE_RESOURCE, + KR_STRUCTURE_TYPE_MAP_RESOURCE, + KR_STRUCTURE_TYPE_UNMAP_RESOURCE, + KR_STRUCTURE_TYPE_CREATE_BUNDLE, + KR_STRUCTURE_TYPE_MOVE_TO_BUNDLE, + + KR_STRUCTURE_TYPE_CREATE_SCENE = 0x00020000, + + KR_STRUCTURE_TYPE_NODE = 0x10000000, + KR_STRUCTURE_TYPE_NODE_CAMERA, + KR_STRUCTURE_TYPE_NODE_LOD_SET, + KR_STRUCTURE_TYPE_NODE_LOD_GROUP, + KR_STRUCTURE_TYPE_NODE_POINT_LIGHT, + KR_STRUCTURE_TYPE_NODE_DIRECTIONAL_LIGHT, + KR_STRUCTURE_TYPE_NODE_SPOT_LIGHT, + KR_STRUCTURE_TYPE_NODE_SPRITE, + KR_STRUCTURE_TYPE_NODE_MODEL, + KR_STRUCTURE_TYPE_NODE_COLLIDER, + KR_STRUCTURE_TYPE_NODE_BONE, + KR_STRUCTURE_TYPE_NODE_LOCATOR, + KR_STRUCTURE_TYPE_NODE_AUDIO_SOURCE, + KR_STRUCTURE_TYPE_NODE_AMBIENT_ZONE, + KR_STRUCTURE_TYPE_NODE_REVERB_ZONE, + + KR_STRUCTURE_TYPE_MAX_ENUM = 0x7FFFFFFF } KrStructureType; typedef int KrResourceMapIndex; @@ -114,6 +133,124 @@ typedef struct { KrResourceMapIndex resourceHandle; } KrCreateSceneInfo; +typedef struct { + KrStructureType sType; + const char* pName; + kraken::Vector3 translate; + kraken::Vector3 scale; + kraken::Vector3 rotate; + kraken::Vector3 pre_rotate; + kraken::Vector3 post_rotate; + kraken::Vector3 rotate_offset; + kraken::Vector3 scale_offset; + kraken::Vector3 rotate_pivot; + kraken::Vector3 scale_pivot; + union { + struct node { + // KR_STRUCTURE_TYPE_NODE + // No additional members + }; + struct camera { + // KR_STRUCTURE_TYPE_NODE_CAMERA + KrResourceMapIndex skybox_texture; + }; + struct lod_set { + // KR_STRUCTURE_TYPE_NODE_LOD_SET + // No additional members + }; + struct lod_group { + // KR_STRUCTURE_TYPE_NODE_LOD_GROUP + float min_distance; + float max_distance; + kraken::Vector3 reference_min; + kraken::Vector3 reference_max; + bool use_world_units; + }; + struct light { + kraken::Vector3 color; + float intensity; + float decay_start; + float flare_size; + float flare_occlusion_size; + KrResourceMapIndex flate_texture; + bool casts_shadow; + bool light_shafts; + float dust_particle_density; + float dust_particle_size; + float dust_particle_intensity; + struct point { + // KR_STRUCTURE_TYPE_NODE_POINT_LIGHT + // No additional members + }; + struct directional { + // KR_STRUCTURE_TYPE_NODE_DIRECTIONAL_LIGHT + // No additional members + }; + struct spot { + // KR_STRUCTURE_TYPE_NODE_SPOT_LIGHT + float inner_angle; + float outer_angle; + }; + }; + struct sprite { + // KR_STRUCTURE_TYPE_NODE_SPRITE + KrResourceMapIndex texture; + float alpha; + }; + struct model { + // KR_STRUCTURE_TYPE_NODE_MODEL + float lod_min_coverage; + bool receives_shadow; + bool faces_camera; + float rim_power; + kraken::Vector3 rim_color; + KrResourceMapIndex mesh; + KrResourceMapIndex light_map_texture; + }; + struct collider { + // KR_STRUCTURE_TYPE_NODE_COLLIDER + KrResourceMapIndex mesh; + uint64_t layer_mask; + float audio_occlusion; + }; + struct bone { + // KR_STRUCTURE_TYPE_NODE_BONE + // No additional members + }; + struct locator { + // KR_STRUCTURE_TYPE_NODE_LOCATOR + // No additional members + }; + struct audio_source { + // KR_STRUCTURE_TYPE_NODE_AUDIO_SOURCE + KrResourceMapIndex sample; + float gain; + float pitch; + bool looping; + bool is_3d; + float reference_distance; + float reverb; + float rolloff_factor; + bool enable_obstruction; + bool enable_occlusion; + }; + struct ambient_zone { + // KR_STRUCTURE_TYPE_NODE_AMBIENT_ZONE + char* pZoneName; + float gradient; + float gain; + KrResourceMapIndex sample; + }; + struct reverb_zone { + // KR_STRUCTURE_TYPE_NODE_REVERB_ZONE + char* pZoneName; + float gradient; + float gain; + KrResourceMapIndex sample; + }; + }; +} KrNodeInfo; + KrResult KrInitialize(const KrInitializeInfo* pInitializeInfo); KrResult KrShutdown(); KrResult KrLoadResource(const KrLoadResourceInfo* pLoadResourceInfo); diff --git a/tests/smoke/hello_cube/hello_cube.cpp b/tests/smoke/hello_cube/hello_cube.cpp index 644bf5a..00bbe4d 100644 --- a/tests/smoke/hello_cube/hello_cube.cpp +++ b/tests/smoke/hello_cube/hello_cube.cpp @@ -1,7 +1,13 @@ #include "hello_cube.h" #include "kraken.h" +#include -void smoke_main() +void smoke_load() { - + KrCreateSceneInfo create_scene_info = {}; + create_scene_info.sType = KR_STRUCTURE_TYPE_CREATE_SCENE; + create_scene_info.resourceHandle = 10; + create_scene_info.pSceneName = "cube"; + KrResult res = KrCreateScene(&create_scene_info); + assert(res == KR_SUCCESS); } diff --git a/tests/smoke/hello_cube/hello_cube.h b/tests/smoke/hello_cube/hello_cube.h index 7e1dd82..e7dfe88 100644 --- a/tests/smoke/hello_cube/hello_cube.h +++ b/tests/smoke/hello_cube/hello_cube.h @@ -32,6 +32,6 @@ #ifndef HELLO_CUBE_H #define HELLO_CUBE_H -void smoke_main(); +void smoke_load(); #endif // HELLO_CUBE_H \ No newline at end of file diff --git a/tests/smoke/hello_cube/main_win.cpp b/tests/smoke/hello_cube/main_win.cpp index 5b94996..1fc0e2c 100644 --- a/tests/smoke/hello_cube/main_win.cpp +++ b/tests/smoke/hello_cube/main_win.cpp @@ -44,6 +44,8 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine return 1; } + smoke_load(); + while (GetMessage(&msg, NULL, 0, 0) > 0) DispatchMessage(&msg);