#include #include "dumbLog.h" #include "mesh.h" #include "renderer.h" void doFrameCallback(render_state* rs) { // NOTE: rotate mesh on z-axis every frame entity& e = rs->render_groups[0].entities[0]; static float angle = (float) M_PI_2 / 33; static glm::vec3 axis(0, 0, 1); entRotate(e, angle, axis); } 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; } int main() { render_state* rs = renInit("simple mesh"); if (rs == nullptr) { LOG(Error) << "Error Initialzing renderer\n"; return 1; } // TODO: this needs to be more convenient shader_wrapper sw = { SIMPLE_SHADER, nullptr, rs->simple_shader }; rs->render_groups = renAllocateGroup(1, sw); rs->render_group_count = 1; entity& e = rs->render_groups[0].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(e, sm, GL_LINE_LOOP); cameraInitPerspective( rs->cam, glm::vec3(0, -500, 0), glm::vec3(0, 0, 0), glm::vec3(0,0,1) ); renDoRenderLoop(rs, 60, doFrameCallback); renShutdown(rs); return 0; }