Added scene node structs to API

This commit is contained in:
2020-06-12 18:49:07 -07:00
parent 18a2bb5688
commit 0fc6ec1357
4 changed files with 159 additions and 14 deletions

View File

@@ -32,6 +32,7 @@
#define KRAKEN_H #define KRAKEN_H
#include "context.h" #include "context.h"
#include "hydra.h"
#define KR_NULL_HANDLE 0 #define KR_NULL_HANDLE 0
@@ -47,18 +48,36 @@ typedef enum {
} 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,
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_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; } KrStructureType;
typedef int KrResourceMapIndex; typedef int KrResourceMapIndex;
@@ -114,6 +133,124 @@ typedef struct {
KrResourceMapIndex resourceHandle; KrResourceMapIndex resourceHandle;
} KrCreateSceneInfo; } 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 KrInitialize(const KrInitializeInfo* pInitializeInfo);
KrResult KrShutdown(); KrResult KrShutdown();
KrResult KrLoadResource(const KrLoadResourceInfo* pLoadResourceInfo); KrResult KrLoadResource(const KrLoadResourceInfo* pLoadResourceInfo);

View File

@@ -1,7 +1,13 @@
#include "hello_cube.h" #include "hello_cube.h"
#include "kraken.h" #include "kraken.h"
#include <assert.h>
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);
} }

View File

@@ -32,6 +32,6 @@
#ifndef HELLO_CUBE_H #ifndef HELLO_CUBE_H
#define HELLO_CUBE_H #define HELLO_CUBE_H
void smoke_main(); void smoke_load();
#endif // HELLO_CUBE_H #endif // HELLO_CUBE_H

View File

@@ -44,6 +44,8 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
return 1; return 1;
} }
smoke_load();
while (GetMessage(&msg, NULL, 0, 0) > 0) while (GetMessage(&msg, NULL, 0, 0) > 0)
DispatchMessage(&msg); DispatchMessage(&msg);