7 changed files with 137 additions and 17 deletions
Binary file not shown.
@ -0,0 +1,114 @@ |
|||||||
|
|
||||||
|
#include <glm/glm.hpp> |
||||||
|
|
||||||
|
#include "dumbLog.h" |
||||||
|
#include "input.h" |
||||||
|
#include "mesh.h" |
||||||
|
#include "renderer.h" |
||||||
|
|
||||||
|
|
||||||
|
simple_mesh* |
||||||
|
makeSquareMesh() |
||||||
|
{ |
||||||
|
uint num_vertices = 4; |
||||||
|
simple_mesh* sm = meInitMesh(num_vertices); |
||||||
|
sm->num_vertices = num_vertices; |
||||||
|
|
||||||
|
sm->vertices[0] = glm::vec3(-200, 0, 200); |
||||||
|
sm->vertices[1] = glm::vec3(-200, 0, -200); |
||||||
|
sm->vertices[2] = glm::vec3(200, 0, -200); |
||||||
|
sm->vertices[3] = glm::vec3(200, 0, 200); |
||||||
|
sm->vert_colors[0] = glm::vec3(255, 0, 0); |
||||||
|
sm->vert_colors[1] = glm::vec3(255, 0, 0); |
||||||
|
sm->vert_colors[2] = glm::vec3(255, 0, 0); |
||||||
|
sm->vert_colors[3] = glm::vec3(255, 0, 0); |
||||||
|
|
||||||
|
return sm; |
||||||
|
} |
||||||
|
|
||||||
|
void |
||||||
|
doFrameCallbackPre(render_state* rs) |
||||||
|
{ |
||||||
|
static input_state is = {}; |
||||||
|
inputProcessEvents(&is); |
||||||
|
|
||||||
|
if (is.window_closed || is.escape) { |
||||||
|
rs->running = false; |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
// NOTE: rotate meshes on z-axis every frame
|
||||||
|
const float deg_angle = 3; // NOTE: angle to rotate per frame in degrees
|
||||||
|
static float angle = (float) deg_angle * M_PI_2 / 360; |
||||||
|
static glm::vec3 axis(0, 0, 1); |
||||||
|
|
||||||
|
entity& ship = rs->render_groups[0]->entities[0]; |
||||||
|
entRotate(ship, angle , axis); |
||||||
|
entity& sphere = rs->render_groups[0]->entities[1]; |
||||||
|
entRotate(sphere, angle , axis); |
||||||
|
entity& square = rs->render_groups[1]->entities[0]; |
||||||
|
entRotate(square, -1 * angle , axis); |
||||||
|
} |
||||||
|
|
||||||
|
int |
||||||
|
main() |
||||||
|
{ |
||||||
|
render_state* rs = renInit("render group example"); |
||||||
|
|
||||||
|
if (rs == nullptr) { |
||||||
|
LOG(Error) << "Error Initialzing renderer\n"; |
||||||
|
return 1; |
||||||
|
} |
||||||
|
|
||||||
|
cameraInitPerspective( |
||||||
|
rs->cam, |
||||||
|
glm::vec3(50, -100, 25), |
||||||
|
glm::vec3(0, 0, 0), |
||||||
|
glm::vec3(0,0,1) |
||||||
|
); |
||||||
|
|
||||||
|
renAddLight(rs, glm::vec3(-20, -150, 150)); |
||||||
|
|
||||||
|
// FIXME: this introduces a potential buffer overrun. Need to implement
|
||||||
|
// a memory manager for render_groups, eg:
|
||||||
|
// renPushGroup(rs, new_group)
|
||||||
|
// rgPushEntity(rg, new_ent)
|
||||||
|
rs->render_groups = UTIL_ALLOC(256, render_group*); |
||||||
|
|
||||||
|
// TODO: this needs to be more convenient
|
||||||
|
shader_wrapper sw = { DEFAULT_SHADER, rs->default_shader, nullptr }; |
||||||
|
rs->render_groups[0] = renAllocateGroup(2, sw); |
||||||
|
rs->render_group_count = 1; |
||||||
|
entity& spaceship = rs->render_groups[0]->entities[0]; |
||||||
|
entity& sphere = rs->render_groups[0]->entities[1]; |
||||||
|
|
||||||
|
if (!entInitModel(spaceship, "../data/spaceship.glb") || |
||||||
|
!entInitModel(sphere, "../data/icosphere.glb")) |
||||||
|
{ |
||||||
|
LOG(Error) << "Error initializing entity, exiting\n"; |
||||||
|
return 1; |
||||||
|
} |
||||||
|
|
||||||
|
entSetWorldPosition(spaceship, glm::vec3(-50, 0, 0)); |
||||||
|
entScale(spaceship, glm::vec3(2, 2, 2)); |
||||||
|
entScale(sphere, glm::vec3(20, 20, 20)); |
||||||
|
|
||||||
|
shader_wrapper sw2 = { SIMPLE_SHADER, nullptr, rs->simple_shader }; |
||||||
|
rs->render_groups[1] = renAllocateGroup(1, sw2); |
||||||
|
rs->render_group_count++; |
||||||
|
|
||||||
|
entity& square = rs->render_groups[1]->entities[0]; |
||||||
|
simple_mesh* sm = makeSquareMesh(); |
||||||
|
|
||||||
|
// TODO: better usage would be: renPushEntity(rs->render_groups[0], e);
|
||||||
|
// would need to allocate a reasonable block size by default (~64), and
|
||||||
|
// double it if pushing to render_group would overflow
|
||||||
|
entInitMesh(square, sm, GL_LINE_LOOP); |
||||||
|
entScale(square, glm::vec3(0.2, 0.2, 0.2)); |
||||||
|
|
||||||
|
renDoRenderLoop(rs, 60, doFrameCallbackPre); |
||||||
|
|
||||||
|
renShutdown(rs); |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
Loading…
Reference in new issue