summaryrefslogtreecommitdiff
path: root/advanced_lighting/6.hdr/hdr.c
diff options
context:
space:
mode:
Diffstat (limited to 'advanced_lighting/6.hdr/hdr.c')
-rw-r--r--advanced_lighting/6.hdr/hdr.c86
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;