|
|
|
|
@ -56,40 +56,7 @@ loadLights(RenderState* rs)
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
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) |
|
|
|
|
loadCubes(RenderState* rs) |
|
|
|
|
{ |
|
|
|
|
// NOTE: load model
|
|
|
|
|
Model* tex_cube = getModelByPath(&rs->assets, "../data/textured_cube.gltf"); |
|
|
|
|
@ -124,7 +91,6 @@ loadScene(RenderState* rs)
|
|
|
|
|
char cube_name[256] = {0}; |
|
|
|
|
snprintf(cube_name, 256, "textured_cube%d", i); |
|
|
|
|
|
|
|
|
|
arenaCopyCStr(rs->rg_arena, cube_name); |
|
|
|
|
if (!initEntity(e, |
|
|
|
|
rs->gl_ctx, |
|
|
|
|
rs->rg_arena, |
|
|
|
|
@ -140,8 +106,115 @@ loadScene(RenderState* rs)
|
|
|
|
|
scaleEntity(e, 3); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// NOTE: testing an entity with multiple meshes
|
|
|
|
|
#if 0 |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// NOTE: test an entity with multiple meshes
|
|
|
|
|
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 |
|
|
|
|
testColoredVertices(RenderState* rs) |
|
|
|
|
{ |
|
|
|
|
Mesh m = {0}; |
|
|
|
|
m.num_vertices = 5; |
|
|
|
|
m.num_indices = 12; |
|
|
|
|
|
|
|
|
|
glm::vec3 vertices[m.num_vertices] = { |
|
|
|
|
{ 0, 1, 0 }, |
|
|
|
|
{ -1, -1, -1 }, |
|
|
|
|
{ -1, -1, 1 }, |
|
|
|
|
{ 1, -1, 0.5 }, |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
u16 indices[m.num_indices] = { |
|
|
|
|
0, 1, 2, |
|
|
|
|
0, 2, 3, |
|
|
|
|
0, 3, 1, |
|
|
|
|
1, 2, 3 |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
glm::vec3 colors[m.num_vertices] = { |
|
|
|
|
{ 1, 0, 0 }, |
|
|
|
|
{ 0, 1, 0 }, |
|
|
|
|
{ 0, 0, 1 }, |
|
|
|
|
{ 1, 1, 0 } |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
m.vertices = vertices; |
|
|
|
|
m.colors = colors; |
|
|
|
|
m.indices = indices; |
|
|
|
|
glm::mat4 xform = glm::mat4(1); |
|
|
|
|
m.xform = &xform; |
|
|
|
|
Model mdl = {0}; |
|
|
|
|
mdl.num_meshes = 1; |
|
|
|
|
mdl.meshes = &m; |
|
|
|
|
|
|
|
|
|
ShaderProgram* shader = getShaderByName("colored_vertices", rs->gl_ctx); |
|
|
|
|
RenderGroup* rg = getFreeRenderGroup(rs); |
|
|
|
|
assert(shader && rg); |
|
|
|
|
initRenderGroup(rg, rs->rg_arena, shader, 256, "colored_pyramids"); |
|
|
|
|
Entity* e = getFreeEntity(rg); |
|
|
|
|
assert(e); |
|
|
|
|
|
|
|
|
|
if (initEntity(e, rs->gl_ctx, |
|
|
|
|
rs->rg_arena, |
|
|
|
|
&mdl, |
|
|
|
|
shader->num_vertex_attribs, |
|
|
|
|
shader->attrib_mappings, |
|
|
|
|
"colored pyramid 01")) |
|
|
|
|
{ |
|
|
|
|
setEntityPosition(e, glm::vec3(0, -10, 15)); |
|
|
|
|
} else { |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
bool |
|
|
|
|
loadScene(RenderState* rs) |
|
|
|
|
{ |
|
|
|
|
if (!loadCubes(rs)) { |
|
|
|
|
LOGF(Error, "Error loading cubes\n"); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (!testColoredVertices(rs)) { |
|
|
|
|
LOGF(Error, "Error loading colored vertices\n"); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
#if 1 |
|
|
|
|
if (!loadSpaceShip(rs)) |
|
|
|
|
return false; |
|
|
|
|
#endif |
|
|
|
|
|