diff --git a/examples/data/blender/spaceship.bin b/examples/data/blender/spaceship.bin new file mode 100644 index 0000000..7e0afdf Binary files /dev/null and b/examples/data/blender/spaceship.bin differ diff --git a/examples/data/blender/spaceship.blend1 b/examples/data/blender/spaceship.blend1 new file mode 100644 index 0000000..d826580 Binary files /dev/null and b/examples/data/blender/spaceship.blend1 differ diff --git a/examples/data/blender/spaceship.gltf b/examples/data/blender/spaceship.gltf new file mode 100644 index 0000000..1cf13d0 --- /dev/null +++ b/examples/data/blender/spaceship.gltf @@ -0,0 +1,463 @@ +{ + "asset" : { + "generator" : "Khronos glTF Blender I/O v1.6.16", + "version" : "2.0" + }, + "scene" : 0, + "scenes" : [ + { + "name" : "Scene", + "nodes" : [ + 4 + ] + } + ], + "nodes" : [ + { + "mesh" : 0, + "name" : "Spaceship_Rear_Hatch", + "rotation" : [ + 2.8049830902432404e-08, + 8.798715533941959e-09, + 0.7938249707221985, + 0.6081464290618896 + ], + "scale" : [ + 0.17620022594928741, + 0.1893281787633896, + 0.1893281191587448 + ], + "translation" : [ + 0.9305205345153809, + -0.8287605671433408, + -1.153775386342204e-07 + ] + }, + { + "children" : [ + 0 + ], + "name" : "Bone.001", + "rotation" : [ + -1.9689133878841858e-08, + -6.542580166524203e-08, + -0.12394285947084427, + 0.9922893643379211 + ], + "scale" : [ + 1, + 1.0000001192092896, + 1 + ], + "translation" : [ + 9.194034422677078e-17, + 1.0409293174743652, + 5.551115123125783e-17 + ] + }, + { + "mesh" : 1, + "name" : "Spaceship", + "rotation" : [ + -3.244472424057676e-08, + -1.6142790215667446e-08, + 0.7123286724090576, + 0.7018461227416992 + ], + "scale" : [ + 0.17620022594928741, + 0.189328134059906, + 0.1893281191587448 + ], + "translation" : [ + 0.6980774998664856, + 0.008747220039367676, + 2.892782191565857e-08 + ] + }, + { + "children" : [ + 1, + 2 + ], + "name" : "Bone", + "rotation" : [ + 1.2074783839466363e-08, + 2.1153852003408247e-08, + -0.007412227801978588, + 0.9999725222587585 + ], + "scale" : [ + 0.9999998807907104, + 1, + 1 + ] + }, + { + "children" : [ + 3 + ], + "name" : "Armature", + "rotation" : [ + 0, + 0, + -0.7071067690849304, + 0.7071068286895752 + ], + "scale" : [ + 5.281835556030273, + 5.675361156463623, + 5.281835556030273 + ], + "translation" : [ + 0.009092092514038086, + 3.6874101161956787, + 0 + ] + } + ], + "animations" : [ + { + "channels" : [ + { + "sampler" : 0, + "target" : { + "node" : 3, + "path" : "translation" + } + }, + { + "sampler" : 1, + "target" : { + "node" : 3, + "path" : "rotation" + } + }, + { + "sampler" : 2, + "target" : { + "node" : 3, + "path" : "scale" + } + }, + { + "sampler" : 3, + "target" : { + "node" : 1, + "path" : "translation" + } + }, + { + "sampler" : 4, + "target" : { + "node" : 1, + "path" : "rotation" + } + }, + { + "sampler" : 5, + "target" : { + "node" : 1, + "path" : "scale" + } + } + ], + "name" : "ArmatureAction.001", + "samplers" : [ + { + "input" : 8, + "interpolation" : "LINEAR", + "output" : 9 + }, + { + "input" : 8, + "interpolation" : "LINEAR", + "output" : 10 + }, + { + "input" : 8, + "interpolation" : "LINEAR", + "output" : 11 + }, + { + "input" : 8, + "interpolation" : "LINEAR", + "output" : 12 + }, + { + "input" : 8, + "interpolation" : "LINEAR", + "output" : 13 + }, + { + "input" : 8, + "interpolation" : "LINEAR", + "output" : 14 + } + ] + } + ], + "materials" : [ + { + "doubleSided" : true, + "name" : "Material.001", + "pbrMetallicRoughness" : { + "baseColorTexture" : { + "index" : 0 + }, + "metallicFactor" : 0, + "roughnessFactor" : 0.5 + } + } + ], + "meshes" : [ + { + "name" : "Cube.001", + "primitives" : [ + { + "attributes" : { + "POSITION" : 0, + "NORMAL" : 1, + "TEXCOORD_0" : 2 + }, + "indices" : 3, + "material" : 0 + } + ] + }, + { + "name" : "Cube.002", + "primitives" : [ + { + "attributes" : { + "POSITION" : 4, + "NORMAL" : 5, + "TEXCOORD_0" : 6 + }, + "indices" : 7, + "material" : 0 + } + ] + } + ], + "textures" : [ + { + "sampler" : 0, + "source" : 0 + } + ], + "images" : [ + { + "mimeType" : "image/png", + "name" : "Color Palette 140", + "uri" : "Color%20Palette%20140.png" + } + ], + "accessors" : [ + { + "bufferView" : 0, + "componentType" : 5126, + "count" : 56, + "max" : [ + 8.864760398864746, + 3.6763174533843994, + 2.2041707038879395 + ], + "min" : [ + 5.919982433319092, + 2.8251190185546875, + -2.2041707038879395 + ], + "type" : "VEC3" + }, + { + "bufferView" : 1, + "componentType" : 5126, + "count" : 56, + "type" : "VEC3" + }, + { + "bufferView" : 2, + "componentType" : 5126, + "count" : 56, + "type" : "VEC2" + }, + { + "bufferView" : 3, + "componentType" : 5123, + "count" : 90, + "type" : "SCALAR" + }, + { + "bufferView" : 4, + "componentType" : 5126, + "count" : 1487, + "max" : [ + 9.09161376953125, + 4.241826057434082, + 5.432835578918457 + ], + "min" : [ + -9.08266544342041, + 0.25478607416152954, + -5.432835578918457 + ], + "type" : "VEC3" + }, + { + "bufferView" : 5, + "componentType" : 5126, + "count" : 1487, + "type" : "VEC3" + }, + { + "bufferView" : 6, + "componentType" : 5126, + "count" : 1487, + "type" : "VEC2" + }, + { + "bufferView" : 7, + "componentType" : 5123, + "count" : 2334, + "type" : "SCALAR" + }, + { + "bufferView" : 8, + "componentType" : 5126, + "count" : 110, + "max" : [ + 4.583333333333333 + ], + "min" : [ + 0.041666666666666664 + ], + "type" : "SCALAR" + }, + { + "bufferView" : 9, + "componentType" : 5126, + "count" : 110, + "type" : "VEC3" + }, + { + "bufferView" : 10, + "componentType" : 5126, + "count" : 110, + "type" : "VEC4" + }, + { + "bufferView" : 11, + "componentType" : 5126, + "count" : 110, + "type" : "VEC3" + }, + { + "bufferView" : 12, + "componentType" : 5126, + "count" : 110, + "type" : "VEC3" + }, + { + "bufferView" : 13, + "componentType" : 5126, + "count" : 110, + "type" : "VEC4" + }, + { + "bufferView" : 14, + "componentType" : 5126, + "count" : 110, + "type" : "VEC3" + } + ], + "bufferViews" : [ + { + "buffer" : 0, + "byteLength" : 672, + "byteOffset" : 0 + }, + { + "buffer" : 0, + "byteLength" : 672, + "byteOffset" : 672 + }, + { + "buffer" : 0, + "byteLength" : 448, + "byteOffset" : 1344 + }, + { + "buffer" : 0, + "byteLength" : 180, + "byteOffset" : 1792 + }, + { + "buffer" : 0, + "byteLength" : 17844, + "byteOffset" : 1972 + }, + { + "buffer" : 0, + "byteLength" : 17844, + "byteOffset" : 19816 + }, + { + "buffer" : 0, + "byteLength" : 11896, + "byteOffset" : 37660 + }, + { + "buffer" : 0, + "byteLength" : 4668, + "byteOffset" : 49556 + }, + { + "buffer" : 0, + "byteLength" : 440, + "byteOffset" : 54224 + }, + { + "buffer" : 0, + "byteLength" : 1320, + "byteOffset" : 54664 + }, + { + "buffer" : 0, + "byteLength" : 1760, + "byteOffset" : 55984 + }, + { + "buffer" : 0, + "byteLength" : 1320, + "byteOffset" : 57744 + }, + { + "buffer" : 0, + "byteLength" : 1320, + "byteOffset" : 59064 + }, + { + "buffer" : 0, + "byteLength" : 1760, + "byteOffset" : 60384 + }, + { + "buffer" : 0, + "byteLength" : 1320, + "byteOffset" : 62144 + } + ], + "samplers" : [ + { + "magFilter" : 9729, + "minFilter" : 9987 + } + ], + "buffers" : [ + { + "byteLength" : 63464, + "uri" : "spaceship.bin" + } + ] +} diff --git a/include/renderer.h b/include/renderer.h index 6d00ace..b9334d6 100644 --- a/include/renderer.h +++ b/include/renderer.h @@ -72,7 +72,8 @@ struct render_state render_state* renInit(const char* title = "Tangerine", glm::vec2 viewport_dims = glm::vec2(1280, 720), - Uint32 SDL_init_flags = 0); + Uint32 SDL_init_flags = 0, + size_t arena_size = DEFAULT_ARENA_SIZE); void renShutdown(render_state* rs); diff --git a/src/renderer.cpp b/src/renderer.cpp index 3fb4a45..fc24084 100644 --- a/src/renderer.cpp +++ b/src/renderer.cpp @@ -38,10 +38,14 @@ void setDefaults(render_state* rs, glm::vec2 viewport_dims); // interface render_state* -renInit(const char* title, glm::vec2 viewport_dims, Uint32 SDL_init_flags) +renInit(const char* title, + glm::vec2 viewport_dims, + Uint32 SDL_init_flags, + size_t arena_size) { render_state* rs = UTIL_ALLOC(1, render_state); rs->handles = UTIL_ALLOC(1, SDL_Handles); + rs->arena = arenaInit(arena_size); setDefaults(rs, viewport_dims); if (initSDL(rs->handles, SDL_init_flags) &&