diff options
Diffstat (limited to 'src/engine.cpp')
-rw-r--r-- | src/engine.cpp | 40 |
1 files changed, 22 insertions, 18 deletions
diff --git a/src/engine.cpp b/src/engine.cpp index 69b2f43..112d230 100644 --- a/src/engine.cpp +++ b/src/engine.cpp @@ -33,7 +33,7 @@ #define MODE_TERM 1 #define MODE_GRAPHICAL 2 -void print_usage(std::ostream& output_stream) { +static void print_usage(std::ostream& output_stream) { output_stream << "Usage: ./engine [-tg] [--term] [--graphical]\n" << " -h, --help show usage (this)\n" << " -t, --term terminal mode\n" @@ -41,35 +41,39 @@ void print_usage(std::ostream& output_stream) { << std::flush; } -[[noreturn]] void usage_error_exit() { +[[noreturn]] +static void usage_error_exit() { print_usage(std::cerr); std::exit(EXIT_FAILURE); } template <class FB> -void scene_main(FB& fb, std::function<bool()> update_frame) { - MathVector3 a{0.f, 0.f, 0.f}; +static void scene_main(FB& fb, std::function<bool()> update_frame) { + engine::math::MathVector3 a{0.f, 0.f, 0.f}; float dist = 4.f; float rad = 5.f; bool cont = true; - std::array<Object3D, 2> objs{{ Object3D::cube(), Object3D::cube() }}; - auto scale_mat = Mat4::scale(rad); + std::array<engine::o3d::Object3D, 2> objs{{ engine::o3d::Object3D::cube(), engine::o3d::Object3D::cube() }}; + auto scale_mat = engine::math::Mat4::scale(rad); while (cont) { a.x += .0050f; a.y += .0065f; a.z += .0080f; fb.clear(); - auto transform_mat = Mat4::translate(MathVector3{0.f, 0.f, -rad * dist}) * Mat4::rot_z(a.z) * Mat4::rot_y(a.y) * Mat4::rot_x(a.x); - std::array<Mat4, 2> mats{{ - transform_mat * Mat4::translate(MathVector3{-.5f * rad, -.5f * rad, -.5f * rad}) * scale_mat, - transform_mat * Mat4::translate(MathVector3{+.5f * rad, +.5f * rad, +.5f * rad}) * scale_mat, + auto transform_mat = + engine::math::Mat4::translate(engine::math::MathVector3{0.f, 0.f, -rad * dist}) + * engine::math::Mat4::rot_z(a.z) + * engine::math::Mat4::rot_y(a.y) * engine::math::Mat4::rot_x(a.x); + std::array<engine::math::Mat4, 2> mats{{ + transform_mat * engine::math::Mat4::translate(engine::math::MathVector3{-.5f * rad, -.5f * rad, -.5f * rad}) * scale_mat, + transform_mat * engine::math::Mat4::translate(engine::math::MathVector3{+.5f * rad, +.5f * rad, +.5f * rad}) * scale_mat, }}; - auto projection_mat = Mat4::projection(static_cast<float>(fb.height()) / static_cast<float>(fb.width()), 2.f, 50.f); + auto projection_mat = engine::math::Mat4::projection(static_cast<float>(fb.height()) / static_cast<float>(fb.width()), 2.f, 50.f); for (int i = 0; i < 2; i++) { auto final_mat = projection_mat * mats[i]; for (auto triangle : objs[i]) { - TriangleVertex4 t{triangle}; + engine::o3d::TriangleVertex4 t{triangle}; t.vertex1.point = final_mat * t.vertex1.point; t.vertex2.point = final_mat * t.vertex2.point; @@ -90,7 +94,7 @@ void scene_main(FB& fb, std::function<bool()> update_frame) { #define MKEY_ESC 27 -int main_term() { +static int main_term() { // init setlocale(LC_ALL, ""); initscr(); @@ -103,7 +107,7 @@ int main_term() { int w, h; getmaxyx(stdscr, h, w); - CharacterFrameBuffer cfb{static_cast<unsigned int>(w), static_cast<unsigned int>(h)}; + engine::fb::CharacterFrameBuffer cfb{static_cast<unsigned int>(w), static_cast<unsigned int>(h)}; scene_main(cfb, [&]() { mvaddnstr(0, 0, cfb.chars(), cfb.width() * cfb.height()); @@ -153,7 +157,7 @@ int main_term() { #define SCREEN_WIDTH 640 #define SCREEN_HEIGHT 480 -int main_graphical() { +static int main_graphical() { SDL_Window* window = NULL; SDL_Renderer* renderer = NULL; SDL_Texture* texture = NULL; @@ -170,7 +174,7 @@ int main_graphical() { } renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED); texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_STREAMING, SCREEN_WIDTH, SCREEN_HEIGHT); - PixelFrameBuffer pfb{SCREEN_WIDTH, SCREEN_HEIGHT}; + engine::fb::PixelFrameBuffer pfb{SCREEN_WIDTH, SCREEN_HEIGHT}; SDL_Event e; @@ -200,14 +204,14 @@ int main_graphical() { return EXIT_SUCCESS; } -std::vector<std::string_view> convert_args(int argc, char *argv[]) { +static std::vector<std::string_view> convert_args(int argc, char *argv[]) { std::vector<std::string_view> args(argc); for (int i = 0; i < argc; i++) args[i] = argv[i]; return args; } -void parse_args(const std::vector<std::string_view>& args, int& mode) { +static void parse_args(const std::vector<std::string_view>& args, int& mode) { for (auto args_iter = std::next(args.begin()); args_iter != args.end(); args_iter++) { const auto& arg = *args_iter; if (arg.size() >= 1 && arg[0] == '-') { |