#include #include #include #include #include #include "blt/gfx/imgui/IconsFontAwesome5.h" #include "blt/gfx/renderer/resource_manager.h" #include "blt/gfx/renderer/batch_2d_renderer.h" #include "blt/gfx/renderer/camera.h" #include blt::gfx::matrix_state_manager global_matrices; blt::gfx::resource_manager resources; blt::gfx::batch_renderer_2d renderer_2d(resources); blt::gfx::first_person_camera camera; std::vector vao; float x = 0, y = 0, z = 0; float bx = 500, by = 500; float mx = 0, my = -9.8; void local_render(int width, int height) { const float w = 120, h = 120, cf = 30, rf = 15, crf = 10; renderer_2d.drawRectangle("ibuythat", (float) width / 2.0f, (float) height / 2.0f, (float) width, (float) height, 90.0f); renderer_2d.drawRectangle("niko", bx, by, w, h); bx += mx * blt::gfx::getFrameDeltaSeconds() * cf; by += my * blt::gfx::getFrameDeltaSeconds() * cf; if (bx < w / 2.0 || bx > width - w / 2.0) { mx = -mx; my += (static_cast(rand()) / static_cast(RAND_MAX) * rf + crf) - (rf + crf) / 2.0f; } if (by < h / 2.0 || by > height - h / 2.0) { my = -my; mx += (static_cast(rand()) / static_cast(RAND_MAX) * rf + crf) - (rf + crf) / 2.0f; } if (mx > 100 || mx < -100) { mx = mx * 0.2; } if (my > 100 || my < -100) my = my * 0.2; } void init() { using namespace blt::gfx; resources.enqueue("../resources/textures/cumdollar.jpg", "ibuythat"); resources.enqueue("../resources/textures/dfoedbi-28157978-1555-45c3-b2f4-d5e5fe25b253.png", "niko"); auto object = blt::gfx::quick_load("../resources/models/complex_cube.obj"); vbo_t vertices_vbo; vertices_vbo.allocate(static_cast(object.vertex_data().size() * sizeof(blt::gfx::constructed_vertex_t)), object.vertex_data().data()); for (auto obj : object.objects()) { vbo_t indices_vbo; indices_vbo.allocate(static_cast(obj.indices.size() * sizeof(blt::gfx::triangle_t)), obj.indices.data()); } global_matrices.create_internals(); resources.load_resources(); renderer_2d.create(); } void update(std::int32_t width, std::int32_t height) { global_matrices.update_perspectives(width, height, 90, 0.1, 2000); ImGui::ShowDemoWindow(); ImGui::SetNextWindowSize(ImVec2(200, 100)); ImGui::Begin("Debug Info Panel", nullptr, ImGuiWindowFlags_NoResize); ImGui::Text("%s FPS: %f", ICON_FA_WRENCH, 1.0e9 / static_cast(blt::gfx::getFrameDelta())); ImGui::Text("Draw Count: %zu", renderer_2d.draw_count()); ImGui::Text("Position: %f %f %f", camera.position().x(), camera.position().y(), camera.position().z()); ImGui::End(); camera.update(); camera.update_view(global_matrices); global_matrices.update(); local_render(width, height); renderer_2d.render(); } int main() { blt::gfx::init(blt::gfx::window_data{"My Sexy Window", init, update}.setSyncInterval(1)); global_matrices.cleanup(); resources.cleanup(); renderer_2d.cleanup(); blt::gfx::cleanup(); return 0; }