From 346038a8f70cbd3cb62a969487d54ec2a46ade8c Mon Sep 17 00:00:00 2001 From: connellpaxton Date: Mon, 19 Feb 2024 22:25:57 -0500 Subject: [PATCH] Fixed rendering issues due to insufficent far plane. --- Renderer/Pipeline.cpp | 2 +- Renderer/Renderer.cpp | 4 +++- Renderer/Renderer.hpp | 1 + Scene/BSP.cpp | 7 ++++--- UI/UI.cpp | 3 ++- UI/UI.hpp | 1 + 6 files changed, 12 insertions(+), 6 deletions(-) diff --git a/Renderer/Pipeline.cpp b/Renderer/Pipeline.cpp index 8b9bb42..8e5e556 100644 --- a/Renderer/Pipeline.cpp +++ b/Renderer/Pipeline.cpp @@ -107,7 +107,7 @@ GraphicsPipeline::GraphicsPipeline(vk::Device dev, const std::vector& sh const auto depth_stencil_info = vk::PipelineDepthStencilStateCreateInfo{ .depthTestEnable = vk::True, .depthWriteEnable = vk::True, - .depthCompareOp = vk::CompareOp::eLessOrEqual, + .depthCompareOp = vk::CompareOp::eLess, .depthBoundsTestEnable = vk::False, .stencilTestEnable = vk::False, .minDepthBounds = 0.0, diff --git a/Renderer/Renderer.cpp b/Renderer/Renderer.cpp index b2029a0..76b8368 100644 --- a/Renderer/Renderer.cpp +++ b/Renderer/Renderer.cpp @@ -364,7 +364,7 @@ void Renderer::draw() { auto sz = win.getDimensions(); - const auto p = glm::perspective(glm::radians(90.0f), static_cast(sz.width) / static_cast(sz.height), 0.01f, 200000.0f); + const auto p = glm::perspective(glm::radians(90.0f), static_cast(sz.width) / static_cast(sz.height), 0.01f, 10000.0f); auto uni = UniformData{ .view = cam.view(), @@ -404,6 +404,8 @@ void Renderer::draw() { command_buffer->bind(bsp.get()); command_buffer->command_buffer.drawIndexed(bsp->indices.size(), 1, 0, 0, 0); + n_indices = bsp->indices.size(); + /* draw User Interface stuff */ ui->newFrame(); diff --git a/Renderer/Renderer.hpp b/Renderer/Renderer.hpp index 18fb324..7da0e0a 100644 --- a/Renderer/Renderer.hpp +++ b/Renderer/Renderer.hpp @@ -77,6 +77,7 @@ struct Renderer { float speed = 1.0; bool running = true; + size_t n_indices; bool visibility_testing; float tess_factor = 1.8f; diff --git a/Scene/BSP.cpp b/Scene/BSP.cpp index e115544..ad37d6b 100644 --- a/Scene/BSP.cpp +++ b/Scene/BSP.cpp @@ -24,12 +24,11 @@ static inline void copy_data(void* file_data, std::vector& dst, Lump& lump) { } void BSP::load_indices(const glm::vec3& cam_pos, bool visibility_test) { + indices.clear(); std::set present_faces; std::vector visible_faces; if (visibility_test) { auto leaf_idx = determine_leaf(cam_pos); - if (leaf_idx == last_leaf) - return; last_leaf = leaf_idx; auto& cam_leaf = leafs[leaf_idx]; @@ -60,13 +59,15 @@ void BSP::load_indices(const glm::vec3& cam_pos, bool visibility_test) { case Face::ePATCH: break; case Face::ePOLYGON: - case Face::eMESH: + // case Face::eMESH: for (size_t i = 0; i < face.n_mesh_vertices; i++) indices.push_back(face.first_vertex_idx + mesh_vertices[face.first_mesh_vertex_idx+i].idx); break; } } + assert(indices.size() % 3 == 0); + index_buffer->upload(indices); } diff --git a/UI/UI.cpp b/UI/UI.cpp index b5e5e63..f60534b 100644 --- a/UI/UI.cpp +++ b/UI/UI.cpp @@ -11,7 +11,7 @@ #include -UI::UI(Renderer* ren) : info{ .flycam = ren->flycam, .visibility_testing = ren->visibility_testing, .time = ren->time, .cam = ren->cam, .tess_factor = ren->tess_factor, .tess_edge_size = ren->tess_edge_size }, dev(ren->dev) { +UI::UI(Renderer* ren) : info{ .flycam = ren->flycam, .visibility_testing = ren->visibility_testing, .time = ren->time, .cam = ren->cam, .tess_factor = ren->tess_factor, .tess_edge_size = ren->tess_edge_size, .n_indices = ren->n_indices }, dev(ren->dev) { IMGUI_CHECKVERSION(); ImGui::CreateContext(); @@ -89,6 +89,7 @@ void UI::newFrame() { ImGui::SetNextWindowBgAlpha(0.5f); ImGui::Begin("Rendering Info", nullptr); + ImGui::Text("# of Indices: %zu", info.n_indices); ImGui::Text("FPS: %f", info.fps); ImGui::Text("Time: %f", info.time); ImGui::Checkbox("Fly Camera", &info.flycam); diff --git a/UI/UI.hpp b/UI/UI.hpp index 708f38e..8a220f6 100644 --- a/UI/UI.hpp +++ b/UI/UI.hpp @@ -18,6 +18,7 @@ struct UI { Camera& cam; float& tess_factor; float& tess_edge_size; + const size_t& n_indices; } info; vk::Device dev;