diff --git a/Renderer/Pipeline.cpp b/Renderer/Pipeline.cpp index 52cb958..3c8c97d 100644 --- a/Renderer/Pipeline.cpp +++ b/Renderer/Pipeline.cpp @@ -105,7 +105,7 @@ GraphicsPipeline::GraphicsPipeline(vk::Device dev, const std::vector& sh const auto raster_info = vk::PipelineRasterizationStateCreateInfo { .depthClampEnable = vk::False, - .polygonMode = vk::PolygonMode::eFill, + .polygonMode = type == eBOX ? vk::PolygonMode::eLine : vk::PolygonMode::eFill, .cullMode = type == eBOX ? vk::CullModeFlagBits::eNone : vk::CullModeFlagBits::eBack, .frontFace = vk::FrontFace::eCounterClockwise, .depthBiasEnable = type == eBOX, diff --git a/Renderer/Renderer.cpp b/Renderer/Renderer.cpp index 00b8bd6..cac26d0 100644 --- a/Renderer/Renderer.cpp +++ b/Renderer/Renderer.cpp @@ -355,9 +355,11 @@ void Renderer::draw() { n_indices = bsp->indices.size(); - command_buffer->bind(*box_pipeline); - command_buffer->bind(*box_buffer); - command_buffer->draw(box_buffer->buffer->size / sizeof(BoxVertex), 1); + if (show_bboxes) { + command_buffer->bind(*box_pipeline); + command_buffer->bind(*box_buffer); + command_buffer->draw(box_buffer->buffer->size / sizeof(BoxVertex), 1); + } /* draw User Interface stuff */ ui->newFrame(); @@ -407,7 +409,7 @@ void Renderer::present() { } frame++; - time += 0.0167f * speed * static_cast(!paused); + time += frametime / 1000.0 * speed * static_cast(!paused); } Renderer::~Renderer() { diff --git a/Renderer/Renderer.hpp b/Renderer/Renderer.hpp index e6fbe77..0414ac6 100644 --- a/Renderer/Renderer.hpp +++ b/Renderer/Renderer.hpp @@ -75,6 +75,8 @@ struct Renderer { float speed = 1.0; bool paused = false; bool visibility_testing = false; + bool show_bboxes = false; + bool should_close = false; size_t n_indices; @@ -83,4 +85,7 @@ struct Renderer { float tess_factor = 1.8f; float tess_edge_size = 20.0f; + + float frametime = 0.0; + float max_fps = 120.0; }; diff --git a/UI/UI.cpp b/UI/UI.cpp index ee016ca..0e3b7f5 100644 --- a/UI/UI.cpp +++ b/UI/UI.cpp @@ -104,12 +104,29 @@ UI::UI(Renderer* ren) : ren(ren), dev(ren->dev) { this->ren->paused = !this->ren->paused; console->System().Log(csys::ItemType::eINFO) << "Paused: " << (this->ren->paused? "True" : "False") << csys::endl; }); - - console->System().RegisterCommand("toggle-visibility-testing", "Toggles visibility testings (using clusters and frustum culling)", [this]() { - this->ren->visibility_testing = !this->ren->visibility_testing; - console->System().Log(csys::ItemType::eINFO) << "Visibility Testing: " << (this->ren->visibility_testing? "Enabled" : "Disabled") << csys::endl; + + console->System().RegisterCommand("quit", "Quits the engine", [this]() { + this->ren->should_close = true; + console->System().Log(csys::ItemType::eINFO) << "Quitting..." << csys::endl; }); + console->System().RegisterCommand("list-vars", "List variables accessible from developer console", [this]() { + const std::vector names = { + "show_bboxes", + "visibility_testing", + "speed", + "flycam", + }; + + for(const auto& name : names) + console->System().Log(csys::ItemType::eINFO) << name << csys::endl; + }); + + console->System().RegisterVariable("show_bboxes", ren->show_bboxes, csys::Arg("value")); + console->System().RegisterVariable("visibility_testing", ren->visibility_testing, csys::Arg("value")); + console->System().RegisterVariable("speed", ren->speed, csys::Arg("value")); + console->System().RegisterVariable("flycam", ren->flycam, csys::Arg("value")); + console->System().Log(csys::ItemType::eINFO) << "Welcome to Pleascach!" << csys::endl; } @@ -119,7 +136,7 @@ void UI::newFrame() { ImGui::NewFrame(); ImGui::SetNextWindowBgAlpha(0.5f); - ImGui::Begin("Rendering Info", nullptr); + ImGui::Begin("Rendering Info", nullptr, ImGuiWindowFlags_::ImGuiWindowFlags_NoFocusOnAppearing); ImGui::Text("# of Indices: %zu", ren->n_indices); ImGui::Text("FPS: %f", ren->fps); diff --git a/pléascach.cpp b/pléascach.cpp index 881fce6..22443e1 100644 --- a/pléascach.cpp +++ b/pléascach.cpp @@ -20,8 +20,11 @@ int main(int argc, char* argv[]) { auto in = win.getInput(); Renderer ren(win); + in->setCursor(false); - while (!in->shouldClose()) { + bool should_close = false; + + while (!in->shouldClose() || ren.should_close) { Timer frame_timer; in->poll(); in->handleMovementKeys(ren); @@ -59,22 +62,11 @@ int main(int argc, char* argv[]) { if (event.key.key == GLFW_KEY_ESCAPE && event.key.state == GLFW_PRESS) { ren.in_menu = !ren.in_menu; in->setCursor(ren.in_menu); - break; - } - - if (ren.in_menu) - break; - - if (event.key.key == GLFW_KEY_Q) { - return 0; - } else if (event.key.key == GLFW_KEY_R && event.key.state == GLFW_PRESS) { - ren.time = 0; - } else if (event.key.key == GLFW_KEY_C && event.key.state == GLFW_PRESS) { - ren.flycam = !ren.flycam; - } else if (event.key.key == GLFW_KEY_T && event.key.state == GLFW_PRESS) { - ren.speed *= 10.0; - } else if (event.key.key == GLFW_KEY_Y && event.key.state == GLFW_PRESS) { - ren.speed /= 10.0; + } else if (event.key.key == GLFW_KEY_Q && event.key.state == GLFW_PRESS) { + if (!ren.in_menu) { + ren.should_close = true; + goto quit; + } } break; } @@ -82,14 +74,19 @@ int main(int argc, char* argv[]) { ren.draw(); ren.present(); - const auto t = frame_timer.read(); - ren.fps = 1000.0f / t; + ren.frametime = frame_timer.read(); + ren.fps = 1000.0f / ren.frametime; - while (frame_timer.read() < 16.60) + while (frame_timer.read() < 1000 / ren.max_fps) ; + + ren.frametime = frame_timer.read(); } } catch (const std::string& e) { std::cerr << "Exception: " << e << std::endl; - } + } + +quit: + Log::info("Quitting"); }