|
|
|
|
@ -53,35 +53,6 @@ struct RenderState
|
|
|
|
|
PointLight* lights; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
mesh |
|
|
|
|
initCubeMesh() |
|
|
|
|
{ |
|
|
|
|
mesh m = {0}; |
|
|
|
|
m.num_vertices = 8; |
|
|
|
|
m.vertices = (glm::vec3*) std::calloc(m.num_vertices, sizeof(glm::vec3)); |
|
|
|
|
m.vertices[0] = { -1, 1, -1 }; |
|
|
|
|
m.vertices[1] = { -1, -1, -1 }; |
|
|
|
|
m.vertices[2] = { 1, -1, -1 }; |
|
|
|
|
m.vertices[3] = { 1, 1, -1 }; |
|
|
|
|
m.vertices[4] = { -1, 1, 1 }; |
|
|
|
|
m.vertices[5] = { -1, -1, 1 }; |
|
|
|
|
m.vertices[6] = { 1, -1, 1 }; |
|
|
|
|
m.vertices[7] = { 1, 1, 1 }; |
|
|
|
|
|
|
|
|
|
m.num_indices = 36; // 6 sides, 2 tris per side, 3 verts per tri
|
|
|
|
|
m.indices = (u16*) std::calloc(m.num_indices, sizeof(u16)); |
|
|
|
|
u16 indices[36] = { |
|
|
|
|
0, 1, 2, 0, 2, 3, |
|
|
|
|
3, 2, 6, 3, 6, 7, |
|
|
|
|
7, 6, 5, 7, 5, 4, |
|
|
|
|
4, 5, 0, 4, 1, 0, |
|
|
|
|
0, 3, 4, 0, 3, 7, |
|
|
|
|
1, 2, 5, 2, 6, 5 |
|
|
|
|
}; |
|
|
|
|
std::memcpy(m.indices, indices, m.num_indices * sizeof(u16)); |
|
|
|
|
|
|
|
|
|
return m; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// NOTE: equivalent to rgAppend() in libTangerine
|
|
|
|
|
model* |
|
|
|
|
@ -248,7 +219,6 @@ addShaders(RenderState* rs)
|
|
|
|
|
bool |
|
|
|
|
loadScene(RenderState* rs) |
|
|
|
|
{ |
|
|
|
|
mesh cube = initCubeMesh(); |
|
|
|
|
const u32 NUM_CUBES = 4; |
|
|
|
|
glm::vec3 cube_locs[NUM_CUBES] = { |
|
|
|
|
glm::vec3(-10, 10, 0), |
|
|
|
|
@ -266,12 +236,6 @@ loadScene(RenderState* rs)
|
|
|
|
|
assert(tex_cube != nullptr && tex_cube->num_meshes > 0); |
|
|
|
|
const mesh& texmesh = tex_cube->meshes[0]; |
|
|
|
|
|
|
|
|
|
// ========
|
|
|
|
|
// NOTE: testing new loadGLMesh interface
|
|
|
|
|
GLmesh* gl_texmesh = getFreeGLMesh(rs); |
|
|
|
|
#if 1 |
|
|
|
|
if (!gl_texmesh) return false; |
|
|
|
|
|
|
|
|
|
GLVertexAttrib* pos_attrib = getVertexAttribByName(s_debug, "position"); |
|
|
|
|
GLVertexAttrib* normal_attrib = getVertexAttribByName(s_debug, "normal"); |
|
|
|
|
if (!pos_attrib || !normal_attrib) return false; |
|
|
|
|
@ -280,25 +244,28 @@ loadScene(RenderState* rs)
|
|
|
|
|
{ "position", nullptr, pos_attrib, texmesh.vertices }, |
|
|
|
|
{ "normal", nullptr, normal_attrib, texmesh.normals } |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
// NOTE: load meshes
|
|
|
|
|
GLmesh* gl_texmesh = getFreeGLMesh(rs); |
|
|
|
|
if (!gl_texmesh) return false; |
|
|
|
|
|
|
|
|
|
*gl_texmesh = loadGLMesh(texmesh, GL_TRIANGLES, glm::vec3(-5, -5, 0), 2, |
|
|
|
|
attrib_mappings); |
|
|
|
|
if (gl_texmesh->vao_id == 0) return false; |
|
|
|
|
//
|
|
|
|
|
// ========
|
|
|
|
|
|
|
|
|
|
gl_texmesh = getFreeGLMesh(rs); |
|
|
|
|
#endif |
|
|
|
|
if (!gl_texmesh) return false; |
|
|
|
|
|
|
|
|
|
*gl_texmesh = loadGLMesh(s_debug, texmesh, |
|
|
|
|
GL_TRIANGLES, glm::vec3(5, 5, 0)); |
|
|
|
|
|
|
|
|
|
*gl_texmesh = loadGLMesh(texmesh, GL_TRIANGLES, glm::vec3(5, 5, 0), 2, |
|
|
|
|
attrib_mappings); |
|
|
|
|
if (gl_texmesh->vao_id == 0) return false; |
|
|
|
|
|
|
|
|
|
for (u32 i = 0; i < NUM_CUBES; i++) { |
|
|
|
|
GLmesh* gmesh = getFreeGLMesh(rs); |
|
|
|
|
if (!gmesh) return false; |
|
|
|
|
|
|
|
|
|
*gmesh = loadGLMesh(s_default, cube, GL_TRIANGLES, cube_locs[i]); |
|
|
|
|
*gmesh = loadGLMesh(texmesh, GL_TRIANGLES, cube_locs[i], 2, |
|
|
|
|
attrib_mappings); |
|
|
|
|
if (gmesh->vao_id == 0) return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -335,7 +302,9 @@ loop(RenderState* rs)
|
|
|
|
|
GLmesh& glm = rs->gl_meshes[i]; |
|
|
|
|
*glm.model_xform = glm::rotate( |
|
|
|
|
*glm.model_xform, (float) M_PI / 60, glm::vec3(0, 1, 0)); |
|
|
|
|
shader_program* s = (glm.shader) ? glm.shader : s_debug; |
|
|
|
|
// FIXME: need a shader to gl_mesh mapping
|
|
|
|
|
//shader_program* s = (glm.shader) ? glm.shader : s_debug;
|
|
|
|
|
shader_program* s = s_debug; |
|
|
|
|
renderVAO(&glm, s); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|