diff --git a/.gitattributes b/.gitattributes index b2c62f6..e5068b2 100644 --- a/.gitattributes +++ b/.gitattributes @@ -2,3 +2,5 @@ data/ filter=lfs diff=lfs merge=lfs -text data/textured_cube.bin filter=lfs diff=lfs merge=lfs -text data/textured_cube.gltf filter=lfs diff=lfs merge=lfs -text data/Color[[:space:]]Palette[[:space:]]140.png filter=lfs diff=lfs merge=lfs -text +data/spaceship.gltf filter=lfs diff=lfs merge=lfs -text +data/spaceship.bin filter=lfs diff=lfs merge=lfs -text diff --git a/data/spaceship.bin b/data/spaceship.bin new file mode 100644 index 0000000..c40ddd1 --- /dev/null +++ b/data/spaceship.bin @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0c00d1680565370153e795d05f10ddf423c62435f566e3796fb660afe04906b4 +size 63464 diff --git a/data/spaceship.gltf b/data/spaceship.gltf new file mode 100644 index 0000000..7851441 --- /dev/null +++ b/data/spaceship.gltf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:85c6c24a696b4a169a2af0b1cf608578c5ea37e6cc84cfdeb96586b1a20d553a +size 11262 diff --git a/src/main.cpp b/src/main.cpp index 4f4405d..3534bed 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -55,6 +55,39 @@ loadLights(RenderState* rs) return true; } +bool +loadSpaceShip(RenderState* rs) +{ + Model* ship = getModelByPath(&rs->assets, "../data/spaceship.gltf"); + if (!ship) + return false; + + ShaderProgram* shader_lit = getShaderByName("full_lighting", rs->gl_ctx); + if (!shader_lit) + return false; + + // load model into gl + RenderGroup* rg = getFreeRenderGroup(rs); + assert(rs); + initRenderGroup(rg, rs->rg_arena, shader_lit, 256, "ships"); + Entity* e = getFreeEntity(rg); + assert(e); + + if (initEntity(e, rs->gl_ctx, + rs->rg_arena, + ship, + shader_lit->num_vertex_attribs, + shader_lit->attrib_mappings, + "ship 01")) + { + setEntityPosition(e, glm::vec3(0, -10, -15)); + } else { + return false; + } + + return true; +} + bool loadScene(RenderState* rs) { @@ -107,6 +140,12 @@ loadScene(RenderState* rs) scaleEntity(e, 3); } + // NOTE: testing an entity with multiple meshes +#if 0 + if (!loadSpaceShip(rs)) + return false; +#endif + // NOTE: initilize the 'camera' glm::vec3 cam_pos = { 0, 15, 40 }; glm::vec3 look_pos = { 0, 0, 0 }; diff --git a/src/tangerine.h b/src/tangerine.h index 0c12792..2a13627 100644 --- a/src/tangerine.h +++ b/src/tangerine.h @@ -15,9 +15,6 @@ /* * === TODO: === * - add scene abstrastion for RenderState -* - test complex entities -* - need a separate GLBufferToAttribMapping for each mesh on an entity -* - maybe fixed now with MeshBufferType enum and getMeshData() * - add an example of dynamically switching shaders for an entity * - fix debug load times (either by using cgltf, or hiding tinygltf.h) * - RenderGroups and Entities need to come into and out of existence during @@ -57,6 +54,9 @@ * - remove hard-coded values in full_lighting.frag * - test buffer backed lights, probably need to pad any scalars/vec3s * - add point light type with tweakable attenuation parameters +* - test complex entities +* - need a separate GLBufferToAttribMapping for each mesh on an entity +* - maybe fixed now with MeshBufferType enum and getMeshData() */