#ifndef GAME_H
#define GAME_H
+#include <chrono>
+#include <iostream>
#include <string>
#include <vector>
bool no_tick;
bool no_render;
bool no_present;
+
+ int max_frame_count;
};
const Settings &settings() const { return settings_; }
virtual void on_frame(float frame_pred) {}
-protected:
+ void print_stats();
+ void quit();
+ protected:
+ int frame_count;
+ std::chrono::time_point<std::chrono::system_clock> start_time;
+
Game(const std::string &name, const std::vector<std::string> &args)
: settings_(), shell_(nullptr)
{
settings_.no_render = false;
settings_.no_present = false;
+ settings_.max_frame_count = -1;
+
parse_args(args);
+
+ frame_count = 0;
+ // Record start time for printing stats later
+ start_time = std::chrono::system_clock::now();
}
Settings settings_;
settings_.no_render = true;
} else if (*it == "-np") {
settings_.no_present = true;
+ } else if (*it == "--c") {
+ ++it;
+ settings_.max_frame_count = std::stoi(*it);
}
}
}
switch (key) {
case KEY_SHUTDOWN:
case KEY_ESC:
- shell_->quit();
+ quit();
break;
case KEY_UP:
camera_.eye_pos -= glm::vec3(0.05f);
void Smoke::on_frame(float frame_pred)
{
+ // Limit number of frames if argument was specified
+ if (settings_.max_frame_count != -1 &&
+ frame_count == settings_.max_frame_count) {
+ quit();
+ return;
+ }
+ frame_count++;
+
auto &data = frame_data_[frame_data_index_];
// wait for the last submission since we reuse frame data