Add timer
This commit is contained in:
parent
cf6a5ba018
commit
fd9162ef64
@ -20,4 +20,6 @@ struct Render_Data {
|
|||||||
s32 width = 0;
|
s32 width = 0;
|
||||||
s32 height = 0;
|
s32 height = 0;
|
||||||
s32 triangle_count = 0;
|
s32 triangle_count = 0;
|
||||||
|
f32 frame_time = 0.0f;
|
||||||
|
f32 user_interface_generate_time = 0.0f;
|
||||||
};
|
};
|
||||||
|
|||||||
@ -73,6 +73,9 @@ bool init_renderer(Renderer *renderer, u32 width, u32 height) {
|
|||||||
|
|
||||||
init_user_interface(&renderer->user_interface, &renderer->render_data);
|
init_user_interface(&renderer->user_interface, &renderer->render_data);
|
||||||
|
|
||||||
|
glEnable(GL_CULL_FACE);
|
||||||
|
glEnable(GL_DEPTH_TEST);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -89,6 +92,10 @@ void set_renderer_size(Renderer *renderer, u32 width, u32 height) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void draw_renderer(Renderer *renderer) {
|
void draw_renderer(Renderer *renderer) {
|
||||||
|
// FPS time
|
||||||
|
static f32 previous_frame_start_time = 0.0;
|
||||||
|
f32 frame_start_time = glfwGetTime();
|
||||||
|
|
||||||
while(renderer->render_data.width == 0 || renderer->render_data.height == 0) {
|
while(renderer->render_data.width == 0 || renderer->render_data.height == 0) {
|
||||||
glfwGetFramebufferSize(renderer->render_data.glfw_window, &renderer->render_data.width, &renderer->render_data.height);
|
glfwGetFramebufferSize(renderer->render_data.glfw_window, &renderer->render_data.width, &renderer->render_data.height);
|
||||||
glfwWaitEvents();
|
glfwWaitEvents();
|
||||||
@ -100,9 +107,6 @@ void draw_renderer(Renderer *renderer) {
|
|||||||
glClearDepth(1.0f);
|
glClearDepth(1.0f);
|
||||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||||
|
|
||||||
glEnable(GL_CULL_FACE);
|
|
||||||
glEnable(GL_DEPTH_TEST);
|
|
||||||
|
|
||||||
Vector3 camera_position = Vector3(0.4f, 0.3f, 1.0f);
|
Vector3 camera_position = Vector3(0.4f, 0.3f, 1.0f);
|
||||||
Vector3 camera_look_at_position = Vector3(0.0f, 0.0f, 0.0f);
|
Vector3 camera_look_at_position = Vector3(0.0f, 0.0f, 0.0f);
|
||||||
Vector3 camera_up_vector = Vector3(0.0f, 1.0f, 0.0f);
|
Vector3 camera_up_vector = Vector3(0.0f, 1.0f, 0.0f);
|
||||||
@ -134,8 +138,17 @@ void draw_renderer(Renderer *renderer) {
|
|||||||
unbind_frame_buffer(&renderer->frame_buffer);
|
unbind_frame_buffer(&renderer->frame_buffer);
|
||||||
|
|
||||||
draw_frame_buffer(&renderer->frame_buffer);
|
draw_frame_buffer(&renderer->frame_buffer);
|
||||||
|
|
||||||
|
// Timer
|
||||||
|
start_timer(&renderer->timer);
|
||||||
create_user_interface_frame(&renderer->user_interface, &renderer->render_data);
|
create_user_interface_frame(&renderer->user_interface, &renderer->render_data);
|
||||||
|
renderer->render_data.user_interface_generate_time = stop_timer(&renderer->timer);
|
||||||
|
|
||||||
render_user_interface(&renderer->user_interface);
|
render_user_interface(&renderer->user_interface);
|
||||||
|
|
||||||
|
// FPS time
|
||||||
|
renderer->render_data.frame_time = frame_start_time - previous_frame_start_time;
|
||||||
|
previous_frame_start_time = frame_start_time;
|
||||||
}
|
}
|
||||||
|
|
||||||
void upload_renderer_data(Renderer *renderer, Mesh *vertex_data) {
|
void upload_renderer_data(Renderer *renderer, Mesh *vertex_data) {
|
||||||
|
|||||||
@ -7,6 +7,7 @@
|
|||||||
#include <glm/gtc/type_ptr.hpp>
|
#include <glm/gtc/type_ptr.hpp>
|
||||||
#include "render_data.h"
|
#include "render_data.h"
|
||||||
#include "user_interface.h"
|
#include "user_interface.h"
|
||||||
|
#include "timer.h"
|
||||||
|
|
||||||
|
|
||||||
struct Frame_Buffer {
|
struct Frame_Buffer {
|
||||||
@ -51,6 +52,7 @@ struct Renderer {
|
|||||||
Matrix4 projection_matrix = Matrix4(1.0f);
|
Matrix4 projection_matrix = Matrix4(1.0f);
|
||||||
User_Interface user_interface;
|
User_Interface user_interface;
|
||||||
Render_Data render_data;
|
Render_Data render_data;
|
||||||
|
Timer timer;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
22
src/timer.cpp
Normal file
22
src/timer.cpp
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
#include "timer.h"
|
||||||
|
|
||||||
|
void start_timer(Timer *timer) {
|
||||||
|
if (timer->running) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
timer->running = true;
|
||||||
|
timer->start_time = std::chrono::steady_clock::now();
|
||||||
|
}
|
||||||
|
|
||||||
|
f32 stop_timer(Timer *timer) {
|
||||||
|
if (!timer->running) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
timer->running = false;
|
||||||
|
auto stop_time = std::chrono::steady_clock::now();
|
||||||
|
f32 timer_milliseconds = std::chrono::duration_cast<std::chrono::microseconds>(stop_time - timer->start_time).count() / 1000.0f;
|
||||||
|
|
||||||
|
return timer_milliseconds;
|
||||||
|
}
|
||||||
12
src/timer.h
Normal file
12
src/timer.h
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "basic.h"
|
||||||
|
#include <chrono>
|
||||||
|
|
||||||
|
struct Timer {
|
||||||
|
bool running = false;
|
||||||
|
std::chrono::time_point<std::chrono::steady_clock> start_time{};
|
||||||
|
};
|
||||||
|
|
||||||
|
void start_timer(Timer *timer);
|
||||||
|
f32 stop_timer(Timer *timer);
|
||||||
@ -19,6 +19,24 @@ void create_user_interface_frame(User_Interface *user_interface, Render_Data *re
|
|||||||
ImGuiWindowFlags imgui_window_flags = 0;
|
ImGuiWindowFlags imgui_window_flags = 0;
|
||||||
ImGui::SetNextWindowBgAlpha(0.8f);
|
ImGui::SetNextWindowBgAlpha(0.8f);
|
||||||
ImGui::Begin("Control", nullptr, imgui_window_flags);
|
ImGui::Begin("Control", nullptr, imgui_window_flags);
|
||||||
|
static f32 new_fps = 0.0f;
|
||||||
|
if (render_data->frame_time > 0.0) {
|
||||||
|
new_fps = 1.0f / render_data->frame_time;
|
||||||
|
}
|
||||||
|
user_interface->frames_per_second = (user_interface->averaging_alpha * user_interface->frames_per_second) + (1.0f - user_interface->averaging_alpha) * new_fps;
|
||||||
|
|
||||||
|
ImGui::Text("FPS:");
|
||||||
|
ImGui::SameLine();
|
||||||
|
ImGui::Text(std::to_string(user_interface->frames_per_second).c_str());
|
||||||
|
ImGui::Separator();
|
||||||
|
|
||||||
|
ImGui::Text("UI generation time:");
|
||||||
|
ImGui::SameLine();
|
||||||
|
ImGui::Text(std::to_string(render_data->user_interface_generate_time).c_str());
|
||||||
|
ImGui::SameLine();
|
||||||
|
ImGui::Text("ms");
|
||||||
|
ImGui::Separator();
|
||||||
|
|
||||||
ImGui::Text("Triangles:");
|
ImGui::Text("Triangles:");
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
ImGui::Text(std::to_string(render_data->triangle_count).c_str());
|
ImGui::Text(std::to_string(render_data->triangle_count).c_str());
|
||||||
|
|||||||
@ -3,6 +3,8 @@
|
|||||||
#include "render_data.h"
|
#include "render_data.h"
|
||||||
|
|
||||||
struct User_Interface {
|
struct User_Interface {
|
||||||
|
f32 frames_per_second = 0.0f;
|
||||||
|
f32 averaging_alpha = 0.96f;
|
||||||
};
|
};
|
||||||
|
|
||||||
bool init_user_interface(User_Interface *user_interface, Render_Data *render_data);
|
bool init_user_interface(User_Interface *user_interface, Render_Data *render_data);
|
||||||
|
|||||||
@ -45,8 +45,9 @@ bool init(Window *window, u32 width, u32 height, string title) {
|
|||||||
glfwSetWindowSizeCallback(window->glfw_window, handle_window_resize_events);
|
glfwSetWindowSizeCallback(window->glfw_window, handle_window_resize_events);
|
||||||
glfwSetWindowCloseCallback(window->glfw_window, handle_close);
|
glfwSetWindowCloseCallback(window->glfw_window, handle_close);
|
||||||
glfwSetKeyCallback(window->glfw_window, handle_key_events);
|
glfwSetKeyCallback(window->glfw_window, handle_key_events);
|
||||||
glfwSetCursorPosCallback(window->glfw_window, handle_mouse_position_events);
|
// Have to disable so ImGui will accept mouse events
|
||||||
glfwSetMouseButtonCallback(window->glfw_window, handle_mouse_button_events);
|
// glfwSetCursorPosCallback(window->glfw_window, handle_mouse_position_events);
|
||||||
|
// glfwSetMouseButtonCallback(window->glfw_window, handle_mouse_button_events);
|
||||||
|
|
||||||
window->model = new Model();
|
window->model = new Model();
|
||||||
init_model(window->model);
|
init_model(window->model);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user