diff options
Diffstat (limited to 'advanced_lighting/6.hdr/hdr.c')
-rw-r--r-- | advanced_lighting/6.hdr/hdr.c | 86 |
1 files changed, 30 insertions, 56 deletions
diff --git a/advanced_lighting/6.hdr/hdr.c b/advanced_lighting/6.hdr/hdr.c index 911f9da..655ab06 100644 --- a/advanced_lighting/6.hdr/hdr.c +++ b/advanced_lighting/6.hdr/hdr.c @@ -10,39 +10,8 @@ int main(void) { - S32 width, height; - - GLFWwindow *window; - F64 time, last_time; - - State state = {0}; - - U32 wooodtex; - - Mesh *quad, - *cube, - *tubecube; - - U32 blinn_shader, - hdr_shader, - light_shader, - normals_debug_shader; - - U32 hdrfbo, - hdrcolorbuf, - hdrrbo; - - S32 i; - - F32 a, da, r; - V3F lpos[LCOUNT]; - - F32 exposure; - - S32 show_normals, show_lights; - - width = 800; - height = 600; + S32 width = 800; + S32 height = 600; /* NOTE(pryazha): GLFW init */ glfwSetErrorCallback(error_callback); @@ -53,7 +22,7 @@ int main(void) glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); glfwWindowHint(GLFW_RESIZABLE, GLFW_FALSE); - window = glfwCreateWindow(width, height, "HDR", 0, 0); + GLFWwindow *window = glfwCreateWindow(width, height, "HDR", 0, 0); if (!window) goto error; @@ -67,46 +36,49 @@ int main(void) glEnable(GL_DEPTH_TEST); /* NOTE(pryazha): Program init */ + State state = {0}; state.arena = arena_alloc(Kilobytes(256)); - state.input.first_mouse = 1; - state.camera = (Camera){ v3f(0.0f, 0.0f, 3.0f), 90.0f, 0.1f, 100.0f, 0.0f, 0.0f }; state.camera_dp = v3f_zero(); - da = 2.0f*pi_F32/LCOUNT; - for (i = 0, a = 0.0f, r = 2.0f; i < LCOUNT; i++, a += da) + F32 da = 2.0f*pi_F32/LCOUNT; + F32 a = 0.0f; + F32 r = 2.0f; + V3F lpos[LCOUNT]; + for (S32 i = 0; i < LCOUNT; i++, a += da) lpos[i] = v3f(f32_sin(a)*r, 0.0f, f32_cos(a)*r); - exposure = 1.0f; + F32 exposure = 1.0f; - show_normals = 0; - show_lights = 1; + S32 show_normals = 0; + S32 show_lights = 1; /* NOTE(pryazha): Textures */ - wooodtex = load_texture_gamma("../../data/textures/wood.png", 1); + U32 wooodtex = load_texture_gamma("../../data/textures/wood.png", 1); /* NOTE(pryazha): Meshes */ - quad = mesh_gen_quad(state.arena); - cube = mesh_load_obj(state.arena, "../../data/models/cube.obj"); - tubecube = mesh_load_obj(state.arena, "../../data/models/tube_with_cube.obj"); + Mesh *quad = mesh_gen_quad(state.arena); + Mesh *cube = mesh_load_obj(state.arena, "../../data/models/cube.obj"); + Mesh *tubecube = mesh_load_obj(state.arena, "../../data/models/tube_with_cube.obj"); /* NOTE(pryazha): Shaders */ - blinn_shader = create_shader_program("shaders/blinn.vert", "shaders/blinn.frag"); - hdr_shader = create_shader_program("shaders/hdr.vert", "shaders/hdr.frag"); - light_shader = create_shader_program("shaders/light.vert", "shaders/light.frag"); - normals_debug_shader = create_shader_program_geom("shaders/normals_debug.vert", - "shaders/normals_debug.frag", - "shaders/normals_debug.geom"); + U32 blinn_shader = load_shader("shaders/blinn.vert", "shaders/blinn.frag"); + U32 hdr_shader = load_shader("shaders/hdr.vert", "shaders/hdr.frag"); + U32 light_shader = load_shader("shaders/light.vert", "shaders/light.frag"); + U32 normals_debug_shader = load_shader_geom("shaders/normals_debug.vert", "shaders/normals_debug.frag", "shaders/normals_debug.geom"); /* NOTE(pryazha): Create HDR framebuffer, color buffer texture and * renderbuffer */ + U32 hdrfbo, hdrcolorbuf; glGenFramebuffers(1, &hdrfbo); glGenTextures(1, &hdrcolorbuf); glBindTexture(GL_TEXTURE_2D, hdrcolorbuf); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA16F, width, height, 0, GL_RGBA, GL_FLOAT, 0); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + + U32 hdrrbo; glGenRenderbuffers(1, &hdrrbo); glBindRenderbuffer(GL_RENDERBUFFER, hdrrbo); glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, width, height); @@ -121,7 +93,7 @@ int main(void) glBindTexture(GL_TEXTURE_2D, 0); glBindFramebuffer(GL_FRAMEBUFFER, 0); - last_time = glfwGetTime(); + F64 last_time = glfwGetTime(); while (!glfwWindowShouldClose(window)) { glfwPollEvents(); @@ -161,7 +133,9 @@ int main(void) if (key_is_pressed(state.input.action_up)) exposure += 0.01f; - for (i = 0; i < LCOUNT; i++) + printf("exposure = %f\n", exposure); + + for (S32 i = 0; i < LCOUNT; i++) lpos[i].y = f32_sin(glfwGetTime()+i); /* NOTE(pryazha): Render */ @@ -188,7 +162,7 @@ int main(void) shader_set_mat4fv(blinn_shader, "view", view); shader_set_mat4fv(blinn_shader, "model", model); shader_set_1i(blinn_shader, "lcount", LCOUNT); - for (i = 0; i < LCOUNT; i++) { + for (S32 i = 0; i < LCOUNT; i++) { snprintf(lstr, 1024, "lpos[%d]", i); shader_set_3fv(blinn_shader, lstr, lpos[i]); } @@ -204,7 +178,7 @@ int main(void) glUseProgram(light_shader); shader_set_mat4fv(light_shader, "proj", proj); shader_set_mat4fv(light_shader, "view", view); - for (i = 0; i < LCOUNT; i++) { + for (S32 i = 0; i < LCOUNT; i++) { model = mat4_make_scale(v3f(0.2f, 0.2f, 0.2f)); model = mat4_translate(model, lpos[i]); shader_set_mat4fv(light_shader, "model", model); @@ -236,7 +210,7 @@ int main(void) glfwSwapBuffers(window); - time = glfwGetTime(); + F64 time = glfwGetTime(); state.dt = time-last_time; last_time = time; |